Laravel Nova卡片本地化
Laravel Nova card localization
我正在尝试为 Laravel Nova 仪表板构建的 card 添加本地化支持。
我已经在 /resources/lang
中创建了一个文件夹,其中包含格式类似于 en.json
的 JSON 语言文件。使用发布命令发布(复制)文件,但 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 中卡片的本地化?
我遇到了同样的问题,但对于 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-components/{your-tool}/src/ToolServicePrivoder.php
文件的 boot()
函数内的 Nova::serving()
函数中:
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);
}
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 中获得更多信息。
我正在尝试为 Laravel Nova 仪表板构建的 card 添加本地化支持。
我已经在 /resources/lang
中创建了一个文件夹,其中包含格式类似于 en.json
的 JSON 语言文件。使用发布命令发布(复制)文件,但 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 中卡片的本地化?
我遇到了同样的问题,但对于 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-components/{your-tool}/src/ToolServicePrivoder.php
文件的boot()
函数内的Nova::serving()
函数中: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); }
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 中获得更多信息。