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)。非常感谢。