struts2 国际化(本地化)

        在实际开发中,我们的程序服务的是全球的对象。因此,我们要使程序在不做任何修改的情况下可以在不同的国家和地区和不同预压环境下,按照当地的语言和格式习惯显示字符。例如:对于中国大陆的用户,自动显示简体中的提示、错误信息等;而对于美国的用户,自动显示英文的提示信息、错误信息等。这就引出了struts2框架的"国际化"。

操作步骤:

  1. 创建资源文件
  2. 加载配置资源文件
  3. 在jsp页面使用资源文件。i 引用struts标签  ii获取资源文件内容

一、创建资源文件:

    一个资源包由多个文件组成,这些文件名都必须按规范命名:主文件名_语言代码_国家代码.properties。语言代码和国家代码按ISO规定。如下配置两个资源文件(注意主文件名必须):

    美式英语资源文件:wgh_en_US.properties。

loginTitle=login
loginName=username
loginPassword=password

    中文资源文件:wgh_zh_CN.properties。

loginTitle=\u767B\u5F55
loginName=\u7528\u6237\u540D
loginPassword=\u5BC6\u7801

    需要注意的是,在后缀名为properties的文件中,因为编码格式不同,里面的汉字均以其他编码格式显示。   

将资源文件均放置到src目录底下,与struts.xml同级。

二、加载配置。

在struts.xml如下配置,标红部分为配置资源资源文件的标签。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
          "http://struts.apache.org/dtds/struts-2.5.dtd">
          
<struts>
	<!-- 修改default.properties常量 -->
	
	<!-- 配置action的后缀名,如果有多个以逗号隔开 -->
    <constant name="struts.action.extension" value="action,,do,html"></constant>
	<!-- 配置是否为开发模式,报错更详细。如果项目上线,需关闭,设置value为false -->
	<constant name="struts.devMode" value="true"></constant>
	<!-- 配置xml是否重新加载。开发时设置为true,上线后设置为false -->
	<constant name="struts.configuration.xml.reload" value="true"></constant>
	<!-- 配置浏览器是否缓存,开发时设置为false。上线后需设置为true -->
	<constant name="struts.serve.static.browserCache" value="false"></constant>
	<!-- 配置国际化语言设置 name为固定格式 value 填写自己创建的properties中配置文件的主文件名-->
	<constant name="struts.custom.i18n.resources" value="wgh"/>
	
	<package name="root" extends="struts-default">
		<action name="login">
			<result name="success">/international.jsp</result>
		</action>
	</package>

</struts>
1三、页面使用国际化显示
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Internation</title>
</head>
<body>
	<h1>
		<s:text name="loginTitle"></s:text>
	</h1>
	
	<div>
		<s:text name="loginName"></s:text>: <input type="text" placeholder="<s:text name='loginName'></s:text>">
		<br>
		<s:text name="loginPassword"></s:text>: <input type="password" placeholder="<s:text name='loginPassword'></s:text>">
		<br>
		<button>
			<s:text name="loginTitle"></s:text>
		</button>
	</div>
	<!-- 当我们访问name为login 的action时,肯定会经过i18n的拦截器,在此拦截器
		中会获取到我们提交的request_locale参数,根据参数的值我们当前界面会从
		对应的properties文件中按照键获取值,例如参数为zh_CNname就从xalo_zh_CN中按照键取值
	 -->
 		<a href="login.action?request_locale=zh_CN"><s:text name="chinese"></s:text></a>  
		<a href="login.action?request_locale=en_US"><s:text name="english"></s:text></a> 
	
</body>
</html>
至此启动服务器就可以尝试了。

猜你喜欢

转载自blog.csdn.net/qq_42401622/article/details/80976010