Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native 组件渲染时,i18n未初始化_React Native_Internationalization_Expo - Fatal编程技术网

React native 组件渲染时,i18n未初始化

React native 组件渲染时,i18n未初始化,react-native,internationalization,expo,React Native,Internationalization,Expo,在我的expo应用程序中,我想使用i18nJS对字符串进行国际化 问题是,它是异步初始化的,并且组件的der呈现速度更快。由于这个原因,我得到了“缺少xy翻译”的结果。渲染前如何实现初始化 我发布我的i18n组件。我们的计划就是导入它并使用它的funktion t() 由于我无法直接解决上述问题,我的解决办法是实现自己的功能。在我的例子中,我只提供两种语言,所以它非常简单。 如果它也能帮助他人,我会很高兴: import * as Localization from 'expo-localiza

在我的expo应用程序中,我想使用i18nJS对字符串进行国际化

问题是,它是异步初始化的,并且组件的der呈现速度更快。由于这个原因,我得到了“缺少xy翻译”的结果。渲染前如何实现初始化

我发布我的i18n组件。我们的计划就是导入它并使用它的funktion 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;

由于我无法直接解决上述问题,我的解决办法是实现自己的功能。在我的例子中,我只提供两种语言,所以它非常简单。 如果它也能帮助他人,我会很高兴:

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。所以我决定实现我自己的函数,它非常简单,但是是同步加载的。我会把它贴在下面。