user339108
user339108

Reputation: 13101

Apostrophe doesn't get translated properly when placed in a resource bundle

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

Answers (8)

Aravind Yarram
Aravind Yarram

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

Nestor Milyaev
Nestor Milyaev

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

sorrymissjackson
sorrymissjackson

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

Uriel Frankel
Uriel Frankel

Reputation: 14622

For everyone that has Android problems in the string.xml, use \'\' instead of single quote.

Upvotes: 1

Cjxcz Odjcayrwl
Cjxcz Odjcayrwl

Reputation: 22847

Consider using Properties Editor plugin (for Eclipse)

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

Upvotes: 2

Samuel Parsonage
Samuel Parsonage

Reputation: 3127

You need to double single quote i.e. {0}''s brush is {1} centimeters tall

Upvotes: 5

Ralph
Ralph

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

Raghuram
Raghuram

Reputation: 52645

You should escape the single quote as

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

Upvotes: 148

Related Questions