我正在尝试使用自定义包中的语言文件。我遵循了以下文档:https://laravel.com/docs/master/packages#translations,但它不起作用,仅将命名空间::文件.key输出为字符串。
没有错误。我可能做错了什么?
加载为:
$this->loadTranslationsFrom(__DIR__.'/resources/lang', 'TranslatableRoute');
用作:
trans('TranslatableRoute::routes.create')
我的路径结构如下:
packages
- doitonlinemedia
- - translatableroutes
- - - src
- - - - TranslatableRoute.php
- - - - TranslatableRoutesServiceProvider.php
- - - - resources
- - - - - lang
- - - - - - en
- - - - - - - routes.php
路线.php包含:
return [
'create' => 'new',
'edit' => 'edit'
];
发现了一些奇怪的东西。当我转储$this->app['translator']
它包含:
array:1 [
"TranslatableRoute" => array:1 [
"routes" => array:1 [
"en" => []
]
]
]
但不应该是:
array:1 [
"TranslatableRoute" => array:1 [
"en" => array:1 [
"routes" => []
]
]
]
编辑
当我使用 loadTranslationFrom 添加语言文件时,它会在 vendor/laravel/Translation/FileLoader 中调用 addNamespace.php之后$this->hints
被填充。但是一旦我想调用它,同一文件中的这个函数就会被触发:loadNamespaced()
在这个函数中,$this->hint
s 再次为空。似乎有些错误。
找到了一个解决方案,但我认为我对这个问题使用了错误的方法,但现在它是固定的。
我正在制作一个在 routes.php 文件中调用的包。带有一些静态函数。这似乎是在启动软件包之前加载的。它已注册,但尚未启动。所以我不得不通过调用包代码来手动添加语言文件:
'App::make('translator')->addNamespace('TranslatableRoute', __DIR__.'/resources/lang');
我想我需要将我的包加载为某种外观控制器。不知道怎么做。
我遇到了同样的问题,无法弄清楚。我最终更改了分配给翻译的命名空间,它现在可以工作了。我不知道为什么,也许它覆盖了我的视图的命名空间,但是对于唯一的命名空间,它似乎可以工作。