Laravel 多语言与本地化实战:用 Lang 与 JSON 语言包做中英文切换
test12026-10-131 次阅读
把文案从代码里搬出来
把中文 hardcode 到控制器和模板里,一旦要支持英文就得满世界改。Laravel 的 Lang 门面配合语言包,把文案集中管理,运行时按用户语言切换,业务代码完全不必感知当前是哪种语言。
用 JSON 语言包
在 lang/en.json 与 lang/zh-CN.json 放键值对,比数组形式更直观,也方便非开发人员维护。
// lang/zh-CN.json
{
"welcome": "欢迎回来,:name",
"order.status": "订单状态"
}
// lang/en.json
{
"welcome": "Welcome back, :name",
"order.status": "Order status"
}
在代码里取文案
use Illuminate\Support\Facades\Lang;
$msg = Lang::get('welcome', ['name' => $user->name]);
// 或用辅助函数,效果一致
$msg = __('welcome', ['name' => $user->name]);
按用户切换语言
在中间件里根据用户偏好设置当前语言,整站文案随之切换,不需要在业务逻辑里逐个判断。
public function handle($request, $next)
{
$locale = $request->user()?->locale ?? config('app.locale');
if (in_array($locale, ['zh-CN', 'en'])) {
app()->setLocale($locale);
}
return $next($request);
}
模板里直接用
@lang('order.status')
// 或带占位符
{{ __('welcome', ['name' => $user->name]) }}
小结
- JSON 语言包适合整站短句,数组包适合按模块分组管理。
- __() 与 @lang 在视图和逻辑层通用,调用方式统一。
- 语言切换放在中间件,业务代码无需感知当前语言。
T
test1
文章作者
把文案从代码里搬出来 把中文 hardcode 到控制器和模板里,一旦要支持英文就得满世界改。Laravel 的 La...
- 分类
- 技术
- 发布时间
- 2026-10-13
- 字数
- 约 981 字
- 阅读
- 1 次
