国际化的问题,高手请关注
java中国家化的问题如何解决?
正在做一个web项目,需要用到国际化。网上搜索了些资料,我的国家化过程如下:
1:先生成Resource类
import java.io.*;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Locale;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
public class Resource {
private static final String HEAD_FILE = "ATTR "; //属性文件名的前缀
private static final String LAST_FILE= ".properties "; //属性文件名的后缀
private static final String FILE_PATH= "c:// "; //定义属性文件存放的目录
public Resource() {
}
/*以下是根据传入的属性文件中的 "键 ",而得到与区域与语言设置相对应的 "值 "*/
public synchronized String srcStr(String disStr) {
String ret = " ";
try {
Locale locale = Locale.getDefault(); //获取系统的区域与语言默认设置
System.out.println( "locale is : "+locale.toString());
String baseName = new StringBuffer()
.append(HEAD_FILE).append( "_ ").append(locale.toString())
.append(LAST_FILE).toString(); //根据local属性,前缀以及后缀生成文件名
System.out.println( "baseName is: "+baseName);
String fileName = new StringBuffer(FILE_PATH).append(baseName).toString(); //获取文件的完整路径
InputStream is = new FileInputStream(fileName); //生成文件输入流
PropertyResourceBundle pr = new PropertyResourceBundle(is); //根据输入流构造PropertyResourceBundle的实例
ret = pr.getString(disStr);
if(locale.equals(Locale.CHINA)){
ret = new String(ret.getBytes( "ISO-8859-1 "), "UTF-8 ");
} //如果是要显示中文,则要进行内码的转换
is.close();
return ret;
}
catch (Exception e) {
e.printStackTrace();
return disStr;
}
}
public static void main(String args[]){
Resource res = new Resource();
System.out.println( "Password is: "+res.srcStr( "Password "));
}
}
2:生成资源文件
LoginName=用户
Password=密码
Login=登陆
LoginTime=登陆时间
LogOff=注销登陆
ChineseVersion=中文版
MainPage=首页
SoftWare=软件
Hardware=硬件
YourLocationMainPage=当前位置:首页
MyCalendar=我的日程
MyMails=我的邮件
R&D=研发区
Forum=讨论区
DeveloperProcess=开发进程
TechnologyCommunion=技术交流
利用native2ascii命令将其转化为utf-8编码
3:在页面中使用Resource类的对象。比如:
<jsp:useBean id= "resource " scope= "session " class= "localtest.Resource "/>
<p align=right> <%=resource.srcStr( "Password ")%> </p>
可惜,我打开页面,发现是乱码,类似于问号的那样。
期间,我将资源文件用微软带的记事本打开,将资源文件的编码改为utf-8,可惜,无济于事
麻烦高手解决下,谢谢拉····
[解决办法]
...
我的国际化问题 没有写什么代码 直接对资源文件命名。
applicationResources_zh_CN.properties
applicationResources.properties(默认)
applicationResources_US.properties
浏览器自动找
如果你浏览器设置为美国英语,它自己就去找applicationResources_US.properties
如果设置为简体中文,就去找applicationResources_zh_CN.properties