8.2.16 格式化带占位符的国际化资源信息
优质
小牛编辑
132浏览
2023-12-01
本实例通过设置不同的占位符格式来测试MessageFormat对象对这些带占位符的国际化资源信息的格式化效果。在本例中测试了对字符串、数字、百分数以及日期类型的格式化。
例子 : 格式化带占位符的国际化资源信息
1. 向资源文件中添加资源信息
在MyResource_zh.properties文件中添加如下的信息:
pattern = 你好,{0}, 现在的时间是{1, time, long}.
上面的模式字符串有两个占位符,其中“{0}”只是一个普通的占位符,而“{1, time, long}”则限定格式化对象必须是日期类型,而且系统会按着本地环境的long模式显示日期。
2. 编写FormatResource类
FormatResource类负责格式化不同的模式字符串,并输出格式化结果。该类的代码如下:
package chapter8;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Date;
public class FormatResource
{
public static void main(String[] args)
{
String pattern1 = "我们公司{0, number,percent}的员工是研究生.";
String pattern2 = "I am {0, number} years old. Today is {1, date, long}";
String pattern3 = "现在是{0, date, yyyy-MM-dd HH:mm:ss}";
String pattern4 = "{0, number,0.00},{0, number,0.0#}, {1, number,0.00},
{1, number,0.0#}";
String pattern5 = "{0, number,000.00}, {0, number,#00.00}, {1, number,#00.00},
{1, number,000.00}";
String pattern6 = "{0, number,#,#00.00}, {1, number,#,#00.00}";
// 根据pattern1创建MessageFormat对象
java.text.MessageFormat mf1 = new java.text.MessageFormat(pattern1);
// 格式化模式字符串,输出数字的百分数形式
System.out.println(mf1.format(new Object[]{ 0.3 }));
// 根据pattern2创建MessageFormat对象
java.text.MessageFormat mf2 = new java.text.MessageFormat("");
mf2.setLocale(Locale.US);
mf2.applyPattern(pattern2);
// 格式化模式字符串,输出数字和long模式的日期(本地环境是美国英语)
System.out.println(mf2.format(new Object[]
{ 20, new Date() }));
mf2.setLocale(Locale.CHINESE);
mf2.applyPattern(pattern2);
// 格式化模式字符串,输出数字和long模式的日期(本地环境是中文)
System.out.println(mf2.format(new Object[]
{ 20, new Date() }));
System.out.println(mf2.format(pattern3, new Date()));
System.out.println(mf2.format(pattern4, 5.4, 5.123));
System.out.println(mf2.format(pattern5, 12.1, 1234562));
System.out.println(mf2.format(pattern6, 123456,3, 1.2));
// 加载资源文件
ResourceBundle rb = ResourceBundle.getBundle("resources.MyResource",
Locale.CHINESE);
String pattern = rb.getString("pattern");
mf2.setLocale(Locale.US);
// 格式化模式字符串,输出long模式的日期(本地环境是中文)
System.out.println(mf2.format(pattern, "bill", new Date()));
}
}
3. 测试FormatResource程序
运行FormatResource程序后,将输出如下的信息:
我们公司30%的员工是研究生.
I am 20 years old. Today is October 17, 2008
I am 20 years old. Today is 2008年10月17日
现在是 2008-10-17 17:52:29
5.40,5.4, 5.12, 5.12
012.10, 12.10, 1234562.00, 1234562.00
123,456.00, 03.00
你好,bill, 现在的时间是下午05时52分29秒.
从上面的输出结果可以看出,如果将本地环境设为“美国英语”,则会输出美国英语习惯的long模式的日期,如果将本地环境设为“中文”,则会输出中文习惯的long模式的日期。
4. 程序总结
如果在模式字符串占位符中的模式字符串部分的前后包含空格,也将作为占位符中的模式字符串的一部分。如模式字符串“2008 + 20.23 = {0, number, 0.00}”中的占位符的模式字符串前面有4个空格。在格式化数字时,这4个空格仍然会保留。如格式化“2028.23”,则该模式字符串的最终输出结果如下:
2008 + 20.23 = 2028.23