Файлы ресурсов для языка с символами, отличными от ISO 8859 - PullRequest
1 голос
/ 24 июня 2009

Мы внедряем 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

Ответы [ 2 ]

1 голос
/ 24 июня 2009

У вас абсолютно есть для использования JDK 1.5? Если бы вы могли перейти до 1.6, вы могли бы использовать перегрузку load(Reader), которая позволила бы вам хранить файлы в других кодировках (например, UTF-8). Я не уверен, как это будет соответствовать PropertyResourceBundle, по общему признанию.

Не забывайте, что даже работая с файлами ISO-8859-1, вам не нужно использовать этот формат для редактирования файла. Вы можете использовать native2ascii для преобразования файла из другой кодировки. Сохраните ваши файлы свойств «source» как UTF-8, затем запустите native2ascii как часть вашей сборки. Например:

native2ascii -encoding UTF-8 Foo.properties.utf8 Foo.properties
0 голосов
/ 24 июня 2009

Напишите ваши файлы в любой кодировке и запустите их с помощью инструмента native2ascii (который входит в комплект JDK именно для этой цели) в рамках процесса сборки или развертывания.

...