как получить локаль динамически из dayjs https://www.npmjs.com/package/dayjs?

Когда я использую как dayjs(date).locale('te').format('YYYY MMM DD'), затем я получаю значение месяца на английском языке. Для работы с локалью мне нужно импортировать локаль.

import * as locale from 'dayjs/locale/te';

Проблема в том, что я не вижу способа динамически импортировать локаль. У меня нет доступа к функции nodejs require(). У меня есть приложение на основе реакции. Как решить эту проблему?

5 ответов

Обходной путь для динамического импорта без ошибок:

      const locales = {
  de: () => import('dayjs/locale/de'),
  en: () => import('dayjs/locale/en'),
}

function loadLocale (language) {
  locales[language]().then(() => dayjs.locale(language))
}

Вы можете использовать import как выражение импорта и динамически импортировать все, что захотите. например:

import dayjs from "dayjs";
import localeData from "dayjs/plugin/localeData";
dayjs.extend(localeData);

const LOCALE = "de";

import(`dayjs/locale/${LOCALE}`)
.then(() => {
  dayjs.locale(LOCALE);
  console.log(dayjs.weekdays());
});

Вы можете увидеть рабочий пример в этом Codeandbox.

для получения дополнительной информации о динамическом импорте я предлагаю вам прочитать https://javascript.info/modules-dynamic-imports

Вам необходимо сначала импортировать необходимые файлы локали, как показано ниже

import 'dayjs/locale/te'
import 'dayjs/locale/en'

Затем вы можете динамически переключаться между местными жителями, как показано ниже.

dayjs().locale('en').format()
dayjs('2018-4-28', { locale: 'te' })

Попробуйте этот код.

const language = {
    en: import('dayjs/locale/en'),
    te: import('dayjs/locale/te')
}

language['te'].then(lng => { console.log((dayjs(new Date()).locale(lng.name).format('YYYY MMMM DD')))})

Одна вещь, которую вы могли бы сделать, если не против добавить обещание, - это динамически импортировать нужную вам локаль. Код будет выглядеть так:

const convertToLocale = (date, locale) => {
  return import(`dayjs/locale/${locale}`)
    .then(() => dayjs(date).locale(locale));
}

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

Другие вопросы по тегам