国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Java程序的國際化和本地化介紹

2019-11-18 12:09:00
字體:
供稿:網(wǎng)友

   本文嘗試用一個簡單的例子來演示在書寫java應(yīng)用程序時候,怎樣使之符合國際化標(biāo)準(zhǔn),然后對其進行本地化有多么簡單。
  當(dāng)一個軟件產(chǎn)品需要在全球范圍應(yīng)用的時候,得考慮在不同的地域和語言環(huán)境下面的使用情況,最簡單的要求就是UI上的信息上能用本地化語言來顯示,當(dāng)然一個優(yōu)秀的全球化軟件產(chǎn)品關(guān)于國際化和本地化的要求遠(yuǎn)遠(yuǎn)不止于此,本文只是涉及了國際化和本地化的關(guān)于界面顯示語言的一小部分。Java語言內(nèi)核基于Unicode2.1提供了對不同國家和不同語言文字的內(nèi)部支持,由于先天的原因,Java對于國際化的支持遠(yuǎn)遠(yuǎn)要比C/C++來的優(yōu)越。
  
  在開始具體介紹之前,需要先介紹幾個術(shù)語:
  
  i18n: 就是internationalization, 國際化,由于首字母"i"和末尾字母"n"間有18個字符,所以簡稱i18n. internationalization指為了使應(yīng)用程序能適應(yīng)不同的語言和地區(qū)間的變化而不作系統(tǒng)性的變化所采取的設(shè)計措施。
  
  l10n: 就是localization, 本地化,由于首字母"l"和末尾字母"n"間有10個字母,所以簡稱l10n. localization指為了使應(yīng)用軟件能夠在某一特定語言環(huán)境或地區(qū)使用而加入本地非凡化部件和翻譯后文本的過程。
  
  locale: 簡單來說是指語言和區(qū)域進行非凡組合的一個標(biāo)志。
  
  我們的例子,顯示一個有一個按鈕和一個菜單的Dialog窗,在不改動程序的前提下使應(yīng)用程能夠顯示英文文字的或者中文文字的界面。 注:因為僅僅作為演示用,我們的菜單欄也作為一個部件加入對話框,好象是一個Button一樣,而不是通常意義上的菜單條。
  
  通常我們的程序是這樣的:
  
  /**
  
  * File name: i18nDemo.java
  
  * Author ID: Jack, at http://bbs.whnet.edu.cn, Java discuss board.
  
  * Description: Shows a Dialog with a "OK" button and "File"/"Exit" menu.
  
  */
  
  import javax.swing.*;
  
  import java.awt.*;
  
  import java.util.*;
  
  public class i18nDemo {
  
  public static void main(String args[]) throws Exception{
  
  JDialog dialog=new JDialog();
  
  JButton BTOK=new JButton();
  
  JMenuBar menuBar=new JMenuBar();
  
  JMenu menuFile=new JMenu();
  
  JMenuItem menuExit=new JMenuItem();
  
  
  btOK.setText("OK");
  
  menuFile.setText("File");
  
  menuExit.setText("Exit");
  
  dialog.setTitle("i18n Demo");
  
  
  menuBar.add(menuFile);
  
  menuFile.add(menuExit);
  
  dialog.getContentPane().setLayout(new FlowLayout());
  
  dialog.getContentPane().add(btOK);
  
  dialog.getContentPane().add(menuBar);
  
  dialog.setSize(200,100);
  
  dialog.setModal(true);
  
  dialog.show();
  
  System.exit(0);
  
  }
  
  }
  
  我們通過修改程序來達(dá)到i18n的要求:將那些和界面顯示有關(guān)系的資源單獨提取出來到資源文件里面.Java里面的資源文件叫做ResourceBundle,它分成兩種,一種是ListResourceBundle,另一種是PRopertyResourceBundle,我們這里使用ListResourceBundle,關(guān)于PropertyREsourceBundle請參閱文后的推薦閱讀。當(dāng)一個程序需要一些Locale相關(guān)的資源,例如字符串資源的時候,它可以從resource bundle里面將需要的本地化資源裝入。
  
  需要注重的是:為了能夠正確顯示中文字符,程序里的部件需要選擇指定  
  請看修改過的程序和資源文件。
  
  /**
  
  * File name: i18nDemo.java
  
  * Author: Jack, at http://bbs.whnet.edu.cn, Java discuss board.
  
  * Email: greatjava@sina.com
  
  * Description: Shows a Dialog with a "OK" button and "File"/"Exit" menu.
  
  * This program made some modifications to fit the requestion of i18n
  
  */
  
  import javax.swing.*;
  
  import java.awt.*;
  
  import java.util.*;
  
  
  public class i18nDemo {
  
  public static void main(String args[]) throws Exception{
  
  ResourceBundle res;
  
  if (args.length<1) {
  
  //use current locale at machine to get the resource bundle.
  
  res = ResourceBundle.getBundle("Res");
  
  }else {
  
  res = ResourceBundle.getBundle("Res",new Locale(args[0], args[1]));
  
  }
  
  JDialog dialog=new JDialog();
  
  JButton btOK=new JButton();
  
  JMenuBar menuBar=new JMenuBar();
  
  JMenu menuFile=new JMenu();
  
  JMenuItem menuExit=new JMenuItem();
  
  Font font = new Font(res.getString("FontName"),Font.PLAIN,12);
  
  btOK.setText(res.getString("OKText"));
  
  menuFile.setText(res.getString("FileMenuText"));
  
  menuExit.setText(res.getString("FileExitMenuText"));
  
  dialog.setTitle(res.getString("DialogTitle"));
  
  btOK.setFont(font);
  
  menuFile.setFont(font);
  
  menuExit.setFont(font);
  
  menuBar.add(menuFile);
  
  menuFile.add(menuExit);
  
  dialog.getContentPane().setLayout(new FlowLayout());
  
  dialog.getContentPane().add(btOK);
  
  dialog.getContentPane().add(menuBar);
  
  dialog.setSize(200,100);
  
  dialog.setModal(true);
  
  dialog.show();
  
  System.exit(0);
  
  }
  
  }
  
  
  /**
  
  * File name: Res_en_US.java
  
  * Author: Jack, at http://bbs.whnet.edu.cn, Java discuss board.
  
  * Email: greatjava@sina.com
  
  * Description: Resource file for i18nDemo.java
  
  */
  
  import java.util.*;
  
  public class Res_en_US extends java.util.ListResourceBundle {
  
  static final Object[][] contents = new String[][]{
  
  { "OKText", "OK" },
  
  { "FontName", "Dialoginput" },
  
  { "FileMenuText", "File"},
  
  { "FileExitMenuText", "Exit"},
  
  { "DialogTitle", "Demo Dialog" }};
  
  public Object[][] getContents() {
  
  return contents;
  
  }
  
  }
  
  在運行前,我們再做一個包含中文資源的資源文件
  
  /**
  
  * File name: Res_zh_CN.java
  
  * Author: Jack, at http://bbs.whnet.edu.cn, Java discuss board.
  
  * Email: greatjava@sina.com
  
  * Description: Resource file for i18nDemo.java
  
  */
  
  import java.util.*;
  
  public class Res_zh_CN extends java.util.ListResourceBundle {
  
  static final Object[][] contents = new String[][]{
  
  { "OKText", "確定" },
  
  { "FontName", "MS Song" },
  
  { "FileMenuText", "文件"},
  
  { "FileExitMenuText", "退出"},
  
  { "DialogTitle", "演示對話框" }};
  
  public Object[][] getContents() {
  
  return contents;
  
  }
  
  }
  
  先運行來看看結(jié)果:
  
  //Run next command step by step
  
  javac *.java
  
  java i18nDemo
  
  java i18nDemo zh CN
  
  java i18nDemo en US
  
  可以看到出現(xiàn)了中文界面和英文界面的對話框。
  
  具體的看一下程序:
  
  主程序i18nDemo.java,多了一個ResourceBundle對象,它包含了一個資源文件的信息。然后需要使用本地化資源的時候,都通過res.getString(KEY)來得到相應(yīng)的Locale的值。通過命令行,我們傳入關(guān)于語言和國家的代碼,這樣在生成ResourceBundle對象的時候,可以指向相應(yīng)的資源文件。假如沒有指定Locale,那么在生成ResourceBundle使用的Locale是當(dāng)前機器上缺省的區(qū)域和語言。在我的機器上(English WindowsNT 4),打開Richwin中文平臺的時候,缺省的locale是中國,關(guān)閉RichWin的時候,Locale是U.S..
  
  資源文件Res_en_US.java里面包含了英文的界面資源,文件名里的"en"指英語語言,"US"指國家是美國。Res_zh_CN.java是中文的資源文件,”zh“說明語言是中文,"CN"說明國家是中國。關(guān)于語言和國家的完整對照表可以在參考資源里找到鏈接。
  
  Res_xx_XX類是從ListResourceBundle繼續(xù)而

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 横山县| 永嘉县| 蓬溪县| 武宣县| 辽中县| 大兴区| 临湘市| 黄山市| 天气| 南华县| 曲靖市| 百色市| 福州市| 娱乐| 七台河市| 沂南县| 满城县| 年辖:市辖区| 黑龙江省| 马鞍山市| 绍兴市| 嫩江县| 奉化市| 突泉县| 博野县| 永福县| 涡阳县| 吉林市| 赤峰市| 岳阳县| 河北省| 富顺县| 奉贤区| 太湖县| 高安市| 黄梅县| 光泽县| 偃师市| 临江市| 景洪市| 祁连县|