<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ∪∩deniable Design

    個(gè)人JAVA版GAE(google app engine),struts2+jpa+jQuery開發(fā),互相交流 http://iunbug.appspot.com/

     

    Struts 筆記
    2008 08 23
        為什么把國際化通稱I18n呢?   你數(shù)數(shù)國際化的單詞 internationalization有幾個(gè)字母?   20個(gè)!   那頭尾各是什么字母?   i和n!   20-2=?   18!   那好請記下:I18n
    一.標(biāo)準(zhǔn)i18n(國際化)操作
    (1)添加資源文件的方式之一:在struts.xml文件中引入資源文件    
    <constant name="struts.custom.i18n.resources" value="資源文件名" />
            添加資源文件的方式之二:創(chuàng)建struts.properties并在添加語句struts.custom.i18n.resources=資源文件名
    (2)在JSP頁面中調(diào)用資源文件的方法:
            1)    使用
    <s:text key / label/>
                    如:
    <s:text name="HelloWorld" />
            2)    使用
    <s:property >
                如:
                
    <!-- 1.取當(dāng)前項(xiàng)目文件中的key(name)叫做HelloWorld 
                                2.使用EL表達(dá)式通過getText方法簡單的獲取國際化字符串
    -->
                
    <s:property value="%{getText('HelloWorld')}" />
                
    <!-- 通過getText設(shè)置UI標(biāo)簽中l(wèi)abel標(biāo)簽的屬性 -->
                
    <s:textfield name="name" label="%{getText('HelloWorld')}" />
    (3)資源文件不同配置的自動查找順序
            第一:通過
    <s:i18n>訪問待定位置的資源文件
            第二:Action范圍的資源文件(只能由Action調(diào)用),資源文件名在Action的類文件的同級目錄下,與Action類名相同.
            第三:包范圍內(nèi)的資源文件(以模塊方式管理資源文件),放在包目錄下.以package_en_zh
            第四:通用性較強(qiáng)的全局資源文件,放在SRC目錄下

    項(xiàng)目樹型圖


    src/struts.xml

     1<?xml version="1.0" encoding="GBK"?>
     2<!DOCTYPE struts PUBLIC
     3         "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
     4         "http://struts.apache.org/dtds/struts-2.0.dtd">
     5<struts>
     6    <!-- 
     7        Struts 2.0有兩個(gè)配置文件,struts.xml和struts.properties都是放在WEB-INF/classes/下。 
     8        struts.xml用于應(yīng)用程序相關(guān)的配置 
     9        struts.properties用于Struts 2.0的運(yùn)行時(shí)(Runtime)的配置
    10        
    11        添加資源文件的方式之一:在struts.xml文件中引入資源文件
    12        添加資源文件的方式之二:在struts.properties下添加語句struts.custom.i18n.resources=globalMessages
    13        1.在Struts當(dāng)中用戶自定義的國際化資源文件,名為globalMessages.
    14        2.value="globalMessages"沒有指定路徑,說明屬性文件在SRC目錄下,此為全局資源文件
    15    -->
    16    <constant name="struts.custom.i18n.resources"
    17        value="globalMessages" />
    18    <include file="struts-default.xml" /><!-- 使用缺省的struts的配置文件 -->
    19
    20    <!-- 包空間 I18nDemo 繼承 struts-default -->
    21    <package name="I18nDemo" extends="struts-default">
    22
    23        <!-- 映射名name="LoginAction" ,使用com.Login.LoginAction來實(shí)現(xiàn) -->
    24        <action name="LoginAction" class="com.Login.LoginAction">
    25            <result>/LoginAction.jsp</result>
    26        </action>
    27    </package>
    28</struts>
    29
    30


    WebRoot/WEB-INF/web.xml

     1<?xml version="1.0" encoding="UTF-8"?>
     2<web-app id="WebApp_ID" version="2.4"
     3    xmlns="http://java.sun.com/xml/ns/j2ee"
     4    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     5    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
     6    <display-name>Struts2Hello</display-name>
     7    <filter>
     8        <filter-name>struts2</filter-name>
     9        <filter-class>
    10            org.apache.struts2.dispatcher.FilterDispatcher
    11        </filter-class><!-- 以過慮器的形式出現(xiàn) -->
    12    </filter>
    13    <filter-mapping>
    14        <filter-name>struts2</filter-name>
    15        <url-pattern>/*</url-pattern><!-- 過慮所有內(nèi)容 -->
    16    </filter-mapping>
    17    <welcome-file-list>
    18        <welcome-file>index.html</welcome-file>
    19        <welcome-file>index.htm</welcome-file>
    20        <welcome-file>index.jsp</welcome-file>
    21        <welcome-file>default.html</welcome-file>
    22        <welcome-file>default.htm</welcome-file>
    23        <welcome-file>default.jsp</welcome-file>
    24    </welcome-file-list>
    25</web-app>
    26


    WebRoot/index.jsp

     1<%@ page contentType="text/html; charset=UTF-8"%>
     2<%@taglib prefix="s" uri="/struts-tags"%>
     3<html>
     4    <head>
     5        <title>Hello World</title>
     6    </head>
     7    <body>
     8        <h2>
     9            <s:text name="HelloWorld" />
    10        </h2>
    11        <h2>
    12            <!-- 
    13            1.取當(dāng)前項(xiàng)目文件中的key(name)叫做HelloWorld 
    14            2.使用EL表達(dá)式通過getText方法簡單的獲取國際化字符串
    15            -->
    16            <s:property value="%{getText('HelloWorld')}" />
    17        </h2>
    18        <!-- 通過getText設(shè)置UI標(biāo)簽中l(wèi)abel標(biāo)簽的屬性 -->
    19        <s:textfield name="name" label="%{getText('HelloWorld')}" />
    20    </body>
    21</html>
    22
    23

    WebRoot/LoginAction.jsp
     1<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
     2<%@ page contentType="text/html; charset=GBK" %>
     3<%
     4    String path = request.getContextPath();
     5    String basePath = request.getScheme() + "://"
     6            + request.getServerName() + ":" + request.getServerPort()
     7            + path + "/";
     8
    %>
     9<%@taglib prefix="s" uri="/struts-tags"%>
    10<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    11<html>
    12    <head>
    13        <title>Login Action</title>
    14    </head>
    15    <!-- 用http://localhost:8080/i18n/LoginAction.action?uname=admin&upass=123顯示頁面 -->
    16    <body>
    17        <!--
    18            1.包范圍內(nèi)的資源文件(以模塊方式管理資源文件)
    19            2.輸出請求文件當(dāng)中tip,user的值.(在LoginAction中已經(jīng)被放入值)
    20         -->
    21        ${requestScope.tip}
    22        <br>
    23        ${sessionScope.user}
    24        <br>
    25
    26        <!--
    27            1.Action范圍的資源文件(只能由Action調(diào)用)
    28             2.輸出標(biāo)準(zhǔn)的request的tip屬性 
    29         -->
    30        <jsp:useBean id="d" class="java.util.Date" scope="page" />
    31        <!-- s:text name="msg"直接從資源文件中取值({0},{1}兩個(gè)值)并顯示 -->
    32        <s:text name="msg">
    33
    34            <%
    35                //給msg的{0}攜帶值
    36            
    %>
    37            <s:param>
    38                <s:property value="uname" />
    39            </s:param>
    40
    41            <%
    42                //給msg的{1}攜帶值
    43            
    %>
    44            <s:param>$pcdyadn</s:param>
    45        </s:text>
    46
    47        <!-- 通過s:i18n訪問待定位置的資源文件,此時(shí)只訪問globalMessages -->
    48        <s:i18n name="globalMessages">
    49            <s:text name="HelloWorld" />
    50        </s:i18n>
    51        <br>
    52        <!-- 通用性較強(qiáng)的全局資源文件 -->
    53        <s:property value="%{getText('HelloWorld')}" />
    54        <br>
    55        <hr>
    56        <!-- 包含 LangSelector.jsp頁面-->
    57        <s:include value="LangSelector.jsp"/>
    58    </body>
    59</html>
    60

    WebRoot/LangSelector.jsp
     1<%@ page language="java" contentType="text/html; charset=GBK"%>
     2
     3<%@taglib prefix="s" uri="/struts-tags"%>
     4
     5<!-- 提交表單的方法 -->
     6<script type="text/javascript">
     7function langSelecter_onChanged()
     8{
     9    document.getElementById("langForm").submit();
    10}

    11
    </script>
    12
    13
    14<!-- 
    15            1.s:set:將用戶的的session中的WW_TRANS_I18N_LOCALE設(shè)置成SESSION_LOCALE,(SESSION_LOCALE已經(jīng)存在)
    16            2.s:bean:執(zhí)行com.locales.Locales類,將內(nèi)容為SESSION_LOCALE得到的值傳入類中的參數(shù)current,
    17                傳值時(shí)如果值為空則選擇為locale(本地)否則選擇為SESSION_LOCALE
    18         -->
    19<s:set name="SESSION_LOCALE" value="#session['WW_TRANS_I18N_LOCALE']" />
    20<s:bean id="locales" name="com.locales.Locales">
    21    <s:param name="current"
    22        value="#SESSION_LOCALE == null?locale:#SESSION_LOCALE" />
    23</s:bean>
    24
    25<!-- 
    26            1.action="<s:url/>":提交給當(dāng)前的地址
    27            2.s:text:獲取資源文件(這里得到的是全局資源文件的里的Key)
    28            3.list="#locales.locales":通過s:bean id="locales"調(diào)用Locales.java中的getLocales()方法
    29         -->
    30<form action="<s:url/>" id="langForm"
    31    style="background-color: #bbbbbb; padding-top: 4px; padding-bottom: 4px;">
    32    <s:text name="languag" />
    33    <s:select label="Language" list="#locales.locales" listKey="value"
    34        listValue="key"
    35        value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"
    36        name="request_locale" id="langSelecter"
    37        onchange="langSelecter_onChanged()" theme="simple" />
    38</form>
    39

    src/com/package_en_US.properties
    succtip=Login success
    failtip=Login failed

    src/com/package_zh_CN.properties
    succtip=\u767B\u5F55\u6210\u529F
    failtip=\u767B\u5F55\u5931\u8D25

    src/com.i18n.Loc.java
     1package com.i18n;
     2
     3import java.util.Locale;
     4
     5/**
     6 * @author ∪∩BUG E-mail: tidelgl@163.com
     7 * @version Aug 23, 2008 3:37:45 PM
     8 * @獲取語言環(huán)境
     9 */

    10public class Loc {
    11    public static void main(String[] args) {
    12        Locale[] localelist = Locale.getAvailableLocales();
    13        for (int i = 0; i < localelist.length; i++{
    14            // 打印國家名+國家編寫名+語言名+語言縮寫名
    15            System.out.println(localelist[i].getDisplayCountry() + " = "
    16                    + localelist[i].getCountry() + "  "
    17                    + localelist[i].getDisplayLanguage() + " = "
    18                    + localelist[i].getLanguage());
    19        }

    20        // 獲取系統(tǒng)的默認(rèn)的國家/語言環(huán)境
    21        // Locale myLocale = Locale.getDefault();
    22        // ResourceBundle bundle = ResourceBundle.getBundle("資源文件名", myLocale);
    23        // System.out.println(bundle.getString("定義的Key鍵"));
    24    }

    25
    26}

    27

    src/com.locales.Locales.java
     1package com.locales;
     2
     3import java.util.Hashtable;
     4import java.util.Locale;
     5import java.util.Map;
     6
     7/**
     8 * @author ∪∩BUG E-mail: tidelgl@163.com
     9 * @version Aug 23, 2008 11:27:29 PM
    10 * @本地化
    11 */

    12public class Locales {
    13    private Locale current;
    14
    15    // 設(shè)置當(dāng)前用戶的語言種類
    16    public void setCurrent(Locale current) {
    17        this.current = current;
    18    }

    19
    20    public Map<String, Locale> getLocales() {
    21        Map<String, Locale> locales = new Hashtable<String, Locale>();
    22
    23        // 往集合中裝載語言種類
    24        locales.put("USA English", Locale.US);
    25        locales.put("Simplified Chinese", Locale.CHINA);
    26        return locales;
    27
    28    }

    29}

    30

    src/com.Login.LoginAction.java
     1package com.Login;
     2
     3import com.opensymphony.xwork2.ActionContext;
     4import com.opensymphony.xwork2.ActionSupport;
     5
     6/**
     7 * @author ∪∩BUG E-mail: tidelgl@163.com
     8 * @version Aug 23, 2008 8:39:58 PM 
     9 * @國際化
    10 */

    11public class LoginAction extends ActionSupport {
    12    private String uname;
    13    private String upass;
    14
    15    public LoginAction(String uname, String upass) {
    16        super();
    17        this.uname = uname;
    18        this.upass = upass;
    19    }

    20
    21    public LoginAction() {
    22
    23    }

    24
    25    public String getUname() {
    26        return uname;
    27    }

    28
    29    public void setUname(String uname) {
    30        this.uname = uname;
    31    }

    32
    33    public String getUpass() {
    34        return upass;
    35    }

    36
    37    public void setUpass(String upass) {
    38        this.upass = upass;
    39    }

    40
    41    @Override
    42    public String execute() throws Exception {
    43
    44        ActionContext ctx = ActionContext.getContext();// 獲取struts2的整個(gè)上下文對象,這里是request
    45        if ("admin".equals(this.uname) & "123".equals(this.getUpass())) {
    46//            ctx.getSession().put("user", this.getUname());     // 把當(dāng)前的用戶名放入session當(dāng)中.
    47//            ctx.put("tip", this.getText("succtip"));         // Action當(dāng)中獲取資源文件的方法,這里取的key名為succtip
    48            
    49            //占位的資源文件的獲取
    50            ctx.getSession().put("user"this.getUname());     // 把當(dāng)前的用戶名放入session當(dāng)中.
    51            ctx.put("tip"this.getText("succtip",new String[]{this.uname})); //在字符串?dāng)?shù)組中的第一個(gè)數(shù)組元素放入uname的值
    52        }
     else {
    53//            ctx.put("tip", this.getText("failtip"));         // Action當(dāng)中獲取資源文件的方法,這里取的key名為failtip
    54            ctx.put("tip"this.getText("failtip",new String[]{this.uname})); //在字符串?dāng)?shù)組中的第一個(gè)數(shù)組元素放入uname的值
    55        }

    56
    57        return SUCCESS;
    58    }

    59
    60}

    61

    src/com.locales.LoginAction_en_US.properties
    succtip={0}Login success
    failtip
    ={0}Login failed
    msg
    ={0}welcome,now is\:{1}

    src/com.locales.LoginAction_zh_CN.properties
    1succtip={0}\u767B\u5F55\u6210\u529F
    2failtip={0}\u767B\u5F55\u5931\u8D25
    3msg={0}\u6B22\u8FCE,\u73B0\u5728\u662F\:{1}
    4

    src/globalMessages_en_US.properties
    HelloWorld=Hello World\!
    com.locales
    =Test Locale

    src/globalMessages_zh_CN.properties
    HelloWorld=\u4F60\u597D,\u4E16\u754C\!
    com.locales
    =\u672C\u5730\u6D4B\u8BD5

    src/struts.properties
    struts.custom.i18n.resources=globalMessages



    評論

    # re: struts2.0學(xué)習(xí)筆記(四)--I18n(國際化)  回復(fù)  更多評論   

    2008-08-24 01:50 by ∪∩BUG
    國際化學(xué)得有點(diǎn)暈,不過看看筆記在看看做完的練習(xí)就有了頭緒.

    # re: struts2.0學(xué)習(xí)筆記(四)--I18n(國際化)[未登錄]  回復(fù)  更多評論   

    2008-08-25 20:44 by Jimmy
    請問為什么我加了國際化后,輸入表單都不輸出了

    <s:textfield name="user" label="用戶名" size="18" />

    都沒了

    # re: struts2.0學(xué)習(xí)筆記(四)--I18n(國際化)  回復(fù)  更多評論   

    2008-08-25 21:01 by ∪∩BUG
    @Jimmy
    可能是你獲取值的方式不對,你仔細(xì)看看你的struts.xml文件及相關(guān)的action類,只占處理過程有沒有關(guān)聯(lián)不對的..

    # re: struts2.0學(xué)習(xí)筆記(四)--I18n(國際化)  回復(fù)  更多評論   

    2008-08-25 21:31 by ∪∩BUG
    @Jimmy
    還有一個(gè)可能是你默認(rèn)的語種是英文,設(shè)置為中文看看,JSP頁面最好把字符集設(shè)置為UTF-8而不是GBK
    主站蜘蛛池模板: 亚洲色欲色欱wwW在线| 国产永久免费高清在线| 亚欧人成精品免费观看| 亚洲中文无韩国r级电影| 日韩亚洲产在线观看| 免费一级不卡毛片| 亚洲成av人片一区二区三区| 亚洲av日韩av无码av| 日韩精品人妻系列无码专区免费| 亚洲?v女人的天堂在线观看| 亚洲综合成人婷婷五月网址| 精品无码AV无码免费专区| 国产亚洲精品久久久久秋霞| 国产成人人综合亚洲欧美丁香花| 免费福利网站在线观看| 久久精品国产99精品国产亚洲性色| 一边摸一边爽一边叫床免费视频| 精品国产精品久久一区免费式| 亚洲美女在线观看播放| 黄网站免费在线观看| jlzzjlzz亚洲乱熟在线播放| 狼色精品人妻在线视频免费| 波多野结衣久久高清免费 | 无码人妻一区二区三区免费n鬼沢| 亚洲精品无码永久在线观看| 亚洲av无码兔费综合| 欧洲黑大粗无码免费| 亚洲另类小说图片| 99re免费在线视频| 亚洲AV永久无码精品成人| 岛国岛国免费V片在线观看| 亚洲精品99久久久久中文字幕 | 国产亚洲女在线线精品| 处破痛哭A√18成年片免费| 亚洲喷奶水中文字幕电影| 88xx成人永久免费观看| 亚洲无线电影官网| 一级毛片免费毛片一级毛片免费| 精品亚洲一区二区| 国产免费一区二区三区不卡 | 免费一级国产生活片|