2013-09-30 10 views
6

Ich erstelle eine App mit einem Backend in Laravel. Das Back-End muss eine Sammlung von Objekten verwalten, die in die App heruntergeladen werden. Die Objekte müssen abhängig von der Gerätesprache lokalisiert werden.Multilanguage Datenbankverwaltung mit Laravel

Gibt es einen einfachen Weg, dies in Laravel zu tun? Vielleicht ein eloquentes oder Laravel-Plugin? Ich würde es gerne vermeiden, den Lokalisierungs-Support selbst zu schreiben.

(Der eingebaute Lokalisierung in Laravel ist nur für die Schnittstelle, ist es nicht Eloquent Objekte unterstützt)

Antwort

9

Sie auf eigene Faust schreiben müssen. Zunächst müssen Sie Ihre Datenbanktabellen modellieren mehrsprachiger Inhalte und dann in Ihrem Modell zu unterstützen, können Sie etwas sagen wie:

class Content extends Eloquent 
{ 

    public function scopeEnglish($query) 
    { 
      return $query->where('language', '=', 'en'); 
    } 

    public function scopeSpanish($query) 
    { 
     return $query->where('language', '=', 'es'); 
    } 
} 


class Post extends Eloquent 
{ 
    public function content() 
    { 
    return $this->hasMany('Content'); 
    } 
} 

und dann können Sie es mögen verwenden:

$englishContent = Posts::find($id)->content->english()->get(); 
$spanishContent = Posts::find($id)->content->spanish()->get(); 
6

Glad Die Antwort von Help scheint perfekt für mehrsprachige Websites mit vielen Sprachen zu sein. Ich habe herausgefunden, dass es etwas klobig ist, wenn Ihre Seite nur zwei/drei Sprachen hat.

Was ich getan habe, ist mit zwei Spalten für jede übersetzbare Felder. für die title Attribut habe ich in der Datenbank title_en und title_es. Danach, im Controller nur diese Methode für eine automatisierte Übersetzung festlegen.

public function getTitleAttribute() 
{ 
    $locale = App::getLocale(); 
    $column = "title_" . $locale; 
    return $this->{$column}; 
} 

Nun, wenn Sie anrufen Post::find($id)->title es wird automatisch die eine für die aktuelle Sprache bekommen.

Ich hoffe, es hilft. Prost!

1

Nach der @ user1067281 Antwort fand ich eine große erweiterte Anleitung für mehrere Sprachen Website.

Sie sollten völlig check this out: https://medium.com/laravel-4/26cdc75e4810

+2

Bitte beachten Sie, eine Erklärung hinzufügen, nicht nur einen Link. – Onik

+0

Neu zu diesem. Danke für den Tipp @Onik –

4

Ich habe ähnliche, aber universal

Schema::create('index', function(Blueprint $table) { 
     $table->increments('id'); 
     $table->string('title_uk'); 
     $table->string('title_ru'); 
     $table->string('title_en'); 
     $table->string('heading_uk'); 
     $table->string('heading_ru'); 
     $table->string('heading_en'); 
     $table->string('photo'); 
     $table->timestamps(); 
    }); 

Das Modell

public function TextTrans($text) 
{ 
    $locale=App::getLocale(); 
    $column=$text.'_'.$locale; 

    return $this->{$column}; 
} 

Nun denn ich jede Sprachversion sowie für jedes Feld wird keine bestimmte Funktion vorschreiben und all dies verursachen:

$text=Index::find('1'); $text->TextTrans('title'); $text->TextTrans('heading');