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 中获得更多信息。