热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:struts2国际化

篇首语:本文由编程笔记#小编为大家整理,主要介绍了struts2国际化相关的知识,希望对你有一定的参考价值。1、概念  &n

篇首语:本文由编程笔记#小编为大家整理,主要介绍了struts2国际化相关的知识,希望对你有一定的参考价值。



1、概念

         软件的本地化:一个软件在某个国家或者地区使用时,采用该国家或者地区的语言,数字,货币,日期等习惯。

         软件的国际化:软件在开发时,让它能支持多个国家和地区的本地化应用。使得应用软件能够适应多个地区的语言和文化风俗习惯。

 


2、资源文件资源包

要用struts实现国际化和本地化,首先要定义资源文件的名称,这个文件会包含默认语言编写的会在程序中出现的信息。这些信息以“键值对”的形式存储,如下:

Error,validation,location=The entered location is invalid

当对一个应用程序进行国际化处理时,所有用的各种语言版本的’标签”信息应该存放在不同的属性文件中,每一个这样的文件对应一种语言版本。所有属性文件合在一起称为资源包(Resource Bundle)。

属性文件的命名格式可以分为下面两种:

         文件名前缀.properties

         文件名前缀_语言种类.properties,前缀可以自由书写,其中语言种类字段必须是有效的ISO语言代码。

文件名前缀.properties默认的形式,当其他属性文件找不到的时候,会默认的寻找此属性文件。

  例子:

  英文资源包:resouces_en_US.properties


items.username=username_en
items.psw
=password_en
items.login
=login_en
items.param
=firstName_en\:{0} lastName_en\:{1}

  中文资源包:resouces_zh_CN.properties

技术分享

默认资源包:resouces.properties

  


items.username=username
items.psw
=password
items.login
=login
items.param
=firstName\:{0} lastName\:{1}

 


3、针对不同的国家定义不同的资源文件

资源文件的命名:基名_国家代码_语言代码.properties

         默认名:基名.properties

定义不同的资源文件

         中文的资源文件

                   中文名:resources_zh_CN.properties

                   文件内容:item.username=用户名

         英文的资源文件

                   文件名:resources_en_US.properties

                   文件内容:item.username=username_en

默认的资源文件

                   文件名:resources.properties

                   文件内容:item.username=username

 

 4、实现国际化

两种方式:1、在struts.xml中加载所有资源文件,然后在jsp文件中可以直接使用struts的text标签达到效果。

在struts.xml中加载资源文件:



"struts.custom.i18n.resources"
value
="cn.itcast.converter.converter,
cn.itcast.i18n.resouces_en_US,
cn.itcast.i18n.resouces_zh_CN,
cn.itcast.i18n.resouces
"/>

使用struts标签实现国际化:


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path
= request.getContextPath();
String basePath
= request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">


<base href="<%=basePath%>">



"pragma" cOntent="no-cache">
"cache-control" cOntent="no-cache">
"expires" cOntent="0">
"keywords" cOntent="keyword1,keyword2,keyword3">
"description" cOntent="This is my page">






"loginForm" method="post" action="${pageContext.request.contextPath }/i18n/i18nAction_login.do">

"1">















"items.username"/> "text" name="username"/>
"items.psw"/> "password" name="psw"/>
  "submit" value=""items.login"/>"/>




 

方式2:

  不需要再struts.xml中记载资源文件。在jsp中使用标签实现

I18n标签:用来加载一个自定义的ResourceBundle.不用做任何配置

         Name:将被加载的资源集的java完全限定名

        

        

         Resource为类路径下资源文件的基本名

例子:


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path
= request.getContextPath();
String basePath
= request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
"-//W3C//DTD HTML 4.01 Transitional//EN">


<base href="<%=basePath%>">



"pragma" cOntent="no-cache">
"cache-control" cOntent="no-cache">
"expires" cOntent="0">
"keywords" cOntent="keyword1,keyword2,keyword3">
"description" cOntent="This is my page">






"cn.itcast.i18n.resouces">

"loginForm" method="post" action="${pageContext.request.contextPath }/i18n/i18nAction_login.do">

"1">












"items.username"/> "text" name="username"/>
"items.psw"/> "password" name="psw"/>
  "submit" value=""items.login"/>"/>






 

5、国际化资源文件中的配置信息使用通配符,参数。

  在properties文件中使用通配符,然后struts标签中拥有注入参数的方式,使用的类似MessageFormat方式

  资源文件中的value部分类似这种形式: 


items.param=firstName\:{0} lastName\:{1}

  例子:

    


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path
= request.getContextPath();
String basePath
= request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
"-//W3C//DTD HTML 4.01 Transitional//EN">


<base href="<%=basePath%>">



"pragma" cOntent="no-cache">
"cache-control" cOntent="no-cache">
"expires" cOntent="0">
"keywords" cOntent="keyword1,keyword2,keyword3">
"description" cOntent="This is my page">




"items.param">
"firstName">郭
"lastName">大侠



 

6、在action中获取资源文件中的属性值。

ActionSupport类实现了TextProvider接口,该接口负责提供对各种资源包和他们的底层文本信息的访问机制

当调用getText()方法时,它将按照以下顺序搜索相关的属性文件

         Action类的属性文件:该文件的名字与相关动作类的名字一样,并且和那个动作类存放在同一个目录下。

动作类实现的各个接口的属性文件

动作类的各个父类的属性文件

动作类的各个父类所实现的各个接口的属性文件

如果动作类实现了ModelDriven接口,Struts将调用getModel()方法并从模型对象的类开始沿着类的继承关系并进行一次上溯搜索

默认的包的属性文件

继承关系中的下个父包里的资源包

 

代码:


package cn.itcast.i18n;
import com.opensymphony.xwork2.ActionSupport;
public class I18nAction extends ActionSupport {

/**
*
*/
private static final long serialVersiOnUID= 1L;
public String login(){
System.
out.println("I18nAction ******* login");

String username
=this.getText("items.username");
System.
out.println("username = "+username);

String psw
=this.getText("items.psw");
System.
out.println("psw = "+psw);


return "success";
}
}

 


推荐阅读
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 在本文中,我们将为 HelloWorld 项目添加视图组件,以确保控制器返回的视图路径能够正确映射到指定页面。这一步骤将为后续的测试和开发奠定基础。首先,我们将介绍如何配置视图解析器,以便 SpringMVC 能够识别并渲染相应的视图文件。 ... [详细]
  • 一、Tomcat安装后本身提供了一个server,端口配置默认是8080,对应目录为:..\Tomcat8.0\webapps二、Tomcat8.0配置多个端口,其实也就是给T ... [详细]
  • Spring Data JdbcTemplate 入门指南
    本文将介绍如何使用 Spring JdbcTemplate 进行数据库操作,包括查询和插入数据。我们将通过一个学生表的示例来演示具体步骤。 ... [详细]
  • 在HTML布局中,即使将 `top: 0%` 和 `left: 0%` 设置为元素的定位属性,浏览器中仍然会出现空白填充。这个问题通常与默认的浏览器样式、盒模型或父元素的定位方式有关。为了消除这些空白,可以考虑重置浏览器的默认样式,确保父元素的定位方式正确,并检查是否有其他CSS规则影响了元素的位置。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
author-avatar
书友48919914
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有