一、简介
国际化( internationalization )是设计和制造容易适应不同区域要求的产品的一种方式。它要求从产品中抽离所有的与语言,国家/地区和文化相关的元素。换言之, 应用程序 的功能和代码设计考虑在不同地区运行的需要,其代码简化了不同本地版本的生产。开发这样的程序的过程,就称为国际化。
Java 作为一个跨平台的东西,如果想着自己的产品推向世界, Java 实现国际化,在现在现在编程工程上是必不可少的了。
另外:
再说,很多童鞋都说我们缩写的应用软件都基本谈不上国际化,基本能在国内使用已经很了不起了。
我得反驳下这一个说法。
大家都熟知的我们在写 web 项目的时候通常都在使用 MVC 模式的开发,为什么 ~ ,那是具有一个巨大的有点,功能应用,图形显示,逻辑结构都分开了,利于维护,利于分工。
那么我们就应该想到,如果这一个模式也应用的 JavaSE 上面的画,我们之前所学的东西不都具有这些优点了吗?不能说完全的是,也不能说完全的没有。
做过 android 项目开发的童鞋相对都有那么一定的经验。写每一个 activity 的时候,基本都要在 string 中载入他们每一个控件所对应的值。
好,那我们就看看在 JavaSE 上面的具体操作把。大家感受感受。
二、国际化的步骤
1 、实现国际的程序
2 、实现国际化的参数文件 property
3 、装载 properties
4 、装载对应的 key
三、具体实现
1 、实现国际的程序
先写一个简单的 JavaSE 程序,由于这个相对与本文不是重点,这个就不罗嗦了。
2 、实现国际化的参数文件 property
简单说明: property 文件 就是一个数据信息的文件,
具体为格式为: 参数 = 对应值
有点类似我们的 map 对应关系
比如我们已经实现了一个 Properties
En.properties
内容为:
Java代码
- title = english
- button = my_button
- logo = bin/qq.gif
3 、装载 properties
在我们的程序中载入就可以
Java代码
- Properties prop ;//设置文件
- /**
- * 构造方法,载入properties
- */
- public international(){
- prop = new Properties();// 属性集合对象
- FileInputStream fis = null;
- try {
- fis = new FileInputStream("src/en.properties");
- prop.load(fis);//载入
- fis.close();// 关闭流
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
#p#
4 、装载对应的 key
Java代码
- /**
- * 显示界面
- */
- public void showUI(){
- //设置大小
- this.setSize(400,300);
- this.setTitle(prop.getProperty("title","中文"));//设置默认值为"中文"
- this.setLayout(new java.awt.FlowLayout());
- javax.swing.JButton jb = new javax.swing.JButton(prop.getProperty("button","我的按钮"));//设置默认值为"我的按钮"
- this.add(jb);
- javax.swing.JLabel logo = new javax.swing.JLabel();
- logo.setIcon(new ImageIcon(prop.getProperty("logo","bin/360.png")));
- this.add(logo);
- this.setVisible(true);
- }
好我们看看装载前,装载后的效果。
即,将步骤 1 注释后,和没有注视的效果
注释后:
没注释:
当然 , 如果我们载入的是一个鸟语的话 ,
即 :
写好鸟语的 properties 文件
Java代码
- title = bird languange
- button = bird_button
- logo = bin/bird.jpg
只需将
Java代码
- fis = new FileInputStream("src/en.properties");
改为 :
Java代码
- fis = new FileInputStream("src/bird.properties");
即可
四、分析
显然,这么以来,逻辑结构和视图结构基本就能分开了。版本翻译,维护,分工相对以前都比较方便了。同一个模式的来学习 , 现在的主流模式 , 之后学习 web,android 什么的 , 都会相对于比较方便了 .
【编辑推荐】