开发者

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

开发者 https://www.devze.com 2023-01-30 22:27 出处:网络
Apostrophe doesn\'t get translated properly when placed in a resource bundle. key = {0}\'s brush is 开发者_如何学C{1} centimeters tall

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

key = {0}'s brush is 开发者_如何学C{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?


You should escape the single quote as

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


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


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.


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}'''".


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


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.


Consider using Properties Editor plugin (for Eclipse)

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


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

0

精彩评论

暂无评论...
验证码 换一张
取 消