我正在使用i18next进行本地化。我可以使用i18next changelanguage方法手动更改。但是我需要在更改系统语言时手动更改语言。那么是否有任何程序包可以检测React Native的语言变化
答案 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…
});