Java中多种语言的文本占位符

时间:2013-12-05 19:49:32

标签: java internationalization

我遇到了处理以多种语言显示文字的问题。我通过使用资源包相当容易地实现了语言,但是使问题更复杂的原因是需要在运行时将某些计算值注入到文本中。

例如

You have earned 15 badges out of 39

其中15和39是在运行时计算的。

最初,我通过在文本中添加占位符标记来解决问题,如下所示

badgeMessage_en=You have earned ${earned_badge} badges out of ${total_badge}

然后使用正则表达式在运行时替换它们。但现在问题是我们需要添加对charset中没有${的其他语言的支持。我被困了

我该怎么办?是否有占位符字符在所有字符集中都是通用的?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你应该看看Java的MessageFormat类:

String pattern = resourceBundle.getString(key); 
String message = MessageFormat.format(pattern, args);

MessageFormat会自动替换{}

之间的占位符

例如:

properties:
my.message=You have earned {0} badges out of {0}

Java:
String pattern = bundle.getString("my.message");
String message = MessageFormat.format(pattern, 15, 39); // You have earned 15 badges out of 39

MessageFormat还支持更复杂的选项,例如格式化日期,时间或数字。