Laravel如何实现多语言(Localization)功能

发布时间 - 2025-11-16 00:00:00    点击率:
Laravel通过语言文件和App::setLocale实现多语言,1. 在resources/lang下创建zh/en目录及messages.php;2. 使用__()`或@lang调用翻译;3. 用App::setLocale动态切换语言;4. 可在中间件中根据请求参数、Session或浏览器头自动检测语言;5. 支持路由语言前缀如/zh、/en。

Laravel 提供了强大的多语言支持,通过 本地化(Localization) 功能可以轻松实现网站的多语言切换。核心机制依赖于语言文件和 App::setLocale() 方法来动态加载对应语言的内容。

1. 创建语言文件

Laravel 的语言文件存放在 resources/lang 目录下,每个语言对应一个子目录,例如:

  • resources/lang/zh/messages.php
  • resources/lang/en/messages.php

在 messages.php 中返回一个键值数组:

// resources/lang/en/messages.php
return [
    'welcome' => 'Welcome to our site',
    'about'   => 'About Us'
];

// resources/lang/zh/messages.php
return [
    'welcome' => '欢迎来到我们的网站',
    'about'   => '关于我们'
];

2. 使用 Laravel 的 __() 函数或 @lang 指令

在代码或模板中调用翻译内容:

  • 控制器或 PHP 代码中: __('messages.welcome')
  • Blade 模板中: @lang('messages.welcome'){{ __('messages.welcome') }}

输出结果会根据当前设置的语言环境自动选择对应翻译。

3. 设置当前语言环境

使用 App::setLocale() 来切换语言:

use Illuminate\Support\Facades\App;

// 切换为中文
App::setLocale('zh');

// 切换为英文
App::setLocale('en');

通常结合用户请求参数、Session 或浏览器 Accept-Language 头来判断语言偏好。

4. 自动检测用户语言(可选)

可以在中间件中自动设置语言:

// app/Http/Middleware/SetLocale.php
public function handle($request, \Closure $next)
{
    $locale = $request->get('language') ?? 
              $request->session()->get('locale') ?? 
              $request->getPreferredLanguage(['zh', 'en']);

    app()->setLocale($locale);

    return $next($request);
}

注册该中间件后,系统将优先读取 URL 参数 language=zh,其次 Session,最后浏览器偏好。

5. 路由中支持语言前缀(可选)

为不同语言设置路由前缀:

Route::group(['prefix' => '{locale}', 'middleware' => 'set.locale'], function () {
    Route::get('/', 'HomeController@index');
});

访问 /zh/en 自动切换语言。

基本上就这些。Laravel 的多语言功能结构清晰,配合语言文件、__() 函数和动态 setLocale,就能快速实现国际化支持。不复杂但容易忽略细节,比如目录命名和键名匹配。


# php  # laravel  # cad  # 浏览器  # app  # session  # 路由  # 多语言  # 本地化  # 多语言切换  # red  # 中间件 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 深圳网站制作培训,深圳哪些招聘网站比较好?  如何续费美橙建站之星域名及服务?  如何用狗爹虚拟主机快速搭建网站?  企业网站制作这些问题要关注  网站优化排名时,需要考虑哪些问题呢?  如何挑选最适合建站的高性能VPS主机?  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  浅谈Javascript中的Label语句  LinuxCD持续部署教程_自动发布与回滚机制  三星网站视频制作教程下载,三星w23网页如何全屏?  如何用好域名打造高点击率的自主建站?  node.js报错:Cannot find module 'ejs'的解决办法  焦点电影公司作品,电影焦点结局是什么?  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  如何在阿里云ECS服务器部署织梦CMS网站?  音乐网站服务器如何优化API响应速度?  太平洋网站制作公司,网络用语太平洋是什么意思?  EditPlus中的正则表达式 实战(1)  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  网页设计与网站制作内容,怎样注册网站?  如何在Windows虚拟主机上快速搭建网站?  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  用v-html解决Vue.js渲染中html标签不被解析的问题  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  制作电商网页,电商供应链怎么做?  如何在IIS7中新建站点?详细步骤解析  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  进行网站优化必须要坚持的四大原则  LinuxShell函数封装方法_脚本复用设计思路【教程】  中国移动官方网站首页入口 中国移动官网网页登录  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  如何在万网自助建站平台快速创建网站?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  微信小程序 input输入框控件详解及实例(多种示例)  如何在橙子建站上传落地页?操作指南详解  高防服务器租用指南:配置选择与快速部署攻略  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  JS实现鼠标移上去显示图片或微信二维码  公司网站制作价格怎么算,公司办个官网需要多少钱?  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  英语简历制作免费网站推荐,如何将简历翻译成英文?  如何快速搭建二级域名独立网站?  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】