我们正在为运行在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实现即可,而无需使用此烦人的功能。您可以看一下SLF4J Logger的代码。

它们具有自己的消息格式化程序版本,可以按以下方式使用:

logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);

空的占位符可以按默认顺序使用,并在某些本地化情况下进行编号,在这些情况下,不同的语言会对单词或句子的一部分进行置换。

关于java - 是否应将java.text.MessageFormat用于没有占位符的本地化消息?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/495776/

10-09 05:26