如何使用 React Intl 动态添加语言环境数据?
How to add locale data dynamically using React Intl?
我正在使用 React-intl 对 UI Util 库进行国际化。该库有一个文件夹说 i18n,其中我为不同的 json 文件放置了 locales.If 该库的用户想要添加对其他语言环境的支持,he/she 可以放置额外的 json 文件key/value 对各自的语言环境。
但是 React-intl 需要在 prior.For 示例中为各自的语言环境导入和添加 LocaleData,
import fr from 'react-intl/locale-data/fr';
addLocaleData([...fr]);
有没有办法在 React-intl 中动态添加 LocaleData 并导入相应语言环境的语言环境库?
如果你使用的是 webpack。您可以对应用程序中的不同语言环境数据进行代码拆分并动态加载。 Webpack 1 只支持 require.ensure() 而 webpack 2 也支持 System.import()。 System.import returns 承诺,而 require.ensure 使用回调。 https://webpack.github.io/docs/code-splitting.html
与System.import()
import { addLocaleData } from 'react-intl';
const reactIntlLocaleData = {
fr: () => System.import('react-intl/locale-data/fr'),
en: () => System.import('react-intl/locale-data/en')
};
function loadLocaleData(locale){
reactIntlLocaleData[locale]()
.then((intlData) => {
addLocaleData(intlData)
}
}
与require.ensure()
import { addLocaleData } from 'react-intl';
const reactIntlLocaleData = {
fr: () => require.ensure([], (require) => {
const frData = require('react-intl/locale-data/fr');
addLocaleData(frData);
}),
en: () => require.ensure([], (require) => {
const enData = require('react-intl/locale-data/en');
addLocaleData(enData);
})
};
function loadLocaleData(locale){
reactIntlLocaleData[locale]();
}
根据您的开发环境,上述代码可能有效也可能无效。它假定您正在使用 Webpack2 和 Babel 来转换您的代码。
嘿,我现在已经这样做了,如下所述及其工作方式:-)
const possibleLocale = navigator.language.split('-')[0] || 'en';
addLocaleData(require(`react-intl/locale-data/${possibleLocale}`));
此处,语言环境是通过 navigator.language 从浏览器中获取的。
希望这会有所帮助:-)
我正在使用 React-intl 对 UI Util 库进行国际化。该库有一个文件夹说 i18n,其中我为不同的 json 文件放置了 locales.If 该库的用户想要添加对其他语言环境的支持,he/she 可以放置额外的 json 文件key/value 对各自的语言环境。
但是 React-intl 需要在 prior.For 示例中为各自的语言环境导入和添加 LocaleData,
import fr from 'react-intl/locale-data/fr';
addLocaleData([...fr]);
有没有办法在 React-intl 中动态添加 LocaleData 并导入相应语言环境的语言环境库?
如果你使用的是 webpack。您可以对应用程序中的不同语言环境数据进行代码拆分并动态加载。 Webpack 1 只支持 require.ensure() 而 webpack 2 也支持 System.import()。 System.import returns 承诺,而 require.ensure 使用回调。 https://webpack.github.io/docs/code-splitting.html
与System.import()
import { addLocaleData } from 'react-intl';
const reactIntlLocaleData = {
fr: () => System.import('react-intl/locale-data/fr'),
en: () => System.import('react-intl/locale-data/en')
};
function loadLocaleData(locale){
reactIntlLocaleData[locale]()
.then((intlData) => {
addLocaleData(intlData)
}
}
与require.ensure()
import { addLocaleData } from 'react-intl';
const reactIntlLocaleData = {
fr: () => require.ensure([], (require) => {
const frData = require('react-intl/locale-data/fr');
addLocaleData(frData);
}),
en: () => require.ensure([], (require) => {
const enData = require('react-intl/locale-data/en');
addLocaleData(enData);
})
};
function loadLocaleData(locale){
reactIntlLocaleData[locale]();
}
根据您的开发环境,上述代码可能有效也可能无效。它假定您正在使用 Webpack2 和 Babel 来转换您的代码。
嘿,我现在已经这样做了,如下所述及其工作方式:-)
const possibleLocale = navigator.language.split('-')[0] || 'en';
addLocaleData(require(`react-intl/locale-data/${possibleLocale}`));
此处,语言环境是通过 navigator.language 从浏览器中获取的。 希望这会有所帮助:-)