问题
Apostrophe doesn't get translated properly when placed in a resource bundle.
key = {0}'s brush is {1} centimeters tall
(e.g. Sam's brush is 4 centimeters tall)
The apostrophe gets missed if I format the above key from a java.util.ResourceBundle
What could be the problem here?
回答1:
You should escape the single quote as
key = {0}''s brush is {1} centimeters tall
回答2:
I strongly belive that the problem is not the ressource bundle but the MessageFormater you use to print the message:
From MessageFormater java doc:
Within a String, '' (two single quotes ) represents a single quote. A QuotedString can contain arbitrary characters except single quotes; the surrounding single quotes are removed. An UnquotedString can contain arbitrary characters except single quotes and left curly brackets. Thus, a string that should result in the formatted message '{0}' can be written as '''{'0}'' or '''{0}'''.
So you need to write:
{0}''s brush is {1} centimeters tall
回答3:
Look at the javadoc here
Within a String, "''" represents a single quote. A QuotedString can contain arbitrary characters except single quotes; the surrounding single quotes are removed. An UnquotedString can contain arbitrary characters except single quotes and left curly brackets. Thus, a string that should result in the formatted message "'{0}'" can be written as "'''{'0}''" or "'''{0}'''".
回答4:
You need to double single quote i.e. {0}''s brush is {1} centimeters tall
回答5:
Adding to @Ralph's answer:
You will realize that this is a MessageFormat
thing when you have a text like
text1=It's too late
versus
text2={0}''s too late
text1
would probably not run through a MessageFormater (e.g. spring has different code paths if arguments are passed or not), whereas text2
would.
So if you used two single quotes in text1
, they may / will display as such. So you'll need to check if any arguments get formatted in or not and use one or two single quotes accordingly.
回答6:
If you are completely stuck, as I was (none of the above worked), you can replace the apostrophe sign with its Unicode: \u0027. Remember you are always allowed to use UTF symbol in your properties file.
回答7:
Consider using Properties Editor plugin (for Eclipse)
http://propedit.sourceforge.jp/index_en.html
回答8:
For everyone that has Android problems in the string.xml, use \'\' instead of single quote.
来源:https://stackoverflow.com/questions/4449639/apostrophe-doesnt-get-translated-properly-when-placed-in-a-resource-bundle