Laravel本地化翻译失效排查:配置正确为何未生效?
Laravel 本地化翻译失效排查指南
问题重现配置
config/app.php
'locale' => 'de',
routes/web.php
Route::get('/test', function () { return view('test'); });
resources/views/test.blade.php
{{ app()->getLocale() }} {{ __('Test material') }}
lang/de.json
{ "Test material": "Testmaterial" }
问题现象
运行上述代码后,实际输出:
de Test material
预期输出应为:
de Testmaterial
注:该代码在全新Laravel安装环境中可正常工作,但在现有项目中失效。已通过grep -r "Test material" .排查,未发现重复翻译键,lang目录结构如下:
├── de.json └── en ├── auth.php ├── pagination.php ├── passwords.php └── validation.php
可能导致翻译失效的因素
- 缓存未清除:Laravel会缓存本地化、配置、视图等文件,现有项目的旧缓存可能覆盖了新翻译。执行以下命令清除各类缓存:
php artisan cache:clear php artisan config:clear php artisan view:clear php artisan route:clear - 语言环境未正确生效:现有项目可能自定义了本地化中间件,或修改了默认的
SetLocale中间件,导致实际生效的语言不是de。可在测试路由中添加dd(Locale::getDefault(), app()->getLocale()),确认当前实际生效的语言环境。 - 文件权限不足:服务器上
lang目录或de.json文件的权限设置错误,导致Laravel无法读取翻译文件。检查文件权限,确保Web服务器进程(如www-data)拥有读取权限。 - JSON文件语法错误:
de.json可能存在隐性语法问题(如末尾多余逗号、引号不匹配),导致Laravel解析失败。可使用在线JSON校验工具检查文件语法正确性。 - 翻译加载逻辑被修改:现有项目可能通过服务提供者或第三方包修改了翻译文件的加载路径或优先级,导致自定义的
de.json未被加载。检查config/app.php中的load配置项,或查看项目中是否有自定义的翻译加载逻辑。 - 环境变量覆盖配置:
.env文件中可能设置了APP_LOCALE变量,覆盖了config/app.php中的locale配置。检查.env文件,若存在APP_LOCALE=en,修改为APP_LOCALE=de后执行php artisan config:clear。
内容的提问来源于stack exchange,提问作者JanBoehmer
相关产品推荐
相关产品推荐

