如何在 MessageFormat 中使用单引号

How to use single quotes with MessageFormat

在我当前的项目中,我们使用字符串的属性文件。这些字符串然后 "formatted" 使用 MessageFormat。不幸的是,MessagFormat 对单引号的处理在使用大量撇号的语言(例如法语)中成为一个障碍。

例如,假设我们有这个条目

login.userUnknown=User {0} does not exist

将其翻译成法语后,我们得到:

login.userUnknown=L'utilisateur {0} n'existe pas

这个,MessageFormat不喜欢...

而我,不喜欢以下内容,即必须使用双引号:

login.userUnknown=L''utilisateur {0} n''existe pas

我不喜欢它的原因是它到处都会导致拼写检查错误。

问题:我正在寻找以下指令的替代方法,一种不需要双引号但仍使用位置占位符({0}、{1}…)的替代方法。还有什么我可以用的吗?

MessageFormat.format(Messages.getString("login.userUnkown"), username);

不,没有其他方法,因为根据 javadoc 我们应该这样做。

A single quote itself must be represented by doubled single quotes '' throughout a String

作为变通方法,您可以使用 replace("'", "''") 以编程方式执行此操作,或者对于此特定用例,您可以使用撇号字符代替 实际上它比使用单引号。

对您来说可能为时已晚,但其他人可能会发现这很有用:使用 ICU (International Components for Unicode)(或者它的 Java 端口 ICU4J)代替 Java 的 MessageFormat。它基本上是一组工具和数据,可支持您将应用程序国际化。在这些工具中,有他们自己的 MessageFormat 版本。它非常相似(甚至可能向后兼容)并且可以完全按照您的意愿处理单引号。它甚至可以处理 doubled/escaped 单引号,因此您可以尝试将其作为 drop-in 替代 Java 的 MessageFormat,而无需先取消转义单引号。