如何从 dayjs https://www.npmjs.com/package/dayjs 动态获取语言环境?

may*_*yal 8 locale npm dayjs

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

import * as locale from 'dayjs/locale/te';
Run Code Online (Sandbox Code Playgroud)

问题是我没有找到动态导入区域设置的方法。我无权访问nodejs require() 函数。我有基于反应的应用程序。如何缓解这个问题?

ger*_*fer 7

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

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

function loadLocale (language) {
  locales[language]().then(() => dayjs.locale(language))
}
Run Code Online (Sandbox Code Playgroud)


小智 6

您可以使用 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());
});
Run Code Online (Sandbox Code Playgroud)

您可以在此codesandbox中看到一个工作示例。

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

  • 巧妙的解决方案!但最好将 `.js` 添加到 import 语句中,因为如果在没有 typescript 配置的 webpack 中使用它可能会引发编译错误: import(`dayjs/locale/${LOCALE}.js`) (3认同)

Dip*_*ten 2

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

import 'dayjs/locale/te'
import 'dayjs/locale/en'
Run Code Online (Sandbox Code Playgroud)

然后您可以按照以下操作在本地之间动态切换

dayjs().locale('en').format()
dayjs('2018-4-28', { locale: 'te' })
Run Code Online (Sandbox Code Playgroud)

  • 但这会拉出不必要的代码。我必须有条件地进行导入。 (2认同)