2008-08-16 9 views
8

私は最近国際化され、テキストが重いStruts 1.1 Webアプリケーションを継承しました。 JSPファイルの多くは、次のようになります。プロパティファイルからHTMLマークアップをどのようにリファクタリングすることができますか?

<p> 
    <bean:message key="alert" /> 
</p> 

とプロパティファイルには、次のようになります。N他の言語の適切な翻訳(messages_fr.properties、など)で

messages.properties 
alert=Please update your <a href="/address.do">address</a> and <a href="/contact.do">contact information</a>. 

問題:

  1. DRY違反 - 私はリファクタリングアクションURLはエラーが発生しやすい作る私のStrutsアクションのURLの代わりに、1にN参照を、持っています。
  2. 混合懸念 - 私のアプリケーションのマークアップは、(CSSを使用して、など)ことが困難なウェブの専門家は、マークアップを微調整するために作る私のJSPファイル、よりになりました。
  3. 翻訳後のマークアップ - 私は新しく翻訳されたテキストを受け取るいつでも、私は <a>...</a>マークアップを囲むように何を決定する必要があります。英語は簡単ですが、馴染みのない言語はあまりありません。

    alert=Please update your {0} and {1}. 
    

    が、その後の言葉「アドレス」と「連絡先情報」を何とかローカライズする必要があるであろう、マークアップで包まれた、と私は同じように、メッセージファイルのプレースホルダを追加すると考えられてきた

私のメッセージタグに渡されました - そして、私はそれを行う簡単な方法を見ることができません。

これを改善するにはどうすればよいですか?おそらく、

答えて

2

テキストブロック内にリンクを作成しないようにしてください。より短いテキスト は、論理的に完全な と独立したリンクとして機能することができます。

一般的に問題が少なくなります。ローカリゼーションに合わせてUIデザインを妥協しなければならないことがあります。 UIに合わせてローカリゼーションプロセスを妥協する必要が生じることがあります。

開発者が翻訳後の文字列を手動で操作すると、潜在的に高価なバグが発生する可能性があります。切り取り/貼り付けや文字列の編集は、文字の破損、文字列の置き忘れなどの結果を招く可能性があります。翻訳上の不具合は、コストと時間がかかる修正のために外部の参加が必要です。それを考える

、このようなものはあまり醜いかもしれない:

<p>Please update your address and contact information. 
<br /> 
<a href="/address.do">update address</a> 
<br /> 
<a href="/contact.do">update contact information</a></p> 

...しかし、私は何のUIデザイナだありません。

0

:頭に浮かぶ

# 
alert=Please update your {0}address{1} and {2}contact information{3}. 
1

一つのアプローチは、あなたが、ファイル個別のプロパティにロケールごとに1つ、すなわち「アドレス」と「連絡先情報」を翻訳置換パラメータを格納することができることです。次に、現在のロケールの正しいResourceBundleからActionクラス(または多分ヘルパークラス)を検索し、メッセージタグに渡します。

0

メッセージのメッセージタグAPIは のみ5パラメトリック引数

ああすることができます!私はStruts APIの完全な無知を責めています。

manualを引用すると:

このタグライブラリ の機能のいくつかは、JavaServer Pages標準 タグライブラリ(JSTL)にも利用できます。 Strutsチームは、可能であれば、 標準タグをStruts固有のタグ タグよりも使用することを推奨しています。

おそらくhttp://java.sun.com/jsp/jstl/fmtのtaglibでこれを行うことができます。

<fmt:bundle basename="messages"> 
    <fmt:message key="alert"> 
     <fmt:param value='<a href="/">' /> 
     <fmt:param value="</a>" /> 
     <fmt:param value='<a href="/">' /> 
     <fmt:param value="</a>" /> 
    </fmt:message> 
</fmt:bundle> 

欠点は、これが有効なXMLではなく、変数に値をヤンクすることは、より間接、検索および冗長性を含むことです。これは良い解決策ではありません。

Strutsは分かりませんが、JavaServer Faces(同じアーキテクト)のようなものであれば、代替コントロールの設定がサポートされている可能性があります。私は、既存のコントロールをより柔軟なコントロールに置き換えるか、新しいコントロールを追加します。私は新しく翻訳 テキストを受け取る

いつでも、私は<a>...</a>マークアップで を囲むように決める必要があります。

これを行う必要はありません。私はこれを翻訳プロセスの障害として認識しています(私は、ローカリゼーションエンジニアとローカリゼーションツールの開発者です)。 {0}文字は、トランスレータに送信されるファイルに含める必要があります。ローカリゼーションガイドラインでは、文字列のコンテキストと変数の意味を説明する必要があります。

返品時にプログラムバンドルを検証することができます。文字列特有の正規表現がこのトリックを行うかもしれません。 「住所」と「連絡先情報」が翻訳中に注文を入れ替える可能性はありません。

最も簡単な解決策は、レンダリングするために、メッセージを再設計することです:

<a href="/address.do">Please update your address.</a> 
<a href="/contact.do">Please update your contact information.</a> 

私は、これはすべてのケースで解決策ではないかもしれないし、あなたのUIデザイナ吐き歯を有することができることを受け入れます。

関連する問題