如何在 MessageFormat 中使用单引号
Posted
技术标签:
【中文标题】如何在 MessageFormat 中使用单引号【英文标题】:How to use single quotes with MessageFormat 【发布时间】:2016-10-21 14:49:30 【问题描述】:在我当前的项目中,我们使用字符串的属性文件。然后使用 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);
【问题讨论】:
这是一个错误:我的意思是MessageFormat
。
【参考方案1】:
没有其他方法,因为这是我们应该按照 javadoc 做的。
单引号本身必须在整个字符串中用双引号 '' 表示
作为解决方法,您可以使用replace("'", "''")
以编程方式执行此操作,或者对于此特定用例,您可以使用撇号字符而不是’
,它实际上比使用单引号更正确。
【讨论】:
【参考方案2】:对您来说可能为时已晚,但其他人可能会发现这很有用:使用 ICU (International Components for Unicode)(或者更确切地说是其 Java 端口 ICU4J)代替 Java 的 MessageFormat。它基本上是一组工具和数据,可支持您将应用程序国际化。在这些工具中,有他们自己的 MessageFormat 版本。它非常相似(甚至可能向后兼容)并且可以完全按照您的意愿处理单引号。它甚至可以处理双引号/转义单引号,因此您可以尝试将其作为 Java 的 MessageFormat 的替代品,而无需先对单引号进行转义。
【讨论】:
以上是关于如何在 MessageFormat 中使用单引号的主要内容,如果未能解决你的问题,请参考以下文章