跳转到主要内容

什么是本地化

Laravel 的本地化功能提供了一种便捷方式来获取多种语言的翻译字符串,用于在应用中支持多语言。 翻译字符串有两种管理方式:
默认 Laravel 应用未包含 lang 目录。要自定义,请通过 lang:publish Artisan 命令发布。

Locale 配置

默认 Locale

应用默认语言在 config/app.phplocale 中配置,通常通过 .env 中的 APP_LOCALE 环境变量控制。
fallback_locale 是指定语言无对应翻译时所使用的备用语言。

运行时修改 Locale

使用 App 门面的 setLocale() 方法可以按请求修改 locale。

检查当前 Locale

创建语言文件

PHP 文件形式

lang/{语言代码}/ 目录下创建 PHP 文件,返回键值数组。
存在地区差异的语言请按 ISO 15897 命名目录。例如英式英语应写为 en_GB 而不是 en-gb

JSON 形式

翻译字符串较多时推荐使用 JSON 形式。 在 lang/ 目录下创建以语言代码命名的 JSON 文件。
将原始英文文本作为键。
JSON 形式下英文原文本身就是键,因此英文默认展示可自动生效。没有翻译文件的语言会直接返回键(英文原文)。

PHP 与 JSON 的选择

  • 想按功能整理,例如校验错误信息
  • 覆盖 Laravel 内置翻译(如 validation.phpauth.php
  • 需要分层管理键
  • UI 文案多,不想再费心命名键
  • 模板里直接写英文,其他语言通过翻译文件覆盖
  • 后续增加国际化需求

获取翻译字符串

__() 辅助函数

最常用方式。PHP 文件形式下用 “文件名.键” 语法。
若不存在对应翻译,则原样返回键。

在 Blade 模板中使用

Blade 中使用 {{ __() }}
@lang 指令已不推荐。目前建议使用 {{ __() }}

占位符

翻译字符串中可以嵌入形如 :name 的占位符。
__() 的第二个参数传入替换值数组:
Blade 中同样可用:

复数

不同语言的复数规则不同。Laravel 使用 | 分隔单数与复数。

基本复数

JSON 形式同理:
trans_choice() 传入数量:

指定范围的复数

也可指定更精确的范围:

复数中的占位符

:count 会展示数量。第 3 参数可传入额外替换值。

覆盖包的语言文件

若第三方包自带语言文件,可以在 lang/vendor/{包名}/{语言}/ 下放置同名文件进行覆盖。 例如自定义 skyrim/hearthfire 包的英文消息:

实践示例:中英切换中间件

一个根据 URL 路径、Session 或用户设置自动切换 locale 的中间件示例:
1

创建中间件

2

实现中间件

3

注册中间件

bootstrap/app.php 中注册:
4

添加切换路由

5

在 Blade 模板中添加切换按钮

翻译文件结构示例

小结

最后修改于 2026年7月18日