Laravel怎么安装中文语言包_Laravel如何设置本地化【方案】

2次阅读

laravel 显示中文需设 APP_LOCALE=zh、创建 resources/lang/zh 并放入完整翻译文件(如 auth.php、validation.php),通过 app()->setLocale() 或中间件生效;推荐使用 laravel-lang/lang 包,注意 carbon 本地化需 setlocale 或 translatedFormat,验证占位符需整体翻译。

Laravel怎么安装中文语言包_Laravel如何设置本地化【方案】

怎么让 Laravel 应用显示中文界面

Laravel 默认不带中文语言包,lang/zh 目录需要手动创建或引入第三方翻译。官方只维护 en,其他语言靠社区维护——所以“安装中文语言包”本质是把翻译文件放进 resources/lang/zh,再告诉框架用它。

常见错误现象:__('Welcome') 仍返回英文、Lang::get('auth.failed') 没反应、浏览器语言设为 zh-CN 但页面没切换。

  • 确认 APP_LOCALE=zh 已写入 .env(不是 APP_FALLBACK_LOCALE
  • 检查 config/app.php'locale' => env('APP_LOCALE', 'en') 是否生效(运行 php artisan tinker 后输入 app()->getLocale() 验证)
  • resources/lang/zh 必须存在,且至少包含 auth.phppagination.php 等基础文件,否则调用缺失键时会回退到英文

用哪个中文翻译包最靠谱

别直接 npm install 或 composer requirelaravel-zh”,多数已停止维护或只适配旧版。推荐两种方式:

  • Laravel-Lang/lang:社区最全的多语言翻译仓库,支持 Laravel 9–11,zh 分支更新及时。执行 php artisan lang:publish zh(需先装 laravel-lang/lang 包)或直接复制 zh 文件夹内容到 resources/lang/zh
  • 手动维护:新建 resources/lang/zh/auth.php,内容结构必须和 en/auth.php 一致,键名不能改,只改值。例如:'failed' => '用户名或密码错误'
  • 注意:Laravel 10+ 的验证规则提示(如 requiredemail)也需在 zh/validation.php 中定义,漏掉会导致表单报错仍显示英文

为什么设置了 locale 还是不生效

本地化失效往往不是语言包问题,而是请求上下文没被正确识别。Laravel 不自动根据浏览器 Accept-Language 切换语言,除非你显式设置或写中间件。

  • 路由中强制指定语言:在 routes/web.php 里用 ->middleware('setlocale:zh')(需自定义中间件)
  • sessioncookie 控制:用户点击“中文”后执行 session(['locale' => 'zh']),并在 AppServiceProvider::boot() 中读取并调用 app()->setLocale(session('locale', config('app.locale')))
  • 避免在 Blade 中用 {{ __('xxx') }} 前修改 locale:Blade 编译缓存可能保留旧语言,清缓存用 php artisan view:clear
  • API 请求默认无 session,必须靠 query 参数(?locale=zh)或 header(X-Locale: zh),并在中间件中解析

日期、数字等格式怎么同步变中文

语言包只管翻译字符串Carbon::now()->formatLocalized('%A %B %d') 这类本地化格式依赖系统 locale 设置,和 Laravel 的 APP_LOCALE 无关。

  • linux/macos 下需确保系统有 zh_CN.UTF-8 locale:运行 locale -a | grep zh_CN,没有就生成(ubuntusudo locale-gen zh_CN.UTF-8
  • PHP 中设置:setlocale(LC_TIME, 'zh_CN.UTF-8'),然后 Carbon::now()->formatLocalized('%Y年%m月%d日') 才能输出中文月份
  • 更稳妥的方式是用 Carbon::now()->translatedFormat('Y年m月d日')(Laravel 9.27+ / Carbon 2.65+),它不依赖系统 locale,纯靠翻译文件
  • 数字千分位、小数点符号(如 1,234.56 → 1.234,56)需配置 NumberFormatter,不能靠语言包自动处理

最容易被忽略的是 validation 错误消息里的占位符:比如 'The :Attribute must be at least :value characters.',如果 :attribute 是中文字段名(如“密码”),而 :value 是数字,组合后语序可能不对——这时候得重写整个验证消息模板,而不是只翻关键词。

text=ZqhQzanResources