欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java 国际化

程序员文章站 2024-01-11 18:25:52
国际化是指应用程序运行时,可根据客户端OS的国家/地区、语言的不同而显示不同的界面,比如客户端OS的语言环境为大陆的简体中文,程序就显示为简体中文,客户端OS的语言环境为美国——英语,程序就显示美式英语。 OS的语言环境可在控制面板中手动设置。 国际化的英文单词是Internationalizati ......

 

国际化是指应用程序运行时,可根据客户端os的国家/地区、语言的不同而显示不同的界面,比如客户端os的语言环境为大陆的简体中文,程序就显示为简体中文,客户端os的语言环境为美国——英语,程序就显示美式英语。

os的语言环境可在控制面板中手动设置。

国际化的英文单词是internationalization,单词较长,通常简称i18n,i是第一个字母,18表示中间省略了18个字母,n是最后一个字母。

 

实现国际化的思路:

标签、提示等字符串信息放在资源文件中,一个语言环境对应一个资源文件(一套)。资源文件中存储键值对,每个资源文件的key都相同,value则随语言环境的改变而改变。key是程序使用的部分,value是gui要显示的字符串。

 

资源文件的命名方式:

basename.properties   用于单个资源文件

basename_language.properties   

basename_language_country.properties    国际化一般用这种命名方式

语言代码是特定,常用:zh  中文,en   英文

国家代码也是特定的,常用:cn  中国,us  美国,jp   日本

 

 

 

国际化示例:

1、在idea -> file -> settings -> editor -> file encodings -> 设置properties files的编码方式为utf-8,默认为gbk。(也可使用其它方式,只要.properties文件的编码字符集是utf-8即可)

 

2、对src单击右键,新建一个mess_zh_cn.properties文件,输入:

1 hello=你好!

以  key=value 形式输入,一行一个键值对,默认就是字符串,不用加引号。

.properties文件中可以写注释:#注释内容

 

3、对src单击右键,新建一个mess_en_us.properties文件(basename要相同),输入:

1 hello=hello!

两个资源文件的key要一一对应(相同)。

 

4、在.java文件中使用:

 1 package test;
 2 
 3 import java.util.locale;
 4 import java.util.resourcebundle;
 5 
 6 public class test{
 7        public static void main(string[] args){
 8               //获取os使用的语言环境
 9               locale locale=locale.getdefault();
10               //根据指定的语言环境加载对应的资源文件。第一个参数是字符串,指定资源文件的basename,第二个参数指定locale(语言环境)。可缺省第二个参数(默认就是os的当前/默认语言环境)
11               resourcebundle bundle=resourcebundle.getbundle("mess",locale);
12               //通过key获取已加载资源的value,参数为key
13               system.out.println(bundle.getstring("hello"));
14        }
15 }

如果os的语言环境为简体中文,则输出  你好!

如果os的语言环境为美式英语,则输出  hello!

 

 

 

 

如果资源文件中要使用动态内容,比如输出当前的日期时间,则可在资源文件中使用占位符,在读取时向占位符赋值。

 

示例:

1、对src右键单击,新建一个资源文件msg.properties,输入:

1 msg={0},你好!现在是{1}。

 

2、要使用时向占位符赋值:

 1 package test;
 2 
 3 import java.text.messageformat;
 4 import java.util.date;
 5 import java.util.resourcebundle;
 6 
 7 public class test{
 8        public static void main(string[] args){
 9               //加载指定资源文件
10               resourcebundle bundle=resourcebundle.getbundle("mess");
11               //获取指定value,返回字符串(带有占位符)
12               string msg=bundle.getstring("hello");
13               //使用messageformat类的静态方法format(string str,object... args)向占位符赋值。
14               // 第一个参数是带占位符的字符串,后面的参数对应占位符,是object类型即可。返回赋值后的字符串。
15               string str=messageformat.format(msg,"mike",new date());
16               system.out.println(str);
17        }
18 }