フレームワークを使用してLaravel 5に多言語を実装する

少し前に、ドキュメントと記事のおかげで人気を博しているLaravelフレームワークを知ることにしました。 しかし、練習なしのトレーニングは何ですか? ホスティングに静かにハングアップし、トラブルを引き起こさない、かなりシンプルな自己記述型Webサイトを転送することにしました。



このサイトの機能の1つは、yaml辞書ファイルと単純なパーサーによって実装されるインターフェース言語の切り替えでした。 フレームワークのロジックにそれを転送することは、創造的な問題というよりも機械的な問題でしたが、選択した言語を覚えさせるのはもう少し困難でした。 以下に、このタスクの私のバージョンを示します。



アプリケーション構成設定



まず、目的のロケールを指定し、config / app.phpで使用する言語の配列を追加する必要があります

'locale' => 'ru', #      'locales' => ['ru', 'en'], # ,      . #     .
      
      





辞書を作成する



Laravelの辞書はphp配列です。 それらの作成方法は、 ドキュメントに詳しく説明されています 。 アプリケーションで使用される各言語の辞書が必要です。 resources / langに各言語(enとruの2つしかない)のフォルダーを作成し、各フォルダーに独自の辞書(messages.phpなど)を作成します。 テンプレートでそれらを使用する方法は、別に説明する必要はないと思います。



ミドルウェアを作成する



デフォルトでは、Laravelは常に設定で選択された言語で起動します。 変更するには、ビューを受け取る前にリクエストをインターセプトし、App :: setLocale();メソッドを使用して言語を設定する必要があります。 ミドルウェアは、ユーザーがページをリクエストするたびに実行されるコードの一部であり、これを可能にします。 ユーザーが既にサイトにアクセスしている場合は、ユーザーが既に選択している言語(ユーザーセッションで指定)を確認し、存在しない場合は、セッションに既定の言語(ruなど)を追加します。



同時に、ユーザーが選択した言語が有効であることを確認します(このために、構成の初期段階で使用可能な言語を指定しました)。



コンソールと職人を使用して、スイッチ用のミドルウェアを作成します。 たとえば、Localeと呼びましょう。



 php artisan make:middleware Locale
      
      





そして、handleメソッドでコードを記述します。 ここでは、構成で指定された変数が役立ちます。

  public function handle($request, Closure $next) { $raw_locale = Session::get('locale'); #       , #        . if (in_array($raw_locale, Config::get('app.locales'))) { # ,         $locale = $raw_locale; # (  - ) } #     $locale. else $locale = Config::get('app.locale'); #         App::setLocale($locale); #    return $next($request); #      }
      
      





ファイルの先頭に追加することを忘れないでください

 use App; use Config; use Session;
      
      







ミドルウェアを登録する



app / Http / Kernel.phpファイルで、StartSessionミドルウェア(セッションを初期化するため、 hovdevに感謝します)とミドルウェアを配列の最後に追加して、アプリケーションがロードされるたびに実行されるようにします。

 protected $middleware = [ ... \Illuminate\Session\Middleware\StartSession::class, \App\Http\Middleware\Locale::class, ];
      
      





言語を切り替えるルートを作成する



ユーザーセッションで言語を切り替えるパスを登録します。 このために、mysite / setlocale / enという形式のリンクを選択しました。 クリックすると、lang値(以前はミドルウェアによって設定されていた)をリンクの最後に示されている値に変更します。 途中で、選択した言語が使い慣れた方法で有効であることを確認し、スクリプトが呼び出されたのと同じページにユーザーをリダイレクトします。



 Route::get('setlocale/{locale}', function ($locale) { if (in_array($locale, \Config::get('app.locales'))) { # ,       Session::put('locale', $locale); #        locale } return redirect()->back(); #   <s></s>     });
      
      





以上です。



All Articles