このサイトの機能の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> });
以上です。