Struts 2 Problème de localisation en chinois

Problème de localisation de Struts 2 en chinois

A Problèmes de localisation de Struts 2 i18n pour l'affichage des caractères chinois…

Cas 1: fichier de propriétés avec des caractères spéciaux

Un fichier de propriétés stocke le message du nom d'utilisateur, du mot de passe et le soumet en caractère chinois. Ce fichier de propriétés est créé au format UTF-8, mais le contenu n'est pas encodé avec native2ascii.

struts2-localization-case1-1

Essayons d'afficher le caractère chinois via quelques balises d'interface utilisateur. La page de visualisation est déclarée s'afficher au format UTF-8 avec la balise Meta HTML.

...



...

    
    
    

    
Testing 1 :
Testing 2 :

... zh_CN ... Chinese ...

Résultat

struts2-localization-case1-2

Étonnamment, les trois balises d'interface suivantes sont capables d'afficher correctement le message chinois,



Testing 2 : 

Cependant, les «s:submit» et «getText()» ne peuvent pas l'afficher?

Selon la documentation Java i18n, pour afficher correctement un caractère spécial avec un ensemble de ressources, il doit être précédé de l'outil native2ascii.

Après avoir fouillé dans le code source deTextProvider.getText(), il utilise la ressource bundle.getString () pour récupérer le message à partir du groupe de ressources, de sorte que les messages incorrects sont raisonnables. Mais pourquoi «s:text», «s:textfield» et «s:password» sont capables d'afficher correctement le message chinois, et pourquoi «s:submit» échoue? Trop de questions dans mon esprit, passons au cas 2…

Cas 2: fichier de propriétés avec des caractères spéciaux (encodé)

Cette fois, le fichier de propriétés est traité avec l'outil native2ascii et les caractères chinois sont encodés correctement.

struts2-localization-case2-1

Résultat

struts2-localization-case2-2

Le résultat est totalement inverse, maintenant les «s:submit» et «getText()» sont capables de l'afficher correctement, mais les autres composants de l'interface utilisateur échouent. Cela fonctionne comme prévu, car Struts 2 recommandegetText() pour afficher i18n ou un message de localisation. Le problème est, pourquoi «s:submit» est-il différent?

Struts2..Quel est le problème?

Voici quelques questions dans mon esprit…

  1. Pourquoi le s: submit est-il si différent?

  2. Le i18n devrait être très simple, pourquoi Struts 2 a ce genre de problème? Ou j'ai mal compris le fonctionnement de Struts 2 i18n?

  3. Pourquoi existe-t-il tant de façons d'afficher un message à partir d'un ensemble de ressources? Pourquoi ne pas simplement le regrouper en une seule méthode? Dans Struts 1, utilisez simplement le «bean: message», pourquoi cela semble si compliqué dans Struts 2?

  4. Struts 2 prend-il en charge le bundle de ressources XML? Je n'aime simplement pas utiliser l'outil native2ascii pour encoder les données au format UTF-8, cela rend le fichier de propriétés illisible. Apache Wicket a fait un très bon travail dans ce problème, peut-être que Struts 2 devrait en tirer des leçons.

  5. Alors, comment afficher correctement les caractères chinois dans Struts 2?

De nombreux articles et didacticiels indiquent que les méthodes suivantes sont capables d'afficher le message du groupe de ressources:


Cependant, cela ne s'applique qu'aux caractères anglais ou à certains caractères de type anglais (Europe), par exemple la France, l'allemand. Mais pour le chinois ou le japonais, les caractères «grand carré», les deux méthodes renverront une sortie totalement différente. Vraiment aucune idée de comment faire la localisation Struts 2 pour le chinois et le japonais.

updated…(16/6/2010)

En creusant la solution du moteur de recherche Baidu, j'ai trouvé la solution indirecte dans l'un des articles chinois -Struts 2 internationalizing example

Solution

Le problème est dans la balise meta HTML,



Dans Struts 1, la balise Meta ci-dessus est requise pour afficher correctement les données UTF-8, mais ce n'est pas le cas pour Struts 2.

Dans Struts 2, la balise meta n'est plus fonction, nous devrions mettre la balise<%@ page contentType=”text/html;charset=UTF-8″ %> dans la première ligne de la page d'affichage. Par exemple,

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



...

Résultat

struts2-localization-work

Tous les messages chinois s'affichent correctement.

Répondre à mes questions précédentes

  1. Pourquoi le s: submit est-il si différent?
    A: No comment at this

  2. Le i18n devrait être très simple, pourquoi Struts 2 a ce genre de problème? Ou j'ai mal compris comment fonctionne Struts 2 i18n?
    A: Make sure to put *<%@ page contentType=”text/html;charset=UTF-8″ %> ”sur la première ligne de la page d'affichage. *

  3. Pourquoi existe-t-il tant de façons d'afficher un message à partir d'un ensemble de ressources? Pourquoi ne pas simplement le regrouper en une seule méthode? Dans Struts 1, utilisez simplement le "bean: message", pourquoi cela semble si compliqué dans 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 prend-il en charge le bundle de ressources XML? Je n'aime simplement pas utiliser l'outil native2ascii pour encoder les données au format UTF-8, cela rend le fichier de propriétés illisible. Apache Wicket a fait un très bon travail dans ce problème, Struts 2 devrait peut-être en tirer des leçons.
    A: Hope Struts 2 can support the XML resource bundle in the next release.

  5. Alors, comment afficher correctement les caractères chinois dans Struts 2?
    A: See the solution above.

Téléchargez-le -Struts2-i18n-issue-Example