Reputation: 13101
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?
Upvotes: 105
Views: 43928
Reputation: 80186
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}'''".
Upvotes: 7
Reputation: 6595
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.
Upvotes: 7
Reputation: 2705
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.
Upvotes: 9
Reputation: 14622
For everyone that has Android problems in the string.xml, use \'\' instead of single quote.
Upvotes: 1
Reputation: 22847
Consider using Properties Editor plugin (for Eclipse)
http://propedit.sourceforge.jp/index_en.html
Upvotes: 2
Reputation: 3127
You need to double single quote i.e. {0}''s brush is {1} centimeters tall
Upvotes: 5
Reputation: 120811
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
Upvotes: 37
Reputation: 52645
You should escape the single quote as
key = {0}''s brush is {1} centimeters tall
Upvotes: 148