Вопрос

Мы внедряем 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 именно для этой цели) как часть процесса сборки или развертывания.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top