我们正在本地化运行在 Java 5 上的 Web 应用程序的用户界面文本,并且对于如何输出属性文件中定义的消息(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 将处理哪些字符串。