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