我正在尝试在自定义包中使用语言文件。 我遵循了这个文档:https://laravel.com/docs/master/packages#translations,但它不起作用,只将Namespace :: file.key作为字符串输出。
没有错误。我怎么可能做错了?
加载为:
$this->loadTranslationsFrom(__DIR__.'/resources/lang', 'TranslatableRoute');
用作:
trans('TranslatableRoute::routes.create')
我的路径结构如下:
packages
- doitonlinemedia
- - translatableroutes
- - - src
- - - - TranslatableRoute.php
- - - - TranslatableRoutesServiceProvider.php
- - - - resources
- - - - - lang
- - - - - - en
- - - - - - - routes.php
Routes.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添加语言文件时,它会在填充$this->hints
后调用vendor / laravel / Translation / FileLoader.php中的addNamespace。但是只要我想在同一个文件中调用它,这个函数就会触发:loadNamespaced()
在这个函数中$this->hint
s再次为空。好像有些错误。
答案 0 :(得分:0)
找到了一个解决方案,但我认为我使用了错误的方法解决了这个问题,但现在已经修复了。
我正在制作一个在routes.php文件中调用的包。有一些静态功能。它似乎是在它启动包之前加载的。它已注册,但尚未启动。所以我不得不通过调用包代码来手动添加语言文件:
\App::make('translator')->addNamespace('TranslatableRoute', __DIR__.'/resources/lang');
我想我需要将我的包加载为某种Facade Controller。不知道怎么做。
答案 1 :(得分:0)
我遇到了同样的问题,无法弄明白。我最终更改了我分配给翻译的命名空间,现在可以正常工作了。我不知道为什么,也许它覆盖了我的视图的命名空间,但是使用一个独特的命名空间似乎正在起作用。