ResourceBundle最大的好处是可以使你的程序国际化,在bundle文件名后加上国家、语言关键字,那系统就会自动载入相应的bundle文件。
比如:
bundle.properties 缺省
bundle_zh.properties 中文
bundle_ja.properties 日文ResourceBundle bundle= ResourceBundle.getBundle("bundle");
如果你的系统是中文的,那就会自动加载bundle_zh.properties 不过多字节编码的bundle需要用native2ascii转成unicode编码。
比如:
bundle.properties 缺省
bundle_zh.properties 中文
bundle_ja.properties 日文ResourceBundle bundle= ResourceBundle.getBundle("bundle");
如果你的系统是中文的,那就会自动加载bundle_zh.properties 不过多字节编码的bundle需要用native2ascii转成unicode编码。
package com.smbc.etrade.remittance.ui;import java.util.*;
import java.io.*;
public class Hello{
public static void main(String[] args){ ResourceBundle bundle = ResourceBundle.getBundle("E:\\etrade\\properties\\rz.properties");
String tmpStr = bundle.getString("pdf.commonPath").trim();
}
}
运行出现如下错误:
java.util.MissingResourceException: Can't find bundle for base name E:\etrade\properties\rz.properties, locale ja_JP
at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:707)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:678)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:541)
at com.smbc.etrade.remittance.ui.Hello.main(Hello.java:16)
Exception in thread "main" Process terminated with exit code 1
请问如何解决!!!我和弱!!
那么a.java中要这样声明
ResourceBundle.getBundle( 路径 + "a_en"); //(英文)
ResourceBundle.getBundle( 路径 + "a_zh_CN"); //(简体中文)
ResourceBundle.getBundle( 路径 + "a_zh_TW"); //(繁体中文)
相应的properties文件都要放到该路径下
/**
* File name: i18nDemoModify.java
* Author: Jack, at http://bbs.whnet.edu.cn, Java discuss board.
* Email: [email protected]
* 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 i18nDemoModify {
public static void main(String args[]) throws Exception{
ResourceBundle res;
if (args.length<1) {
//use current locale at machine to get the resource bundle.
//如果没有指定Locale,那么在生成ResourceBundle使用的Locale是当前机器上缺省的区域和语言
//这样,如果机子是Windows2000中文,则自动选择中文资源
//资源文件是以类的方式提供的。以Resmy开头,Resmy可以换成其他的字符串
res = ResourceBundle.getBundle("Resmy");
}else {
res = ResourceBundle.getBundle("Resmy",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);
}
}
2、英文资源
/**
* File name: Resmy_en_US.java
* Author: Jack, at http://bbs.whnet.edu.cn, Java discuss board.
* Email: [email protected]
* Description: Resource file for i18nDemoModify.java
*/
import java.util.*;
public class Resmy_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;
}
}
3、中文资源
/**
* File name: Resmy_zh_CN.java
* Author: Jack, at http://bbs.whnet.edu.cn, Java discuss board.
* Email: [email protected]
* Description: Resource file for i18nDemo.java
*/
import java.util.*;
public class Resmy_zh_CN extends java.util.ListResourceBundle {
static final Object[][] contents = new String[][]{
{ "OKText", "确定" },
{ "FontName", "华文彩云" },
{ "FileMenuText", "文件"},
{ "FileExitMenuText", "退出"},
{ "DialogTitle", "演示对话框" }};
public Object[][] getContents() {
return contents;
}
}4、测试执行
rem filenam i18n.bat
javac i18nDemoModify.java
del javac Res_en_US.class
del javac Res_zh_CN.class
rem javac Res_en_US.java
javac Resmy_en_US.java
javac Resmy_zh_CN.java
java i18nDemoModify
rem java i18nDemoModify zh CN
rem java i18nDemoModify en US
package com.smbc.etrade.remittance.ui;import java.util.*;
import java.io.*;
public class Hello{
public static void main(String[] args){ ResourceBundle bundle = ResourceBundle.getBundle("E:\\etrade\\properties\\rz.properties");
String tmpStr = bundle.getString("pdf.commonPath").trim();
}
}
运行出现如下错误:
java.util.MissingResourceException: Can't find bundle for base name E:\etrade\properties\rz.properties, locale ja_JP
at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:707)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:678)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:541)
at com.smbc.etrade.remittance.ui.Hello.main(Hello.java:16)
Exception in thread "main" Process terminated with exit code 1
请问如何解决!!!我和弱!!