Обнаружить изменение языка системы в реагировать на родной - PullRequest
0 голосов
/ 30 октября 2018

Я использую i18next для локализации. Я могу изменить вручную, используя метод changelanguage i18next. Но мне нужно вручную изменить язык при изменении языка системы. Так есть ли какой-нибудь пакет, чтобы обнаружить изменение языка в реагировать родной

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Используйте 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

0 голосов
/ 30 октября 2018

Использование 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});
  }
...