我正在使用包裹邮递员空间主持我自己的电子邮件营销。但是,我想编辑语言文件。对于Laravel 文档,这可以通过以下方法实现:
因此,例如,如果您需要覆盖名为skyrim/hearthfire的包的messages.php中的英文翻译字符串,那么您应该将一个语言文件放在:messages.php
因此,在我的示例中,包名为spatie/laravel-mailcoach,它将在resources/lang/vendor/laravel-mailcoach/de/messages.php中解析。然而,我面临两个问题。
mailcoach,而不是laravel-mailcoach。但是,我尝试了这两种方法(同时),而且我的语言文件都没有加载。这怎么可能呢?.json文件,而不是一个.php文件。我假设会像上面所描述的那样工作。这意味着正确的路径文件将是resources/lang/vendor/laravel-mailcoach/de.json。这是正确的吗?如果2是正确的,为什么Laravel仍然加载错误的语言文件?
我稍微深入了一下Illuminate\Translation\Translator文件,并为get方法添加了一个dd($this),该方法将检索给定密钥的正确转换。我发现了以下情况:
Illuminate\Translation\Translator {#604 ▼
#loader: Illuminate\Translation\FileLoader {#603 ▼
#files: Illuminate\Filesystem\Filesystem {#92}
#path: "Programmieren/MyWebsiteProject/resources/lang"
#jsonPaths: array:4 [▼
0 => "Programmieren/MyWebsiteProject/vendor/arcanedev/log-viewer/translations"
1 => "Programmieren/MyWebsiteProject/vendor/llaski/nova-scheduled-jobs/src/../resources/lang"
2 => "Programmieren/MyWebsiteProject/resources/lang/vendor/nova-scheduled-jobs"
3 => "Programmieren/MyWebsiteProject/vendor/spatie/laravel-mailcoach/src/../resources/lang/"
]
#hints: array:3 [▼
"log-viewer" => "Programmieren/MyWebsiteProject/vendor/arcanedev/log-viewer/translations"
"NovaScheduledJobs" => "Programmieren/MyWebsiteProject/vendor/llaski/nova-scheduled-jobs/src/../resources/lang"
"validationRules" => "Programmieren/MyWebsiteProject/vendor/spatie/laravel-validation-rules/src/../resources/lang/"
]
}
#locale: "de"
#fallback: "en"
#loaded: array:1 [▼
"*" => array:1 [▼
"*" => array:1 [▼
"de" => array:403 [▼
...
// my translations
...
]
]
]
]
#selector: null
#parsed: []
}正如您在jsonPaths数组中所看到的那样,mailcoach语言文件不是我的resources/lang/vendor/laravel-mailcoach或resources/lang/vendor/mailcoach文件夹中的文件,而是原始的文件。
有人能解释一下为什么会发生这种情况,而不是加载resources/lang/vendor下的文件吗?
有趣的是,当我将行$this->loadJsonTranslationsFrom(resource_path() . '/lang/vendor/mailcoach');添加到我的AppServiceProvider中的boot函数中时,上面的jsonPaths数组又得到了一个项Programmieren/MyWebsiteProject/resources/lang/vendor/mailcoach,这是正确的。
然后我的定制语言文件也被使用了,但是原始的语言文件仍然被加载。这怎么可能呢?
此外,我想知道为什么我还要注册我的自定义语言文件?这不是正常的行为..。我想找出这个错误/问题。
亲切的问候
发布于 2021-10-22 18:16:27
我相信我找到了解决方案(使用Laravel8.x):
在vendor/laravel/framework/src/Illuminate/Translation/FileLoader.php中见
protected function loadNamespaceOverrides(array $lines, $locale, $group, $namespace)
{
$file = "{$this->path}/vendor/{$namespace}/{$locale}/{$group}.php";
if ($this->files->exists($file)) {
return array_replace_recursive($lines, $this->files->getRequire($file));
}
return $lines;
}基于此,我假设包名(如hearthfire in skyrim/hearthfire)不是真正的交易,而是包的名称空间--在我的例子中,是用于statamic/cms statamic而不是cms的,因此将一个文件放在
resources/lang/vendor/statamic/de/messages.php为我工作过。
https://stackoverflow.com/questions/66724212
复制相似问题