我们正在为一个运行在Java 5上的网页应用程序本地化用户界面文本,并且遇到了一个难题,即如何输出在属性文件中定义的消息 - 这种类型的消息通常使用 java.util.Properties。
有些消息包括一个占位符,该占位符将使用java.text.MessageFormat来填充。例如:
search.summary = Your search for {0} found {1} items.
MessageFormat 很让人恼火,因为单引号是特殊字符,尽管在英文文本中很常见。你必须输入两个单引号来表示一个字面单引号:
warning.item = This item''s {0} is not valid.
然而,该应用程序约1000条消息中有四分之三不包括占位符。这意味着我们可以直接输出它们,避免使用 MessageFormat,并保留单引号:
help.url = The web page's URL
问题:我们是否应该对所有消息使用MessageFormat,以实现统一的语法,还是尽可能避免使用MessageFormat,以便大多数消息不需要转义?
显然,两种方法都有优缺点。
请注意,MessageFormat的API文档承认了这个问题,并建议不要解决:
在消息格式模式中使用引号的规则不幸地显示出相当令人困惑。特别是,本地化人员并不总是清楚单引号是否需要加倍。确保向本地化人员告知规则,并通过在资源束源文件中使用注释来告诉他们哪些字符串将由MessageFormat处理。