`
1028826685
  • 浏览: 940749 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类

国际化-配置全局资源与输出国际化信息及带占位符

阅读更多
知识点:

<1、国际化:

准备资源文件,资源文件的命名格式如下:
baseName_language_country.properties
baseName_language.properties
baseName.properties
其中baseName是资源文件的基本名,我们可以自定义,但language和country必须是java支持的语言和国家。如:
中国大陆: baseName_zh_CN.properties
美国: baseName_en_US.properties

现在为应用添加两个资源文件:
第一个存放中文:itcast_zh_CN.properties
内容为:welcome=欢迎来到传智播客
第二个存放英语(美国): itcast_en_US.properties
内容为: welcome=welcome to itcast

对于中文的属性文件,我们编写好后,应该使用jdk提供的native2ascii命令把文件转换为unicode编码的文件。命令的使用方式如下:
native2ascii  源文件.properties  目标文件.properties

<2、配置全局资源与输出国际化信息:

当准备好资源文件之后,我们可以在struts.xml中通过struts.custom.i18n.resources常量把资源文件定义为全局资源文件,如下:
<constant name="struts.custom.i18n.resources" value="itcast" />
itcast为资源文件的基本名。

后面我们就可以在页面或在action中访问国际化信息:
在JSP页面中使用<s:text name=“”/>标签输出国际化信息:
<s:text name=“user”/>,name为资源文件中的key
在Action类中,可以继承ActionSupport,使用getText()方法得到国际化信息,该方法的第一个参数用于指定资源文件中的key。
在表单标签中,通过key属性指定资源文件中的key,如:
<s:textfield name="realname" key="user"/>

<3、国际化—输出带占位符的国际化信息:

资源文件中的内容如下:
welcome= {0},欢迎来到传智播客{1}

在jsp页面中输出带占位符的国际化信息
<s:text name="welcome">
  <s:param><s:property value="realname"/></s:param>
<s:param>学习</s:param>
</s:text>

在Action类中获取带占位符的国际化信息,可以使用getText(String key, String[] args)或getText(String aTextName, List args)方法。




照样实现步骤如下:

第一步:按照上面知识点规则编写国际化配置文件(全局范围)
名字:myresource_en_US.properties、myresource_zh_CN.properties

注意:在包范围的国际化资源:

首先是文件的命名package_en_US.properties、package_zh_CN.properties
然后是将这些包范围的文件放在包下就可以了。他们的访问顺序是先从包范围中寻找资源如果没有资源就继续向上层包中寻找如果包中都没有就从全局资源文件中寻找


注意:在Action范围的国际化资源:


这里因为是Action范围中的所有这里指定了资源文件名为这个Action的名称同样放在这里Action所在的包中(globalResourceAction是Action的名字)
首先是文件的命名globalResourceAction_en_US.properties、package_zh_CN.properties
然后是将这些包范围的文件放在包下就可以了。他们的访问顺序是先从包范围中寻找资源如果没有资源就继续向上层包中寻找如果包中都没有就从全局资源文件中寻找



注意: 国际化—JSP中直接访问某个资源文件


struts2为我们提供了<s:i18n>标签,使用<s:i18n>标签我们可以在类路径下直接从某个资源文件中获取国际化数据,而无需任何配置:
<s:i18n name="itcast">
    <s:text name=“welcome”/>
</s:i18n>
Itcast为类路径下资源文件的基本名。

如果要访问的资源文件在类路径的某个包下,可以这样访问:

//访问指定包范围的国际化资源
<s:i18n name="com/liyong/globalResource/package">
  <s:text name="welcome">
  <s:param>小张</s:param>
  </s:text>
</s:i18n>

//访问指定Action范围的国际化资源
<s:i18n name="com/liyong/globalResource/globalResourceAction">
  <s:text name="welcome">
  <s:param>小张</s:param>
  </s:text>
</s:i18n>

上面访问cn.itcast.action包下基本名为package的资源文件。





内容:welcome={0} welcome {1}、welcome={0} \u6B22\u8FCE {1}
注意:这是myeclipse7.1会自动转换为unicode 见知识点。

文件放在类路径下也就是src后着lib目录下

第二步:配置structs.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!--下面常量指定资源文件基础名-->
<constant name="struts.custom.i18n.resources" value="myresource" />
   <package name="itcast" namespace="/test" extends="struts-default">
          <action name="golbalResource" class="com.liyong.globalResource.globalResourceAction"  >
<result name="message">/WEB-INF/page/message.jsp</result>
<!-- 访问路径 http://localhost:8080/Structs2/test/sevletScope -->
        </action>
    </package>
</struts>

第三步:编写页面index.jsp文件


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">   
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
  </head>
 
  <body>
<!--这里标签访问全局资源文件的key=welcome 其中传递两个参数
为对应的占位符-->
    <s:text name="welcome">
<s:param>liyong</s:param>
<s:param>come here !</s:param>
</s:text>
  </body>
</html>



第四步:这里为了在Action中访问资源文件编写action 名称:globalResourceAction

public class globalResourceAction extends ActionSupport{

private String message;

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}

@Override
public String execute() throws Exception {
//下面获得的资源中第二个参数是占位符中对应的值
message=this.getText("welcome",new String[]{"liyong","come here!"});
return "message";
}


}
第五步:编写一个返回视图 messag.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
   
    <title>My JSP 'message.jsp' starting page</title>
   
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">   
  </head>
 
  <body>
${message }<br/>

  <br/>
  <s:debug></s:debug>
  </body>
</html>

第六步:部署

访问页面:http://localhost:080/Native/index.jsp
访问action:http://localhost8080/Native/test/golbalResource

注意:改变浏览器的语言设置环境可以看到在不同的语言环境中出现不同语言内容:welcome={0} welcome {1}、welcome={0} \u6B22\u8FCE {1}
注意:这是myeclipse7.1会自动转换为unicode 见知识点。

分享到:
评论

相关推荐

    09 Spring IoC容器ApplicationContext如何实现国际化慕课专栏1

    2. MessageFormat:格式化输出字符串,处理占位符。 3. ResourceBundle.Control:自定义加载策略,以优化资源文件的查找。 理解这些基本概念和机制后,我们可以灵活地在Spring应用中实现国际化,为全球用户提供更加...

    struts2.1国际化文档

    - 对于带有占位符的消息,可以使用`getText(key, String[])`或`getText(key, List)`,例如`getText("welcome", new String[]{"第一个占位符的值", "第二个占位符的值"})`。 4. **配置用户环境**: 用户的浏览器...

    Struts2的国际化

    值得注意的是,当与表单标签结合使用时,如`('login.username')}" /&gt;`,`%{}`占位符用于获取国际化字符串,而非直接显示`getText('login.username')`。 #### 三、Struts2资源文件的参数化 Struts2支持资源文件中的...

    美河原创视频Struts 2.0视频配套PPT

    - 当需要填充占位符时,可以借助Java的MessageFormat类,它提供了一种灵活的方式来格式化输出,对应于资源文件中的占位符。 7. **用户选择语言**: - 用户可以通过界面选择语言,开发人员可以在Action中调用 `...

    企业级java_II综合测试(完整版)分享.pdf

    - `s:text`标签用于显示国际化文本,可以包含占位符,例如`${key}`。 以上内容详细介绍了Struts2、Spring和Hibernate等Java企业级开发框架的关键知识点,以及相关的OGNL表达式、国际化和资源文件管理等内容。这些...

    Velocity初始化过程解析

    2. 初始化一个VelocityContext对象,并向其中添加键值对,这些值将在模板中用于替换占位符。 3. 使用VelocityEngine的getTemplate方法加载模板,并调用merge方法,将Context中的值与Template结合,生成最终输出。 ...

    面试--Mybatis部分.pdf

    - 参数传递繁琐,MyBatis通过参数映射机制,允许直接使用Java对象作为参数,匹配SQL中的占位符。 - 结果集解析复杂,MyBatis通过结果映射功能,自动将查询结果转换为Java对象,简化了解析过程。 2. MyBatis编程...

    freemarker-2.3.19.jar

    静态文本是最终输出的一部分,而动态占位符则会被实际的值替换。例如,`Hello, ${name}`中的`${name}`就是一个动态占位符,它将在运行时被Java对象的属性值替换。 2. **数据模型(Data Model)**:数据模型是...

    PLSQL Developer操作手册

    - 编译时根据用户输入或预定义值替换这些占位符。 #### 四、测试程序 ##### 4.1 创建测试脚本 - 新建一个测试脚本文件,编写测试用例。 - 可以包含各种SQL语句和PL/SQL代码块。 ##### 4.2 运行测试脚本 - 选择测试...

    kettle手册

    - **空操作-什么都不做(Dummy-do nothing):** 仅作为占位符的步骤。 通过以上详细介绍,我们可以看到 Kettle 不仅仅是一款简单的 ETL 工具,它拥有丰富的功能和灵活的配置选项,能够满足不同场景下的数据处理...

    2021-2022计算机二级等级考试试题及答案No.19277.docx

    母版:包含已设定格式的占位符,用于统一风格。 - C. 版式:布局的具体设计。 - D. 样式:特定的文字和段落格式。 - **正确答案**: B.母版 #### 5. 二叉树后序遍历 - **知识点**: 数据结构中的二叉树遍历。 - *...

    mybatis学习笔记

    ”作为占位符。 4. **获取PreparedStatement**:通过`Connection`创建预编译语句对象。 5. **设置参数**:设置SQL语句中的参数。 6. **执行查询**:调用`executeQuery()`方法执行SQL查询。 7. **处理结果集**:...

    J2EE经典教程

    - 支持参数占位符,提高SQL执行效率。 - 提高安全性,防止SQL注入攻击。 ##### 3.3 JDBC事务 - 使用`Connection`对象的`setAutoCommit(false)`方法开启事务。 - 使用`commit()`提交事务。 - 使用`rollback()`回滚...

    Spring Boot参考指南.pdf

    - **属性占位符**:介绍如何使用占位符来引用其他配置项。 - **使用YAML代替Properties**: - **加载YAML**:解释如何加载YAML格式的配置文件。 - **在Spring环境中使用YAML暴露属性**:介绍如何在Spring环境中...

    jsp教程.pdf

    - **5.3.4 参数查询**:使用占位符来代替具体的值。 - **5.3.5 排序查询**:根据指定列对结果进行排序。 - **5.3.6 分析结果集查询**:分析查询结果,提取有用信息。 - **5.3.7 使用统配符查询**:使用SQL中的...

    freemarker手册

    - **模板**:模板是包含静态文本和动态数据占位符的文件,这些占位符在运行时会被实际的数据值所替代。 - **数据模型**:指应用中数据的组织方式,通常是一组对象和它们之间的关系。 - **输出**:最终生成的 HTML ...

    Laravel开发-laravel-translation

    6. **占位符支持**:翻译字符串可以包含动态参数,例如`trans('messages.welcome', ['name' =&gt; 'John'])`,在输出时会替换掉`{name}`。 7. **Pluralization**:Laravel支持复数形式的翻译,通过`transChoice()`函数...

    tensorflow实现ResNet18,34,50,101,152

    - **占位符(Placeholder)**:定义输入数据的接口。 - **层(Layer)**:TensorFlow提供丰富的预定义层,如Conv2D,MaxPooling2D等,便于构建CNN模型。 3. **实现ResNet的关键步骤** - **构建基本残差块**:...

    2021-2022计算机二级等级考试试题及答案No.11967.docx

    PowerPoint幻灯片母版中的占位符 - **知识点**: 日期区用于在每张幻灯片上添加日期。 ### 22. Access查询功能 - **知识点**: 查询不仅可以生成新的数据表,还可以用于数据分析、数据更新等操作。 ### 23. 图片...

Global site tag (gtag.js) - Google Analytics