2017-03-13 14 views
2

。私は好奇心が強いです、それを適切にする方法やルールはありますか?私の楽器はLaravel 5.4です。データベースにデータを格納する方法を多言語ウェブサイト、トリックやソリューション

  1. を::私が直面した

    問題単一のテーブルに多くの行(言語につき1)で、または(外部キーによって接続されている言語ごとに、)いくつかのテーブルを作成しますか?ユーザーがロケールを選択した後、右の言語データを選択する方法

  2. ?私は、ロケール変数をチェックし、私の方法は、私が見るためにデータを送信する必要があるたびに、右であることを、よく分かりません。

私は維持し、自分のコードの世話をする方法を疑問に思うので、私は聞いていますのよ。

+1

私は通常フィールドで、' app_strings'テーブルを持っているんなことの一つに、単一のテーブルを作成することができ、3つの言語を持っていますとテxt'。実際の値テーブルでは、私はstring_keyだけを格納します。選択した言語に応じて、ヘルパーメソッドを使用して適切なテキストを取得します。例: '{{app_trans($ product-> name)}}' - ここに '$ product-> name'は文字列キーを含んでいます。 – techfoobar

+0

@techfoobarありがとう、私はそれを試してみよう! –

答えて

0

あなたは、ミドルウェアを作成し、翻訳を必要とするすべてのルートを保持するグループに追加する必要があります。ミドルウェアでは、セッションから言語をチェックして、現在のリクエストがそれを使用できるように設定してください。

public function handle($request, Closure $next) 
{ 
    if(!Session::has('locale')){ 
     $browserLanguage = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); //read browser language 

     if (array_key_exists($browserLanguage, Config::get('languages'))) { 
      Session::set('locale', $browserLanguage); 
     } else { 
      Session::set('locale', 'en'); 
     } 
    } 

    //Simply set language from session 
    App::setlocale(Session::get('locale')); 

    return $next($request); 
} 

あなたが確信している場合、ユーザは、特定の言語を選択したい、あなたが彼らに利用可能な言語のリストを与える、テーブルについては、その後のセッションに選択した言語を設定し

if (array_key_exists($language, Config::get('languages'))) { 
    Session::set('locale', $language); 
} 

`string_key(インデックス化、ユニークな)、LANG_ID:あなただけ、あなたは4列

key  en  fr  es 
hi  hi  salut ola 
+0

ありがとう、それは多くの助けになる! –

+0

テーブルを1つ作成し、translation_keyとlocaleを主キーとして使用することもできます。それで、あなたが好きなだけ多くの(あるいは少数の)言語を持つことができます。 – waterloomatt