`

struts国际化,资源文件读取二

阅读更多
package com.lwf.struts.util;

import java.text.MessageFormat;
import java.util.Date;
import java.util.Locale;
import java.util.ResourceBundle;

public class Testl18n {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		//测试国际化:打开IE浏览器,语言>>可添加其它国家语言,并放在最上面。这样系统读到的就是这个语言了。
		//下面演示从系统获得语言设置
		Locale locale = Locale.getDefault();
		String country = locale.getCountry();
		String lang = locale.getLanguage();
		
		
		ResourceBundle bundle =ResourceBundle.getBundle("ApplicationResources", locale);
		String message = bundle.getString("user.pwd.null");
		System.out.println(message);
		
		//以下演示自定义语言设置
		Locale locale1 = new Locale("en", "us");
		ResourceBundle bundle1 =ResourceBundle.getBundle("ApplicationResources", locale1);
		message = bundle1.getString("user.pwd.null");
		System.out.println(message);
		
		//以下演示显示参数
		//MessageFormat用法一
		MessageFormat format = new MessageFormat(message);
		String megFormat = format.format(new Object[]{new Date()});
		System.out.println(megFormat);
		
		
		
		//MessageFormat用法二
		 int planet = 7;
		 String event = "a disturbance in the Force";
		 String result = MessageFormat.format(
		     "At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.",
		     planet, new Date(), event);
		 System.out.println(result);

		
	}

}

 

在src目录下两个资源文件ApplicationResources_zh_CN.txt文件内容,将其转换成ApplicationResources_zh_CN.properties

user.pwd.null = 用户名不能为空,参数:{0}

ApplicationResources_en_US.properties内容为:

user.pwd.null = user or pwd must not null param :{0}

程序运行结果为:

用户名不能为空{0}
user or pwd must not null param :{0}
user or pwd must not null param :10-4-2 下午5:07
At 17:07:45 on 2010-4-2, there was a disturbance in the Force on planet 7.

 

 

我们来看Struts中源码是怎么处理国际化的:

protected void processLocale(HttpServletRequest request,
        HttpServletResponse response) {
        // Are we configured to select the Locale automatically?
        if (!moduleConfig.getControllerConfig().getLocale()) {
            return;
        }

        // Has a Locale already been selected?
        HttpSession session = request.getSession();

        if (session.getAttribute(Globals.LOCALE_KEY) != null) {
            return;
        }

        // Use the Locale returned by the servlet container (if any)
        Locale locale = request.getLocale();

        if (locale != null) {
            if (log.isDebugEnabled()) {
                log.debug(" Setting user locale '" + locale + "'");
            }

            session.setAttribute(Globals.LOCALE_KEY, locale);
        }
    }

 

源码显示如果session中没有设置locale则从request中读取,并创建新的Locale然后再存放到session中。

那么我们可以在页面上包含设置locale的地方,设置完后放入session中。

如下代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page import="java.util.Locale,org.apache.struts.*" %>
    <%@include file="share/jsp_head_include.jspf" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

<%
	Locale locale = new Locale("zh","cn");
	session.setAttribute(Globals.LOCALE_KEY,locale);
%>
<bean:message key="login.fail" /><br>

<%
%>
</body>
</html>

 

注意上面的页面中新建了Locale对象,并放入session中,Globals.LOCALE_KEY正是struts源码中的session.getAttribute的key值。

 

通常的做法是提供设置中文,英文等checkbox客户选择后,保存.我们就象上面JSP中做法一样,新建Locale并把它放入session中.

 

再看看资源文件路径的问题:

上面我们测试的时候是把资源文件放在src的根目录,如果现在把资源文件放在com.lwf.struts.util.property包下面。那么测试的代码应该

由:
ResourceBundle bundle =ResourceBundle.getBundle("ApplicationResources", locale);
改成:
ResourceBundle bundle =ResourceBundle.getBundle("com.lwf.struts.util.property.ApplicationResources", locale);
就可以了

 

而对于struts来说只需要配置文件修改一下就行:

由:
<message-resources parameter="ApplicationResources" />
改成:
<message-resources parameter="com.lwf.struts.util.property.ApplicationResources" />

 

即可

分享到:
评论
1 楼 hu123456 2010-12-03  
sdffsdf

相关推荐

    STRUTS2国际化的问题

    ### STRUTS2国际化的问题 #### 一、Struts2国际化的概述 Struts2作为一个流行的Web应用框架,为了满足全球用户的使用需求,提供了一系列国际化(Internationalization, 简称I18N)的支持。这包括了如何在配置文件...

    Struts2_国际化

    在JSP页面中,使用Struts2的标签库中的标签来读取并显示国际化资源文件中的文本。 在编写国际化资源文件时,需要注意编码方式。由于国际化资源文件中可能包含中文或其他非ASCII字符,为了防止页面出现乱码,所有的...

    struts2实现文件下载功能

    - 在`execute()`方法中,实现文件路径的获取和文件读取逻辑。通常,文件存储在服务器的某个目录下,可以使用`java.io.File`类来处理。 2. **设置返回结果**: - 在Action类中,设置返回值(Result)为`stream`...

    一个利用struts做的简单国际化

    2、提供不同版本的国际化资源文件,中文需要采用native2ascii转换成unicode 3、在jsp中采用标签来读取国际化消息文本 4、了解利用struts默认将locale放到session中的特性,完成采用编程的方式切换语言设置,设置...

    国际资源化struts

    2. **资源配置**:在Struts配置文件(如`struts-config.xml`或`struts2的struts.xml`)中,我们需要配置资源文件的位置,使Struts框架知道在哪里查找这些文本。例如: ```xml &lt;constant name="struts.i18n....

    struts2 配置文件

    - `&lt;message-resources&gt;`: 国际化资源文件配置。 - `&lt;plug-in&gt;`: 插件配置。 ##### 2. 关键配置项 - **`&lt;form-bean&gt;`**: - 定义表单Bean的属性和验证规则。 - **`&lt;action-mapping&gt;`**: - 映射Action的执行逻辑...

    struts1整合jfreechar,读取EXCEL数据

    2. Action使用POI读取Excel文件并处理数据。 3. 数据被转换为JFreeChart的数据集。 4. 使用JFreeChart创建图表对象。 5. 如果需要,可以使用`ChartUtilities`将图表保存为图片文件。 6. 在Action中设置响应结果,...

    Struts国际化例子

    2. **配置Struts**:在Struts的配置文件(struts-config.xml)中,需要指定资源包的位置。这可以通过`&lt;message-resources&gt;`标签来完成,例如: ```xml ``` 这里,`parameter`属性指向资源包的包名和类名(通常...

    struts2_uploadify带进度条的多文件上传下载

    Struts2提供了丰富的功能,包括动作调度、结果渲染、数据校验、国际化、异常处理等,极大地简化了Java Web开发。 Uploadify是一款基于jQuery的文件上传组件,它支持Ajax方式的异步上传,允许用户在上传文件过程中...

    Jinto实现struts国际化的插件

    通过Eclipse的插件系统,开发者可以直接在IDE内完成大部分国际化相关的任务,而无需频繁地在代码和资源文件之间切换。 总的来说,JInto是Struts开发者实现国际化的一个有力工具,它通过与Eclipse的紧密集成,简化了...

    Struts2文件流方式导出下载excel、Txt、image图片

    Struts2提供了文件流的方式来实现这一需求,这种方式避免了在服务器上生成临时文件,提高了效率并减少了服务器存储空间的占用。下面将详细讲解如何使用Struts2的文件流技术来实现这些功能。 首先,我们需要理解文件...

    struts 国际化应用

    2. **国际化配置**:在struts-config.xml中,我们需要配置`&lt;message-resources&gt;`元素来指定资源包的位置和加载策略。例如,`&lt;message-resources parameter="com.example.i18n.messages" /&gt;` 指定了名为"messages"的...

    struts2国际化

    Struts2会读取这个参数并加载相应的资源文件。 7. **国际化与视图结合**: - 在JSP页面中,可以直接将资源文件的值引入到页面元素中,例如: ```jsp ``` 8. **使用工具**: - 开发过程中,可以使用一些工具...

    struts1 文件上传 文件下载

    2. **大小限制**:设置上传文件大小的上限,防止过大文件耗尽服务器资源。 3. **文件类型检查**:仅允许特定类型的文件上传,避免恶意文件上传。 4. **存储位置**:将上传文件存储在安全目录,避免暴露敏感信息或...

    struts2上传图国际资源

    二、Struts2国际资源文件 1. **资源文件**:国际资源文件(如.properties或.resx文件)用于存储不同语言的文本。在Struts2中,这些文件通常放在`src/main/resources`目录下,并以`messages_xx_XX.properties`的格式...

    Struts的文件下载

    在Struts中实现文件下载是一项常见的功能,尤其在处理用户请求获取服务器上的静态或动态资源时。这篇博文将深入探讨如何在Struts框架下实现文件下载的功能。 首先,我们需要了解文件下载的基本原理。当用户点击下载...

    struts中文资源文件转换工具

    资源文件通常包含应用程序的国际化(i18n)信息,如错误消息、提示和界面文本,这些内容往往需要根据不同的语言进行本地化。在Struts中,这些资源通常是以.properties为扩展名的文件,例如`messages_zh_...

    第六章JAVA框架_STRUTS国际化与连接池_实验指导书.doc

    3. **实现Struts国际化**:在Struts框架中,可以通过配置文件指定不同语言版本的资源文件路径。当用户访问应用时,Struts会根据用户的`Locale`加载相应的资源文件。 #### 难点提示 1. **设定本地语言**:需要根据...

    struts国际化

    开发过程中,可以使用各种工具辅助管理资源文件,如Eclipse的Resource Bundle Editor或专门的国际化工具插件,它们能帮助同步和校对不同语言版本的文本。 6. **StrutsLocaleTest项目** `StrutsLocaleTest`项目很...

Global site tag (gtag.js) - Google Analytics