Javascript i18nProvider返回了默认区域设置消息的承诺。反应管理员
您的期望值:Javascript i18nProvider返回了默认区域设置消息的承诺。反应管理员,javascript,react-admin,Javascript,React Admin,您的期望值: 使用localStorage.getItem('locale\u language')中的值设置初始区域设置而不是'en' import polyglotI18nProvider from 'ra-i18n-polyglot'; // react-admin const i18nProvider = polyglotI18nProvider(locale => { if (locale === 'ru') { return import('./i1
使用
localStorage.getItem('locale\u language')中的值设置初始区域设置代码>而不是'en'
import polyglotI18nProvider from 'ra-i18n-polyglot'; // react-admin
const i18nProvider = polyglotI18nProvider(locale => {
if (locale === 'ru') {
return import('./i18n/ru').then(messages => messages.default);
}
return englishMessages;
}, 'en');
发生了什么:
但是当我这样做时,会出现错误error:i18nProvider返回了默认语言环境(ru)消息的承诺。请更新i18n提供程序,以同步方式返回默认语言环境的消息。
相关代码:
这就是我如何从localStore获得价值的方法
export function getLocalLanguage(): string {
let defaultLocalLanguage = 'en';
const storedLanguage = localStorage.getItem('locale_language');
if (storedLanguage !== null) {
defaultLocalLanguage = storedLanguage;
}
return defaultLocalLanguage;
}
下面是我如何为polyglotI18nProvider
const i18nProvider = polyglotI18nProvider(locale => {
if (locale === 'ru') {
return import('./i18n/ru').then(messages => messages.default);
}
return englishMessages;
}, getLocalLanguage());
那么应该没有问题了
resolveBrowserLocale
可能是另一种选择,但我需要一种更持久的方式来存储语言。从localStorage中提取时,您似乎正在将默认语言环境设置为'ru'
,但是'ru'
字符串的导入是异步的
从适用于ra-i18n-polyglot的
默认区域设置的消息(react admin用于初始呈现)必须以同步方式返回
他们给出的建议是,如果要动态解析默认(=初始)语言环境,则需要同步导入所有可能的语言:
从“ra语言英语”导入英语消息;
从“ra语言法语”导入法语信息;
常量消息={
fr:法语信息,
英语短文,
};
常数i18nProvider=polyglotI18nProvider(
语言环境=>messages[locale]?messages[locale]:messages.en,
resolveBrowserLocale()
);
编辑:更多代码是的,它解决了这个问题。我认为问题在于localStorage
。现在我返回它returnrussianmessages
而不是返回导入('./i18n/ru')。然后(messages=>messages.default)代码>。非常感谢。