2013-09-30 30 views
6

Laravel'de arka uçlu bir uygulama oluşturuyorum. Arka uç, uygulamaya indirilen nesnelerin bir koleksiyonunu yönetmelidir. Nesneler, aygıt diline bağlı olarak yerelleştirilmelidir.Laravel ile çok dilli veritabanı yönetimi

Bunu Laravel'de yapmanın basit bir yolu var mı? Belki bir elverişli veya Laravel-eklenti? Yerelleştirme desteğini kendim yazmaktan kaçınmak istiyorum.

cevap

9

Sen kendi kendisinin yazmak gerekir (sadece arayüz için, bu, Etkili nesneleri desteklemiyor olduğunu laravel içinde yerelleştirme inşa). Önce dilli içeriği desteklemek için veritabanı tabloları modellemek zorunda kalacak ve ardından modelinde şöyle bir cümle mümkün olacak:

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'); 
    } 
} 

ve sonra hoşuna kullanabilirsiniz:

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

Sevindim Yardım'ın cevabı, çok dilli site için birçok dil ile mükemmel görünüyor. Sitenizin yalnızca iki/üç dilleri olduğunda bunu yapmanın biraz rahatsız olduğunu öğrendim.

Yaptığım şey, çevrilebilir her alan için iki sütuna sahip olmak. title özniteliği için title_en ve title_es veritabanında var. Bundan sonra, denetleyicide otomatik çeviri yapmak için bu yöntemi ayarladı.

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

Şimdi bunu otomatik olarak geçerli dilin halledeceksin Post::find($id)->title çağırdığınızda.

Yardım edin. Şerefe!

1

@ user1067281 yanıtını takip ederek çok dilde site için çok gelişmiş bir eğitici buldum.

Tamamen şuna bakmalısınız: https://medium.com/laravel-4/26cdc75e4810

+2

Lütfen sadece bir bağlantı değil, bir açıklama eklemeyi düşünün. – Onik

+0

Bunun için yeni. Teşekkürler @Onik için –

4

Ben Şimdi

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

    return $this->{$column}; 
} 

Ben her dil sürümü için hem de her bir alan için benzer ancak daha evrensel

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(); 
    }); 

modeli yaptılar belirli bir işlevi reçete etmez ve tüm bunlara neden olur:

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

İlgili konular