97

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

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

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

如果我从这里格式化上述密钥java.util.ResourceBundle可能是什么问题?

4

8 回答 8

136

您应该将单引号转义为

key = {0}''s brush is {1} centimeters tall
于 2010-12-15T12:02:31.233 回答
37

我坚信问题不在于资源包,而在于您用于打印消息的MessageFormater :

来自 MessageFormater java doc

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

所以你需要写:

{0}''s brush is {1} centimeters tall
于 2010-12-15T12:02:43.460 回答
7

添加到@Ralph的答案:MessageFormat当你有这样的文字时,你会意识到这是一件事

text1=It's too late

相对

text2={0}''s too late

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

于 2016-02-02T07:32:07.437 回答
6

这里的javadoc

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

于 2010-12-15T12:04:40.370 回答
5

您需要双引号,即 {0}' 的画笔是 {1} 厘米高

于 2010-12-15T12:03:10.520 回答
5

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

于 2016-06-24T16:00:17.547 回答
2

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

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

于 2010-12-15T12:25:04.707 回答
1

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

于 2014-07-30T17:02:43.500 回答