在我当前的项目中,我们使用属性文件作为字符串。那些字符串然后被#"格式化#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);
答案 0 :(得分:1)
没有别的方法,因为根据javadoc应该如何做到这一点。
单引号本身必须在整个String
中用双引号引用''
作为解决方法,您可以做的是使用replace("'", "''")
以编程方式执行此操作,或者对于此特定用例,您可以使用撇号字符而不是’
它实际上比使用单引号。
答案 1 :(得分:0)
对于您来说可能为时已晚,但是其他人可能会发现它有用:代替Java的MessageFormat,使用ICU (International Components for Unicode)(或更确切地说,它的Java端口ICU4J)。它基本上是一组工具和数据,可支持您对应用程序进行国际化。在这些工具中,有他们自己的MessageFormat版本。它非常相似(甚至可以向后兼容),并且可以完全按照您的需要处理单引号。它甚至可以处理双引号/转义的单引号,因此您可以尝试将其用作Java的MessageFormat的替代产品,而不必先取消转义单引号。