放在资源包中时,撇号不会正确转换

放在资源包中时,撇号不会正确转换。

key = {0}'s brush is {1} centimeters tall (eg Sam's brush is 4 centimeters tall) 

如果我从java.util.ResourceBundle格式化上述密钥,则省略撇号这里有什么问题?

你应该避免单引号

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

我坚信,问题不是资源包,而是用来打印消息的MessageFormater :

从MessageFormater java文档 :

在一个string中,“( 两个单引号 )表示一个单引号。 QuotedString可以包含除单引号之外的任意字符; 周围的单引号被删除。 UnquotedString可以包含除单引号和左大括号之外的任意字符。 因此,应该导致格式化消息“{0}”的string可以写为'''{'0}''或'''{0}'''。

所以你需要写:

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

看看这里的javadoc

在一个string中,“”“代表单引号。 QuotedString可以包含除单引号之外的任意字符; 周围的单引号被删除。 UnquotedString可以包含除单引号和左大括号之外的任意字符。 因此,应该导致格式化消息“{0}”的string可以写成“'''''''''''或''''''''''。

你需要加倍单引号,例如{0}'的笔刷高度是{1}厘米

添加到@ Ralph的答案:你会意识到,这是一个MessageFormat东西,当你有一个文本

 text1=It's too late 

 text2={0}''s too late 

text1可能不会通过MessageFormater运行(例如,如果parameter passing或没有传递,spring将有不同的代码path),而text2会。 因此,如果您在text1使用了两个单引号,则它们可能会显示为这样。 所以你需要检查是否有格式化参数,并相应地使用一个或两个单引号。

如果你完全被困住了,像我一样(以上都没有工作),那么你可以使用Unicode代替撇号:\ u0027。 请记住,您始终可以在属性文件中使用UTF符号。

考虑使用属性编辑器插件(对于Eclipse)

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

对于string.xml中存在Android问题的每个人,请使用\'\'而不是单引号。