有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在MessageFormat中使用单引号

在我当前的项目中,我们对字符串使用属性文件。然后使用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) 个答案

  1. # 1 楼答案

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

    A single quote itself must be represented by doubled single quotes '' throughout a String

    作为解决方法,您可以使用replace("'", "''")以编程方式进行操作,或者对于这个特定的用例,您可以使用撇号字符,即。实际上,它甚至比使用单个引号更正确

  2. # 2 楼答案

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