5

当我使用 likedayjs(date).locale('te').format('YYYY MMM DD')时,我会得到英文月份的值。为了使用语言环境,我必须导入语言环境。

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

问题是我看不到动态导入语言环境的方法。我无权访问 nodejs require() 函数。我有基于反应的应用程序。如何缓解这个问题?

4

5 回答 5

6

没有错误的动态导入的解决方法:

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

function loadLocale (language) {
  locales[language]().then(() => dayjs.locale(language))
}
于 2021-02-05T09:05:20.910 回答
5

您可以使用 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());
});

您可以在此代码框中看到一个工作示例。

有关动态导入的更多信息,我建议您阅读https://javascript.info/modules-dynamic-imports

于 2020-11-03T07:03:36.060 回答
3

您需要首先导入所需的语言环境文件,如下所示

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

然后您可以在本地之间动态切换,如下所示

dayjs().locale('en').format()
dayjs('2018-4-28', { locale: 'te' })
于 2020-01-06T09:40:09.930 回答
0

如果您不介意添加一个承诺,您可以做的一件事是动态导入您需要的语言环境。代码如下所示:

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

这将像您提到的导入一样加载所有语言环境文件,而无需手动添加导入语句。

于 2020-10-21T11:06:18.240 回答
0

试试这个代码。

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')))})
于 2020-10-28T08:36:24.060 回答