97

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

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

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

上記のキーをjava.util.ResourceBundle「ここで問題になる可能性があるもの」からフォーマットすると、アポストロフィが失われます。

4

8 に答える 8

136

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

key = {0}''s brush is {1} centimeters tall
于 2010-12-15T12:02:31.233 に答える
37

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

MessageFormater Java doc から:

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

したがって、次のように記述する必要があります。

{0}''s brush is {1} centimeters tall
于 2010-12-15T12:02:43.460 に答える
7

@Ralphの答えに追加:次のMessageFormatようなテキストがあると、これが問題であることがわかります

text1=It's too late

text2={0}''s too late

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

于 2016-02-02T07:32:07.437 に答える
6

ここでjavadocを見てください

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

于 2010-12-15T12:04:40.370 に答える
5

一重引用符を二重にする必要があります。つまり、{0} のブラシの高さは {1} cm です

于 2010-12-15T12:03:10.520 に答える
5

私のように完全に行き詰まっている場合 (上記のいずれも機能しませんでした)、アポストロフィ記号を Unicode: \u0027 に置き換えることができます。プロパティ ファイルでは常に UTF 記号を使用できることに注意してください。

于 2016-06-24T16:00:17.547 に答える
2

プロパティエディタプラグイン(Eclipse用)の使用を検討してください

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

于 2010-12-15T12:25:04.707 に答える
1

string.xml で Android の問題が発生している場合は、一重引用符の代わりに \'\' を使用してください。

于 2014-07-30T17:02:43.500 に答える