什么是本地化
Laravel 的本地化功能提供了一种便捷方式来获取多种语言的翻译字符串,用于在应用中支持多语言。 翻译字符串有两种管理方式:默认 Laravel 应用未包含
lang 目录。要自定义,请通过 lang:publish Artisan 命令发布。Locale 配置
默认 Locale
应用默认语言在config/app.php 的 locale 中配置,通常通过 .env 中的 APP_LOCALE 环境变量控制。
fallback_locale 是指定语言无对应翻译时所使用的备用语言。
运行时修改 Locale
使用App 门面的 setLocale() 方法可以按请求修改 locale。
检查当前 Locale
创建语言文件
PHP 文件形式
在lang/{语言代码}/ 目录下创建 PHP 文件,返回键值数组。
JSON 形式
翻译字符串较多时推荐使用 JSON 形式。 在lang/ 目录下创建以语言代码命名的 JSON 文件。
PHP 与 JSON 的选择
适合 PHP 文件的场景
适合 PHP 文件的场景
- 想按功能整理,例如校验错误信息
- 覆盖 Laravel 内置翻译(如
validation.php、auth.php) - 需要分层管理键
适合 JSON 的场景
适合 JSON 的场景
- UI 文案多,不想再费心命名键
- 模板里直接写英文,其他语言通过翻译文件覆盖
- 后续增加国际化需求
获取翻译字符串
__() 辅助函数
最常用方式。PHP 文件形式下用 “文件名.键” 语法。
在 Blade 模板中使用
Blade 中使用{{ __() }}:
占位符
翻译字符串中可以嵌入形如:name 的占位符。
__() 的第二个参数传入替换值数组:
复数
不同语言的复数规则不同。Laravel 使用| 分隔单数与复数。
基本复数
trans_choice() 传入数量:
指定范围的复数
也可指定更精确的范围:复数中的占位符
:count 会展示数量。第 3 参数可传入额外替换值。
覆盖包的语言文件
若第三方包自带语言文件,可以在lang/vendor/{包名}/{语言}/ 下放置同名文件进行覆盖。
例如自定义 skyrim/hearthfire 包的英文消息:
实践示例:中英切换中间件
一个根据 URL 路径、Session 或用户设置自动切换 locale 的中间件示例:1
创建中间件
2
实现中间件
3
注册中间件
在
bootstrap/app.php 中注册:4
添加切换路由
5
在 Blade 模板中添加切换按钮
翻译文件结构示例
小结
翻译字符串的定义方式
翻译字符串的定义方式
常用函数与门面
常用函数与门面
Blade 用法
Blade 用法