在React Native中检测系统语言更改

时间:2018-10-30 06:51:21

标签: react-native react-native-android react-native-ios i18next

我正在使用i18next进行本地化。我可以使用i18next changelanguage方法手动更改。但是我需要在更改系统语言时手动更改语言。那么是否有任何程序包可以检测React Native的语言变化

2 个答案:

答案 0 :(得分:0)

使用react-native-device-info

npm install --save react-native-device-info

getDeviceLocale()

获取设备的语言环境。

const deviceLocale = DeviceInfo.getDeviceLocale();

// iOS: "en"
// Android: "en-US"
// Windows: ?

更新

如果应用处于前台或后台,我们可以AppState,并在state发生变化时通知您。

如果用户将应用程序移至后台状态,则语言已更改,然后再次打开应用程序。

当应用程序进入前台状态时,我们可以使用DeviceInfo.getDeviceLocale()检查语言。

这是判断设备语言是否已更改的好方法。

不移至后台,用户不会更改语言吗?

state = {
    appState: AppState.currentState
  }

  componentDidMount() {
    AppState.addEventListener('change', this._handleAppStateChange);
  }

  componentWillUnmount() {
    AppState.removeEventListener('change', this._handleAppStateChange);
  }

  _handleAppStateChange = (nextAppState) => {
    if (this.state.appState.match(/inactive|background/) && nextAppState === 'active') {
      console.log('App has come to the foreground!')
    }
    this.setState({appState: nextAppState});
  }

答案 1 :(得分:0)

使用react-native-languages,但仅适用于android

react-native link react-native-languages

代码:

import RNLanguages from 'react-native-languages';

// Current device language
console.log('language', RNLanguages.language);

// User preferred languages (in order)
console.log('languages', RNLanguages.languages);

// Listening for languages changes (on Android)
RNLanguages.addEventListener('change', ({ language, languages }) => {
  // Do languages related things…
});

https://www.npmjs.com/package/react-native-languages