验证Java MessageFormat字符串

时间:2015-03-05 11:13:10

标签: java validation playframework messageformat

我正在制作正在翻译的Play 2应用。 Play在幕后使用Java的MessageFormat,所以我有相当数量的属性值,ala:

my.interface.key={0,choice,0#{0} families|1#1 family|1<{0,number,integer} families}

我刚收到以下表格的翻译:

my.interface.key={0,choix,0#{0} familles|1#1 famille|1<{0,nombre,entier} familles}

如果不是很明显,那么有些内容不应该被翻译,但错误会不时发生。这很公平,但我确信在我的应用程序在运行时因IllegalArgumentException: unknown format type at ...异常而崩溃之前必须有一种方法来验证这些字符串。最好使用Git提交挂钩,甚至是SBT构建任务。

如果我要自己解决这个问题,我可能会创建一个工具来读取这些属性文件并检查每个值,运行MessageFormat.format(value)不会爆炸。

理想情况下,我可以通过Perl(或Python)脚本完成此操作。遗憾的是,我在CPAN上找到的唯一非Java库 - Text::MessageFormat - 似乎不支持容易出错的格式,例如复数。

在我潜入之前,有人能建议基于现有工具的更明智的方法吗?

1 个答案:

答案 0 :(得分:0)

我们遇到了类似的问题。我们的解决方案是创建对消息格式的结构建模的类,然后使用XML定义消息包中的消息。

如果翻译者使用XML编辑器,那么就有希望他们不会“破坏”消息的结构。

有关详细信息,请参见this answer