前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 国际化标准程序实现

Java 国际化标准程序实现

作者头像
Mirror王宇阳
发布2020-11-12 11:15:01
6320
发布2020-11-12 11:15:01
举报
文章被收录于专栏:Mirror的技术成长

国际化程序实现

所谓的国家化应用指的就是根据当前的语言环境读取指定的语言资源文件。

如果要想实现国际化的操作,那么首先要解决的问题就是如何读取资源文件的问题;所谓的资源文件 就是指文件后缀名称为:“*.properties”,里面保存的内容按照“key = value”的形式保存。

  • 定义一个 Message.properties
代码语言:javascript
复制
info = 中华人民共和国

但是在properties文件中保存也并不是这样,而是会将中文转成UNICODE编码

代码语言:javascript
复制
info = \u4E2D\u534E\u4EBA\u6C11\u5171\u548C\u56FD

这里的 info 是这个信息的 key ;以后可以根据这个 key 取得对象的 value

资源读取

  • java.util.ResourceBundle

在对properties文件进行资源读取的时候就需要使用 ResourceBundle 类

  • ResourceBundle是一个抽象类,类中有一个方法用于取得本类对象:
    • 根据当前语言环境取出:
代码语言:javascript
复制
 public static final ResourceBundle getBundle(String baseName);
代码语言:javascript
复制
 public static final ResourceBundle getBundle(String baseName , Locale locale);

读取内容

  • 简单读取:
代码语言:javascript
复制
public final String getString(String key);
  • 格式化文本:(java.text.MessageFormat)
代码语言:javascript
复制
public static String format(String pattern , Object … argum
  • 实例分析:(简单读取)
代码语言:javascript
复制
package helloworld;

import java.util.ResourceBundle;

public class TestDemo {
	public static void main(String [] args) {
		ResourceBundle rb = ResourceBundle.getBundle("Message");
		// 访问资源文件properties时,只需要提供文件名即可不要后缀格式名
		System.out.println(rb.getString("info"));
	}
}
  • 实例分析:(格式化文本)
代码语言:javascript
复制
修改 properties 文件内容
info=\u4E2D\u534E\u4EBA\u6C11\u5171\u548C\u56FD
msg =\u59D3\u540D{0}\u5F53\u524D\u65F6\u95F4{1}

现在的 properties 文件中出现了{*}占位符,因为format()方法传可变长参数。

代码语言:javascript
复制
package helloworld;

import java.text.MessageFormat;
import java.util.Date;
import java.util.ResourceBundle;

public class TestDemo {
	public static void main(String [] args) {
		ResourceBundle rb = ResourceBundle.getBundle("Message");
		// 访问资源文件properties时,只需要提供文件名即可不要后缀格式名
		String str = rb.getString("msg");
		System.out.println( MessageFormat.format(str,"王宇阳",new Date()));
	}
}

如果需要根据国家语言不同输出不同的资源内容,则需要 Locale

Locale类保存的是一个国家的区域和语言编码,例如:中国 zh_CN

在定义资源文件的时候加上指定的语言编码

  • 范例:定义中文的资源文件 Messages_zh_CN.properties msg = 欢迎 {0} 光临
  • 范例:定义英文的资源文件 Messages_en_US.properties msg = Hello {0}
  • 设置的baseName(区域和语言编码)一定是Messages,所有的语言代码由 Locale类 设置
    • 构造方法:

    public Locale (String language , String country);

    • 取得当前语言环境

    public static Locale getDefault();

  • 实例:读取中文的资源文件
代码语言:javascript
复制
public class TestDemo {
	public static void main(String [] args) {
		Locale loc = new Locale("zh","CN"); //明确定义国家的语言
		ResourceBundle rb = ResourceBundle.getBundle("Messages",loc);
		// 访问资源文件properties时,只需要提供文件名即可不要后缀格式名
		String str = rb.getString("msg");
		System.out.println(MessageFormat.format(str, "王宇阳"));
	}
}
  • 实例:读取英文的资源文档
代码语言:javascript
复制
public class TestDemo {
	public static void main(String [] args) {
		Locale loc = new Locale("en","US"); //明确定义国家的语言
		ResourceBundle rb = ResourceBundle.getBundle("Messages",loc);
		// 访问资源文件properties时,只需要提供文件名即可不要后缀格式名
		String str = rb.getString("msg");
		System.out.println(MessageFormat.format(str, "yuyang_Wang"));
	}
}

在上两则实例中,我们通过对 Locale类对象 loc设置了指定的国家和区域,properties资源会根据 Locale 设置的baseName来进行调用指定的baseName的资源文档。

总结

  • 资源文件:文件名称的每个单词首字母大写,后缀为:*.properties
  • 通过ResourceBundle类可以读取在指定的CLASSPATH下的资源文件
  • Locale 类用于指定读取的资源文件的语言环境
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-07-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 国际化程序实现
    • 资源读取
      • 总结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档