`
winnie825
  • 浏览: 120242 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts国际化研究(一)

 
阅读更多

 

struts国际化信息的存储格式

struts默认使用PropertyMessageResources实现国际化的相关处理,该类有两个属性

 

protected HashMap messages = new HashMap(); //该Map存放国际化信息
protected HashMap locales = new HashMap(); // 辅助map,用于判定某国际化文件是否被初始化

 

key和value

 

PropertyMessageResources中有一个方法loadLocale(String localeKey),该方法主要目的是读取国际化信息文件并将信息进行处理

 

1. localeKey的值是Locale.toString()的值,如果浏览器配置为中国大陆,该值将会是zh_CN;如果使用美式英文,该值是en_US

 

2. 根据localeKey的值在locales(辅助Map)中查询value,第一次进入时该值不存在,方法会进行 下一步逻辑,否则终止;简单的说,locales会存放一个以国际化信息(Locale.toString()的值)为key和value的键值对,用于标识该国际化信息是否已经被初始化。

 

3. 假设是第一次,该方法获取struts-config.xml中配置的国际化文件配置项的parameter(假设我们配置的是resources.ApplicationResources),struts会根据该值生成一个国际化信息文件的路径:resources/ApplicationResources.properties或resources/ApplicationResources_en_US.properties或resources/ApplicationResources_zh_CN.properties眼熟吧?这个也就是我们在src文件家中国际化文件的路径。三个都生成?no,localeKey决定了读那个文件

 

4. 读完文件该放入messages(国际化信息Map)了,怎么放?看这段代码

 

    protected String messageKey(String localeKey, String key) {

        return (localeKey + "." + key);

    }

     假设国际化信息中有一个值userName=用户姓名,在中文大陆环境下,messages(国际化信息Map)存放的信息是key=zh_CN.userName,value=用户姓名;在美式英文环境下的信息是key=en_US.userName,value=用户姓名

 

5. PropertyMessageResources对外提供一个getMessage(Locale locale, String key)方法用于获取国际化信息,根据上面的内容就明白了,locale和key是用来生成messages(国际化信息Map)的key值,value很容易从messages(国际化信息Map)获取。

 

附一段代码

 

    protected synchronized void loadLocale(String localeKey) {

        if (log.isTraceEnabled()) {
            log.trace("loadLocale(" + localeKey + ")");
        }
        
        // Have we already attempted to load messages for this locale?
        if (locales.get(localeKey) != null) {
            return;
        }
        
        locales.put(localeKey, localeKey);

        // Set up to load the property resource for this locale key, if we can
        String name = config.replace('.', '/');
        if (localeKey.length() > 0) {
            name += "_" + localeKey;
        }
        
        name += ".properties";
        InputStream is = null;
        Properties props = new Properties();

        // Load the specified property resource
        if (log.isTraceEnabled()) {
            log.trace("  Loading resource '" + name + "'");
        }
        
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        if (classLoader == null) {
            classLoader = this.getClass().getClassLoader();
        }
        
        is = classLoader.getResourceAsStream(name);
        if (is != null) {
            try {
                props.load(is);
                
            } catch (IOException e) {
                log.error("loadLocale()", e);
            } finally {
                try {
                    is.close();
                } catch (IOException e) {
                    log.error("loadLocale()", e);
                }
            }
        }
        
        if (log.isTraceEnabled()) {
            log.trace("  Loading resource completed");
        }

        // Copy the corresponding values into our cache
        if (props.size() < 1) {
            return;
        }
        
        synchronized (messages) {
            Iterator names = props.keySet().iterator();
            while (names.hasNext()) {
                String key = (String) names.next();
                if (log.isTraceEnabled()) {
                    log.trace("  Saving message key '" + messageKey(localeKey, key));
                }
                messages.put(messageKey(localeKey, key), props.getProperty(key));
            }
        }

    }
分享到:
评论

相关推荐

    struts2国际化demo

    解压并研究这些文件将有助于深入理解Struts2国际化的具体实现方式。 总结来说,"Struts2国际化demo"是一个教育性的实例,旨在教授开发者如何利用Struts2框架提供多语言支持。通过创建和配置资源文件,结合拦截器和...

    struts国际化的使用

    ### Struts国际化的使用 #### 一、Struts框架简介 Struts是一个开源的MVC(Model-View-Controller)框架,它简化了Java Web应用的开发过程,并且支持多种功能,包括表单验证、国际化等。对于需要支持多语言的应用...

    Struts2中的validation_多国语言版 国际化i18n+struts2数据校验.zip

    通过研究这些代码,你可以更深入地了解Struts2的数据校验和国际化是如何工作的,以及如何在自己的项目中实现它们。 总的来说,这个压缩包提供了一个全面的学习资源,涵盖了Struts2框架中的关键功能:数据校验、前端...

    SSH分页小列子,Struts国际化

    标题中的“SSH分页小例子,Struts国际化”涉及到两个主要的Java Web开发技术:Struts框架和SSH(Spring、Struts、Hibernate)集成。SSH是流行的企业级应用开发框架,其中Struts处理表现层,Spring负责业务逻辑,...

    struts2实现国际化

    通过研究这个项目,你可以深入理解如何在实际开发中利用Struts2实现国际化。它可能包括Action类、配置文件、资源文件以及展示语言选择的JSP页面等组件。通过实践和调试,你将更好地掌握这个过程,并能够将其应用到...

    struts2国际化的实例

    Struts2是一个强大的Java EE应用程序框架,用于构建MVC(模型-视图-控制器)架构的Web应用。...通过研究这个项目,你可以更好地理解和实践Struts2的国际化功能,解决中文乱码问题,以适应全球用户的使用需求。

    struts1国际化网站中英文切换例子

    国际化(i18n)是软件设计中的一个重要概念,它允许软件适应不同语言和文化环境。在Struts1框架中实现国际化,可以帮助你的Web应用为全球用户提供更友好的体验。 首先,我们需要理解国际化的基本原理。国际化不仅仅...

    struts1 开源项目研究

    此外,Struts1还支持国际化和本地化,使得应用能够适应不同地区的用户需求。 对于研究Struts1,阅读源码是深入了解其工作原理的关键。你可以查看ActionServlet、Action、ActionForm等核心类的实现,以及struts-...

    Struts的深入研究Demo

    8. **国际化与本地化**:Struts提供了强大的I18N(Internationalization)支持,允许应用根据不同地区和语言展示不同内容。资源文件(`.properties`)用于存储不同语言的文本。 9. **异常处理**:通过`struts-...

    struts2官方例子8-资源配置文件的使用(包括国际化)

    在Struts2中,资源配置文件和国际化(i18n)是两个非常重要的概念,它们对于创建多语言支持和提供用户友好的界面至关重要。 资源配置文件通常以.properties为扩展名,它们存储了应用中的静态文本,如错误消息、提示...

    struts2源码研究

    - 初始化预加载配置,如国际化配置,这些配置会被添加到Container对象中。 - `Container`对象注入`Dispatcher`,增强`Dispatcher`的功能。 - 如果是WebLogic服务器,会进行特定的`WebLogicWorkaround`初始化,以...

    Struts 1.3.8 学习笔记(一)

    4. **国际化与本地化**:Struts 支持多语言环境,允许开发者为不同的地区提供不同的消息和属性文件。通过资源包(Resource Bundles),开发者可以轻松实现应用的国际化和本地化。 5. **错误与异常处理**:Struts ...

    struts2jar.zip

    9. **国际化和本地化**:Struts2支持多语言,可以通过资源文件来实现。 10. **异常处理**:Struts2提供了一套完整的异常处理机制,可以自定义错误页面和异常处理器。 总的来说,"struts2jar.zip"压缩包是一个实用...

    struts2.3.4源代码

    12. **Plugin架构**: 支持插件扩展,如Struts2的Ajax支持、国际化等,都可通过插件实现。 13. **依赖注入 (DI) 和 Inversion of Control (IoC)**: Struts2支持通过Spring等容器实现依赖注入,增强组件的解耦合。 ...

    Struts2项目代码

    6. **国际化与主题支持**:Struts2支持多语言环境,可以通过资源文件实现应用的国际化。同时,它还提供了多种主题和样式,可以改变UI的外观和布局。 7. **插件架构**:Struts2的插件机制允许扩展其功能,例如Struts...

    基于MVC结构的Struts框架的研究

    其中,`struts-config.xml` 主要用于配置Action映射、表单验证规则、国际化资源等;而 `web.xml` 是标准的Servlet容器配置文件,用于配置Servlet和其他Web组件。 **表单验证**是Struts框架的一项重要特性,它允许...

    struts2-src

    8. **国际化与本地化**:Struts2支持多语言环境,通过资源包(Properties文件)实现国际化和本地化。 深入研究Struts2源码,开发者可以更清楚地理解框架的工作原理,从而优化应用性能,解决实际问题,甚至为框架...

    struts2-apps

    4. **国际化与本地化**:Struts2提供了强大的I18N支持,示例可能会包含如何处理不同语言和地区的设置。 5. **表单验证**:Struts2的验证框架允许开发者在服务器端对用户输入进行验证。示例可能包含如何定义验证规则...

    Struts2.1.8框架研究指南

    Struts2拥有强大的插件系统,例如,Tiles插件用于管理复杂的页面布局,JSON插件支持AJAX请求,i18n插件实现国际化等。 6. **实战示例** 在"demo例子"中,可能包含了一个简单的Struts2项目,包括Action类、配置...

    Struts2框架源码

    6. **Plug-in(插件)**:Struts2允许通过插件扩展其功能,比如,国际化、文件上传、日期时间处理等。这些插件可以方便地集成到项目中,增强应用的功能。 7. **Freemarker或Velocity模板**:Struts2支持使用...

Global site tag (gtag.js) - Google Analytics