在项目中想做国际化的时候,我们的思路应该是
1,先定义国际化的资源包,可以定义多个资源文件。并且此处要按照需求的不同将资源文件包按功能类别分别命名。 如ErrorApplication.properties,MessageAppliction.properties,ThreadApplication.properties等等,资源文件中以键值对的方式来保 存数据,建议KEY的命名符合规范,这样便于在程序当中更好的引用。如 error.username={0} must not be empty! 在值的一方可以定义接收参数的形式。从下标0开始,如{0}{1}{2}表示接受三个参数,这样的好处便于数据的重用,而且有利于防止资源文件的膨胀。
2,在STRUTS-CONFIG.XML中进行资源文件的注册,很多人都知道要在XML文件中注册,但是为什么要注册,它的原理又是什么? 这里用到了JAVA的反射机制,其实在StrutsConfig.java类中提供了很多方法可以得到XML中的各个元素和对各个元素的操作。 java.lang.Object
org.apache.struts.config.BaseConfig
org.apache.struts.config.MessageResourcesConfig 会去解析xml并装载资源对象。
基本上目前所有的开源框架都很好的运用了反射机制,在JAVATHINK这一书中将的是向下造型。
如我们定义一个类
public abstract class person{
public abstract void doSomeThing();
public void driveCar(){doSomeThing();}
}
class Petter extends person{
public void doSomeThing() {
System.out.println("petter drive a cherry car");
}
public static void main(String args[]) {
Person pr = new Petter(); pr.driverCar();
}
3,如何获取资源文件中的值 如果是ERROR信息,有前端FORM中和在SERVICE层中抛出的
如在FORM校验中产生的,
ActionErrors erros = new ActionErrors();
//MessageResources resource = ((MessageResources) request.getAttribute(Globals.MESSAGES_KEY));
Locale local = RequestUtils.getUserLocale(request, null);
if("".equals(user.getUsername().trim()))
//erros.add(Globals.ERROR_KEY, new ActionMessage("the user name is empty",false));
//如果此处不指定FALSE,则表示从资源配置文件中去提取错误信息
//erros.add("username", new ActionMessage("error.username",resource.getMessage(local, "prompt.username"))); erros.add("username",
new ActionMessage("error.username",ResourceBundle.getBundle("joeho.blog.csdn.resource.ApplicationResource",local).getString("prompt.username")));
return erros;
如在SERVIE中产生
ActionMessages errors = new ActionMessages();
if(userForm.getUser().getUsername().trim().equals("name")) {
//下面的方法可以得到不同语言下的资源文件 //不知道什么原因,MessageResources 的不能使用
//getResources(request).getMessage(getLocale(request),"prompt.username");
errors.add("username",new ActionMessage("error.repeat",ResourceBundle.getBundle("joeho.blog.csdn.resource.ApplicationResource",getLocale(request)).getString("prompt.username")));
/* request.setAttribute(Globals.ERROR_KEY, errors);*/
saveErrors(request, errors); return mapping.getInputForward(); }
4,怎么样在页面中展示