Java 如何将单引号与MessageFormat一起使用
在我当前的项目中,我们对字符串使用属性文件。然后使用MessageFormat对这些字符串进行“格式化”。不幸的是,MessagFormat对单引号的处理在使用大量撇号的法语等语言中有点阻碍 例如,假设我们有这个条目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
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
。