Struts 2 chinesisches Lokalisierungsproblem

Struts 2 Chinesisches Lokalisierungsproblem

A Struts 2 i18n-Lokalisierungsprobleme bei der Anzeige der chinesischen Schriftzeichen…

Fall 1: Eigenschaftendatei mit Sonderzeichen

Eine Eigenschaftendatei speichert die Nachricht von Benutzername, Kennwort und Übermittlung in chinesischem Schriftzeichen. Diese Eigenschaftendatei wird im UTF-8-Format erstellt, der Inhalt wird jedoch nicht mit native2ascii codiert.

struts2-localization-case1-1

Lassen Sie uns versuchen, das chinesische Schriftzeichen über einige UI-Tags anzuzeigen. Die Ansichtsseite wird so deklariert, dass sie im UTF-8-Format mit HTML-Metatag angezeigt wird.

...



...

    
    
    

    
Testing 1 :
Testing 2 :

... zh_CN ... Chinese ...

Ergebnis

struts2-localization-case1-2

Überraschenderweise können die folgenden drei UI-Tags die chinesische Nachricht korrekt anzeigen:



Testing 2 : 

Die "s:submit" und "getText()" können es jedoch nicht anzeigen?

Gemäß der i18n-Dokumentation von Java muss zur korrekten Anzeige eines Sonderzeichens mit dem Ressourcenpaket das native2ascii-Tool verwendet werden.

Nach dem Durchsuchen des Quellcodes vonTextProvider.getText()wird die Nachricht mithilfe des Ressourcenpakets.getString () aus dem Ressourcenpaket abgerufen, sodass die falschen Nachrichten angemessen sind. Aber warum können „s:text“, „s:textfield“ und „s:password“ die chinesische Nachricht korrekt anzeigen und warum schlägt „s:submit“ fehl? Zu viele Fragen in meinem Kopf, lassen Sie uns zu Fall 2 gehen ...

Fall 2: Eigenschaftendatei mit Sonderzeichen (kodiert)

Dieses Mal wird die Eigenschaftendatei mit dem native2ascii-Tool verarbeitet und die chinesischen Zeichen werden ordnungsgemäß codiert.

struts2-localization-case2-1

Ergebnis

struts2-localization-case2-2

Das Ergebnis ist völlig umgekehrt. Jetzt können "s:submit" und "getText()" es korrekt anzeigen, aber die anderen UI-Komponenten sind fehlgeschlagen. Dies funktioniert wie erwartet, da Struts 2getText() empfiehlt, um i18n oder eine Lokalisierungsnachricht anzuzeigen. Das Problem ist, warum "s:submit" anders ist?

Struts2..Was ist los?

Hier sind einige Fragen in meinem Kopf ...

  1. Warum ist s: submit so anders?

  2. Der i18n sollte sehr einfach sein, warum hat Struts 2 diese Art von Problem? Oder ich habe falsch verstanden, wie Struts 2 i18n funktioniert?

  3. Warum gibt es so viele Möglichkeiten, eine Nachricht aus dem Ressourcenpaket anzuzeigen? Warum nicht einfach in einer Methode gruppieren? Verwenden Sie in Struts 1 einfach die "bean: message", warum sieht es in Struts 2 so kompliziert aus?

  4. Unterstützt Struts 2 das XML-Ressourcenpaket? Ich mag es einfach nicht, das native2ascii-Tool zu verwenden, um die Daten in das UTF-8-Format zu kodieren. Dadurch wird die Eigenschaftendatei unlesbar. Apache Wicket hat bei diesem Problem sehr gute Arbeit geleistet, vielleicht sollte Struts 2 daraus lernen.

  5. Wie werden die chinesischen Schriftzeichen in Struts 2 korrekt angezeigt?

In vielen Artikeln und Tutorials wird darauf hingewiesen, dass die folgenden Methoden die Nachricht aus dem Ressourcenpaket anzeigen können:


Dies gilt jedoch nur für die englischen oder einige "englisch-ähnliche (Europa)" Zeichen, z. B. Frankreich, Deutsch. Bei Chinesisch oder Japanisch, den "großen Quadraten", werden beide Methoden völlig unterschiedliche Ausgaben zurückgeben. Wirklich keine Ahnung, wie man die Struts 2-Lokalisierung für Chinesisch und Japanisch macht.

updated…(16/6/2010)

Beim Durchsuchen der Lösung aus der Baidu-Suchmaschine wurde die indirekte Lösung in einem der chinesischen Artikel gefunden -Struts 2 internationalizing example

Lösung

Das Problem liegt im HTML-Meta-Tag,



In Struts 1 ist das obige Meta-Tag erforderlich, um die UTF-8-Daten korrekt anzuzeigen, dies gilt jedoch nicht für Struts 2.

In Struts 2 funktioniert das Meta-Tag nicht mehr. Wir sollten das<%@ page contentType=”text/html;charset=UTF-8″ %>-Tag in die erste Zeile der Ansichtsseite setzen. Zum Beispiel,

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



...

Ergebnis

struts2-localization-work

Alle chinesischen Nachrichten werden korrekt angezeigt.

Beantworten Sie meine vorherigen Fragen

  1. Warum wird s: submit so unterschiedlich ausgeführt?
    A: No comment at this

  2. Der i18n sollte sehr einfach sein, warum hat Struts 2 diese Art von Problem? Oder ich habe falsch verstanden, wie Struts 2 i18n funktionieren?
    A: Make sure to put *<%@ page contentType=”text/html;charset=UTF-8″ %> ”in der ersten Zeile der Ansichtsseite. *

  3. Warum gibt es so viele Möglichkeiten, eine Nachricht aus dem Ressourcenpaket anzuzeigen? Warum nicht einfach in einer Methode gruppieren? Verwenden Sie in Struts 1 einfach die "bean: message", warum es in Struts 2 so kompliziert aussieht?
    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. Unterstützt Struts 2 das XML-Ressourcenpaket? Ich mag es einfach nicht, das native2ascii-Tool zu verwenden, um die Daten in das UTF-8-Format zu kodieren. Dadurch wird die Eigenschaftendatei unlesbar. Apache Wicket hat bei diesem Problem sehr gute Arbeit geleistet, möglicherweise sollte Struts 2 daraus lernen.
    A: Hope Struts 2 can support the XML resource bundle in the next release.

  5. Wie werden die chinesischen Schriftzeichen in Struts 2 korrekt angezeigt?
    A: See the solution above.

Laden Sie es herunter -Struts2-i18n-issue-Example