Проблема локализации файлов свойств Java и проблема кодировки символов - PullRequest
1 голос
/ 21 ноября 2011

Я работаю над веб-приложением на Java, которое сейчас находится на завершающей стадии разработки, и одна из оставшихся вещей, которую нужно сделать, - это локализация.Мы используем файлы свойств для каждой поддерживаемой локали.Проблема, которую я обнаружил, заключается в том, что некоторые символы Юникода не отображаются правильно в веб-браузере.Веб-страницы имеют кодировку UTF-8, указанную в метатеге charset, и браузер правильно ее обнаружил (в Firefox View-> Character Encoding, кажется, выбрана правильная).Я полагаю, что проблема связана с тем фактом, что, хотя приложение отображает текст в формате UTF-8, файлы свойств сохраняются в кодировке ISO * xxxx, что является некоторой настройкой по умолчанию для затмения.

Я нашел аналогвопрос здесь: Свойства Java Кодировка UTF-8 в Eclipse , которая советует мне установить плагин Resource Bundle.Я установил и использовал плагин для редактирования соответствующих свойств, но у меня все еще есть проблема.

Есть ли быстрое решение (я имею в виду решение, которое не вызовет слишком больших изменений в приложении, так как ононаходится в почти законченной стадии), которая преодолеет проблему, с которой я сталкиваюсь.

Может быть, я должен упомянуть, что я занимаюсь разработкой и изучением проблемы под ОС Ubuntu Linux с использованием Firefox 7. Заранее спасибо.

Редактировать: я не упомянул важный вопрос.Мой пользовательский интерфейс написан на GWT, а свойства представлены интерфейсом, который имеет аннотации на геттерах, которые GWT использует для внутреннего создания реализации этого интерфейса и ссылки на соответствующее свойство.Так что, я полагаю, у меня нет большого контроля над тем, как на самом деле читаются свойства, или, по крайней мере, я не знаю, как это сделать в GWT.

Ответы [ 4 ]

4 голосов
/ 21 ноября 2011

Здесь есть две совершенно разные проблемы:

  • Сохраняются ли файлы свойств в правильной кодировке? Если вы редактируете их в eclipse, вы должны установить кодировку текстового файла в свойствах проекта. Обратите внимание, что этот параметр сохраняется в подкаталоге .settings проекта.
  • Используется ли правильная кодировка для чтения файлов свойств? Если вы читаете их в своем коде, обязательно используйте InputStreamReader для установки кодировки. Если они читаются какой-то платформой, вы должны просмотреть ее API и конфигурацию, чтобы увидеть, можете ли вы указать кодировку.

Я предлагаю избегать использования экранированных символов Юникода, если это вообще возможно.

4 голосов
/ 21 ноября 2011

Файлы свойств Java имеют кодировку ISO 8859-1 (Latin 1). Другие символы должны быть представлены с помощью экранированного Unicode.

Таким образом, вы не должны вводить символы Unicode за пределами Latin 1 непосредственно в ваши файлы локализации. Такие символы должны вводиться как экранированные символы Юникода.

Если у вас есть набор файлов свойств, закодированных в кодировке UTF-8 (или иным образом), вы можете перевести их на экранированный кодировщик Latin 1, используя инструмент native2ascii в своем JDK. Также у Ant есть задача native2ascii .

Другие постеры указывают на способы обойти это. Но лично я предпочел бы придерживаться стандартной кодировки в файлах ресурсов свойств - так она будет работать со всем. Нет ничего, что могло бы помешать вам создавать ваши файлы в кодировке UTF-8 и преобразовывать их в кодировку Latin 1, в которой вы избежали юникода, как часть вашей сборки (например, задача Ant).

2 голосов
/ 21 ноября 2011

Согласно этой странице локализации GWT (которая является руководством по использованию локализации по методу аннотации, на которую вы ссылаетесь в своем обновленном ответе), она говорит:

Кодировка для международногонаборы символов

При интернационализации интерфейса вашего приложения следует помнить, что поддерживаемые языки могут содержать символы, не входящие в набор символов ASCII.Поэтому как на главной странице HTML (StockWatcher.html), так и в файлах свойств Java, которые содержат переводы, необходимо установить кодировку UTF-8.

И в примере под заголовком«Создать StockWatcherConstant_de.properties», он говорит:

Измените кодировку файла на UTF-8.

Выберите файл, а затем в строке меню Eclipse выберите «Файл»>Свойства или щелкните правой кнопкой мыши.

Eclipse откроет окно свойств.

В поле Кодировка текстового файла выберите Другой UTF-8.Примените и сохраните изменение.

Примечание. В зависимости от конфигурации Eclipse, при применении изменений может появиться следующее предупреждение: UTF-8 конфликтует с кодировкой, определенной в типе контента (ISO-8859-1).).Вы хотите установить его в любом случае?Вы можете проигнорировать предупреждение и применить изменение.

1 голос
/ 21 ноября 2011

Я тоже сталкивался с такой же проблемой. Я преодолел это, написав свой собственный Control расширение java.util.ResourceBundle.Control. Важный метод переопределения для включения соответствующей кодировки при чтении пакетов ресурсов в виде файлов свойств - это newBundle( ... ) 5 параметров.

Пока не сложно; метод, который у меня есть, давно обдуман, чтобы сделать это правильно.

Другим вариантом является использование cal10n (http://cal10n.qos.ch/), но для этого может потребоваться значительное обновление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...