Struts 2中国語ローカリゼーションの問題
漢字を表示するためのStruts 2 i18nローカリゼーションの問題
ケース1:特殊文字を含むプロパティファイル
プロパティファイルには、ユーザー名、パスワードのメッセージが格納され、漢字で送信されます。このプロパティファイルはUTF-8形式で作成されますが、コンテンツはnative2asciiでエンコードされません。
いくつかの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> ...
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ツールで処理され、
中国語文字は正しくエンコードされます。
結果
結果は完全に逆になり、今度は ”
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> ...
-
結果**
中国語のメッセージはすべて正しく表示されます。
以前の質問に答える
-
なぜ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
リファレンス
-
//java/java-convert-chinese-character-to-unicode-with-native2ascii/
-
http://www.coderanch.com/t/452139/Struts/applicationresources-properties-utf-characters#2013557
-
http://hxzon00.blog.163.com/blog/static/10489241620088121449163/