В настоящее время я настраиваю интернационализацию / i18n для приложения React, используя i18next и Reaction-i18next. Я в основном следую документации здесь для конфигурации i18next и здесь для форматирования с Moment. js.
Для Moment. js возможно либо импортировать все локали, как это:
import 'moment/min/locales'
или индивидуально для каждой локали, как это:
import 'moment/locale/en-gb'
import 'moment/locale/fr'
// Shortened for this example...
У меня есть массив SupportLocales с языковыми разновидностями:
const supportedLocales = ['en', 'en-GB', 'fr', 'fr-CA', 'es'] // Shortened for this example...
Сначала мне было интересно, существует ли способ «динамического импорта» вычисляемых спецификаторов модулей, например:
// Import Moment.js supportedLocales (other than default `en`).
supportedLocales.forEach(locale => {
if (locale !== 'en') {
import(`moment/locale/${locale}`)
}
})
Но у меня есть предупреждение ESLint:
eslint: error no -unused-expressions - ожидал присваивания или вызова функции и вместо этого видел выражение.
Мне также было интересно, можем ли мы еще go дальше и импортировать спецификатор модуля только при необходимости (если есть любой интерес в этом):
// Listen to the change language event to keep Moment.js locale in sync.
i18n.on('languageChanged', newLocale => {
moment.locale(newLocale)
import(`moment/locale/${locale}`)
})