7

我正在尝试为为 Laravel Nova 仪表板构建的卡片添加本地化支持。

我已经创建了一个文件夹,/resources/lang其中包含格式为 .json 的 JSON 语言文件en.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 中卡片的本地化?

4

2 回答 2

3

卡片本地化在 Laravel Nova 2 中解决。

要本地化字符串,请使用__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 上找到示例性实现。

现在可以在文档中找到更多信息。

于 2019-08-23T13:50:33.227 回答
1

我有同样的问题,但对于一个工具,也在 Nova 2.0 中。
我找到了一个有点优雅的解决方案 - 也许它仍然可以帮助某人。

  • 在中创建 en.json/nova-components/{your-tool}/resources/lang/
  • /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);
    }
    
于 2019-05-10T08:16:45.737 回答