理论上,如果找不到给定Locale的资源,应该使用默认资源啊。
为啥我的程序都使用中文资源呢?????本小程序包含3个源文件:
主类代码:
import java.util.Locale;
import java.util.ResourceBundle;
public class Main { public static void main(String[] args) {
ResourceBundle rb = null;
rb = ResourceBundle.getBundle("MyResource");
System.out.println(rb.getObject("key"));
rb = ResourceBundle.getBundle("MyResource", Locale.FRANCE);
System.out.println(rb.getObject("key")); //这里为什么还输出中文?
}
------------------------------------------------------------------------默认资源类代码:
import java.util.ListResourceBundle;public class MyResource extends ListResourceBundle { @Override
public Object[][] getContents() {
// TODO Auto-generated method stub
return contents;
}

static final Object[][] contents = {
{"key", "hello"}
};
}
}
----------------------------------------------------------------------------------------------------------中文资源类代码:import java.util.ListResourceBundle;public class MyResource_zh extends ListResourceBundle { @Override
public Object[][] getContents() {
// TODO Auto-generated method stub
return contents;
}

static final Object[][] contents = {
{"key", "你好"}
};
}

解决方案 »

  1.   

    你这三个好像有错误,根本运行不了,找不到MyResource资源
      

  2.   

    ResourceBundle.getBundle("MyResource");
    这个方法是比较特别的,它应用了java的反射机制当你的local是french的时候实际上它试图加载MyResource_fr,如果找不到的话会加载默认的也就是MyResource
    我猜你没有写MyResource_fr,而MyResource里面是中文。这样就造成了你说的情况
      

  3.   

    大概Java是根据系统的默认国家和语言来找的默认资源吧估计过程是这样的:
    先找指定的语言,如果没有
    再找默认的语言(系统的),如果没有
    找默认资源(无后缀的那个)