Struts 2中国語ローカリゼーションの問題

Struts 2中国語ローカリゼーションの問題

中国語の文字を表示するためのStruts 2国際化ローカライズの問題…

ケース1:特殊文字を含むプロパティファイル

プロパティファイルは、ユーザー名、パスワードのメッセージを保存し、漢字で送信します。 このプロパティファイルはUTF-8形式で作成されますが、コンテンツはnative2asciiでエンコードされません。

struts2-localization-case1-1

いくつかのUIタグを使用して中国語の文字を表示してみましょう。 ビューページは、HTMLメタタグを使用してUTF-8形式で表示するように宣言されています。

...



...

    
    
    

    
Testing 1 :
Testing 2 :

... zh_CN ... Chinese ...

結果

struts2-localization-case1-2

驚くべきことに、次の3つのUIタグは中国語のメッセージを正しく表示できますが、



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()」は正しく表示できるようになりましたが、他のUIコンポーネントは失敗しました。 Struts 2はi18nまたはローカリゼーションメッセージを表示するためにgetText()を推奨しているため、これは期待どおりに機能します。 問題は、なぜ「s:submit」が違うのかということです。

Struts2 ..何が問題なの?

ここに私の頭の中にいくつかの質問があります…

  1. s:submitのパフォーマンスがこれほど異なるのはなぜですか?

  2. i18nは非常に単純なはずです。Struts2にこの種の問題があるのはなぜですか? または、Struts 2 i18nの仕組みを誤解していませんか?

  3. リソースバンドルからメッセージを表示する方法がたくさんあるのはなぜですか? 1つの方法でグループ化するだけではどうですか? Struts 1で「bean:message」を使用するだけで、Struts 2で非常に複雑に見えるのはなぜですか?

  4. Struts 2はXMLリソースバンドルをサポートしていますか? native2asciiツールを使用してデータをUTF-8形式にエンコードするのは好きではありません。プロパティファイルを読み取ることができません。 Apache Wicketはこの問題で非常に良い仕事をしました。Struts2はそれから学ぶべきかもしれません。

  5. それでは、Struts 2で漢字を正しく表示する方法だけですか?

多くの記事やチュートリアルでは、次の方法でリソースバンドルからのメッセージを表示できると言われています。


ただし、これは英語または一部の「英語のような(ヨーロッパ)」文字(フランス、ドイツ語など)にのみ適用されます。 しかし、中国語または日本語の「大きな正方形」文字の場合、どちらの方法でもまったく異なる出力が返されます。 中国語と日本語のStruts 2のローカライズ方法はまったくわかりません。

updated…(16/6/2010)

Baidu検索エンジンからソリューションを掘り起こし、中国の記事の1つである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は非常に単純なはずです。Struts2にこの種の問題があるのはなぜですか? または、Struts 2 i18nがどのように機能するかを誤解しましたか?ビューページの最初の行にある
    A: Make sure to put *<%@ page contentType=”text/html;charset=UTF-8″ %>」。*

  3. リソースバンドルからメッセージを表示する方法がたくさんあるのはなぜですか? 1つの方法でグループ化するだけではどうですか? 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