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