Laravel12 自带的多语言支持功能
Laravel 自带了多语言支持功能,可以很方便地实现英汉双语系统。以下是使用 Laravel 自带多语言功能的详细步骤:
配置文件设置
在 config/app.php 文件中,设置 locale 为默认语言,fallback_locale 为备用语言。例如:
'locale' => 'en',
'fallback_locale' => 'zh_CN',
创建语言文件
在 resources/lang 目录下,分别为英文和中文创建 en 和 zh_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 中实现一个简单的英汉双语系统。用户可以通过点击链接切换语言,系统会根据用户的选择动态更新页面内容。
浙公网安备 33010602011771号