不适用Struct2内置的方式配置资源文件
1,在创建后缀为_语言_国家.properties文件(message_en_US.properties,message_zh_CN.properties)
register.username=用户名
register.password=密码
register.submit=注册
2,使用java提供的ResourceBundle类可以读取资源包的国际化配置文件
public class I18NTest {
@Test
public void test1(){
//不指定Locale.US 则读取默认文件
ResourceBundle bundle = ResourceBundle.getBundle("org.ccit.com.resources.message",Locale.US);
System.out.println(bundle.getString("register.username"));
System.out.println(bundle.getString("register.password"));
System.out.println(bundle.getString("register.submit"));
}
}
3,在jsp中使用国际化
<%
Locale aDefault = Locale.getDefault();
ResourceBundle bundle = ResourceBundle.getBundle("org.ccit.com.resources.message",aDefault);
%>
<form>
<%=bundle.getString("register.username") %>:<input type="text" name="username"/><br>
<%=bundle.getString("register.password")%>>:<input type="password" name="password"/><br>
<input type="submit" value="<%=bundle.getString("register.submit")%>>">--%>
</form>
使用Struts提供的国际化
1,创建固定格式名称的资源包 在struts.xml配置全局的资源包
<struts>
<constant name="struts.custom.i18n.resources" value="org.ccit.com.resources.message"></constant>
</struts>
2,在对应包内创建资源包 命名规范:package_语言代码_国家代码.properties
3,在对应action同一目录下创建资源包 命名规范:动作类名称_语言代码_国家代码.properties
资源包调用顺序
局部资源包 包范围内资源包 全局资源包
jsp读取资源文件
在jsp页面中使用struts2内置的表单标签
<s:form action="register" namespace="/user" >
<s:textfield label="register.username" requiredLabel="true" requiredPosition="left"></s:textfield><br>
<s:password label="register.password" requiredLabel="true" showPassword="true"></s:password><br>
<s:submit value="register.submit" ></s:submit>
</s:form>
在jsp页面可以使用s:i18n标签指向读取的国际资源包文件
<s:form action="register" namespace="/user" >
<s:i18n name="org.ccit.com.resources.message">
<!-- <s:textfield label="register.username" requiredLabel="true" requiredPosition="left"></s:textfield><br>-->
<!-- <s:password label="register.password" requiredLabel="true" showPassword="true"></s:password><br>-->
<!-- <s:submit value="register.submit" ></s:submit>-->
</s:i18n>
</s:form>
action内读取资源文件
public String register(){
//使用getText方法获取
String username=getText("register.username");
System.out.println(username);
return NONE;
}