Laravel12 自带的多语言支持功能

Laravel 自带了多语言支持功能,可以很方便地实现英汉双语系统。以下是使用 Laravel 自带多语言功能的详细步骤:

配置文件设置

config/app.php 文件中,设置 locale 为默认语言,fallback_locale 为备用语言。例如:

'locale' => 'en',
'fallback_locale' => 'zh_CN',

创建语言文件

resources/lang 目录下,分别为英文和中文创建 enzh_CN 文件夹,然后在这些文件夹中创建相应的翻译文件。例如,创建 messages.php 文件来存储通用的翻译字符串:

// resources/lang/en/messages.php
return [
    'welcome' => 'Welcome to our application',
    'login' => 'Login',
    'register' => 'Register',
];

// resources/lang/zh_CN/messages.php
return [
    'welcome' => '欢迎来到我们的应用',
    'login' => '登录',
    'register' => '注册',
];

使用翻译函数

在视图文件中,使用 __() 函数或 Blade 指令 @lang 来获取翻译后的字符串。例如:

<h1>{{ __('messages.welcome') }}</h1>
<a href="{{ route('login') }}">{{ __('messages.login') }}</a>

动态设置语言

可以通过 App::setLocale($lang) 方法在运行时动态设置当前语言。通常在中间件中根据用户的选择或请求中的参数来设置语言环境。例如,创建一个 SetLocale 中间件:

// app/Http/Middleware/SetLocale.php
namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Session;

class SetLocale
{
    public function handle($request, Closure $next)
    {
        if (Session::has('locale')) {
            $locale = Session::get('locale');
            App::setLocale($locale);
        }else {
            App::setLocale('en'); //默认语言
        }
        return $next($request);
    }
}

然后在 app/Http/Kernel.php 文件的 $middlewareGroups 数组中注册这个中间件:

protected $middlewareGroups = [
    'web' => [
        // ...
        \App\Http\Middleware\SetLocale::class,
    ],
    // ...
];

或者bootstrap/app.php

<?php

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
use App\Http\Middleware\SetLocale;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->append(SetLocale::class);
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();

创建语言切换路由和控制器

在路由文件中添加处理语言切换的路由:

// routes/web.php
Route::get('language/{lang}', function ($lang) {
    Session::put('locale', $lang);
    return back();
})->name('language.switch');

在视图中添加语言切换链接:

<a href="{{ route('language.switch', 'en') }}">English</a>
<a href="{{ route('language.switch', 'zh') }}">中文</a>

通过以上步骤,就可以在 Laravel 中实现一个简单的英汉双语系统。用户可以通过点击链接切换语言,系统会根据用户的选择动态更新页面内容。

posted @ 2025-03-20 16:34  Laravel自学开发  阅读(339)  评论(0)    收藏  举报