我正在尝试为为Laravel Nova仪表板构建的card添加本地化支持。
我已经在/resources/lang
中创建了一个文件夹,其中包含en.json
格式的JSON语言文件。这些文件通过publish命令发布(复制),但是loadJsonTranslationsFrom()
似乎没有任何作用:
class CardServiceProvider extends ServiceProvider
{
public function boot()
{
$this->publishes(
[__DIR__ . '/../resources/lang' => resource_path('lang/vendor/my-custom-card')],
'my-custom-card-lang'
);
$this->loadJsonTranslationsFrom(resource_path('lang/vendor/my-custom-card'));
}
}
Card.vue
中的标记如下所示:
{{__('Title')}}
如何测试JSON文件是否正确加载?我想念什么?
问题是我如何在Laravel Nova中支持卡的本地化?
答案 0 :(得分:1)
我遇到了同样的问题,但是对于tool,在Nova 2.0中也是如此。
我找到了一个比较优雅的解决方案-也许它仍然可以帮助某个人。
/nova-components/{your-tool}/resources/lang/
中创建en.json 在/nova-components/{your-tool}/resources/js/tool.js
中添加Vue.mixin(require('./translation'));
。
它应该看起来像这样:
Nova.booting((Vue, router, store) => { router.addRoutes([ {your-routes} ]); Vue.mixin(require('./translation')); <-------------- add this line! });
创建/nova-components/{your-tool}/resources/js/translation.js
,它应如下所示:
module.exports = { methods: { __(key, replace) { var translations = _.merge(window.config.translations, window.config['tool-translations']); var translation = translations[key] ? translations[key] : key; _.forEach(replace, (value, key) => { translation = translation.replace(':' + key, value) }); return translation; } } };
现在,您必须在Nova::serving()
文件的boot()
函数内的/nova-components/{your-tool}/src/ToolServicePrivoder.php
函数中添加以下内容:
Nova::provideToScript([ 'tool-translations' => $this->getTranslations(), ]);
现在在上述boot()
下面添加以下功能:
private static function getTranslations() { $translationFile = __DIR__ . '/../resources/lang/' . app()->getLocale() . '.json'; if (!is_readable($translationFile)) { return []; } return json_decode(file_get_contents($translationFile), true); }
答案 1 :(得分:1)
Laravel Nova 2中的卡片本地化has been solved。
要本地化字符串,请在Vue组件中使用__
帮助器,并在NovaServiceProvider
中加载相应的翻译文件:
Nova::serving(function (ServingNova $event) {
Nova::script('{{ component }}', __DIR__.'/../dist/js/card.js');
Nova::style('{{ component }}', __DIR__.'/../dist/css/card.css');
Nova::translations(__DIR__.'/../resources/lang/en/card.json');
});
示例性实现可在GitHub上找到。
documentation中现在提供了更多信息。