コントローラーのコンストラクタで変更しても、フォームのエラーメッセージには適用されないので、ミドルウェアで locale を設定します
php artisan make:middleware Language
app/Http/Middleware/Language.php が自動で 作成されるので以下のように書き換えます。
<?php
namespace App\Http\Middleware;
use Closure;
class Language
{
public function handle($request, Closure $next)
{
$now_url = request()->fullUrl();
$pattern_zh = '/' . preg_quote( env('BASE_URL_ZH') , '/') . '/';
$pattern_ja = '/' . preg_quote( env('BASE_URL_JA') , '/') . '/';
$pattern_en = '/' . preg_quote( env('BASE_URL_EN') , '/') . '/';
if ( preg_match($pattern_zh, $now_url) ){
\Illuminate\Support\Facades\App::setLocale( 'zh-TW' );
}
elseif ( preg_match($pattern_ja, $now_url) ){
\Illuminate\Support\Facades\App::setLocale( 'ja' );
}
elseif ( preg_match($pattern_en, $now_url) ){
\Illuminate\Support\Facades\App::setLocale( 'en' );
}
return $next($request);
}
}
app/Http/Kernel.php
$middlewareGroups のリストに追加します。
これでWEBアクセスの時には必ず読み込まれます。
protected $middlewareGroups = [
'web' => [
......
......
\App\Http\Middleware\Language::class, // ● この行を追加
],
いろいろやり方はあるかと思いますが今回は .env ファイルに 他言語のサイトのベース URL を設定して、 その「ベースURLにマッチする言語を現在の言語」と判別させてみます
.env
BASE_URL_JA=https://ja.YOUR-SITE.TLD
BASE_URL_ZH=https://zh.YOUR-SITE.TLD
BASE_URL_EN=https://en.YOUR-SITE.TLD
これでURLが「https://zh.YOUR-SITE.TLD」の場合は自動的にロケール「zh-TW」がセットされるようになりました。
https://github.com/caouecs/Laravel-lang
ここから太陽市大言語のリソースファイルを入手して resources/lang に コピーすれば多言語対応は完了です。