Laravel 多语言项目开发

时间:2024-04-29 09:51:49

配置

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