如何在 MessageFormat 中使用单引号

问题描述 投票:0回答:3

在我当前的项目中,我们使用字符串的属性文件。然后使用 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);
java localization properties-file
3个回答
14
投票

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

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

作为解决方法,您可以使用

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


1
投票

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


0
投票

(U+2019 右单引号)是在英语和法语等语言中使用的正确“撇号”,而不是
'
不是这种格式的元字符,这意味着不需要转义任何内容。

© www.soinside.com 2019 - 2024. All rights reserved.