开发Web项目,以前用过国际化的资源文件,和Struts.pripertise , 日志资源文件等等,就是想知道凭什么,会识别,引用对应的资源文件,当时资源文件一般都是放在Src目录下的...........突然想起这个问题,希望高手不吝赐教!

解决方案 »

  1.   

    你可以设想一下嘛,如果你是作者会怎么设计呢。
    首先考虑到要国际化,所以一些需要国际化的东西肯定不能写死,那就用配置文件吧。
    然后规定一下资源文件必须存放在哪里,然后资源文件名字的格式。
    或者资源文件存放的位置要在struts,webwork的配置文件里说明。程序运行是检查到要使用国际化的资源文件,就开始找了查看是不是程序里说明了必须用哪个国家的资源文件,要不就看当前系统的环境看是哪个国家的,确定了就根据国家的标志找对应的资源文件。具体资源文件放在哪里,资源文件名称的格式就看作者的想法了。
      

  2.   

    不就是想知道为什么会识别嘛?因为你在程序中配置了, 国际化的资源文件再xml中配置了就有用,没配置就会说找不到资源文件。Struts.pripertise struts2自己配置了,struts认, 默认的是src。, 不用property, 用xml,也可以配置相关信息,还是默认放在src下,struts就认这个。
      

  3.   

    给你看段关于国际化底层实现的代码/**
     * 访问资源文件
     * @param request
     * @param response
     */
    private void processResource(HttpServletRequest request,
    HttpServletResponse response) {
    //取得本地化信息
    Locale locale = request.getLocale();
    ResourceBundle rb = resourceBoundles.get(locale);
    if (rb == null) {
    rb = ResourceBundle.getBundle("resource", locale);
    resourceBoundles.put(locale, rb);
    }
    //保存本地化信息到request对象
    request.setAttribute(Globals.KEY_MESSAGE_RESOURCES, rb);
    logger.debug("获取资源文件: " + rb);
    } /**
     * 
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    private String processPath(HttpServletRequest request,
    HttpServletResponse response) throws Exception {
    String uri = request.getRequestURI();
    String path = uri.substring(uri.indexOf(prefix) + prefix.length());
    return path;
    }rb = ResourceBundle.getBundle("resource", locale);这句话会根据locale来得到你本地信息如果是中文机器就是中文然后会去找 以resource开头的属性文件
    比如resource_zh_CN.properties
    就会去读取这里面的信息