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 次