Java 如何将单引号与MessageFormat一起使用

Java 如何将单引号与MessageFormat一起使用,java,localization,properties-file,Java,Localization,Properties File,在我当前的项目中,我们对字符串使用属性文件。然后使用MessageFormat对这些字符串进行“格式化”。不幸的是,MessagFormat对单引号的处理在使用大量撇号的法语等语言中有点阻碍 例如,假设我们有这个条目 login.userUnknown=用户{0}不存在 当这被翻译成法语时,我们得到: login.userUnknown=L'usilisateur{0}n'existe pas 这个,MessageFormat不喜欢 我不喜欢以下情况,即必须使用双引号: login.user

在我当前的项目中,我们对字符串使用属性文件。然后使用MessageFormat对这些字符串进行“格式化”。不幸的是,MessagFormat对单引号的处理在使用大量撇号的法语等语言中有点阻碍

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

login.userUnknown=用户{0}不存在
当这被翻译成法语时,我们得到:

login.userUnknown=L'usilisateur{0}n'existe pas
这个,MessageFormat不喜欢

我不喜欢以下情况,即必须使用双引号:

login.userUnknown=L''usilisateur{0}n''existe pas
我不喜欢它的原因是它到处都会导致拼写检查错误

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

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

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

在整个字符串中,单引号本身必须由双引号“”表示


作为解决方法,您可以使用
replace(“'”,“'”)
以编程方式进行操作,或者对于这个特定的用例,您可以使用撇号字符,即
,它实际上比使用单个引号更正确

对您来说可能太晚了,但其他人可能会发现这很有用:使用(或者更确切地说是它的Java端口ICU4J)而不是Java的MessageFormat。它基本上是一组工具和数据,用于支持您国际化应用程序。在这些工具中,有他们自己版本的MessageFormat。它非常相似(甚至可能向后兼容),可以完全按照您的需要处理单引号。它甚至可以处理双引号/转义单引号,因此您可以尝试将其作为Java MessageFormat的替代品,而不必首先取消单引号的转义。

这是一个错误:我实际上是指
MessageFormat