java国际化实现_菜鸡的Java笔记 国际化程序实现原理

国际化程序实现原理 Lnternationalization

1. Locale 类的使用

2.国家化程序的实现,资源读取

所谓的国际化的程序指的是一谈代码,可以自动的根据当前操作系统的语言环境不同,显示不同的语言

假如说在某一个系统可能在全世界所有国家都可以使用到,那么在假设系统操作业务流程不变的情况

那么要想让不同的国家使用这个系统,最大的障碍就在于显示语言了

content (内容)

1.确定城市以及语言

在 java.util 包中提供有一个 Locale 的类,这个类的主要功能是用于定位当前的城市以及语言环境

如果要想确定语言环境必须知道城市编码已经语言的编码,zh_CN ,英文: en_US

在 Locale 类中国提供有一个城市以及语言编码,可以进行 Locale 的定义: public Locale(String language,String country)

范例:观察 Locale

packagecn.mysterious.study3;importjava.util.Locale;public classLnternationalization {public static voidmain(String[] args) {//TODO Auto-generated method stub

Locale loc = new Locale("zh","CN");

System.out.println(loc);

}

}

但是很多时候应该根据当前的操作系统语言环境选择才对,在 Locale 类腮红提供有一个uqde当前环境的方法

取得当前环境: public static Locale getDefault()

但是使用 Locale 会牵扯到系统的变更 问题。我不想去记编码,又不想使用系统默认,那么可以使用 Locale 类定义的一堆常量:

packagecn.mysterious.study3;importjava.util.Locale;public classLnternationalization {public static voidmain(String[] args) {

System.out.println(Locale.KOREA);

System.out.println(Locale.CHINA);

System.out.println(Locale.US);

}

}

即: Locale 就是定位语言环境的

2.读取资源文件

在java中使用*。properties 定义的文件都是资源文件(后缀是固定的,不允许修改),而且资源文件的名称应该跟类名称保持一样的命名风格

例如: Message.properties ,而在资源文件中保存的都是字符串的信息,这些信息必须按照"key = value"的形式保存

随后这个资源文件必须放在 CLASSPATH 下才可以被访问到,如果有包,那么则应该加上包名称后访问

范例:定义 cn.mldn.resource.Message.properties

welcome.info = 欢迎光临!

welcome.info = \u6B22\u8FCE\u5149\u4E34\uFF01

在资源文件中不允许直接使用中文,中文信息必须自动转码

那么随后如果要想取得这个资源文件则可以依靠 java.util.ResourceBundle 类完成

这个类是一个抽象类,而这个类中会提供有一个 static 方法取得本类对象:

public static final ResourceBundle getBundle(String baseName)

这个方法上需要有一个资源文件的基本名字, Message

而后就可以i根据 key 取得对应的 value 信息: public final String getString(String key)

范例:读取资源文件

packagecn.mysterious.study3;importjava.util.ResourceBundle;public classLnternationalization {public static voidmain(String[] args) {//设置资源文件的名称,但是没有后缀,资源文件保存在 CLASSPATH 之中

ResourceBundle rb = ResourceBundle.getBundle("cn.mldn.resource.Message");

System.out.println(rb.getString("welcome.info"));

}

}

3.实现国际化

国际化程序的关键就在于资源文件,在定义资源文件的时候需要针对于不同国家的城市与语言编码定义不同的资源文件

例如:中文的资源: Message_zh_CN.properties 英文的资源: Message_en_US.properties

范例:定义 cn.mldn.resource.Message_zh_CN.properties

welcome.info = 您好!欢迎光临!

范例:定义 cn.mldn.resource.Message_en_US.properties

welcome.info = Hello!Welcome!

要实现资源的定位需要依靠 Locale 类完成,而同时还需要与 ResourceBundle 类集合,使用如下方法取得 ResourceBundle 类的实例化对象:

public static final ResourceBundle getBundle(String baseName,Locale locale)

范例:实现国际化切换

packagecn.mysterious.study3;importjava.util.Locale;importjava.util.ResourceBundle;public classLnternationalization {public static voidmain(String[] args) {//设置资源文件的名称,但是没有后缀,资源文件保存在 CLASSPATH 之中

Locale loc = new Locale("zh","CN");

ResourceBundle rb= ResourceBundle.getBundle("cn.mldn.resource.Message",loc);

System.out.println(rb.getString("welcome.info"));

}

}

英:

packagecn.mysterious.study3;importjava.util.Locale;importjava.util.ResourceBundle;public classLnternationalization {public static voidmain(String[] args) {//设置资源文件的名称,但是没有后缀,资源文件保存在 CLASSPATH 之中

Locale loc = new Locale("en","US");

ResourceBundle rb= ResourceBundle.getBundle("cn.mldn.resource.Message",loc);

System.out.println(rb.getString("welcome.info"));

}

}

但是这个时候会出现一个问题,假如在中文环境下说您好得有个名吧:

现在"KILLER"进入系统,那么如果要欢迎的话应该带上名字显示,可以使用占位符

范例:修改 cn.mldn.resource.Message_zh_CN.properties

welcome.info = {0},您好!欢迎光临!

范例:修改 cn.mldn.resource.Message_en_US.properties

welcome.info = {0},Hello!Welcome!

但是这个时候必须针对于读取出的数据进行一些转换,依靠 java.text.MessageFormat 类完成

文本的方法:public static String format(String pattern,Object... arguments)

范例:格式化文本

packagecn.mysterious.study3;importjava.text.MessageFormat;importjava.util.Locale;importjava.util.ResourceBundle;public classLnternationalization {public static voidmain(String[] args) {//设置资源文件的名称,但是没有后缀,资源文件保存在 CLASSPATH 之中

Locale loc = new Locale("en","US");

ResourceBundle rb= ResourceBundle.getBundle("cn.mldn.resource.Message",loc);

String str= rb.getString("welcome.info");

System.out.println(MessageFormat.format(str,"KILLER"));

}

}

在许多的项目开发过程之中,这样的格式化文本的操作是很常见的

总结

国际化操作虽然给了我们可以进行多语言显示的能力,但是大部分情况下,使用国际化操作都是为了方便进行资源信息的读取操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值