Struts 2 Китайский вопрос локализации

Struts 2 Китайский вопрос локализации

Проблемы с локализацией Struts 2 i18n для отображения китайских символов…

Случай 1: файл свойств со специальными символами

В файле свойств хранится сообщение с именем пользователя, паролем и отправка на китайском языке. Этот файл свойств создается в формате UTF-8, но содержимое не кодируется с помощью native2ascii.

struts2-localization-case1-1

Давайте попробуем отобразить китайский символ с помощью нескольких тегов пользовательского интерфейса. Страница просмотра объявлена ​​для отображения в формате UTF-8 с метатегом HTML.

...



...

    
    
    

    
Testing 1 :
Testing 2 :

... zh_CN ... Chinese ...

Результат

struts2-localization-case1-2

Удивительно, но следующие три тега пользовательского интерфейса могут правильно отображать китайское сообщение,



Testing 2 : 

Однако «s:submit» и «getText()» не могут его отобразить?

В соответствии с документацией Java i18n, для правильного отображения специального символа в комплекте ресурсов его необходимо предварительно обработать с помощью инструмента native2ascii.

После изучения исходного кодаTextProvider.getText() он использует ресурс bundle.getString () для извлечения сообщения из пакета ресурсов, поэтому неправильные сообщения являются разумными. Но почему «s:text», «s:textfield» и «s:password» могут правильно отображать китайское сообщение и почему «s:submit» не сработает? Слишком много вопросов в моей голове, давайте перейдем к делу 2 ...

Случай 2: файл свойств со специальными символами (кодированный)

На этот раз файл свойств обрабатывается инструментом native2ascii, и китайские символы кодируются правильно.

struts2-localization-case2-1

Результат

struts2-localization-case2-2

Результат полностью обратный, теперь «s:submit» и «getText()» могут отображать его правильно, но другие компоненты пользовательского интерфейса не работают. Это работает, как ожидалось, поскольку Struts 2 рекомендуетgetText() отображать i18n или сообщение о локализации. Проблема в том, почему «s:submit» отличается?

Struts2 .. Что не так?

Вот несколько вопросов в моей голове ...

  1. Почему s: submit работает по-другому?

  2. I18n должен быть очень простым, почему Struts 2 имеет такую ​​проблему? Или я неправильно понял, как работает Struts 2 i18n?

  3. Почему существует так много способов отобразить сообщение из пакета ресурсов? Почему бы просто не сгруппировать его одним способом? В Struts 1 просто используйте «bean: message», почему это выглядит так сложно в Struts 2?

  4. Поддерживает ли Struts 2 пакет ресурсов XML? Мне просто не нравится использовать инструмент native2ascii для кодирования данных в формат UTF-8, он делает файл свойств нечитаемым. Apache Wicket очень хорошо справился с этой задачей, возможно, Struts 2 должен извлечь из этого уроки.

  5. Итак, как правильно отобразить китайские иероглифы в Struts 2?

Во многих статьях и руководствах говорится, что следующие методы могут отображать сообщение из пакета ресурсов:


Тем не менее, это относится только к английским или некоторым «английским (Европа)» символам, например, Франция, немецкий. Но для китайского или японского символов «большой квадрат» оба метода будут возвращать совершенно разные выходные данные. На самом деле не знаю, как сделать локализацию Struts 2 для китайского и японского языков.

updated…(16/6/2010)

Покопавшись в поисковике Baidu, нашел в одной китайской статье косвенное решение -Struts 2 internationalizing example

Решение

Проблема в метатеге HTML,



В Struts 1 вышеуказанный метатег необходим для правильного отображения данных UTF-8, но это не относится к Struts 2.

В Struts 2 метатег больше не функционирует, мы должны поместить тег<%@ page contentType=”text/html;charset=UTF-8″ %> в первую строку страницы просмотра. Например,

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>



...

Результат

struts2-localization-work

Все китайские сообщения отображаются правильно.

Ответьте на мои предыдущие вопросы

  1. Почему s: submit работает так иначе?
    A: No comment at this

  2. I18n должен быть очень простым, почему Struts 2 имеет такую ​​проблему? Или я неправильно понял, как работает Struts 2 i18n?
    A: Make sure to put *<%@ page contentType=”text/html;charset=UTF-8″ %> »в первой строке страницы просмотра. *

  3. Почему существует так много способов отобразить сообщение из пакета ресурсов? Почему бы просто не сгруппировать его одним способом? В Struts 1 просто используйте bean: message, почему это выглядит так сложно в Struts 2?
    A: s:text, key, getText(), name… , all are able to render the Chinese or UTF-8 encoded data correctly, just make sure the put the correct “charset” in the view page. I still prefer only one method to control the message bundle (Like Struts 1), too many equivalent options are just drive confuse to the developers.

  4. Поддерживает ли Struts 2 пакет ресурсов XML? Мне просто не нравится использовать инструмент native2ascii для кодирования данных в формат UTF-8, он делает файл свойств нечитаемым. Apache Wicket отлично справился с этой проблемой, возможно, Struts 2 должен извлечь из этого урок.
    A: Hope Struts 2 can support the XML resource bundle in the next release.

  5. Итак, как правильно отображать китайские иероглифы в Struts 2?
    A: See the solution above.

Скачать -Struts2-i18n-issue-Example