リソースバンドルに配置すると、アポストロフィが正しく翻訳されません。
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
(e.g. Sam's brush is 4 centimeters tall)
上記のキーをjava.util.ResourceBundle
「ここで問題になる可能性があるもの」からフォーマットすると、アポストロフィが失われます。
次のように一重引用符をエスケープする必要があります
key = {0}''s brush is {1} centimeters tall
問題はリソース バンドルではなく、メッセージの出力に使用するMessageFormaterにあると強く信じています。
String 内では、'' ( 2 つの単一引用符) は単一引用符を表します。QuotedString には、一重引用符を除く任意の文字を含めることができます。周囲の一重引用符は削除されます。UnquotedString には、一重引用符と左中括弧を除く任意の文字を含めることができます。したがって、フォーマットされたメッセージ '{0}' になる文字列は、'''{'0}'' または '''{0}''' として記述できます。
したがって、次のように記述する必要があります。
{0}''s brush is {1} centimeters tall
@Ralphの答えに追加:次のMessageFormat
ようなテキストがあると、これが問題であることがわかります
text1=It's too late
対
text2={0}''s too late
text1
おそらくMessageFormaterを介して実行されません(たとえば、引数が渡されるかどうかでSpringは異なるコードパスを持ちます)が、text2
そうです。したがって、 で 2 つの一重引用符を使用するtext1
と、そのように表示される場合があります。したがって、引数がフォーマットされているかどうかを確認し、それに応じて 1 つまたは 2 つの一重引用符を使用する必要があります。
ここでjavadocを見てください
文字列内では、「''」は一重引用符を表します。QuotedStringには、一重引用符を除く任意の文字を含めることができます。周囲の一重引用符は削除されます。UnquotedStringには、一重引用符と左中括弧を除く任意の文字を含めることができます。したがって、フォーマットされたメッセージ「'{0}'」になるはずの文字列は、「'''{'0}''」または「'''{0}'''」と書くことができます。
一重引用符を二重にする必要があります。つまり、{0} のブラシの高さは {1} cm です
私のように完全に行き詰まっている場合 (上記のいずれも機能しませんでした)、アポストロフィ記号を Unicode: \u0027 に置き換えることができます。プロパティ ファイルでは常に UTF 記号を使用できることに注意してください。
プロパティエディタプラグイン(Eclipse用)の使用を検討してください
string.xml で Android の問題が発生している場合は、一重引用符の代わりに \'\' を使用してください。