配置
Laravel 已经内置了对多语言的支持,可以使用 Laravel 的本地化(localization)功能轻松实现多语言。
首先,你需要创建一个语言文件存储你的翻译内容。在 resources/lang
目录下,创建一个你需要的语言文件夹,例如 zh
,再创建一个 messages.php
文件:
php">// resources/lang/zh/messages.phpreturn ['welcome' => '欢迎','logout' => '退出','login' => '登录','register' => '注册'
];
你可以在其他语言创建对应的文件夹和语言文件,例如创建 en
文件夹和 messages.php
文件:
php">// resources/lang/en/messages.phpreturn ['welcome' => 'Welcome','logout' => 'Logout','login' => 'Login','register' => 'Register'
];
然后,你需要在 config/app.php
文件中配置你需要支持的语言:
php">// config/app.phpreturn [// ...'locales' => ['zh', 'en'],'fallback_locale' => 'zh',// ...
];
在你的视图文件中,你可以使用 trans
函数获取对应的翻译:
<!-- 使用中文 -->
<h1>{{ trans('messages.welcome') }}</h1><!-- 使用英文 -->
<h1>{{ trans('messages.welcome', [], 'en') }}</h1>
也可以在控制器内使用
php">$language = [['title' => trans('messages.language.chines'),]
];
语言切换
你可以在 session 中缓存用户选择的语言
php">public function language(){session::put('locale','zh');
}
然后我们可以在中间件判断用户的语言并设置语言
php">public function handle(Request $request, Closure $next){#获取语言配置$locale = session('locale', 'zh');#设置语言App::setLocale($locale);return $next($request);
}
在 app/Http/Kernel.php
文件中注册中间件:
php">// app/Http/Kernel.phpprotected $middlewareGroups = ['web' => [// ...\App\Http\Middleware\SetLocale::class,],// ...
];
这样,你就可以在应用中使用多语言了。如果你需要在控制器中切换语言,可以使用 App::setLocale
函数:
php">// 切换到英文
App::setLocale('en');
视图中判断
如果你有需求在视图中按照语言显示或隐藏元素可以这样做
@if (App::getLocale() == 'zh')<div>中文的时候显示</div>
@endif