1.国际化的目标
1)如何配置国际化资源文件
①Action 范围资源文件:
在Action类文件所在的路径建立命名规则ActionName_language_country.properties 的文件
②包范围资源文件:
在包的根路径下建立文件名为package_language_country.properties 的属性文件,一旦建立,
处于该包下的所有 Action 都可以访问该资源文件。注意:包范围资源文件的 baseName 就是package,
不是Action所在的包名。
③全局资源文件:命名方式: basename_language_country.properties
struts.xml
<constant name="struts.custom.i18n.resources" value="baseName"/> struts.properties struts.custom.i18n.resources=baseName
④临时指定资源文件:<s:i18n.../> 标签的 name 属性指定临时的国际化资源文件
⑤各种国际化资源加载顺序:距离当前Aciton较近的配置优先被加载。Action>package>全局
2)如果在页面上和Aciton类中访问国际化资源
① 在Action类中,若Action实现了TextProvider接口,则可以调用getText()获得value值。
②页面上可以使用<s:text 标签;对于表单标签可以使用表单标签的Key属性值
-->若有占位符,则可以使用s:text的s:param 子标签来填充占位符
-->若页面来自Action,则可直接访问Aciton的值栈中的属性值
3)实现通过超链接切换语言
下面是实例
一、配置全局国际化文件,使用 表单标签的key属性。
index.jsp 加载后可根据语言自动选择,实现国际化
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:form action="" >
<!-- %{}强制OGNL解析,从资源文件中获取文件值
因为此时在对象栈中,有DefaultTextProvider的一个实例
,该类提供getText方法可以访问
-->
<s:textfield name="username" label="%{getText('username')}"></s:textfield>
<!-- 这个是key值对应的是国际化文件中的key -->
<s:textfield name="username" key="username"></s:textfield>
<s:password name="password" key="password"></s:password>
<s:submit key="submit"></s:submit>
</s:form>
</body>
</html>
src下的struts.xml 和国际化文件
<struts>
<!-- 配置国际化资源文件 -->
<constant name="struts.custom.i18n.resources" value="i18n"></constant>
<package name="default" namespace="/" extends="struts-default">
</package>
</struts>
i18n_en_US.properties 英文(对应中文/i18n_zh_CN.properties不贴了)
username=UserName
password=Password
time=Time:{0}
submit=submit
二,如果页面的 使用的simple主题,则key属性失效,需要单独是用s:text标签,如下
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:form action="" theme="simple">
<!-- %{}强制OGNL解析,从资源文件中获取文件值
因为此时在对象栈中,有DefaultTextProvider的一个实例
,该类提供getText方法可以访问
-->
<s:text name="username"/><s:textfield name="username" label="%{getText('username')}"></s:textfield>
<!-- 这个是key值对应的是国际化文件中的key -->
<s:text name="username"/><s:textfield name="username" key="username"></s:textfield>
<s:text name="password"/><s:password name="password" key="password"></s:password>
<s:submit key="submit" value="%{getText('submit')}"></s:submit>
</s:form>
</body>
</html>