composer 不安装中文包而是拉取静态语言文件,需手动复制 vendor/laravel-lang/lang/zh_cn/ 到 resources/lang/zh_cn/ 并确保 config/app.php 中 locale 设为 'zh_cn',再清缓存生效。

Composer 本身不提供、也不安装“中文包”——Laravel 的中文翻译是静态语言文件,不是运行时依赖,composer require 只是帮你把社区翻译文件拉到 vendor/ 目录,后续必须手动复制进 resources/lang/ 才生效。
怎么用 composer 拉取 laravel-lang 中文翻译
社区维护的 laravel-lang/lang 是最常用的选择,它按 Laravel 版本分分支,只含 PHP 数组格式的语言文件(如 zh_CN/messages.php),不注册服务、不自动加载。
- 先确认你的 Laravel 版本:运行
php artisan --version,比如输出Laravel Framework 11.9.2,就对应v11分支 - 执行安装命令(加
--dev更合理,因为这些文件仅开发期使用):composer require laravel-lang/lang --dev - 安装后,中文文件实际在:
vendor/laravel-lang/lang/zh_CN/(注意不是zh-CN或zh) - 必须手动复制整个
zh_CN文件夹到:resources/lang/zh_CN/,否则框架根本读不到
为什么复制后还是显示英文?常见路径和命名陷阱
本地化失效几乎从不因为 Composer 没装对,而是文件放错位置、命名不匹配、或键名结构不对。
Perl 基础入门中文教程,chm格式,讲述PERL概述、简单变量、操作符、列表和数组变量、文件读写、模式匹配、控制结构、子程序、关联数组/哈希表、格式化输出、文件系统、引用、面向对象、包和模块等知识点。适合初学者阅读和了解Perl脚本语言。
-
resources/lang/下必须是zh_CN/子目录(下划线,非短横),且该目录内必须有messages.php或validation.php等标准文件名 -
__('welcome')要求resources/lang/zh_CN/messages.php里有顶层键'welcome' => '欢迎',不能写成'messages' => ['welcome' => '欢迎'] - 如果用了 JSON 翻译(
resources/lang/zh_CN.json),那所有语言都得用 JSON,PHP 数组和 JSON 混用会导致部分键失效 - 修改后务必清缓存:
php artisan config:clear && php artisan view:clear(Laravel 11+ 可用php artisan lang:publish,但仅限已支持该命令的版本)
locale 设置与运行时切换的关键点
语言是否生效,最终取决于 App::getLocale() 返回值,而不是你写了多少个翻译文件。
- 检查当前 locale:
php artisan tinker→ 输入App::getLocale(),看返回是不是"zh_CN",不是的话说明没切过去 - 默认语言由
config/app.php中的'locale' => 'en'控制;要设中文,改成'locale' => 'zh_CN'并确保该目录存在 - 动态切换需配合中间件或路由参数,例如
Route::get('/{locale}', ...)->where('locale', 'zh_CN|en'),再在控制器中调用App::setLocale($locale) - 不要在模板里写
{{ __('messages.welcome') }}前就用__('xxx')提前解析——比如放在 Blade@props或组件构造函数里,此时 locale 还未设置
最常被忽略的是:laravel-lang 的分支版本必须和你的 Laravel 主版本严格一致。v10 分支的 validation.php 结构和 v11 不同,字段名可能缺失或重命名,复制错分支会导致表单验证提示始终是英文,而且查不出错在哪。









