React native 组件渲染时,i18n未初始化
在我的expo应用程序中,我想使用i18nJS对字符串进行国际化 问题是,它是异步初始化的,并且组件的der呈现速度更快。由于这个原因,我得到了“缺少xy翻译”的结果。渲染前如何实现初始化 我发布我的i18n组件。我们的计划就是导入它并使用它的funktion t()React native 组件渲染时,i18n未初始化,react-native,internationalization,expo,React Native,Internationalization,Expo,在我的expo应用程序中,我想使用i18nJS对字符串进行国际化 问题是,它是异步初始化的,并且组件的der呈现速度更快。由于这个原因,我得到了“缺少xy翻译”的结果。渲染前如何实现初始化 我发布我的i18n组件。我们的计划就是导入它并使用它的funktion t() 由于我无法直接解决上述问题,我的解决办法是实现自己的功能。在我的例子中,我只提供两种语言,所以它非常简单。 如果它也能帮助他人,我会很高兴: import * as Localization from 'expo-localiza
由于我无法直接解决上述问题,我的解决办法是实现自己的功能。在我的例子中,我只提供两种语言,所以它非常简单。 如果它也能帮助他人,我会很高兴:
import * as Localization from 'expo-localization';
import en from './en.json';
import de from './de.json';
// Set the locale once at the beginning of your app.
const locale = Localization.locale.split('-')[0];
const t = (key) => {
var v = null;
if (locale == 'de') {
v = de[key];
}
if (locale == 'en' || v == null)
v = en[key]
if (v == null)
v='t('+key+')';
return v;
};
export default t;
由于我无法直接解决上述问题,我的解决办法是实现自己的功能。在我的例子中,我只提供两种语言,所以它非常简单。 如果它也能帮助他人,我会很高兴:
import * as Localization from 'expo-localization';
import en from './en.json';
import de from './de.json';
// Set the locale once at the beginning of your app.
const locale = Localization.locale.split('-')[0];
const t = (key) => {
var v = null;
if (locale == 'de') {
v = de[key];
}
if (locale == 'en' || v == null)
v = en[key]
if (v == null)
v='t('+key+')';
return v;
};
export default t;
我找到了一个替代解决方案,以防您需要一个异步函数(例如,如果您想在异步存储中检查用户的首选语言)。您可以在App.js中添加AppLoading组件,如下所示: 在我的App.js中:
import * as React from 'react';
import AppContainer from './Navigators/AppNavigationContainer.js'
import {Provider} from 'react-redux'
import store from './Reducer/store'
import {loadLocale} from './assets/locales/i18n'
import {AppLoading} from 'expo'
export default function App ({navigation}) {
[languageReady, setLanguageReady] = React.useState(false)
const init = async () => {
await loadLocale()
};
return(
<Provider store={store}>
{languageReady ? (
<AppContainer/>
) : (
<AppLoading
startAsync={init()}
onFinish={setLanguageReady(true)}/>
)}
</Provider>
)
}
我找到了一个替代解决方案,以防您需要一个异步函数(例如,如果您想在异步存储中检查用户的首选语言)。您可以在App.js中添加AppLoading组件,如下所示: 在我的App.js中:
import * as React from 'react';
import AppContainer from './Navigators/AppNavigationContainer.js'
import {Provider} from 'react-redux'
import store from './Reducer/store'
import {loadLocale} from './assets/locales/i18n'
import {AppLoading} from 'expo'
export default function App ({navigation}) {
[languageReady, setLanguageReady] = React.useState(false)
const init = async () => {
await loadLocale()
};
return(
<Provider store={store}>
{languageReady ? (
<AppContainer/>
) : (
<AppLoading
startAsync={init()}
onFinish={setLanguageReady(true)}/>
)}
</Provider>
)
}
你能解决这个问题吗?我面临着同样的问题:不,不是i18njs。所以我决定实现我自己的函数,它非常简单,但是是同步加载的。我会把它贴在下面。你能解决这个问题吗?我面临着同样的问题:不,不是i18njs。所以我决定实现我自己的函数,它非常简单,但是是同步加载的。我会把它贴在下面。