■
【表題】
■1. jsonファイルの作成
resouece>lang>en.jsonとかja.jsonとかfr.jsonとか
resource>view>auth
→この2つが密接に関係しているらしい。
そのため、authファイルをずらしたり、別の場所に移動したりしてはいけない。
◇ブレードファイルのルール
翻訳対象は「ローカリゼーション」
といったファイル名で置く。
"__('Email')"
みたいに書いてあるところ。
→resource/view/auth にある各blade.phpファイル内のものが対象のようだ。
◇jsonファイル
resouece>lang 直下に
en.json
ja.json
fr.json
といったファイル名で置く。
{ "ローカリゼーションの名前": "翻訳後の名前" }
というルール。
■2. ルートファイルの作成
route>web.php を以下のように書く。
Route::redirect('/', '/en'); Route::group(['prefix' => '{language}' ], function(){ Route::get('/', function () { return view('welcome'); }); Route::get('/dashboard', function () { return view('dashboard'); })->middleware(['auth'])->name('dashboard'); require __DIR__.'/auth.php'; });
ポイントは、翻訳対象になるディレクトリを
Route::group(['prefix' => '{language}' ], function(){ ~ });
で囲う、という点。
また、require DIR.'/auth.php';
はミドルウェアの作成時に生きてくる。
また、主となる言語を、config.php>app.php の以下の箇所で定めておく。
route>web.php を以下のように書く。
*/ 'locale' => 'en', /*
■3. ミドルウェアの作成
ミドルウェアを作る。
php artisan make:middleware 任意の名前
出力された app/Http/Middleware/任意の名前 を修正。
class setLanguage { public function handle(Request $request, Closure $next) { \App::setLocale($request->language); return $next($request); } }
\App::setLocale($request->language); を追加する形になる。
app/Http/Kernel.php に以下を追加。
protected $middlewareGroups = [ 'web' => [ ~色々書いてある~, \App\Http\Middleware\setLanguage::class, ], ];
これで、middlewareが有効になる。
これで、ドメイン/enとかドメイン/frとかで、URLのドメインに合わせて、呼び込むjsonファイルを変更できる。
でも、authディレクトリ内の、routeなどで書かれているリンクが消えた。。
◇auth関連のリンクが消えるのを対処
パラメータを追加。「app()->getLocale())」を追加する。
<a href="{{ route('login' }}">
↓
<a href="{{ route('login', app()->getLocale()) }}">
<form method="POST" action="{{ route('login' }}">
↓
<form method="POST" action="{{ route('login', app()->getLocale()) }}">
という感じで修整。
例では
welcome.blade.php
login.blade.php
register.blade.php
を処置。
■4.リンクの作成
出来ることとしては、現段階では
<a href="{{ url('en/') }}"> <a href="{{ url('fr/') }}">
みたいに、超シンプルに書いてページに飛ばす、というのが何もエラーが出なかった。
確かに
https://qiita.com/shizen-shin/items/39449eff5d77a25e512c
にあるように、{{ Route::currentRouteName() }} などをつかったやり方もあるみたいだが、参考動画にあるような
<a href="{{ route(Route::currentRouteName(), 'en') }}">
という書き方では、Routeが未定義となってしまう。