Laravel 8自定义fa语言配置不生效 登录注册校验仍显示英文
Laravel 8 配置fa校验语言不生效的排查与解决
常见问题原因
1. 配置缓存未清除
这是最高发的问题:如果之前执行过php artisan config:cache生成了配置缓存,直接修改config/app.php的配置不会生效,哪怕重启php artisan serve也没用——系统会优先读取bootstrap/cache/config.php里的缓存配置,不会加载修改后的源文件。
解决方法:执行命令清除配置缓存即可:php artisan config:clear
2. 语言文件路径或内容不完整
你手动放置fa语言文件夹时,需要核对两点:
- 路径是否正确:Laravel 8的默认语言文件根目录是
resources/lang/,不要把fa文件夹放到项目根目录的lang/目录下(那是Laravel 9及以上的默认路径)。最终的校验语言文件路径必须是resources/lang/fa/validation.php,不能嵌套多余目录(比如不能是resources/lang/fa/fa/validation.php) - 文件内容是否完整:打开
resources/lang/fa/validation.php,确认里面包含登录注册常用校验规则的翻译键(比如required、email、confirmed等),如果缺少对应键,系统会自动 fallback 到默认英文语言文件。另外登录注册的授权类提示对应resources/lang/fa/auth.php,这个文件缺失也会显示英文。
3. 项目存在强制覆盖locale的逻辑
如果项目里有语言切换中间件、路由组全局配置,或是在控制器、自定义请求类里手动写了App::setLocale('en'),会直接覆盖你在config/app.php里配置的默认locale,导致语言还是走英文。
解决方法:全局搜索项目代码里的setLocale、set_local这类关键字,确认有没有强制设置英文的逻辑,测试时先注释掉这类逻辑再验证。
4. 校验逻辑手动指定了语言环境
如果控制器或FormRequest里写校验规则时,给Validator::make()手动传了语言参数,或是用了->setLang('en')这类方法,也会导致校验提示走英文,需要检查对应校验代码的写法。
正确的配置流程(重新配置时参考)
- 确认
resources/lang/fa/目录下有完整的validation.php、auth.php等所需语言文件 - 核对
config/app.php的配置项:
'locale' => 'fa', 'fallback_locale' => 'fa',
注:faker_locale是用来生成测试假数据的,和校验提示无关,不影响当前问题
- 执行缓存清理命令:
php artisan config:clear php artisan cache:clear
- 直接访问登录注册页面测试即可,不需要额外重启服务。
内容的提问来源于stack exchange,提问作者user9277271
相关产品推荐
相关产品推荐

