Laravel Nova локализация карт - PullRequest
       19

Laravel Nova локализация карт

0 голосов
/ 21 сентября 2018

Я пытаюсь добавить поддержку локализации для карты , созданной для панели инструментов Laravel Nova.

Я уже создал папку в /resources/lang, содержащую языковые файлы 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?

1 Ответ

0 голосов
/ 10 мая 2019

У меня та же проблема, но для инструмента , также в 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);
    }
    
...