2

Я реализую i18n в своем веб-приложении и нахожусь на этапе тестирования на данный момент. Я использую java.util.Locale на стороне сервера, чтобы передать локаль соответствующим API (дата и т. Д.), Которые потребляют информацию. Вот мои настройки:заголовок запроса браузера «Accept-Language» не отправляет страну

  1. язык браузер был установлен на «хинди» система страны
  2. операционная была установлена ​​на «Индия»
  3. я отправить запрос на сервер ожидает на «Accept-Language» заголовок должен быть hi-IN, но значение остается hi, независимо от настроек страны в моей ОС ... фактическое значение Accept-Language:hi;en-US,en;q=0.8,q=0.6
  4. my webapp использует входящее значение в заголовке запроса и делает i18n или l10n соответственно, загружая соответствующий перевод языка из файлов ресурсов
  5. У меня есть тестовый пример, где я вручную посылаю new Locale("hi", "IN"), чтобы указать язык и страну. Этот тестовый пример печатает значения на правильном языке, как я ожидаю, но поскольку значение, поступающее от запроса, составляет только hi, я не могу видеть желаемый результат.

Не знаете, почему браузеры (Chrome и Firefox) не поддерживают формат language_country для всех записей в их выборе. Есть что-то, чего я не вижу?

Редактировать: Я сделал несколько исправлений, основанных на ответе @ pawel-dyda. Чтобы процитировать часть его ответа

Ваш язык должен быть hi-IN, который, я считаю, должен объяснить нечетное поведение.

Суть вопроса (почему я поднимаю этот вопрос здесь), что я не могу получить свой браузер, чтобы послать значение hi-IN на сервер в заголовке Accept-Language.

+0

Не могли бы вы рассказать нам, какова ваша конечная цель? Это тестирование? –

+0

@ PawełDyda сделал незначительное изменение на мой вопрос. Конечной целью является внедрение i18n, сейчас я на этапе тестирования – cyberjar09

+1

Единственный способ заставить Firefox и Chrome отправлять «привет-IN» - убедить своих разработчиков изменить их реализацию. И судя по [Intl object] (http://www.ecma-international.org/publications/standards/Ecma-402.htm), единственный способ сделать это - установить/изменить стандарт (HTTP 2.1 any?). Я дал вам обходные пути для этой проблемы. Вы просто не можете ожидать lang-country в любое время ... Извините, это путь мира. –

ответ

1

Думаю, вам не хватает нескольких вещей.

Что касается второго пункта, установка страны операционной системы обычно не влияет на то, что веб-браузер отправляет в своем списке Accept-Language. Обычно, потому что я могу дать вам встречный пример: Safari в Mac OS X.
Существует небольшая вероятность того, что это повлияет на мобильные веб-браузеры, но я сам не проводил никаких тестов.

Что касается пунктов 3 и 5 ... Ну, вы привели пример Accept-Language. Пожалуйста, поближе посмотрите на него: он содержит en-US, то есть английский (США). Ваш языковой тег должен быть hi-IN, который, я считаю, должен объяснить странное поведение.

Я не уверен, что вы имели в виду в пункте 4. Не зная деталей реализации, могу только предположить, что вы пытаетесь загрузить файлы ресурсов (и, судя по языковому формату, это были бы свойства Java ...) а также имеют некоторые значения по умолчанию для таких вещей, как форматирование.
Для свойств файлов обычно (не всегда!) Достаточно одного языка. Но есть проблема с форматированием.
Ну, в большинстве случаев вы получите только язык, и у вас нет выбора, кроме как принять этот факт.Есть два способа смягчить эту проблему:

  1. Вы можете реализовать профиль пользователя и позволить пользователю выбрать его/ее предпочтительный язык пользовательского интерфейса и параметры форматирования (лучше всего оставить их разделенными).
  2. Вы можете «угадать» наиболее вероятную страну. В случае хинди совершенно очевидно, что будет результатом угадывания. Это немного сложнее в случае, например, немецкого, который используется в Германии («по умолчанию»), Австрии и Швейцарии. Очевидно, есть еще много случаев, если вы хотите найти помощь в «угадывании», CLDR - лучший источник информации.
  3. Наилучший подход - фактически реализовать языковые настройки в профиле пользователя, но использовать интеллектуальные угадывания на основе данных, взятых из CLDR; в основном вы объединяете пункты 1 & 2.

И не забывайте о возврате! Это локальный резерв (прохождение списка в заголовке Accept-Language до тех пор, пока вы не найдете что-то, что поддерживает ваше приложение) и резерв ресурсов (если у вас есть messages_fr.properties, но нет messages_fr_ca.properties, но запрос пришел как fr-CA, имеет смысл вернуть французские переводы из предшествующий файл).

К слову: вы можете открыть Firefox about:config. У него есть настройка под названием intl.accept_languages. Я уверен, что если вы измените его содержимое, вы сможете отправить то, что хотите. Однако, поскольку я сказал, что это бесполезно, потому что пользователи не изменят свои настройки ...

+0

изменил вопрос, основываясь на некоторых ваших отзывах. Благодарю. – cyberjar09

Смежные вопросы