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

标签 java internationalization

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

例如

You have earned 15 badges out of 39

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

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

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

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

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

预先感谢您的帮助。

最佳答案

您应该看看 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 还支持更复杂的选项,例如格式化日期、时间或数字。

关于java - Java 中多种语言的文本占位符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20409203/

相关文章:

ruby-on-rails - number_with_ precision 未返回 :fr locale in ruby on rails 的正确结果

Gwt i18n > 生成属性文件

ios - 忽略 Xcode 的 "Export for localization"中的一些文本

java - 将 arrayCollection 从 flex 传递到 java

java - Joiner 没有正确订购?

java - spring集成jms channel 设置并发消费者导致数据损坏

java - 为 Hadoop 作业指定 UTF-8 编码

java - '选项 SQL_SELECT_LIMIT=DEFAULT'

delphi - 将 UnicodeString 转换为 AnsiString

java - Struts 2(版本 2.3.28)只接受注册语言环境