Как узнать текущую страну устройства в React Native (iOS и Android)?

Я пытаюсь узнать страну, в которой находится устройство, но ничего не нашел. Есть ли что-то для этого в React Native? Я пробовал использовать response-native-device-info, но он также не поддерживает, но в предыдущей версии его можно было получить с помощью getDeviceCountry(). Теперь для последней версии отображается ошибка:

TypeError: _reactNativeDeviceInfo.default.getDeviceCountry не является функцией. (В _reactNativeDeviceInfo.default.getDeviceCountry()'_reactNativeDeviceInfo.default.getDeviceCountry не определено)

5 ответов

Решение

Согласно документации на response-native-device-info для последней версии, они переместили некоторые из своих API-интерфейсов на react-native-localize, чтобы уменьшить дублирование в модулях response-native-community. response-native-localize отлично сработал для меня.

Настроить:

$ npm install --save react-native-localize
# --- or ---
$ yarn add react-native-localize

Применение:

import * as RNLocalize from "react-native-localize";

console.log(RNLocalize.getLocales());
console.log(RNLocalize.getCurrencies());
console.log(RNLocalize.getCountry());
console.log(RNLocalize.getCalendar());
console.log(RNLocalize.getTemperatureUnit());
console.log(RNLocalize.getTimeZone());
console.log(RNLocalize.uses24HourClock());

и многое другое. Для подробного описания, пожалуйста, посетите их официальную документацию по данной ссылке: react-native-localize

Принятый ответ не сработал для меня, возможно, из-за https://github.com/zoontek/react-native-localize/issues/81.

Тем не мение, Expo есть кое-что из своей экосистемы, которая отлично сработала:

  1. expo install expo-localization
  2. import * as Localization from 'expo-localization';
  3. console.log(Localization.region);

Изменить: документы здесь https://docs.expo.io/versions/latest/sdk/localization/#localizationregion

Это решило мою проблему;

ПРЕРЫВНОЕ ИЗМЕНЕНИЕ: удалить is24Hour, getTimezone, isAutoTimeZone и isAutoDateAndTime, getDeviceLocale, getDeviceCountry, getPreferredLocales. Это результат опроса. Он удаляет дублирование API в модулях react-native-community. Связанный PR: https://github.com/react-native-community/react-native-localize/pull/65. Используйте yarn add https://github.com/mikehardy/react-native-localize.git для поддержания isAutoTimeZone + isAutoDateAndTime до слияния

Пожалуйста, используйте этот пакет, чтобы получить страну устройства. to имеет разные типы конфигураций.

страна-устройство-реакция

Некоторые примеры

      import DeviceCountry, {
  TYPE_ANY,
  TYPE_TELEPHONY,
  TYPE_CONFIGURATION,
} from 'react-native-device-country';

DeviceCountry.getCountryCode()
  .then((result) => {
    console.log(result);
    // {"code": "BY", "type": "telephony"}
  })
  .catch((e) => {
    console.log(e);
  });


DeviceCountry.getCountryCode(TYPE_TELEPHONY)
  .then((result) => {
    console.log(result);
    // {"code": "BY", "type": "telephony"}
  })
  .catch((e) => {
    console.log(e);
  });


DeviceCountry.getCountryCode(TYPE_CONFIGURATION)
  .then((result) => {
    console.log(result);
    // {"code": "BY", "type": "config"}
  })
  .catch((e) => {
    console.log(e);
  });

Похоже, это ошибка в React Native. Пожалуйста, проверьте их раздел устранения неполадок

Вот что они советуют:

Кажется, это ошибка, вызванная реактивной ссылкой. Вы можете вручную удалить libRNDeviceInfo-tvOS.a в Xcode -> [Ваша цель сборки iOS] -> Сборка фраз -> Связать двоичный файл с библиотеками.

Другие вопросы по тегам