放置在资源包中时,撇号无法正确转换

时间:2010-12-15 11:59:36

标签: java resourcebundle

放置在资源包中时,撇号无法正确翻译。

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

(e.g. Sam's brush is 4 centimeters tall)

如果我从java.util.ResourceBundle格式化上述密钥,撇号就会丢失。这可能是什么问题?

8 个答案:

答案 0 :(得分:112)

您应该将单引号转义为

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

答案 1 :(得分:30)

我强烈认为问题不是资源包,而是用于打印邮件的MessageFormater

From MessageFormater java doc

  

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

所以你需要写:

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

答案 2 :(得分:6)

查看javadoc here

  

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

答案 3 :(得分:5)

你需要加倍单引号,即{0}的画笔高度为{1}厘米

答案 4 :(得分:5)

添加@Ralph的回答: 当你有像

这样的文字时,你会发现这是一个MessageFormat的东西
text1=It's too late

text2={0}''s too late

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

答案 5 :(得分:5)

如果你完全卡住,就像我一样(以上都没有),你可以用它的Unicode替换撇号:\ u0027。请记住,您始终可以在属性文件中使用UTF符号。

答案 6 :(得分:2)

考虑使用Properties Editor插件(对于Eclipse)

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

答案 7 :(得分:1)

对于在string.xml中遇到Android问题的所有人,请使用\' \'而不是单引号。