当我使用 likedayjs(date).locale('te').format('YYYY MMM DD')
时,我会得到英文月份的值。为了使用语言环境,我必须导入语言环境。
import * as locale from 'dayjs/locale/te';
问题是我看不到动态导入语言环境的方法。我无权访问 nodejs require() 函数。我有基于反应的应用程序。如何缓解这个问题?
没有错误的动态导入的解决方法:
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());
});
您可以在此代码框中看到一个工作示例。
有关动态导入的更多信息,我建议您阅读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 convertToLocale = (date, locale) => {
return import(`dayjs/locale/${locale}`)
.then(() => dayjs(date).locale(locale));
}
这将像您提到的导入一样加载所有语言环境文件,而无需手动添加导入语句。
试试这个代码。
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')))})