2010-12-15 128 views
64

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

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

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

如果我格式化从java.util.ResourceBundle上述关键可能是什么问题就在这里撇号可能会错过?

+3

+1我自己遇到这个问题,并写了一篇关于它的小博客文章。也许它可以为运行此功能的用户提供更多信息:http://www.mscharhag.com/2013/10/single-quote-escaping-in-java-resource.html – micha 2013-10-04 17:30:15

回答

92

你应该逃避单引号

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

我强烈相信的,这个问题是不是的ressource束但MessageFormater您使用打印的邮件:

From MessageFormater java doc

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

所以你需要写:

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

你需要加倍的单引号,即{0}“的刷{1}厘米高

6

看那javadoc here

在一个字符串中,“''”代表一个 单引号。一个QuotedString可以包含 任意字符,除了 单引号;周围的单个 报价被删除。 UnquotedString 可以包含任意字符 ,除了单引号和左括号 括号。因此,如果字符串应该为 或“'''{0}'''”,则应将格式为 的“{0}”格式的消息写入为“''''''''''”。

1

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

3

添加到@拉尔夫的回答是: 你会意识到,这是一个MessageFormat的事情,当你有一个像

text1=It's too late 

text2={0}''s too late 

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

3

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