Как узнать текущую страну устройства в 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
есть кое-что из своей экосистемы, которая отлично сработала:
-
expo install expo-localization
-
import * as Localization from 'expo-localization';
-
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] -> Сборка фраз -> Связать двоичный файл с библиотеками.