2013-09-30 68 views
6

我正在Laravel創建一個後端應用程序。後端需要管理下載到應用程序的對象集合。對象必須根據設備語言進行本地化。Laravel多語言數據庫管理

在Laravel有沒有簡單的方法來做到這一點?也許是一個雄辯的或Laravel插件?我想避免自己寫本地化支持。

(內置在Laravel定位是隻爲界面,它不支持雄辯對象)

回答

9

你需要編寫你自己的。首先,你將不得不模型數據庫表來支持多語言內容,然後在你的模型,你就可以這樣說:

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

,然後你可以使用它像:

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

高興幫助的答案似乎完美的多語言網站與許多語言。 我發現當你的網站只有兩種/三種語言時,這樣做很笨拙。

我所做的是爲每個可翻譯字段設置兩列。 爲title屬性我在數據庫中有title_entitle_es。 之後,在控制器中只需設置此方法即可進行自動翻譯。

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

現在,當您撥打Post::find($id)->title時,它會自動獲得當前語言版本。

希望它有幫助。 乾杯!

1

繼@ @ user1067281答案我發現了一個多語言站點的高級教程。

你應該完全檢查了這一點:https://medium.com/laravel-4/26cdc75e4810

+2

請考慮添加解釋,而不僅僅是一個鏈接。 – Onik

+0

對此不瞭解。感謝提示@Onik –

4

我做了類似的,但更普遍的

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

模型

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

    return $this->{$column}; 
} 

現在我各種語言版本以及爲每個字段將不會規定具體的功能,並導致所有這一切:

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