如何在 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 中使用单引号的主要内容,如果未能解决你的问题,请参考以下文章

Python:如何从列表项中删除单引号

如何在使用单引号的回声中使用单引号

在VB中如果双引号里含有双引号怎么整

如何在单引号 php 中使用单引号?

带有单引号和双引号的 bash 别名命令

如何在单引号字符串中使用变量?