7

Laravel Nova ダッシュボード用に構築されたカードのローカリゼーション サポートを追加しようとしています。

/resources/langのような形式の JSON 言語ファイルを含むフォルダーを既に作成していますen.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 でカードのローカリゼーションをどのようにサポートするかです。

4

2 に答える 2

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 に答える