我应该使用java。的文本。MessageFormat:对于本地化的信息,而无需占位?

StackOverflow https://stackoverflow.com/questions/495776

我们是本土化的用户界面文本的网上运行的应用程序Java5,并有一个窘境,我们怎么出息,这是限定性文件-这样使用的 java。工具.性能.

一些信息,包括占位,将充满使用 java。的文本。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:在这里我们可以的,所以大多数消息不需要逃脱的?

有明显的优点和缺点无论哪种方式。

请注意,API文件MessageFormat:承认问题,并提出了一个非方案:

该规则使用引号内 信息格式模式不幸的是 已经证明是有点混乱。特别是,它并不总是显而易见的 到本地化是否是单一的报价 需要增加一倍或没有。确保 通知本地化有关的规则, 告诉他们(例如,通过使用 意见在资源包源 文件),其串将处理 通过MessageFormat:.

有帮助吗?

解决方案

只要写你自己的实现的MessageFormat没有这恼人的功能。你可以看的代码 SLF4J记录器

它们有自己的消息格式的版本,它可以用作如下:

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

空占位符可以与默认排序一起使用和编号为一些定位的情况下不同的语言做句子的单词或部分置换。

其他提示

在结束时,我们决定侧步通过始终使用“卷曲”引述单引号问题:

warning.item = This item\u2019s {0} is not valid.

使用,而不是'的'字符引用。我们用它所有的时间没有任何问题。

使用的MessageFormat只有当你需要它,否则他们只能臃肿起来的代码,并没有额外的价值。

在我看来,一致性是这样的事情很重要。属性文件和MessageFormat中已经有很多局限性。如果你觉得这些麻烦,你可以“编译”的特性文件生成正确形成的。不过,我会说去用MessageFormat中随处可见。这样一来,当你维护的代码,你不必担心它的字符串格式化,哪些不是。它变得更简单处理,因为你可以用手关闭消息处理图书馆和在较高的水平并不担心细节。

另一备选...加载属性文件时,只是包裹的InputStream在双打每单引号一个FilterInpuStream。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top