如何在MessageFormat中使用单引号

时间:2016-06-20 11:07:46

标签: java localization properties-file

在我当前的项目中,我们使用属性文件作为字符串。那些字符串然后被#"格式化#34;使用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);

2 个答案:

答案 0 :(得分:1)

没有别的方法,因为根据javadoc应该如何做到这一点。

  

单引号本身必须在整个String

中用双引号引用''

作为解决方法,您可以做的是使用replace("'", "''")以编程方式执行此操作,或者对于此特定用例,您可以使用撇号字符而不是它实际上比使用单引号。

答案 1 :(得分:0)

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