php - Laravel 5 loadJsonTranslationsFrom 方法不会从包中加载所有 JSON 翻译文件
问题描述
我将应用程序的逻辑拆分为多个包,每个包都封装了自己的文件(视图、控制器、模型、资源、迁移);一切正常,但是,我在翻译时遇到了问题。
在每个包的 AppServiceProvider 中,我调用该函数loadJsonTranslationsFrom
并传递 JSON 翻译文件所在的路径,例如$this->loadJsonTranslationsFrom(__DIR__ . '/../../resources/lang')
.
在从主项目和其中一个包加载 JSON 翻译文件后,此方法工作正常,但在此之前,该函数无法加载其余文件。
经过大量搜索,我决定手动调试框架文件,然后vendor/laravel/framework/src/Illuminate/Translation/FileLoader.php
按以下方式修改文件:
在函数中addJsonPath($path)
(第 174 行),我在行(第 176 行)dump($this)
之后添加了打印加载器实例的当前状态:$this->jsonPaths[] = $path
/**
* Add a new JSON path to the loader.
*
* @param string $path
* @return void
*/
public function addJsonPath($path)
{
$this->jsonPaths[] = $path;
dump($this);
}
在函数loadJsonPaths($locale)
(第 139 行)中,我dump('debug')
在函数的最开始之后添加了检查何时调用此行:
/**
* Load a locale from the given JSON file path.
*
* @param string $locale
* @return array
*
* @throws \RuntimeException
*/
protected function loadJsonPaths($locale)
{
dump('debug');
return collect(array_merge($this->jsonPaths, [$this->path]))
...
}
更改之后,我发现loadJsonPaths
在其他包加载各自的翻译文件之前调用了该函数,这是输出:
FileLoader {#164 ▼
#files: Filesystem {#156}
#path: "/home/user/Projects/html/myerp/resources/lang"
#jsonPaths: array:1 [▼
0 => "/home/user/Projects/html/myerp/vendor/myerp/reports/src/Providers/../../resources/lang"
]
#hints: []
}
"debug"
FileLoader {#164 ▼
#files: Filesystem {#156}
#path: "/home/user/Projects/html/myerp/resources/lang"
#jsonPaths: array:2 [▼
0 => "/home/user/Projects/html/myerp/vendor/myerp/reports/src/Providers/../../resources/lang"
1 => "/home/user/Projects/html/myerp/vendor/myerp/communications/src/Providers/../../resources/lang"
]
#hints: array:1 [▶]
}
FileLoader {#164 ▼
#files: Filesystem {#156}
#path: "/home/user/Projects/html/myerp/resources/lang"
#jsonPaths: array:3 [▼
0 => "/home/user/Projects/html/myerp/vendor/myerp/reports/src/Providers/../../resources/lang"
1 => "/home/user/Projects/html/myerp/vendor/myerp/communications/src/Providers/../../resources/lang"
2 => "/home/user/Projects/html/myerp/vendor/myerp/payments/src/Providers/../../resources/lang"
]
#hints: array:2 [▶]
}
FileLoader {#164 ▼
#files: Filesystem {#156}
#path: "/home/user/Projects/html/myerp/resources/lang"
#jsonPaths: array:3 [▼
0 => "/home/user/Projects/html/myerp/vendor/myerp/reports/src/Providers/../../resources/lang"
1 => "/home/user/Projects/html/myerp/vendor/myerp/communications/src/Providers/../../resources/lang"
2 => "/home/user/Projects/html/myerp/vendor/myerp/payments/src/Providers/../../resources/lang"
3 => "/home/user/Projects/html/myerp/vendor/myerp/persons/src/Providers/../../resources/lang"
]
#hints: array:2 [▶]
}
如您所见,此行为导致仅加载主项目和第一个包的 JSON 翻译文件。
我的问题是:
这是正确的行为吗?我怎样才能覆盖这种行为并加载所有包的翻译文件?
我在 PHP 7.1 上使用 Laravel 5.7
我希望你能帮助我,在此先感谢。
解决方案
推荐阅读
- android - ActivityResultContracts.TakeVideo() 在录制视频后返回 NULL。但该视频确实存在于 Movies 文件夹中
- c# - 由于 IL2CPP,Unity 无法构建
- reactjs - 如何在 React 中更改 svg 样式图标的颜色?
- postgresql - 如何使用 INSERT 规则返回值创建视图 - 规则定义中没有 INSERT
- angular - ANGULAR 10 Keycloak 被 CORS 策略阻止
- javascript - 使 DIV 占用另一个隐藏的 DIV 的空间
- python - 测试 GPU 是否可用于 tensorflow
- python - 使用 pyinstaller 后 python win32api 失败
- java - 如何将 KeyEvent 发送到 JFrame 组件?
- c# - HtmlAgilityPack 删除节点(头)不起作用