在JSF i18n资源包中逃避Ampersand

时间:2011-06-07 11:14:51

标签: jsf internationalization

我喜欢

<s:link view="/member/index.xhtml" value="My&#160;News" propagation="none"/>
<s:link view="/member/index.xhtml" value="#{msg.myText}" propagation="none"/>

其中messages.properties中myText的值为

myText=My&#160;News

示例的第一行工作正常并将文本替换为"My&nbsp;News",但使用资源包中的值的第二行也会转义ambersand "My&amp;#160;News"

我还试图在属性文件中使用My\u0026\u0023160;NewsMy\u0026#160;NewsMy\u0026nbsp;News的ambersand和/或哈希的unicode转义序列,但没有成功。

(使用css no-wrap而不是之前使用的xml编码,但无论如何都会感兴趣)

1 个答案:

答案 0 :(得分:1)

编辑 - 回答澄清的问题

第一个显然是内联的,所以翻译知道这是安全的 第二个来自外部源(您使用表达式语言),因此不安全,需要转义。转义的结果将与您所写的一样,基本上它将向您显示HTML实体的确切值 这与安全性(例如XSS)有关,而不是必需的i18n。

之前的尝试

我不太清楚你要求的是什么,但我相信这是“如何展示它?”。

大多数标准JSF控件都包含escape属性,如果设置为false,则不会转义文本。不幸的是,你似乎正在使用像SeamT​​ools这样没有这个属性的东西。

嗯,在这种情况下,没有太多工作要做。除非您可以使用标准控件,否则您应该尝试将您的属性文件实际保存为Unicode(实际上是UTF-16 BigEndian)并简单地放置有效的Unicode非破坏空格字符。从理论上讲应该有效;最新版本的Java支持Unicode编码的属性文件(虽然我不记得它是Java SE 5还是Java SE 6)...