Moment Js загружает локализацию слишком поздно, когда загружается ленивый - PullRequest
0 голосов
/ 19 октября 2018

Итак, я попробовал два способа установить локаль Moment.js.Оба способа не сработают, или я должен сказать, что уже слишком поздно.Мое "желание" - импортировать файлы локали асинхронно (вдохновенно здесь ).

Когда я попадаю на мою страницу, дата по-прежнему в английском формате, даже если она должна быть, например,на немецком языке.

Я загружаю данные асинхронно с:

window.moment = require('moment');
moment().format();

window.moment = require('moment-shortformat');
moment().short()

window.moment = require('moment-timezone');

const lang = document.documentElement.lang.substr(0, 2); //for the language

if(lang != 'en'){
    import(`moment/locale/${lang}.js`);
    moment.locale(lang)
}

Поскольку import(moment/locale/${lang}.js); разрешает обещание, я проверял в консоли, когда файл загружается.Это примерно через 1 секунду после строки moment.locale(lang) (неудивительно, что момент не готов к отображению правильной переведенной даты).

Небольшая проверка работоспособности показывает: локаль установлена ​​правильно, когда я пишу moment.locale() вconsole.

Если я не использую отложенную загрузку, вот так:

import 'moment/locale/de';
moment.locale(lang);

Все работает нормально.

Мой второй подход немного длиннее, но все равно не повезло.Подвести итог.Я создал файл javascript на сервере с помощью php:

...
$file = base_path('node_modules/moment/locale/' . $locale . '.js');
...

, чтобы я мог динамически вызывать нужный файл js.Но все равно не повезло.

Есть идеи, что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Так как динамический импорт возвращает обещание, вы можете вызвать moment.locale, когда обещание разрешено:

if(lang != 'en'){
  import(`moment/locale/${lang}.js`).then(module => {
    moment.locale(lang)
  });
}
0 голосов
/ 19 октября 2018

Правильно, если он асинхронный и ожидает обещания, вы должны соединить then() вызов.Вот пример из https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import

import('/modules/my-module.js')
  .then((module) => {
    // Do something with the module.
  });
...