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,可惜,无济于事麻烦高手解决下,谢谢拉····
正在做一个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.properties(默认)
applicationResources_US.properties浏览器自动找
如果你浏览器设置为美国英语,它自己就去找applicationResources_US.properties
如果设置为简体中文,就去找applicationResources_zh_CN.properties