漢字を表示するためのStruts 2 i18nローカリゼーションの問題

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

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


struts2-localization-case1-1、title = "struts2-localization-case1-1"

いくつかのUIタグで漢字を表示しよう。ビューページは、HTMLメタタグを含むUTF-8形式で表示されるように宣言されています。

...

<head>
<meta http-equiv = "Content-Type" content = "text/html; charset = UTF-8"/>
</head>
...
<s:form action = "validateUser">
    <s:textfield key = "global.username" name = "username"/>
    <s:password key = "global.password" name = "password"/>
    <s:submit key = "global.submit" name = "submit"/>
    
    <div>テスト1:<s:property value = "getText( 'global.username')"/> </div>
    <div>テスト2:<s:text name = "global.password"/> </div> </br/>
</s:form>
...

<s:url id = "localezhCN" namespace = "/" action = "locale">
   <s:param name = "request__locale"> zh__CN </s:param>
</s:url>
...
<s:a href = "%{localezhCN}">中国語</s:a>
...


struts2-localization-case1-2

Surprisingly, the following three UI tags are able to display the
Chinese message correctly,

<s:textfield key = "global.username" name = "username"/>
<s:password key = "global.password" name = "password"/>
テスト2:<s:text name = "global.password"/>

ただし、 ”

s:submit

“と ”

getText()

“は表示できません。

Javaのi18nドキュメントによれば、特殊文字を表示するには
リソースバンドルを正しく使用するには、
native2asciiツール。

  • TextProvider.getText()

    ソースコードを掘り下げた後は、
    resource bundle.getString():リソースからメッセージを取得します。
    バンドルなので、間違ったメッセージは妥当です。しかし、なぜ「

    s:テキスト

    」、


    s:textfield

    “と ”

    s:password

    “は中国語を表示できます
    メッセージが正しく表示され、なぜ「

    s:submit ** 」が失敗するのでしょうか?あまりにも多くの質問
    私の考えでは、ケース2に行きましょう…​

===事例2:特殊文字を含むプロパティファイル(エンコード)

今回は、プロパティファイルがnative2asciiツールで処理され、
中国語文字は正しくエンコードされます。


struts2-localization-case2-1、title = "struts2-localization-case2-1"


結果


struts2-localization-case2-2、title = "struts2-localization-case2-2"

結果は完全に逆になり、今度は ”

s:submit

“と ”

getText()


正しく表示することはできますが、他のUIコンポーネントは
失敗しました。これはStruts 2が

getText()

を推奨するので、期待どおりの動作です
i18nまたはローカライズメッセージを表示します。問題は、なぜ「

s:submit


異なります?

Struts2 …​何が間違っていますか?

私の心にはいくつか質問があります…​

。なぜs:提出はそれほど違うのですか?
。 i18nは非常に簡単で、なぜStruts 2がこの種の
問題?または、Struts 2 i18nがどのように機能するのか誤解しましたか?
。なぜリソースバンドルからメッセージを表示する方法がたくさんあるのですか?
なぜそれを1つの方法でグループ化しないのですか? Struts 1では、
“bean:message”、なぜStruts 2ではとても複雑に見えますか?
。 Struts 2はXMLリソースバンドルをサポートしていますか?私はちょうど使用したくない
データをUTF-8形式にエンコードするためのnative2asciiツールを使用すると、
プロパティファイルを読むことができません。 Apache Wicketはこれで非常に良い仕事をしました
Struts 2がそれから学ばなければならないかもしれません。
。では、Struts 2で中国語の文字を正しく表示する方法は?

多くの記事やチュートリアルでは、以下の方法で
リソースバンドルからメッセージを表示するには:

<s:text name = "global.username"/>
<s:プロパティ値= "getText( 'global.username')"/>

ただし、これは英語または一部の「英語のような
(ヨーロッパ) “文字、例えばフランス語、ドイツ語。しかし、中国語や日本語の場合、
‘大きな正方形’の文字は、両方のメソッドが完全に別のものを返します
出力。 Struts 2の中国語のローカリゼーション
と日本語。

===更新されました…​(2010/06/6)

Baidu検索エンジンからのソリューションを掘り起こし、間接的な発見
中国の記事の1つにある解決策 –

Struts
2国際化の例+

===解決策

問題はHTMLのメタタグにありますが、

<head>
<meta http-equiv = "Content-Type" content = "text/html; charset = UTF-8"/>
</head>

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"%>
<html>
<head>
</head>
...

  • 結果**


struts2-localization-work、title = "struts2-localization-work"

中国語のメッセージはすべて正しく表示されます。

以前の質問に答える

  1. なぜs:提出はそれほど違うのですか?

    • A:コメントはありません**
      。 i18nは非常に簡単で、なぜStruts 2がこの種の

問題?または、Struts 2 i18nがどのように機能するのか誤解しましたか?

A:

<%@ page contentType = “text/html; charset = UTF-8″を必ず入れてください。
%> ** “を表示ページの最初の行に入力します。
。なぜリソースバンドルからメッセージを表示する方法がたくさんあるのですか?

なぜそれを1つの方法でグループ化しないのですか? Struts 1では、
“bean:message”、なぜStruts 2ではとても複雑に見えますか?


A:s:テキスト、キー、getText()、名前…​、すべてが中国語をレンダリングできます
またはUTF-8でエンコードされたデータを正しく入力するには、正しい
ビューページの “charset”私はまだ1つの方法だけを制御することを好む
メッセージバンドル(Like Struts 1)、あまりにも多くの同等のオプションは
開発者に混乱を招く


。 Struts 2はXMLリソースバンドルをサポートしていますか?私はちょうど使用したくない

データをUTF-8形式にエンコードするためのnative2asciiツールを使用すると、
プロパティファイルを読むことができません。 Apache Wicketはこれで非常に良い仕事をしました
Struts 2がそれから学ばなければならないかもしれません。

A:Struts 2がXMLリソースバンドルを次の
リリース。

。だから、ちょうどStrutsで漢字を正しく表示する方法

2?

A:上記の解決策を参照してください。

それをダウンロードする –

Struts2-i18n-issue-Example