我将应用程序的逻辑分为多个软件包,每个软件包都封装了自己的文件(视图,控制器,模型,资源,迁移);一切正常,但是我在翻译方面遇到问题。
在每个包的AppServiceProvider中,我调用函数loadJsonTranslationsFrom
并传递JSON转换文件所在的路径,例如$this->loadJsonTranslationsFrom(__DIR__ . '/../../resources/lang')
。
从主项目和其中一个程序包加载JSON转换文件后,此方法可以正常工作,但在此之前该函数无法加载其余文件。
经过大量搜索后,我决定手动调试框架文件,然后vendor/laravel/framework/src/Illuminate/Translation/FileLoader.php
按以下方式修改文件:
在函数addJsonPath($path)
(第174行)中,我dump($this)
在行$this->jsonPaths[] = $path
(第176行)之后添加了打印加载程序实例的当前状态的代码:
/**
* 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
希望您能帮助我,在此先感谢。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句