【表題】

  1. jsonファイルの作成
  2. ルートファイルの作成
  3. ミドルウェアの作成
  4. リンクの作成

■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が未定義となってしまう。