Глава JSP.3

Вопросы Локализации


В этой Главе описаны требования по локализации в JavaServer Pages 1.2 (JSP 1.2).

JSP.3.1 Кодировка Символов Страницы

Поддержка платформой Java локализованного содержимого базируется на универсальном внутреннем представлении текста как символов Unicode 2.0 (ISO010646) и поддержке нескольких кодировок символов в Unicode.

Java Virtual Machine (JVM)/Виртуальная Машина Java обязана поддерживать кодировки Unicode и Latin-1, но большинство машин поддерживают гораздо больше кодировок. Кодировки символов, поддерживаемые JVM от Sun, описаны по адресу: http://java.sun.com/products/jdk/1.1/docs/guide/intl/encoding.doc.html


JSP-страница использует кодировку символов. Кодировка может быть описана явно атрибутом pageEncoding директивы page . По умолчанию кодировка выполняется по атрибуту contentType директивы page , если она имеется, или, в противном случае, устанавливается ISO-8859-1. ISO-8859-1 известна также как Latin-1.


Верные имена кодировок символов в JSP 1.2 - те же, что и имена IANA. Они описаны по адресу:

 

ftp://venera.isi.edu/in-notes/iana/assignments/character-sets
 

Атрибут pageEncoding должен использоваться только тогда, когда кодировка символов JSP-страницы организована так, что символы ASCII отображают сами себя. Директива, содержащая атрибут pageEncoding, должна появляться на JSP-странице как можно раньше.


JSP-контейнер может использовать какую-нибудь зависящую от реализации эвристику и/или структуру для определения ожидаемой кодировки JSP-страницы и проверки соответствия атрибута contentType.


JSP-контейнер вызовет ошибку времени трансляции, если запрошена неподдерживаемая кодировка символов.

JSP.3.2 Статический Тип Содержимого

Большинство JSP-страниц написаны так, чтобы отправлять ответ, используя специфические тип содержимого/content type и кодировку символов. JSP-страница может использовать атрибут contentType директивы page для обозначения типа содержимого, предоставляемого в ответ на запросы. Если используется таким образом, данная страница будет всегда предоставлять содержимое одного и того же типа. Если страница определяет, что ответ должен иметь другой тип содержимого, она должна делать это "раньше", определяя, какая иная JSP-страница или сервлет будет обрабатывать этот запрос, и направлять запрос другой JSP-странице или сервлету. Значение TYPE по умолчанию "text/html", а значение по умолчанию для кодировки символов - ISO-8859-1. Регистр имён типов содержимого хранится в IANA.

См.: ftp://venera.isi.edu/in-notes/iana/assignments/media-types/media-types

Атрибут contentType обязан использоваться только в том случае, если кодировка символов организована так, что символы ASCII отображают сами себя, как минимум до тех пор, пока атрибут contentType не будет найден. Директива, содержащая атрибут contentType, должна появляться на JSP-странице как можно раньше.

JSP.3.3 Динамический Тип Содержимого

Некоторые JSP-страницы созданы так, что они могут направлять содержимое, используя различные типы содержимого и кодировки символов, в зависимости от ввода времени запроса. Эти страницы могут быть организованы как специальные акции или скриптлеты, которые определяют тип содержимого ответа и предоставляют 'связку' с другим кодом, реально генерирующим содержимое ответа.

Динамическая установка типа содержимого основана на вызове response.setcontentType(). Этот метод может быть вызван, пока никакого содержимого не было выслано в поток ответа. Данные высылаются в поток ответа при очистках буфера буферизованных страниц или при обнаружении первого содержимого (избегая пробелов) небуферизованных страниц.


Пробел в страницах JSP вводится известным трюком синтаксиса JSP, но более управляем в  JSP-страницах с синтаксисом XML.

JSP.3.4 Передача Локализованного Содержимого

Спецификация JSP не предписывает определённого подхода к структурированию локализованного содержимого, поэтому возможны различные подходы.

Два обычных подхода заключаются в использовании шаблонной taglib и помещения локализованных строк из хранилища ресурсов, либо в использовании локализованных JSP-страниц. Каждый подход имеет свои преимущества и недостатки. Некоторые пользователи используют трансформацию JSP-документов для простого замещения элементов локализованными строками, обрабатывая таким образом синтаксис JSP без снижения производительности на этапе прогона. Сочетание этих трёх подходов также имеет определённый смысл.


Есть несколько подходов к наилучшему проведению локализации. Мы ожидаем появления JSR-052, стандартной библиотеки тэгов JSP, чтобы адресовать к ней некоторые из этих вопросов.