Я не совсем уверен, чем вы занимаетесь, но, похоже, у вас есть, скажем, веб-приложение, и вам нужны отдельные кусочки информации о языке и стране. Хорошо, позвольте мне уточнить, что:
- Чтобы правильно отформатировать сумму, которую вы платите, вам на самом деле нужны и язык, и страна, то есть локаль, поскольку именно она определяет соответствующий формат.
- Чтобы предложить правильную платежную систему, вам нужен только страновой пользователь, в настоящее время расположенный.
- Для отображения соответствующих переводов вам нужен только язык (по крайней мере, вы так думаете).
Теперь о том, как это сделать. Самым простым способом было бы создать какой-то профиль пользователя и позволить пользователю выбирать, какие будут лучшие локали для форматирования, что для перевода и какие платежные системы он хочет использовать. Если вы разрабатываете какую-то веб-игру, вы можете читать Locales из заголовков HTTP Accept-Language (вам действительно нужно установить хорошие значения по умолчанию, и это лучшее место для поиска такой информации). Чтобы «отделить» язык от страны, все, что вам нужно, это прочитать язык и код страны из локали, что так просто:
Locale locale = request.getLocale(); // the most acceptable Locale using Servlet API
String language = locale.getLanguage(); // gets language code
String country = locale.getCountry(); // gets country code
Теперь языка часто недостаточно для чтения текстов из комплектов ресурсов, поскольку существуют локали (например, zh_CN, zh_TW), для которых фактический язык различается в зависимости от страны (в приведенном выше примере упрощенный китайский язык используется на материковой части Китая как так же как в Сингапуре, тогда как весь другой говорящий по-китайски мир использует традиционный китайский). Поэтому вам по-прежнему нужен реальный язык.
Код страны даст вам выбранную страну, но не тот, в котором в данный момент находится пользователь. Это может быть хорошим или плохим, в зависимости от вида. Если вам необходимо убедиться, что платеж происходит в стране, в которой находится пользователь, я боюсь, что вам нужно будет использовать Geolocation со всеми вытекающими ...
Это отвечает на ваш вопрос, или я что-то не так понял??