Strusts2笔记7--国际化
國際化:
國際化是指,使程序在不做任何修改的情況下,就可以使用在不同的語言環境中。國際化在一般性項目中是不常用的。在編程中簡稱 i18n。
國際化是通過讀取資源文件的形式實現的。資源文件的定義與注冊,主要分為全局范圍的、包范圍的、Action范圍的,下面分別介紹:
(1)全局范圍的:
全局資源文件是指,整個應用中所有文件均可訪問的資源文件,其命名要遵循的格式:baseName-language_country.properties
其中baseName是資源文件的基本名,可以自定義。但language和country必須是Java支持的語言和國家的簡稱。例如:myBaseName_en_US.properties
(2)包范圍的:
可以針對不同模塊、不同的action來組織國際化文件。
再要使用該資源文件的java包下,放置以下格式的資源文件:package_language_country.properties。其中,package為固定寫法。例如:package_en_US.properties
(3)Action范圍的:
可以單獨為某個action指定資源文件,只需在Action類所在的包中放置以下格式的資源文件:ActionClassName_language_country.properties。其中ActionClassName是action類的簡單名稱。例如:LoginAction_en_US.properties
綜述:對于前端的某個值來說,如果未指定讀取哪一個范圍的資源文件,則加載資源文件的順序是Action范圍-->包范圍-->全局范圍
下圖是資源文件的放置示意圖:
國際化的代碼:
(1)資源文件的配置(分別是myBaseName_en_US.properties和myBaseName_zh_CN.properties):
解釋:其中的占位符 {0} 是為了實現,為資源文件的動態參數賦值
(2)Action類的代碼:
package com.tongji.actions;import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport{private static final long serialVersionUID = -7398591714651064707L;private String username;private int age;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String execute() {String msg = this.getText("action.out.msg");System.out.println(msg);String[] args = {username}; String msg2 = this.getText("action.out.msg2",args);System.out.println(msg2);return "success";} }
解釋:ActionSupport中的getText方法,是在Action內加載資源文件,第二種實現方式加入了動態參數。
(3)前端頁面代碼:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib uri="/struts-tags" prefix="s"%><html><head><title>index page</title></head><body><a href="test/language.action?request_locale=zh_CN">中文</a><a href="test/language.action?request_locale=en_US">English</a><br><br><s:i18n name="com/tongji/actions/LoginAction"><s:text name="index.form.title" /><br> <!-- 讀取Action范圍資源文件 --></s:i18n><s:i18n name="com/tongji/package"> <!-- 讀取包范圍資源文件 --><s:form action="test/login.action" method="POST"><s:textfield name="username" key="index.form.uname"/><s:textfield name="age" key="index.form.uage"/><s:submit key="index.form.submit"/></s:form></s:i18n></body> </html>
解釋:對于前端的某個值來說,如果未指定讀取哪一個范圍的資源文件,則加載資源文件的順序是Action范圍-->包范圍-->全局范圍;但是,這里指定了讀取指定范圍的資源文件。
(4)struts.xml代碼:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"> <struts><constant name="struts.custom.i18n.resources" value="myBaseName"/><package name="demo" namespace="/test" extends="struts-default"><action name="language"><result>/index.jsp</result></action><action name="login" class="com.tongji.actions.LoginAction"><result>/welcome.jsp</result></action></package> </struts>
解釋:第一次加載頁面,頁面就加載了全局資源文件(如果未指定讀取包范圍或Action范圍的資源文件),這個資源文件的類型(zh_CN,還是en_US,還是其他)由瀏覽器默認指定的。
只有在執行Action時才會自動加載包范圍的或Action范圍的資源文件。因此,如果想在Action未執行前,改變加載的資源文件類型,可以這樣做:
前端:<a href="test/language.action?request_locale=zh_CN">中文</a>
<a href="test/language.action?request_locale=en_US">English</a>
struts.xml配置:<action name="language">
<result>/index.jsp</result>
</action>
目的:是為了讓i18n攔截器起作用,改變其中的request_locale值,從而改變加載的資源文件類型。一旦,request_locale值改變,接下來的Action加載的包范圍的或Action范圍的資源文件都會遵從這個類型。
轉載于:https://www.cnblogs.com/qjjazry/p/6241516.html
總結
以上是生活随笔為你收集整理的Strusts2笔记7--国际化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django回忆录
- 下一篇: 别克凯越原配刹车片什么品牌