java 国际化_Java与国际化

本文介绍了Java中实现国际化的基本原理和步骤,包括使用java.util.ResourceBundle和java.util.Locale类,以及在NetBeans 9.0环境下如何管理国际化资源包。通过示例展示了如何读取不同地区的资源并解释了基础名称、地区信息和资源包的概念。
摘要由CSDN通过智能技术生成

i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是"国际化"的简称。

Java使用java.util.ResourceBundle与java.util.Locale来实现国际化。不同IDE的国际化提供不同的功能支持,便于处理国际化的资源,这里以NetBeans 9.0为例。

国际化有三个重要概念

地区(Locale)信息;

资源包(Resource bundle);

基础名称(Base name);

地区信息可以由一个语言编码(Language code)与可选的地区编码(Country code)来指定。

语言编码由ISO-639定义,由两个小写字母表示,例如ca(Catalan,加拿大文)、zh(Chinese,中文)。

地区编码由ISO-3166定义,由两个大写字面表示,例如IT(Italy,意大利)、TW(Taiwan,台湾)、CN(China,中国)。

Java中,使用java.util.Locale类来表示地区信息,可以使用静态方法getDefault()获取默认的地区信息,与当前的操作系统有关。或者使用构造函数生成实例,指定语言编码和地区编码。

Locale defaulLocale = Locale.getDefault();

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

或者使用内置的静态实例:

d13643089155cb43793185cd206663e4.png

Java的时间相关API,例如Calendar的静态方法getInstance(),都使用到了Local,没用指定编译器默认使用默认的的地区信息(Local.getDefual()的返回值)。

资源包Java中通常使用.properties文件,NetBeans中在Other分类的模板中,可以新建该类型文件。注意,该类型文件需要存放在默认包(default-pack)中:

51b8a56184b5e7bb000adbad825f9bc1.png

这样,NetBeans编译后,会把.properties转存到程序的CLASSPATH路径下。

NetBeans环境下,自动编译的程序,默认的CLASSPATH为:

\\build\classes

其他环境下,可以使用获取系统属性java.class.path,查看CLASSPATH路径。

System.getProperty("java.class.path")

在NetBeans中,双击或右键-Edit打开.properties文件会使用文本编码模式。文件内容格式与通常的properties文件格式一样。#开头注释,key=value格式。

3b619184218fab8f5fe4decb53d1f5b4.png

如果使用右键-Open打开.properties文件,会使用专用的属性编辑模式。

5e450caff08f0be151afb244d798423f.png

可以使用右键-Add-Locale…,为当前的配置文件添加国际化版本。

f6caf7bddce774f6fcd958a99b32fcf4.png

在出现的窗口里选择语言。

c6daa8b3ceea025046e30e8e92c801ad.png

会自动新建添加地区信息的文件:

a91a0f7f1102dd322d10a8e8c8faeb8b.png

未添加地区信息的名称,称为基础名称,这个例子中,content就是基础名称。

使用专用模式会有各种语言的对比视图:

de91853d1c478d90b5e0d3a91d929e42.png

创建好资源包后,Java提供java.util.ResourceBundle读取资源包。使用静态方法getBundle()获取ResourceBundle实例。

//获取content资源包

ResourceBundle res = ResourceBundle.getBundle("content");

System.out.println(res.getString("com.foundkey.hello") + "!");

System.out.println(res.getString("com.foundkey.world") + "!");

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

//获取content_zh_CN资源包,找不到使用content资源包。

ResourceBundle zHres = ResourceBundle.getBundle("content", locale);

System.out.println(zHres.getString("com.foundkey.hello") + "!");

System.out.println(zHres.getString("com.foundkey.world") + "!");

传入基础名称,获取指定资源。补充地区信息,可以获取指定区域的资源。如果找不到指定区域的资源包,会使用基础名称的资源包。输出如下:

Hello!

World!

你好!

世界!

Java中,字符采用Unicode编码,如果.properties的编码不是Unicode编码,可以使用JDK工具native2ascii工具来进行转换。

例如:

将GBK编码的demo_zh_CN.txt文件转换为Unicode。

native2ascii -encoding GBK demo_zh_CN.txt demo_zh_CN.properties

正常显示中文,并使用UTF-8编码保存。

native2ascii-revers-encoding UTF-8 demo_zh_CN.txt demo_zh_CN.properties

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值