リソースバンドルに配置すると、アポストロフィは適切に翻訳されません。
key = {0}'s brush is {1} centimeters tall
(e.g. Sam's brush is 4 centimeters tall)
Java.util.ResourceBundle
から上記のキーをフォーマットすると、アポストロフィが失われます。ここで何が問題になりますか?
一重引用符を次のようにエスケープする必要があります
key = {0}''s brush is {1} centimeters tall
問題はressourceバンドルではなく、メッセージの印刷に使用する MessageFormater であると強く信じています。
文字列内で、 ''(2つの一重引用符)は一重引用符を表します。 QuotedStringには、単一引用符を除く任意の文字を含めることができます。周囲の単一引用符は削除されます。 UnquotedStringには、単一引用符と左中括弧を除く任意の文字を含めることができます。したがって、フォーマットされたメッセージ「{0}」になるはずの文字列は、「 '' {'0}' '」または「' '{0}' ''」と記述できます。
だからあなたは書く必要があります:
{0}''s brush is {1} centimeters tall
javadoc here を見てください
文字列内で、「 ''」は一重引用符を表します。 QuotedStringには、単一引用符を除く任意の文字を含めることができます。周囲の単一引用符は削除されます。 UnquotedStringには、単一引用符と左中括弧を除く任意の文字を含めることができます。したがって、フォーマットされたメッセージ「 '{0}'」になるはずの文字列は、「 '' '{' 0} ''」または「 '' '{0}' ''」と書くことができます。
私がそうであったように(上記のどれも機能しなかった)完全に立ち往生している場合、アポストロフィ記号をそのユニコードで置き換えることができます:\ u0027。プロパティファイルでは常にUTFシンボルを使用できることを忘れないでください。
つまり、{0}のブラシの高さは{1}センチです。
@Ralphの答えに追加:あなたは、これがMessageFormat
であることを理解するでしょう。
_text1=It's too late
_
versus
_text2={0}''s too late
_
_text1
_はおそらくMessageFormaterを実行しません(たとえば、引数が渡されるかどうかによってspringのコードパスは異なります)が、_text2
_は実行されます。したがって、_text1
_で2つの一重引用符を使用した場合、そのように表示される場合があります。したがって、引数がフォーマットされているかどうかを確認し、それに応じて1つまたは2つの一重引用符を使用する必要があります。
プロパティエディタープラグインの使用を検討する(Eclipseの場合)
String.xmlにAndroid問題がある場合は、一重引用符ではなく\ '\'を使用してください。