Laravel集成AdminLTE部署生产环境后翻译失效求助
别着急,我帮你一步步排查这个问题——本地正常、生产环境显示翻译键,这是Laravel部署时很常见的翻译加载问题,咱们从这几个方向入手:
1. 先纠正翻译文件的修改方式
你直接改了vendor目录里的翻译文件,这是个误区!生产环境部署时vendor目录通常会重新安装,你的修改会直接丢失。正确操作是先把AdminLTE的语言文件发布到项目自己的resources/lang目录:
php artisan vendor:publish --provider="JeroenNoten\LaravelAdminLte\ServiceProvider" --tag=lang
执行后,你会在resources/lang/vendor/adminlte/pt-br下找到adminlte.php,以后修改这个文件里的翻译内容才是持久化的正确做法。
2. 清除生产环境的Laravel缓存
生产环境下Laravel会自动缓存配置、语言等文件,新的翻译内容可能被旧缓存覆盖了。执行这几条命令清缓存:
# 清除配置缓存 php artisan config:clear # 清除语言缓存 php artisan lang:clear # 清除视图缓存 php artisan view:clear
如果你的服务器用了OPcache这类PHP级别的缓存,记得重启PHP服务或者手动清除OPcache缓存,不然旧的缓存还会生效。
3. 确认生产环境的语言配置
检查生产服务器上的.env文件,确保默认语言设置是pt-br:
APP_LOCALE=pt-br
要是部署时.env文件被覆盖或者没配置对,系统会用默认的en语言,找不到对应的葡萄牙语翻译,自然就显示键名了。
4. 检查文件权限
确保生产环境下resources/lang目录及其子目录的权限正确,Web服务器用户(比如www-data、nginx)要有读取权限。可以用这两条命令调整:
chown -R www-data:www-data resources/lang chmod -R 755 resources/lang
5. 核对翻译键的命名空间
你的Blade代码{{ trans('adminlte::adminlte.login_message') }}是正确的,但要确认发布后的resources/lang/vendor/adminlte/pt-br/adminlte.php里确实存在login_message这个键,并且内容是你设置的Entre para iniciar uma nova sessão。
如果以上步骤都试过还没解决,可以尝试重新生成优化缓存(生产环境建议开启缓存提升性能):
php artisan config:cache php artisan lang:cache
注意:缓存生成后,再修改翻译文件的话,需要先清缓存再重新生成哦。
内容的提问来源于stack exchange,提问作者Leandro Guilherme da Silva

