Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程

发布时间 - 2025-12-15 00:00:00    点击率:
Laravel通过resources/lang目录管理多语言文件,支持PHP数组和JSON格式,使用App::setLocale()设置语言,结合中间件、路由前缀实现语言切换,利用__()函数或@lang指令输出翻译,支持复数形式trans_choice及生产环境配置缓存优化性能。

在 Laravel 中实现多语言支持(国际化与本地化,i18n)非常方便。Laravel 提供了强大的语言文件管理机制,可以轻松地为不同语言的用户提供对应的语言内容。下面详细介绍如何配置和使用 Laravel 的多语言功能。

配置语言文件目录

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

  • resources/lang/zh/en.json
  • resources/lang/zh/cn.json
  • resources/lang/es/messages.php

你可以根据项目需要创建多个语言目录。推荐使用语言代码命名,如 enzhja 等。

定义语言文件内容

语言文件支持两种格式:PHP 数组 和 JSON 文件。

使用 PHP 数组(messages.php):

// resources/lang/zh/messages.php
return [
    'welcome' => '欢迎',
    'hello' => '你好,:name',
];

使用 JSON 文件(推荐用于短语较多的场景):

// resources/lang/en.json
{
    "welcome": "Welcome",
    "hello": "Hello, :name"
}

JSON 方式适合管理大量翻译文本,尤其是前端也需要读取时更方便。

设置当前应用语言

可以通过 App::setLocale() 设置当前请求的语言:

use Illuminate\Support\Facades\App;

App::setLocale('zh'); // 设置为中文

通常你会根据用户选择、URL 路径或浏览器 Accept-Language 自动切换语言。例如在中间件中判断:

class SetLocaleMiddleware
{
    public function handle($request, $next)
    {
        $locale = $request->get('lang', 'en'); // 或从 session、header 获取
        if (in_array($locale, ['en', 'zh'])) {
            App::setLocale($locale);
        }
        return $next($request);
    }
}

在视图和代码中输出翻译

使用辅助函数 __()@lang 指令获取翻译内容:

// PHP 中
echo __('messages.welcome');
echo __('Hello, :name', ['name' => 'Tom']);

// Blade 模板中
@lang('messages.welcome')
{{ __('messages.hello', ['name' => '小明']) }}

如果使用的是 JSON 根级别翻译,可以直接用键名:

// en.json 中有 "save" => "Save"
__('save') // 输出 "Save"

路由中的多语言支持

你可以在路由中加入语言前缀来区分不同语言版本:

Route::group(['prefix' => '{locale}', 'where' => ['locale' => 'en|zh']], function () {
    Route::get('/welcome', function ($locale) {
        App::setLocale($locale);
        return view('welcome');
    });
});

这样访问 /en/welcome/zh/welcome 就能自动切换语言。

处理复数与语言选项

Laravel 还支持根据数量显示不同翻译,使用 trans_choice

// 语言文件中
'apples.one' => '有一个苹果',
'apples.other' => '有 :count 个苹果',

// 使用
echo trans_choice('messages.apples', 2); // 输出:有 2 个苹果

缓存语言文件(生产环境优化)

在生产环境中,可以运行以下命令缓存语言文件以提升性能:

php artisan config:cache

注意:修改语言文件后需重新缓存。

基本上就这些。Laravel 的多语言系统简洁实用,结合路由、中间件和视图指令,可以快速构建支持多语言的 Web 应用。不复杂但容易忽略细节,比如语言键的命名规范和 JSON 文件的编码问题(必须是 UTF-8)。


# php  # laravel  # js  # 前端  # json  # cad  # 编码  # 浏览器  # app  # 苹果  # session  # 路由  # apple  # 中间件  # 多语言  # 你可以  # 的是  # 放在  # 尤其是  # 就能  # 多个  # 你会  # 两种  # 中有 


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


相关推荐: ,网页ppt怎么弄成自己的ppt?  如何快速上传建站程序避免常见错误?  太平洋网站制作公司,网络用语太平洋是什么意思?  制作旅游网站html,怎样注册旅游网站?  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  Java解压缩zip - 解压缩多个文件或文件夹实例  北京的网站制作公司有哪些,哪个视频网站最好?  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  北京网站制作公司哪家好一点,北京租房网站有哪些?  网站页面设计需要考虑到这些问题  简历没回改:利用AI润色让你的文字更专业  如何打造高效商业网站?建站目的决定转化率  移动端脚本框架Hammer.js  js实现获取鼠标当前的位置  python中快速进行多个字符替换的方法小结  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  JavaScript如何实现路由_前端路由原理是什么  如何在建站主机中优化服务器配置?  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  中山网站制作网页,中山新生登记系统登记流程?  如何在云主机快速搭建网站站点?  linux top下的 minerd 木马清除方法  Laravel如何创建自定义中间件?(Middleware代码示例)  如何快速建站并高效导出源代码?  Laravel distinct去重查询_Laravel Eloquent去重方法  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  大学网站设计制作软件有哪些,如何将网站制作成自己app?  微信小程序 五星评分(包括半颗星评分)实例代码  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  Laravel Docker环境搭建教程_Laravel Sail使用指南  悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】  大连 网站制作,大连天途有线官网?  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  如何在云主机上快速搭建多站点网站?  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  JS弹性运动实现方法分析  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  Java类加载基本过程详细介绍  如何在Windows 2008云服务器安全搭建网站?  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  *服务器网站为何频现安全漏洞?