有没有办法让同一种语言有多个语言文件?我知道如果您有不同的软件包,它会起作用,但是我有自己的插件系统。有没有办法在运行时加载额外的语言文件?
如果您这样做(在
app/start/global.php
内或您喜欢的地方)
Lang::addNamespace('namespace', '/your/custom/location');
那么你应该能够
Lang::get('namespace::filename.localekey');
在正确的语言目录中为您的插件创建文件
/app
/lang
/en
myplugin.php
那么你可以做
echo Lang::get('myplugin.foobar');
其中 foobar 是包含语言环境的行中的键
问:有没有办法让同一种语言有多个语言文件?
A:是的,有很多方法。
问:我知道如果你有不同的包,它会起作用,但是我有自己的插件系统。
A:未处理的异常:这是什么意思?你有一个插件系统,好吧,为什么这会阻止你拥有多种语言文件?与拥有“不同的包”相关的什么机制会以某种方式为同一语言启用多个语言文件?
问:有没有办法在运行时加载额外的语言文件?
A:Javascript?
实际答案:你见过这个包裹吗? https://github.com/mcamara/laravel-localization - 它可能会对你有很大帮助。没有更多信息,这是我能得到的最具体的信息。
我找到了这个方法:
在
AppServiceProvider.php
:
public function boot()
{
// ...
app('translator')->addNamespace('shared', base_path() . '/src/Domain/Shared/resources/lang/');
// ...
}
然后在任何刀片文件中:
{{ __('shared::langfile.key-in-the-file') }}
如果您只想添加自定义翻译文件但以与默认翻译键相同的方式使用翻译键,请在 laravel 9 上工作 在应用程序/Providers/AppServiceProvider.php
public function boot()
{
...
// Add deprecated lang strings
if(method_exists($this, 'loadJSONTranslationsFrom')) {
$this->loadJSONTranslationsFrom(lang_path().'/deprecated');
}
...
}
Lang文件夹:
lang
deprecated(any name registered earlier)
en.json
如果你想在包中执行此操作,请在 src/Providers/PackageServiceProvider.php 中执行相同的操作
public function boot() {
...
if(method_exists($this, 'loadJSONTranslationsFrom')) {
$this->loadJSONTranslationsFrom(__DIR__.'/../../resources/lang');
$this->loadJSONTranslationsFrom(__DIR__.'/../../resources/lang-other-folder');
}
...
}
如果不起作用,请尝试清除缓存。
Lang 文件内容(最后一项后无逗号):
{
"test": "123"
}
并使用:
{{ __('test') }}
祝你好运)