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国际化的具体实现方式。 总结来说,"Struts2国际化demo"是一个教育性的实例,旨在教授开发者如何利用Struts2框架提供多语言支持。通过创建和配置资源文件,结合拦截器和...
### Struts国际化的使用 #### 一、Struts框架简介 Struts是一个开源的MVC(Model-View-Controller)框架,它简化了Java Web应用的开发过程,并且支持多种功能,包括表单验证、国际化等。对于需要支持多语言的应用...
通过研究这些代码,你可以更深入地了解Struts2的数据校验和国际化是如何工作的,以及如何在自己的项目中实现它们。 总的来说,这个压缩包提供了一个全面的学习资源,涵盖了Struts2框架中的关键功能:数据校验、前端...
标题中的“SSH分页小例子,Struts国际化”涉及到两个主要的Java Web开发技术:Struts框架和SSH(Spring、Struts、Hibernate)集成。SSH是流行的企业级应用开发框架,其中Struts处理表现层,Spring负责业务逻辑,...
通过研究这个项目,你可以深入理解如何在实际开发中利用Struts2实现国际化。它可能包括Action类、配置文件、资源文件以及展示语言选择的JSP页面等组件。通过实践和调试,你将更好地掌握这个过程,并能够将其应用到...
Struts2是一个强大的Java EE应用程序框架,用于构建MVC(模型-视图-控制器)架构的Web应用。...通过研究这个项目,你可以更好地理解和实践Struts2的国际化功能,解决中文乱码问题,以适应全球用户的使用需求。
国际化(i18n)是软件设计中的一个重要概念,它允许软件适应不同语言和文化环境。在Struts1框架中实现国际化,可以帮助你的Web应用为全球用户提供更友好的体验。 首先,我们需要理解国际化的基本原理。国际化不仅仅...
此外,Struts1还支持国际化和本地化,使得应用能够适应不同地区的用户需求。 对于研究Struts1,阅读源码是深入了解其工作原理的关键。你可以查看ActionServlet、Action、ActionForm等核心类的实现,以及struts-...
8. **国际化与本地化**:Struts提供了强大的I18N(Internationalization)支持,允许应用根据不同地区和语言展示不同内容。资源文件(`.properties`)用于存储不同语言的文本。 9. **异常处理**:通过`struts-...
在Struts2中,资源配置文件和国际化(i18n)是两个非常重要的概念,它们对于创建多语言支持和提供用户友好的界面至关重要。 资源配置文件通常以.properties为扩展名,它们存储了应用中的静态文本,如错误消息、提示...
- 初始化预加载配置,如国际化配置,这些配置会被添加到Container对象中。 - `Container`对象注入`Dispatcher`,增强`Dispatcher`的功能。 - 如果是WebLogic服务器,会进行特定的`WebLogicWorkaround`初始化,以...
4. **国际化与本地化**:Struts 支持多语言环境,允许开发者为不同的地区提供不同的消息和属性文件。通过资源包(Resource Bundles),开发者可以轻松实现应用的国际化和本地化。 5. **错误与异常处理**:Struts ...
9. **国际化和本地化**:Struts2支持多语言,可以通过资源文件来实现。 10. **异常处理**:Struts2提供了一套完整的异常处理机制,可以自定义错误页面和异常处理器。 总的来说,"struts2jar.zip"压缩包是一个实用...
12. **Plugin架构**: 支持插件扩展,如Struts2的Ajax支持、国际化等,都可通过插件实现。 13. **依赖注入 (DI) 和 Inversion of Control (IoC)**: Struts2支持通过Spring等容器实现依赖注入,增强组件的解耦合。 ...
6. **国际化与主题支持**:Struts2支持多语言环境,可以通过资源文件实现应用的国际化。同时,它还提供了多种主题和样式,可以改变UI的外观和布局。 7. **插件架构**:Struts2的插件机制允许扩展其功能,例如Struts...
其中,`struts-config.xml` 主要用于配置Action映射、表单验证规则、国际化资源等;而 `web.xml` 是标准的Servlet容器配置文件,用于配置Servlet和其他Web组件。 **表单验证**是Struts框架的一项重要特性,它允许...
8. **国际化与本地化**:Struts2支持多语言环境,通过资源包(Properties文件)实现国际化和本地化。 深入研究Struts2源码,开发者可以更清楚地理解框架的工作原理,从而优化应用性能,解决实际问题,甚至为框架...
4. **国际化与本地化**:Struts2提供了强大的I18N支持,示例可能会包含如何处理不同语言和地区的设置。 5. **表单验证**:Struts2的验证框架允许开发者在服务器端对用户输入进行验证。示例可能包含如何定义验证规则...
Struts2拥有强大的插件系统,例如,Tiles插件用于管理复杂的页面布局,JSON插件支持AJAX请求,i18n插件实现国际化等。 6. **实战示例** 在"demo例子"中,可能包含了一个简单的Struts2项目,包括Action类、配置...
6. **Plug-in(插件)**:Struts2允许通过插件扩展其功能,比如,国际化、文件上传、日期时间处理等。这些插件可以方便地集成到项目中,增强应用的功能。 7. **Freemarker或Velocity模板**:Struts2支持使用...