web-dev-qa-db-ja.com

リソースバンドルに配置すると、アポストロフィが適切に翻訳されません

リソースバンドルに配置すると、アポストロフィは適切に翻訳されません。

key = {0}'s brush is {1} centimeters tall

(e.g. Sam's brush is 4 centimeters tall)

Java.util.ResourceBundleから上記のキーをフォーマットすると、アポストロフィが失われます。ここで何が問題になりますか?

81
user339108

一重引用符を次のようにエスケープする必要があります

key = {0}''s brush is {1} centimeters tall
114
Raghuram

問題はressourceバンドルではなく、メッセージの印刷に使用する MessageFormater であると強く信じています。

MessageFormaterからJava doc

文字列内で、 ''(2つの一重引用符)は一重引用符を表します。 QuotedStringには、単一引用符を除く任意の文字を含めることができます。周囲の単一引用符は削除されます。 UnquotedStringには、単一引用符と左中括弧を除く任意の文字を含めることができます。したがって、フォーマットされたメッセージ「{0}」になるはずの文字列は、「 '' {'0}' '」または「' '{0}' ''」と記述できます。

だからあなたは書く必要があります:

{0}''s brush is {1} centimeters tall
31
Ralph

javadoc here を見てください

文字列内で、「 ''」は一重引用符を表します。 QuotedStringには、単一引用符を除く任意の文字を含めることができます。周囲の単一引用符は削除されます。 UnquotedStringには、単一引用符と左中括弧を除く任意の文字を含めることができます。したがって、フォーマットされたメッセージ「 '{0}'」になるはずの文字列は、「 '' '{' 0} ''」または「 '' '{0}' ''」と書くことができます。

6

私がそうであったように(上記のどれも機能しなかった)完全に立ち往生している場合、アポストロフィ記号をそのユニコードで置き換えることができます:\ u0027。プロパティファイルでは常にUTFシンボルを使用できることを忘れないでください。

5
Nestor Milyaev

つまり、{0}のブラシの高さは{1}センチです。

5

@Ralphの答えに追加:あなたは、これがMessageFormatであることを理解するでしょう。

_text1=It's too late
_

versus

_text2={0}''s too late
_

_text1_はおそらくMessageFormaterを実行しません(たとえば、引数が渡されるかどうかによってspringのコードパスは異なります)が、_text2_は実行されます。したがって、_text1_で2つの一重引用符を使用した場合、そのように表示される場合があります。したがって、引数がフォーマットされているかどうかを確認し、それに応じて1つまたは2つの一重引用符を使用する必要があります。

5

プロパティエディタープラグインの使用を検討する(Eclipseの場合)

http://propedit.sourceforge.jp/index_en.html

2
Danubian Sailor

String.xmlにAndroid問題がある場合は、一重引用符ではなく\ '\'を使用してください。

1
Uriel Frankel