将Apostrophe放在资源束中时无法正确翻译


90

将Apostrophe放在资源包中后,翻译不正确。

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

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

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


4
+1我自己遇到了这个问题,并写了一篇关于它的小博客文章。也许它可以为遇到
micha

Answers:


120

您应该将单引号转义为

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

好答案。这已经解决了我的单引号问题。谢谢:) +1
AnishB。

35

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

从MessageFormater java doc

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

所以你需要写:

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

6

这里javadoc

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



5

添加到@Ralph的答案:MessageFormat当您有类似这样的文本时,您将意识到这是一件事情

text1=It's too late

text2={0}''s too late

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




By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.