2014-04-04 112 views
0

我開發了一個簡單的應用程序表單,我以兩種語言提供服務。我也從數據庫中填充下拉菜單,我正在努力如何以兩種語言呈現這些數據。數據不是很有活力,而且有時候可能會添加新的條目,因此手動工作對我無能爲力。對於不同的情況,我也拉動不同的行數。我很困惑,我認爲,除非我有兩個數據庫,或者將翻譯添加到數據庫並將其與原文一起呈現,否則我沒有其他選擇。 或數據庫中的一個新列將保留tranlation,然後根據所選語言環境提取正確的列... 任何想法,將不勝感激,謝謝!本地化數據庫結果

回答

1

我看到它的方式,在你的情況下,最好的選擇是創建一個單獨的表來存儲每條記錄的翻譯。

例如,像博客文章這樣的條目可能會有一些在所有網站語言中都很常見的字段,但標題,內容和slu things等內容將是特定於語言環境的。當用戶請求這些信息時,所有的常用信息將從'posts'表中檢索,而特定於語言環境的翻譯將從'posts_translations'表中檢索。

這樣您就不必爲每個翻譯手動添加列。雖然從技術上講,這可以工作得很好,但如果您不得不添加其他語言,則會遇到問題。如果翻譯存儲在單獨的表格中,那就不再是問題。

下面是一個例子,如何可能使用ORM口才看時:

public function getPosts() 
{ 
    $language = App::getLocale(); 
    $posts = Post::with([ 
     'translation' => function ($query) use ($language) { 
       $query->where('language', '=', $language); 
     } 
    ])->get(); 
    return $posts; 
} 

另外,使用Laravel的查詢生成器相同的方法:

public function getPosts() 
{ 
    $language = App::getLocale(); 
    $posts = DB::table('posts') 
    ->leftJoin('posts_translations', 'posts.id', '=', 'posts_translations.post_id') 
    ->where('posts_translations.language', '=', $language) 
    ->get(); 
    return $posts; 
}