Файлы ресурсов для языка с символами, отличными от ISO 8859
-
10-07-2019 - |
Вопрос
Мы внедряем i18n, используя JSTL, и столкнулись с проблемой, заключающейся в том, что тексты ресурсов, определенные в файле .properties и имеющие символы, отличные от ISO 8859 (например, языки inidic), не могут быть отображены тегом.
В конце концов, после просмотра кода тега и класса BundleHelper, мы обнаружили, что он внутренне использует метод ResourceBundle.getBundle, который, в свою очередь, использует PropertyResourceBundle для загрузки файла .properties в качестве пакета ресурсов.
Он внутренне опирается на метод java.util.Properties # load (InputStream), который не поддерживает чтение символов, отличных от ISO 8859, и единственный способ обойти это - представить такие символы в формате / u hex hex hex hex, что довольно нецелесообразно, если весь файл .properties предназначен для языка хинди!
Есть ли способ обойти это? Я попытался использовать формат XML в файле .properties, но он не был распознан PropertyResourceBundle!
Подробности среды: Jdk 1.5, Weblogic 9.2
Решение
У вас абсолютно есть для использования JDK 1.5? Если бы вы могли перейти до 1.6, вы могли бы использовать перегрузку load (Reader)
, которая позволяла бы вам хранить файлы в других кодировках (например, UTF-8). Я не уверен, как это вписалось бы в PropertyResourceBundle, по общему признанию.
Не забывайте, что даже работая с файлами ISO-8859-1, вам не нужно использовать этот формат для редактирования файла. Вы можете использовать native2ascii
конвертировать файл из другой кодировки. Сохраните свой " источник " файлы свойств как UTF-8, затем запустите native2ascii
как часть вашей сборки. Например:
native2ascii -encoding UTF-8 Foo.properties.utf8 Foo.properties
Другие советы
Напишите свои файлы в любой кодировке и пропустите их через native2ascii (который входит в комплект JDK именно для этой цели) как часть процесса сборки или развертывания.