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

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

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

    隨筆-34  評論-1965  文章-0  trackbacks-0

    國際化是商業系統中不可或缺的一部分,所以無論您學習的是什么Web框架,它都是必須掌握的技能。

    其實,Struts 1.x在此部分已經做得相當不錯了。它極大地簡化了我們程序員在做國際化時所需的工作,例如,如果您要輸出一條國際化的信息,只需在代碼包中加入FILE-NAME_xx_XX.properties(其中FILE-NAME為默認資源文件的文件名),然后在struts-config.xml中指明其路徑,再在頁面用<bean:message>標志輸出即可。

    不過,所謂“沒有最好,只有更好”。Struts 2.0并沒有在這部分止步,而是在原有的簡單易用的基礎上,將其做得更靈活、更強大。

    國際化Hello World

    下面讓我們看一個例子——HelloWorld。這個例子演示如何根據用戶瀏覽器的設置輸出相應的HelloWorld。

    1. 在Eclipse創建工程配置開發和運行環境(如果對這個步驟有問題,可以參考我早前的文章《為Struts 2.0做好準備》)。
    2. 在src文件夾中加入struts.properties文件,內容如下:
      struts.custom.i18n.resources=globalMessages
      Struts 2.0有兩個配置文件,struts.xml和struts.properties都是放在WEB-INF/classes/下。
      • struts.xml用于應用程序相關的配置
      • struts.properties用于Struts 2.0的運行時(Runtime)的配置
    3. 在src文件夾中加入globalMessages_en_US.properties文件,內容如下:
      HelloWorld=Hello World!
    4. 在src文件夾中加入globalMessages_zh_CN.properties文件,內容如下:
      HelloWorld=你好,世界!
      在此想和大家分享一個不錯的編寫properties文件的Eclipse插件(plugin),有了它我們在編輯一些簡體中文、繁體中文等Unicode文本時,就不必再使用native2ascii編碼了。您可以通過Eclipse中的軟件升級(Software Update)安裝此插件,步驟如下:
      1、展開Eclipse的Help菜單,將鼠標移到Software Update子項,在出現的子菜單中點擊Find and Install;
      2、在Install/Update對話框中選擇Search for new features to install,點擊Next;
      3、在Install對話框中點擊New Remote Site;
      4、在New Update Site對話框的Name填入“PropEdit”或其它任意非空字符串,在URL中填入http://propedit.sourceforge.jp/eclipse/updates/;
      5、在Site to include to search列表中,除上一步加入的site外的其它選項去掉,點擊Finsih;
      6、在彈出的Updates對話框中的Select the features to install列表中將所有結尾為“3.1.x”的選項去掉(適用于Eclipse 3.2版本的朋友);
      7、點擊Finish關閉對話框;
      8、在下載后,同意安裝,再按提示重啟Eclipse,在工具條看到形似vi的按鈕表示安裝成功,插件可用。此時,Eclpise中所有properties文件的文件名前有綠色的P的圖標作為標識。
    5. 在WebContent文件夾下加入HelloWorl.jsp文件,內容如下:
      <%@ page ?contentType="text/html; charset=UTF-8"%>
      <%@taglib prefix="s" uri="/struts-tags"%>
      <html>
      <head>
      ? ?
      <title>Hello World</title>
      </head>
      <body>
      ? ?
      <h2><s:text name="HelloWorld"/></h2>
      ? ?
      <h2><s:property value="%{getText('HelloWorld')}"/></h2>
      </body>
      </html>
    6. 發布運行應用程序,在瀏覽器地址欄中輸入http://localhost:8080/Struts2_i18n/HelloWorld.jsp ,出現圖1所示頁面。
      圖1 中文輸出
      圖1 中文輸出
    7. 將瀏覽器的默認語言改為“英語(美國)”,刷新頁面,出現圖2所示頁面。
      圖2 英文輸出
      圖2 英文輸出
    上面的例子的做法,與Struts 1.x的做法相似,似乎并不能體現Struts 2.0的優勢。不過,我在上面的例子用了兩種方法來顯示國際化字符串,其輸出是相同的。其實,這就是Struts 2.0的一個優勢,因為它默認支持EL,所示我們可以用getText方法來簡潔地取得國際化字符串。另外更普遍的情況——在使用UI表單標志時,getText可以用來設置label屬性,例如:
    <s:textfield name="name" label="%{getText('UserName')}"/>

    資源文件查找順序

    之所以說Struts 2.0的國際化更靈活是因為它可以能根據不同需要配置和獲取資源(properties)文件。在Struts 2.0中有下面幾種方法:

    1. 使用全局的資源文件,方法如上例所示。這適用于遍布于整個應用程序的國際化字符串,它們在不同的包(package)中被引用,如一些比較共用的出錯提示;
    2. 使用包范圍內的資源文件。做法是在包的根目錄下新建名的package.properties和package_xx_XX.properties文件。這就適用于在包中不同類訪問的資源;
    3. 使用Action范圍的資源文件。做法為Action的包下新建文件名(除文件擴展名外)與Action類名同樣的資源文件。它只能在該Action中訪問。如此一來,我們就可以在不同的Action里使用相同的properties名表示不同的值。例如,在ActonOne中title為“動作一”,而同樣用title在ActionTwo表示“動作二”,節省一些命名工夫;
    4. 使用<s:i18n>標志訪問特定路徑的properties文件。使用方法請參考我早前的文章《常用的Struts 2.0的標志(Tag)介紹》。在您使用這一方法時,請注意<s:i18n>標志的范圍。在<s:i18n name="xxxxx">到</s:i18n>之間,所有的國際化字符串都會在名為xxxxx資源文件查找,如果找不到,Struts 2.0就會輸出默認值(國際化字符串的名字)。

    上面我列舉了四種配置和訪問資源的方法,它們的范圍分別是從大到小,而Struts 2.0在查找國際化字符串所遵循的是特定的順序,如圖3所示:

    圖3 資源文件查找順序圖
    圖3 資源文件查找順序圖

    假設我們在某個ChildAction中調用了getText("user.title"),Struts 2.0的將會執行以下的操作:

    1. 查找ChildAction_xx_XX.properties文件或ChildAction.properties;
    2. 查找ChildAction實現的接口,查找與接口同名的資源文件MyInterface.properties;
    3. 查找ChildAction的父類ParentAction的properties文件,文件名為ParentAction.properties;
    4. 判斷當前ChildAction是否實現接口ModelDriven。如果是,調用getModel()獲得對象,查找與其同名的資源文件;
    5. 查找當前包下的package.properties文件;
    6. 查找當前包的父包,直到最頂層包;
    7. 在值棧(Value Stack)中,查找名為user的屬性,轉到user類型同名的資源文件,查找鍵為title的資源;
    8. 查找在struts.properties配置的默認的資源文件,參考例1;
    9. 輸出user.title。

    參數化國際化字符串

    許多情況下,我們都需要在動行時(runtime)為國際化字符插入一些參數,例如在輸入驗證提示信息的時候。在Struts 2.0中,我們通過以下兩種方法做到這點:

    1. 在資源文件的國際化字符串中使用OGNL,格式為${表達式},例如:
      validation.require=${getText(fileName)} is required
    2. 使用java.text.MessageFormat中的字符串格式,格式為{ 參數序號(從0開始), 格式類形(number | date | time | choice), 格式樣式},例如:
      validation.between=Date must between {0, date, short} and {1, date, short}
    在顯示這些國際化字符時,同樣有兩種方法設置參數的值:
    1. 使用標志的value0、value1...valueN的屬性,如:
      <s:text name="validation.required" value0="User Name"/>
    2. 使用param子元素,這些param將按先后順序,代入到國際化字符串的參數中,例如:
      <s:text name="validation.required">
      ? ?
      <s:param value="User Name"/>
      </s:text>

    讓用戶方便地選擇語言

    開發國際化的應用程序時,有一個功能是必不可少的——讓用戶快捷地選擇或切換語言。在Struts 2.0中,通過ActionContext.getContext().setLocale(Locale arg)可以設置用戶的默認語言。不過,由于這是一個比較普遍的應用場景(Scenario),所以Struts 2.0為您提供了一個名i18n的攔截器(Interceptor),并在默認情況下將其注冊到攔截器鏈(Interceptor chain)中。它的原理為在執行Action方法前,i18n攔截器查找請求中的一個名為"request_locale"的參數。如果其存在,攔截器就將其作為參數實例化Locale對象,并將其設為用戶默認的區域(Locale),最后,將此Locale對象保存在session的名為“WW_TRANS_I18N_LOCALE”的屬性中。

    下面,我將提供一完整示例演示它的使用方法。

    package tutorial;

    import java.util.Hashtable;
    import java.util.Locale;
    import java.util.Map;

    publicclass Locales {
    ? ?
    public Map<String, Locale> getLocales() {
    ? ? ? ?Map
    <String, Locale> locales =new Hashtable<String, Locale>(2);
    ? ? ? ?locales.put(
    "American English", Locale.US);
    ? ? ? ?locales.put(
    "Simplified Chinese", Locale.CHINA);
    ? ? ? ?
    return locales;
    ? ?}

    }
    tutorial/Locales.java

    <%@taglib prefix="s" uri="/struts-tags"%>
    <script type="text/javascript">
    <!--
    ? ?
    function langSelecter_onChanged() {
    ? ? ? ? document.langForm.submit();
    ? ? }
    //-->
    </script>
    <s:set name="SESSION_LOCALE" value="#session['WW_TRANS_I18N_LOCALE']"/>
    <s:bean id="locales" name="tutorial.Locales"/>
    <form action="<s:url includeParams="get" encode="true"/>" name="langForm"?
    ? ? style="background-color: powderblue; padding-top: 4px; padding-bottom: 4px;">
    ? ? Language:
    <s:select label="Language"?
    ? ? ? ? list
    ="#locales.locales" listKey="value" ? ?listValue="key"
    ? ? ? ? value
    ="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"
    ? ? ? ? name
    ="request_locale" id="langSelecter"?
    ? ? ? ? onchange
    ="langSelecter_onChanged()" theme="simple"/>
    </form>
    LangSelector.jsp

    上述代碼的原理為,LangSelector.jsp先實例化一個Locales對象,并把對象的Map類型的屬性locales賦予下拉列表(select) 。如此一來,下拉列表就獲得可用語言的列表。大家看到LangSelector有<s:form>標志和一段Javascript腳本,它們的作用就是在用戶在下拉列表中選擇了后,提交包含“reqeust_locale”變量的表單到Action。在打開頁面時,為了下拉列表的選中的當前區域,我們需要到session取得當前區域(鍵為“WW_TRANS_I18N_LOCALE”的屬性),而該屬性在沒有設置語言前是為空的,所以通過值棧中locale屬性來取得當前區域(用戶瀏覽器所設置的語言)。

    你可以把LangSelector.jsp作為一個控件使用,方法是在JSP頁面中把它包含進來,代碼如下所示:
    <s:include value="/LangSelector.jsp"/>

    在例1中的HellloWorld.jsp中<body>后加入上述代碼,并在struts.xml中新建Action,代碼如下:
    <action name="HelloWorld">
    ? ?
    <result>/HelloWorld.jsp</result>
    </action>

    或者,如果你多個JSP需要實現上述功能,你可以使用下面的通用配置,而不是為每一個JSP頁面都新建一個Action。
    <action name="*">
    ? ?
    <result>/{1}.jsp</result>
    </action>

    分布運行程序,在瀏覽器的地址欄中輸入http://localhost:8080/Struts2_i18n/HelloWorld.action,出現圖4所示頁面:
    圖3 HelloWorld.action
    圖3 HelloWorld.action

    在下拉列表中,選擇“American English”,出現圖5所示頁面:
    圖3 HelloWorld.action
    圖4 HelloWorld.action
    可能大家會問為什么一定要通過Action來訪問頁面呢?
    你可以試一下不用Action而直接用JSP的地址來訪問頁面,結果會是無論你在下拉列表中選擇什么,語言都不會改變。這表示不能正常運行的。其原因為如果直接使用JSP訪問頁面,Struts 2.0在web.xml的配置的過濾器(Filter)就不會工作,所以攔截器鏈也不會工作。
    posted on 2006-11-01 19:06 Max 閱讀(73178) 評論(123)  編輯  收藏 所屬分類: Struts 2.0系列
    評論共2頁: 1 2 下一頁 

    評論:
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-03-23 19:43 | coombe
    辛苦啦:)
    請教一個問題,我想把List里的內容存在資源文件中,比如說:
    我寫了兩個單選鈕分別用來表示男和女,我試驗了好多次都
    行不通,多謝了!  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-03-24 22:32 | Max
    @coombe
    你可以用getText()在代碼讀取資源文件。  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-03-27 09:41 | coombe
    非常感謝^_^
    不過,如果我沒猜錯的話,你是想讓我在Action的Input方法里用getText讀出資源,然后再生成List對象傳到頁面。

    這種方法是可行的,不過有時也會出問題。比如說,我給頁面添加了自動校驗功能,如果校驗失敗,List對象就沒了:(在execute方法里再傳一遍都不行:(

    后來實在沒辦法,我就把它放到了Session里了。但是感覺這種方法太齷齪了,所以就問你一下啦:)

    我現在的做法是把List里的元素單個保存在資源文件里,然后在頁面里讀出來之后再拼裝。不知道你有沒有更好的方法?
      回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-04-12 09:57 | crayz
    你好~剛接觸struts的新手
    我依照你的 為Struts 2.0做好準備 測試成功
    然后在想自己添加properties文件 。
    定義一個properties文件 里面添加了
    context.hello=It's a fine day today

    保存 為Hello.properties保存在Hello.class一個目錄中
    然后改 了 SayHello.jsp的 <title>把原來標簽的改成了
    <title><s:text name="context.name" /></title>
    保存
    可瀏覽SayHello.jsp時標題顯示為context.name而不是我定義的
    It's a fine day today
    用getText 的話則出現 標題為空的情況


    接著我按照文檔 把Hello.properties文件改成
    package.properties放 到跟目錄 失敗
    放到classes目錄 失敗..
    放到tutorial目錄也 失敗


    自定義properties文件
    在classes文件夾中新建 struts.properties
    添加了 struts.custom.i18n.resources=pa.properties
    Hello.properties也相應改成了pa.properties 放到classes文件夾
    也失敗了..
    已經困惑兩天了..
    你看我哪里出錯了?
    struts.xml 和web.xml都沒動
    lib加了最需要的5個jar(我用的是2.06之有個core.jar 沒有struts2-api和struts2-extra.jar)
    運行環境是tomcat 6.0

    謝謝了

      回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-04-12 09:59 | crayz
    更正下
    <title><s:text name="context.name" /></title>
    應該是<title><s:text name="context.hello" /></title>
    沒有寫錯~
      回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-04-13 09:50 | Max
    @crayz
    可能你漏了什么東西,要不我把我的源代碼發給你。  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-04-16 22:37 | 杰克
    propEdit插件里的vi插件包是模擬vi編輯器環境的吧?我看不需要安裝。  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-04-23 15:30 | jiajia
    我的action名字叫LoginAction,我在同一個包下面建了LoginAction.properties的文件,就是不能讀資源文件里的信息,請問是不是要有什么jar包,我現在的jar有:commons-logging-1.0.4.jar,
    commons-validator-1.3.0.jar,freemarker-2.3.8.jar,ognl-2.6.11.jar,struts2-core-2.0.6.jar,xwork-2.0.1.jar  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-04-24 13:08 | ddd
    請問,properties文件,需要設置什么編碼?

    默認識iso-8859-1的, 無法輸入中文。。

    還有, PropEdit偶得無法更新, 提示需要其他的包。。。  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序[未登錄] 2007-04-24 16:06 | 想飛就飛
    我使用struts.properties配置的struts.custom.i18n.resources=globalMessages 國際化就可以

    可是在對應的包下面放package.properties 內容一樣
    國際化就顯示不了

      回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序[未登錄] 2007-04-24 16:40 | 想飛就飛
    試驗了一下,基本情況是這樣的
    只有在struts.properties中配置的struts.custom.i18n.resources=xxxxxx
    才適用于所有的jsp頁面

    如果是定義的package級別的,或者action級別的多語種x.properties文件
    必須要通過訪問定義的xxx.action才可以填充jsp頁面的多語種信息

      回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-04-25 09:38 | Max
    @jiajia
    應該不是欠JAR包的問題,因為一般欠JAR包,都會有ClassNotFoundException的。  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-05-09 11:51 | EricaseJang
    你好。您的文章很實用。
    我想問一下,如果我的文字是通過
    <s:i18n name="struts">
    <s:text name="demo"/>
    </s:i18n>
    來讀取并顯示的,那么有沒有辦法設置多種語言呢?
    必須手動的先判斷瀏覽器語言設置然后指定不同的資源文件嗎?  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-05-09 13:56 | EricaseJang
    呵呵,搞定了。像剛開始那樣子就行了。  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-05-19 19:34 | 不用名字行不行
    文個問題,以前用struts1的時候,我喜歡在全局資源文件用用很多帶參數的國際化字符串,尤其是和驗證有關的,比如errors.required={} is required。這樣在velidate中可以使用參數化的調用。感覺很方便。但到了struts2里面,似乎沒有這個功能了。想問一下,在struts2中怎么在驗證器中實現國際化。  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-05-22 01:43 | 杰克
    最近又試了一下,直接提交一個帶request_locale參數的超鏈接也可以改變locale。例如
    http://localhost:8080/Struts2_i18n/HelloWorld.action?request_locale=zh_CN,
    http://localhost:8080/Struts2_i18n/HelloWorld.action?request_locale=en
    大約攔截器在攔截到該參數后自動做了String與Locale之間的類型轉換。  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-05-29 21:50 | jezz
    我也測試了你的第一個例子
    控制臺報錯我沒用IDE就是手工寫的
    錯誤信息如下:
    [2007-05-29 21:23:38,290] [http-8080-1] DEBUG com.opensymphony.xwork2.config.Con
    figurationManager - Checking ConfigurationProviders for reload.
    [2007-05-29 21:23:38,321] [http-8080-1] DEBUG com.opensymphony.xwork2.util.Insta
    ntiatingNullHandler - Entering nullPropertyValue [target=[com.opensymphony.xwork
    2.DefaultTextProvider@1142196], property=org]
    [2007-05-29 21:23:38,493] [http-8080-1] DEBUG com.opensymphony.xwork2.util.Insta
    ntiatingNullHandler - Entering nullPropertyValue [target=[com.opensymphony.xwork
    2.DefaultTextProvider@1142196], property=struts]

    哪個struts.properties文件和其他的文件不知道放在那?
    如果方便的話就把源文件發給我!謝謝!
    我的email:lijie250#gmail.com  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-05-30 21:27 | Max
    @jezz
    struts.properties放在src文件夾(源代碼的根目錄)下。  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-05-30 21:49 | jezz
    我現在成功了!
    但是TOMCAT的控制臺有很多錯誤信息!
    不知道那設置錯了!
    [2007-05-30 21:40:35,843] [http-8080-1] DEBUG com.opensymphony.xwork2.util.Insta
    ntiatingNullHandler - Entering nullPropertyValue [target=[com.opensymphony.xwork
    2.ActionSupport@16877f8, com.opensymphony.xwork2.DefaultTextProvider@1d95da8], p
    roperty=templateDir]
    [2007-05-30 21:40:35,843] [http-8080-1] DEBUG com.opensymphony.xwork2.util.Insta
    ntiatingNullHandler - Entering nullPropertyValue [target=org.apache.struts2.util
    .AttributeMap@5a2eaa, property=templateDir]
    [2007-05-30 21:40:35,843] [http-8080-1] DEBUG com.opensymphony.xwork2.util.XWork
    MapPropertyAccessor - Entering getProperty (ognl.OgnlContext@3a55c38f,org.apache
    .struts2.util.AttributeMap@5a2eaa,templateDir)
    [2007-05-30 21:40:35,843] [http-8080-1] DEBUG com.opensymphony.xwork2.util.Insta
    ntiatingNullHandler - Entering nullPropertyValue [target=[com.opensymphony.xwork
    2.ActionSupport@16877f8, com.opensymphony.xwork2.DefaultTextProvider@1d95da8], p
    roperty=templateDir]
    [2007-05-30 21:40:35,843] [http-8080-1] DEBUG com.opensymphony.xwork2.util.Insta
    ntiatingNullHandler - Entering nullPropertyValue [target=[com.opensymphony.xwork
    2.ActionSupport@16877f8, com.opensymphony.xwork2.DefaultTextProvider@1d95da8], p
    roperty=templateDir]
    [2007-05-30 21:40:35,843] [http-8080-1] DEBUG com.opensymphony.xwork2.util.Insta
    ntiatingNullHandler - Entering nullPropertyValue [target=org.apache.struts2.util
    .AttributeMap@5a2eaa, property=templateDir]
    [2007-05-30 21:40:35,843] [http-8080-1] DEBUG org.apache.struts2.components.UIBe
    an - Rendering template /template/simple/select
    [2007-05-30 21:40:35,843] [http-8080-1] DEBUG freemarker.cache - template/simple
    /select.ftl[zh_CN,UTF-8,parsed] cached copy not yet stale; using cached.
    [2007-05-30 21:40:35,843] [http-8080-1] DEBUG org.apache.struts2.components.temp
    late.FreemarkerTemplateEngine - Rendering template /template/simple/select.ftl
    [2007-05-30 21:40:35,859] [http-8080-1] DEBUG freemarker.cache - template/simple
    /scripting-events.ftl[zh_CN,UTF-8,parsed] cached copy not yet stale; using cache
    d.
    [2007-05-30 21:40:35,859] [http-8080-1] DEBUG freemarker.cache - template/simple
    /common-attributes.ftl[zh_CN,UTF-8,parsed] cached copy not yet stale; using cach
    ed.
    [2007-05-30 21:40:35,859] [http-8080-1] DEBUG com.opensymphony.xwork2.config.Con
    figurationManager - Checking ConfigurationProviders for reload.  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-06-08 22:04 | 隨風歌唱
    MAX兄、你說的那個插件安完以后.properties文件是有P字樣式綠色標識、但是怎么使用?

    8、在下載后,同意安裝,再按提示重啟Eclipse,在工具條看到形似vi的按鈕表示安裝成功,插件可用。此時,Eclpise中所有properties文件的文件名前有綠色的P的圖標作為標識。

    形似vi的按鈕?能否截個圖看、或再解釋下如何用  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-06-14 09:38 | Max
    @隨風歌唱
    很簡單,你直接在*.properties文件輸入中文字符,在保存的時候,插件自動將其轉為ascii編碼。  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-06-19 11:23 | tafse
    你好,我在Action中用ActionContext.getContext().setLocale(Locale.TAIWAN)設置區域,但是一直不成功,只顯示在properties中的名字,這是為什么?  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序[未登錄] 2007-06-25 11:29 | king
    你好。問下你的例子有源碼嗎 ?
    能不能給發個阿!!!!
    謝謝!!!!!!!!!
    majun4678@163.com  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序[未登錄] 2007-06-29 11:51 | eric
    如何解決顯示時中文亂碼的問題?properties文件編碼是utf-8,jsp頁面也是  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-06-30 23:51 | Max
    @eric
    properties文件應該是ascii編碼方式的,如\u4e2d\u6587這樣的格式,否則在Java中會讀到亂碼。  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-07-04 17:05 | 妖狐
    你好,我參考按照您的方法也做了國際化的試驗,但是遇到下面的問題。
    當IE設置為en-US時顯示正常:
    Hello World
    Hello World
    但是當設置成為zh-CN時,卻顯示為:
    HelloWorld
    請問引起這個問題的原因大概是什么呢
    謝謝

      回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-07-04 23:28 | Max
    應該找不到對應的國際化字符串所致,請檢查你的globalMessages_zh_CN.properties文件的內容是否正確。  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-07-11 13:29 | yiwuyun
    many thanks 沒有你的提點,我始終找不到亂碼的根源 。下了你說的那個插件之后,馬上就查出自己文件中的亂碼了。  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-07-23 15:38 | abao
    struts.custom.i18n.resources=globalMessages 后面的值和前面的東西表示什么?是寫死的嗎?
    <%@taglib prefix="s" uri="/struts-tags"%>這里的URI指向哪里啊?
    為什么在JSP中調用<s:出錯?????
    <h2><s:text name="HelloWorld"/></h2>
    <h2><s:property value="%{getText('HelloWorld')}"/></h2>
      回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-07-23 23:56 | Max
    @abao
    1、struts.custom.i18n.resources=globalMessages配置Struts 2的全局資源文件的位置,你可以寫成struts.custom.i18n.resources=xxx.xx形式;

    2、<%@taglib prefix="s" uri="/struts-tags"%>的URI其實指向的是:struts2-core-2.0.8.jar中的META-INF/struts-tags.tld文件;

    3、你所謂的出錯是什么意思?IDE的提示,如果只是如此可以不用理會;否則請檢查struts2-core-2.0.8.jar是否在你的“Build Path”里面。  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序[未登錄] 2007-07-27 17:55 | aaron
    @crayz


    把所有文件保存,
    重新啟動tomcat,
    重新打開ie進行瀏覽

    我也遇到和你一樣的問題,就這樣解決了
      回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-07-28 21:26 | yiwuyun
    @yiwuyun
    哈哈,給大家補充一下,我在實踐中發現的。
    如果表單提交的時候使用<s:form>就不會出現亂碼,
    但是用<form>提交就會出現亂碼。可能struts2.0內部會自動實現轉換吧,
    而<form>不會自動轉換。還有一個有趣的現象,你把prefix="s" 改為
    prefix="ww" 再把后面的所有<s:....>改為<ww:....>一樣可以正常運行。
    而且還不止,你改為其他任意的都可以。比如改為<yi:....>當然前面的也要改。  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-08-13 12:46 | 陳利
    博主,我建的工程老是報腳本錯誤。您能否給我一份您的源碼?我的郵箱:crazycl@163.com。謝謝您了。  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-08-17 08:30 | GOLDFISH
    MAX大哥,你太猛了. 你現在是我的目標.
    我現在每天都到你這學Struts2.0.  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-08-17 11:22 | ArthurWang
    十分感謝你的關于Struts 2的一系列文章,最近我正在學習Struts 2,你的文章講解的很全面細致,所以很感謝你的文章!
    請問你的文章來源是哪里,能不能共享一下,因為我趕時間,另外請問你關于Struts2與Webwork2有什么區別和進步,有沒有這方面的文章,多謝指教!
    希望樓主能夠指教,我的email:wychi714813@yahoo.com.cn  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-08-23 21:26 | louleigh
    MAX 哥..
    我按照你的東西來寫。他提示錯誤.
    麻煩你把第二個的源代碼給我一份.謝謝max哥了
    9803912@qq.com  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-08-23 21:36 | louleigh
    max哥.不用傳了。我調通了。
    原來是一個包的名字寫錯啦..

    max哥..你真是我的偶像. 是你讓我覺得struts2如此的容易。.
    拜一拜!  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-08-31 17:22 | tf
    globalMessages_zh_CN.propertiesl里輸入中文后保存就會出錯,
    請問MAX這是什么原因?  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-09-09 16:52 | 初級
    @tf
    你是不沒裝max說的插件,就是那個propedit,我開始沒裝輸入中文就報錯,但是裝上后就好了,我eclipse用3.2,下載的是propedit_4.4.0.zip,這個適合eclipse 3.0 3.1 3.2,下載地址:http://propedit.sourceforge.jp/eclipse/updates/
    還想問一下其他的朋友,如果不用這個插件,怎么才能輸入中文不報錯!!!!!!!  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序[未登錄] 2007-09-24 11:44 | Jackson
    @初級
    如果不裝這個插件的話,我是把內容先輸入記事本中,然后在DOS下運行native2ascii.exe,將記事本中的內容拷貝到DOS環境下,回車就可以輸出中文的ASCII碼了!  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-10-05 13:37 | 大貓
    @想飛就飛:
    "如果是定義的package級別的,或者action級別的多語種x.properties文件
    必須要通過訪問定義的xxx.action才可以填充jsp頁面的多語種信息"
    您可以把實例發一份給我嗎?謝謝,我的郵箱是anne.yang@stella.com.hk
      回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-10-05 13:40 | 大貓
    @Max:
    上面的問題,Max先生有時間的話能給我發個實例嗎?謝謝了!  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-10-06 10:54 | 大貓
    大家都忙著過節了吧,我終於鼓搗出來了!
    不過還是要謝謝Max和想飛就飛所指的方向!  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序[未登錄] 2007-10-09 11:05 | 哈哈
    如果你的第2個例子輸入/HelloWorld.jsp的時候語言能改變就更好了。
    例子上要求的時候/HelloWorld.action,感覺這樣不好,怎么才能直接輸入/HelloWorld.jsp,選擇語言就能起作用?  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-11-19 16:03 | 高山流水
    我想在攔截器的中使用參數化的國際化資源,
    比如說我想用 message 的 key 中使用帶參數的國際化資源,
    請問怎么用?。。

    **攔截器
    <validators>
    。。。。。。。。。。
    <field name="birthday">
    <field-validator type="date">
    <message key="date.format.bad" />
    </field-validator>
    </field>
    </validators>
    ------------------------
    **國際化資源文件
    date.format.bad={0}日期格式錯誤

    ---------------------
    請問 這兩個地方應該怎么寫,才能在頁面得到如下效果:
    ** 生日日期格式錯誤
    謝謝!!
      回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-11-20 14:05 | 高山流水
    @不用名字行不行
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-05-19 19:34 | 不用名字行不行
    問個問題,以前用struts1的時候,我喜歡在全局資源文件用用很多帶參數的國際化字符串,尤其是和驗證有關的,比如errors.required= {} is required。這樣在velidate中可以使用參數化的調用。感覺很方便。但到了struts2里面,似乎沒有這個功能了。想問一下,在 struts2中怎么在驗證器中實現國際化。
    ------------
    我也遇到了這個問題,就是想在Xxx-validation.xml 中使用
    <message key="{}errors.required" />
    這種應該怎么用。。?  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序[未登錄] 2007-11-21 17:10 | feng
    max:
    能不能給我份源碼呀 是那個《為Struts 2.0做好準備》的源碼
    我現在在看struts2的國際化
    想具體的看一下 可是不知道如何入手 謝謝了
    我的email: duguzhongnuo@163.com
    謝謝了  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序[未登錄] 2007-11-21 17:13 | feng
    我按照你的方法做了個例子
    可是出不來 是不是文件的存放路徑有關呀
    急 急 急  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-11-22 16:26 | leesword
    請問我用struts 2 在 Action 里面設置

    session.put(Globals.LOCALE_KEY,
    Locale.CHINA);
    之后,它的跳轉頁面又包含其他頁面時,(例如這個Action 跳到Index.jsp,Index.jsp 又包括header.jsp,header.jsp 包含有國際化字段)這個Locale信息不能傳到header.jsp頁面,也就不能實現國際化,我在struts1里面都可以成功的,不知道在struts2里面為何會這樣,能不能解決呢?  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序[未登錄] 2007-11-23 14:34 | 高山流水
    @leesword
    需要通過action 來訪問 jsp 。。  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-11-26 15:18 | hahha
    @大貓
    怎么出來的  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-12-03 16:06 | 劉文濤
    請問 max :

    struts.xml , struts.properties , productAction-conversion.properties,
    globalMessages.properties,globalMessages_zh_CN.properties

    這些配置文件 默認 都要 放在 classpath下面 , 也就是 \WEB-INF\classes下面.

    這樣文件多的時候總感覺有點亂,

    有沒有 辦法 把這些文件 分別放在不同文件夾下面. 在 web.xml里面指定一下地址.  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-12-04 09:00 | 劉文濤
    請教一下 :

    LangSelector.jsp 文件中 :

    value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"

    這句話 ? 后面的 locale 是什么意思,是哪里來的 ?

    謝謝  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-12-11 17:07 | Jasen Hsu
    @crayz
    struts.custom.i18n.resources=pa.properties
    后綴除去
    struts.custom.i18n.resources=pa  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2007-12-28 16:13 | ElgooG
    不好用啊  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序[未登錄] 2008-01-07 16:11 | apple
    謝謝你這長時間來教授Struts2,就是問你下,為什么在我的Struts.properties配置文件不起作用啊,就是說隨便寫什么都沒反映,例如加上struts.custom.i18n.resources=globalMessages
    但globalMessages_zh_CN.properties根本就沒加載,是什么 原因啊???
    Struts.properties配置文件能自動加載嗎?還需要想哪個文件里配置它的位置嗎???
    謝謝樓主,告訴我的Struts.properties配置文件不起作用的原因??
    我的油箱:dujian886@126.com  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2008-01-08 17:21 | Leasen
    樓上的可能是路徑放的不對 你放SRC目錄下試一下

    麻煩樓主把國際化例子的源碼發一份給我,先謝過了

    Leasen@gmail.com  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2008-02-22 17:47 | laibin
    學習  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2008-02-28 14:57 | devil
    您好 能否發份源碼給我 我弄的總是有問題,中文不顯示
    hua_xing_dong@sina.com  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2008-03-13 02:42 | winnow
    @coombe
    你可以像例子里面那樣把list以List或者Map形式放在一個類里面,然后在頁面用bean標簽取出來,這不過需要在這個類里面取國際化資源,這個和action類里面取有點不一樣,如下:

    publicclass Locales {

    public Map<String, Locale> getLocales() {

    //引入變量,用戶locale
    private Locale current;

    public void setCurrent(Locale cur){
    this.current = cur;
    }

    Map<String, Locale> locales =new Hashtable<String, Locale>(2);

    //用 java.util.ResourceBundle聲明一個資源束來獲取國家化資源。
    ResourceBundle bundle = ResourceBundle.getBundle("mymessageResource" , current);

    //把國際化資源中的消息添加到map key當中
    locales.put(bundle.getString("American English"), Locale.US);
    locales.put(bundle.getString("Simplified Chinese"), Locale.CHINA);
    return locales;
    }
    }

    打完收工!  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2008-03-13 02:46 | winnow
    @winnow
    你用bean標簽取這個類的實例時,傳入current參數就可以了。current參數取的時候和設置那個select的value一樣的,取session,沒有的話取瀏覽器設置。
    <s:bean id="locales" name="Locales">
    <s:param name="current" value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"/>
    </s:bean>

      回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2008-03-29 13:01 | shenxinhui
    @Override
    public void validate() {
    if( "".equals(this.getUsername().trim()) || null == this.getUsername()) {

    this.addFieldError("username", this.getText("username.validation"));
    }
    if( "".equals(this.getPassword()) || null == this.getPassword() ) {

    this.addFieldError("password", this.getText("password.validation"));
    }
    }

    username.validation={0} is required!
    password.validation={0} is required!


    {0} 這個參數怎么傳遞進去呀?大哥 幫忙解決一下  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2008-04-07 18:10 | 哈派
    國際化的功能是很好,但在RADIO 和SELECT表單中的LIST內如何寫呢? 我實驗了很多寫法都沒成功.
    可以給一個例子嗎?
    不勝感謝!  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2008-04-30 16:06 | yjwxfpl
    效果出不來,可以發份源碼到我的郵箱不??
    謝謝:liuhuajun17@tom.com
    路徑的問題搞得頭都大啦!!!  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2008-06-02 17:20 | gj123
    建立包一級的properties,怎么都出不來呢~~
    我有個package為Test,其中包含一個action為Hello.class
    那我的包一級的properties是應該放在哪?文件名叫什么?  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2008-06-05 19:00 |
    我照你的方法去做了,但選擇下拉框索引沒有反應? 請問這是什么原因  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2008-06-07 22:42 | bampool
    謝謝

    struts2中還有一種嵌入參數動態應用方案,希望能加以描述
    <s:text id="title" name="item.edit"><s:param><s:text name="employee"/></s:param></s:text>


    item.edit={0} bearbeiten
      回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序[未登錄] 2008-06-18 16:56 | kiki
    max大哥,<s:property value="%{getText('HelloWorld')}" />怎么顯示的是空的阿?
    struts.custom.i18n.resources=globalMessages
    這個也是沒有問題的阿

    而且還報下面的錯誤
    DEBUG 2008-06-18 16:49:22.718 [freemark] (): Could not find template in cache, creating new one; id=[template/xhtml/text.ftl[zh_CN,UTF-8,parsed] ]
    DEBUG 2008-06-18 16:49:22.812 [freemark] (): Compiling FreeMarker template template/xhtml/text.ftl[zh_CN,UTF-8,parsed] from jar:file:/D:/Program%20Files/apache-tomcat-5.5.26/webapps/struts2HelloWorld/WEB-INF/lib/struts2-core-2.0.9.jar!/template/xhtml/text.ftl
    DEBUG 2008-06-18 16:49:23.843 [freemark] (): Could not find template in cache, creating new one; id=[template/xhtml/controlheader.ftl[zh_CN,UTF-8,parsed] ]
    DEBUG 2008-06-18 16:49:23.875 [freemark] (): Compiling FreeMarker template template/xhtml/controlheader.ftl[zh_CN,UTF-8,parsed] from jar:file:/D:/Program%20Files/apache-tomcat-5.5.26/webapps/struts2HelloWorld/WEB-INF/lib/struts2-core-2.0.9.jar!/template/xhtml/controlheader.ftl
    DEBUG 2008-06-18 16:49:24.671 [freemark] (): Could not find template in cache, creating new one; id=[template/xhtml/controlheader-core.ftl[zh_CN,UTF-8,parsed] ]
    DEBUG 2008-06-18 16:49:24.703 [freemark] (): Compiling FreeMarker template template/xhtml/controlheader-core.ftl[zh_CN,UTF-8,parsed] from jar:file:/D:/Program%20Files/apache-tomcat-5.5.26/webapps/struts2HelloWorld/WEB-INF/lib/struts2-core-2.0.9.jar!/template/xhtml/controlheader-core.ftl
    DEBUG 2008-06-18 16:49:25.000 [freemark] (): Could not find template in cache, creating new one; id=[template/xhtml/tooltip.ftl[zh_CN,UTF-8,parsed] ]
    DEBUG 2008-06-18 16:49:25.031 [freemark] (): Compiling FreeMarker template template/xhtml/tooltip.ftl[zh_CN,UTF-8,parsed] from jar:file:/D:/Program%20Files/apache-tomcat-5.5.26/webapps/struts2HelloWorld/WEB-INF/lib/struts2-core-2.0.9.jar!/template/xhtml/tooltip.ftl
    DEBUG 2008-06-18 16:49:25.078 [freemark] (): Could not find template in cache, creating new one; id=[template/simple/text.ftl[zh_CN,UTF-8,parsed] ]
    DEBUG 2008-06-18 16:49:25.093 [freemark] (): Compiling FreeMarker template template/simple/text.ftl[zh_CN,UTF-8,parsed] from jar:file:/D:/Program%20Files/apache-tomcat-5.5.26/webapps/struts2HelloWorld/WEB-INF/lib/struts2-core-2.0.9.jar!/template/simple/text.ftl
    DEBUG 2008-06-18 16:49:25.500 [freemark] (): Could not find template in cache, creating new one; id=[template/simple/scripting-events.ftl[zh_CN,UTF-8,parsed] ]
    DEBUG 2008-06-18 16:49:25.515 [freemark] (): Compiling FreeMarker template template/simple/scripting-events.ftl[zh_CN,UTF-8,parsed] from jar:file:/D:/Program%20Files/apache-tomcat-5.5.26/webapps/struts2HelloWorld/WEB-INF/lib/struts2-core-2.0.9.jar!/template/simple/scripting-events.ftl
    DEBUG 2008-06-18 16:49:25.531 [freemark] (): Could not find template in cache, creating new one; id=[template/simple/common-attributes.ftl[zh_CN,UTF-8,parsed] ]
    DEBUG 2008-06-18 16:49:25.578 [freemark] (): Compiling FreeMarker template template/simple/common-attributes.ftl[zh_CN,UTF-8,parsed] from jar:file:/D:/Program%20Files/apache-tomcat-5.5.26/webapps/struts2HelloWorld/WEB-INF/lib/struts2-core-2.0.9.jar!/template/simple/common-attributes.ftl
    DEBUG 2008-06-18 16:49:25.593 [freemark] (): Could not find template in cache, creating new one; id=[template/xhtml/controlfooter.ftl[zh_CN,UTF-8,parsed] ]
    DEBUG 2008-06-18 16:49:25.609 [freemark] (): Compiling FreeMarker template template/xhtml/controlfooter.ftl[zh_CN,UTF-8,parsed] from jar:file:/D:/Program%20Files/apache-tomcat-5.5.26/webapps/struts2HelloWorld/WEB-INF/lib/struts2-core-2.0.9.jar!/template/xhtml/controlfooter.ftl
      回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序[未登錄] 2008-06-18 17:14 | kiki
    。。。
    搞定了,我把*.properties,struts.xml幾個文件都放到src文件夾下就搞定了,原來是放在webRoot下的classes文件夾下的,搞錯了好像,應該放在web-inf文件夾下的classes文件夾下。

    而放在src下面,部署的時候eclipse自然會把它們部署到web-inf/classes文件夾下

    ^_^,一個不小心就錯了  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序[未登錄] 2008-06-18 19:25 | kiki
    <c:out value="${a>b?'a>b':'a<=b'}" />
    請問這個在struts2里要怎么輸出呢?  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2008-08-06 11:48 | winny
    # re: 在Struts 2.0中國際化(i18n)您的應用程序[未登錄] 2008-08-12 15:14 | an
    <form action="<s:url includeParams="get" encode="true"/>" name="langForm" 里邊的<s:url includeParams="get" encode="true"/>,其中 includeParams="get" 的作用是改變語言的時候把當前url下的request參數保留下來吧?
    例如:url: http://xxxx.action?para1=value1
    改變語言后,希望是http://xxxx.action?para1=value1&request_locale=zh_CN
    不過很遺憾,我試過para1這個參數丟掉了

    我系統中其他使用 includeParams="get" 的地方都沒問題

    請問max,還需要其他地方的什么設置么?
    或者,這個是struts2的bug  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序[未登錄] 2008-09-24 17:01 | 菜鳥
    select表單中的list內如何實現國際化,可以給一個例子嗎? 我的郵箱是zhangxh164110@163.com,謝謝  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2008-09-26 12:23 | wangs130
    為什么jsp就不攔截,/* 不是攔截所有文件嗎?  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2008-10-06 10:36 | N.J.Paul
    eclipse3.4,應該用那個版本的propedit插件呢?  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序[未登錄] 2008-12-04 20:30 | Charles
    @bird

    瀏覽器的工具-Internet選項-語言-把美國英語放在最上面  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2008-12-05 15:30 | txy
    我照你的方法去做了,但選擇下拉框索引沒有反應? 請問這是什么原因
    謝謝!  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2008-12-05 16:02 | txy
    ok了,謝謝!  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序[未登錄] 2008-12-10 10:55 | aaa
    test  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序[未登錄] 2008-12-10 11:05 | aaa
    你好!我也是按你說的方法這樣用的:
    <%@page contentType="text/html; charset=UTF-8"%>
    <%@taglib prefix="s" uri="/struts-tags"%>
    <html>
    <head>
    <title>Hello World</title>
    </head>
    <body>
    <s:include value="LangSelector.jsp"/>
    <h2><s:text name="HelloWorld"/></h2>
    開始運行時初始頁面是對的,但為什么選擇下拉菜單后沒有變化?  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2009-01-21 15:34 | 胡炯
    我不知道怎么用你說的那個插件來進行轉碼???謝謝   回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2009-03-26 02:22 | this
    @tf
    字符編碼錯了  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2009-04-09 01:20 | hoist
    寫的很好,要點突出  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2009-04-12 10:11 | 舞命小丟
    好文章啊!正需要呢  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序[未登錄] 2009-04-15 16:37 | wind
    推 看了你的這篇文章,又更了解 struts2了  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2009-04-17 20:12 | 創意產品網
    不錯,學習了。  回復  更多評論
      
    # 看帖要回帖 2009-04-24 17:09 | 保密
    怎么所有的都一樣 沒有特色……  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2009-05-02 10:38 | hoist
    假如要動態進行國際化,比如一篇文章要多個語言版本,要同時有數據庫支持,可能比較麻煩吧?  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2009-05-20 14:56 | 服裝批發
    謝謝分享  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2009-05-22 01:02 | sadfdf
    很想 研究國際化 但是老是沒興趣  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2009-06-18 11:01 | 西
    挺厲害的 定一個  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2009-09-14 19:16 | 金屬咆哮
    大哥偶想通過JSP頁面直接訪問,而不是通過ACTION訪問,能這樣實現嗎?
      回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2011-06-07 18:00 | 地球乞丐
    很好,謝謝您的無私奉獻!  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2011-06-07 18:01 | 地球乞丐
    很好  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2011-07-25 09:51 | yanqing
    第二個例子,怎么瀏覽器中什么也沒有,也是按你的例子那樣弄得,不知道哪兒錯了。不過,那個HelloWorld好像沒賦值吧,怎么取出來的那個值  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序[未登錄] 2011-08-15 10:22 | test
    @bird
    工具--》internate選項--》語言  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序[未登錄] 2011-09-28 14:01 | hunter
    812866605@qq.com 求一份源碼,謝謝啦  回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2011-12-29 15:21 | 幸運皮
    謝謝樓主分享,謝謝指點思路.  回復  更多評論
      
    # 關于中文亂碼的問題 2012-09-14 17:18 | alexie
    今天按照例子做了下,發現當瀏覽器用中文的時候,會出現亂碼,上面的文章中也沒有介紹方法,搜了下可以參考下面的:
    ==========================
    解決的方法(如果沒有安插件的話):
    在你安裝的jdk里找到native2ascii.exe這個可執行文件,打開,然后把你要顯示的中文字粘貼到里面,點回車,會出來一串字符,再把這串字符輸入到globalMessages_zh_CN.properties這個文件里就可以了
      回復  更多評論
      
    # re: 在Struts 2.0中國際化(i18n)您的應用程序 2012-12-26 16:01 | zhb
    你好 messiiiii,使用了struts2的國際化,項目發布運行后,大約是在session失效的時間過后,切換中文(給request_locale賦值:zh_CN)的時候無法得到中文,頁面顯示了資源文件中的key值,但其他語言是正常的,請問這是什么原因呢?  回復  更多評論
      
    評論共2頁: 1 2 下一頁 
    主站蜘蛛池模板: 色九月亚洲综合网| 亚洲综合国产精品第一页| a国产成人免费视频| 亚洲aⅴ无码专区在线观看 | 亚洲综合无码一区二区| 亚洲国产精品成人一区| 女人被男人桶得好爽免费视频 | 亚洲av网址在线观看| 久久亚洲中文字幕精品一区| 免费毛片在线视频| 91在线视频免费看| 国产大片免费网站不卡美女| 久久久国产精品福利免费| eeuss在线兵区免费观看| 国产尤物在线视精品在亚洲| 亚洲中文字幕无码爆乳| 亚洲jjzzjjzz在线播放| 亚洲国产精品人久久电影| 99ri精品国产亚洲| 亚洲国产老鸭窝一区二区三区| 亚洲国产美女精品久久久久∴| 亚洲精品乱码久久久久久不卡| 国产国产人免费人成免费视频| 青青青国产免费一夜七次郎| 免费无码AV片在线观看软件| 美女被免费喷白浆视频| 91麻豆最新在线人成免费观看 | 亚洲av日韩av天堂影片精品| 亚洲日韩精品无码一区二区三区| 国产亚洲精品无码拍拍拍色欲| 亚洲乱码国产一区网址| 亚洲国产精品成人AV无码久久综合影院| 永久在线毛片免费观看| 日韩在线免费看网站| 国产免费观看黄AV片| 亚洲XX00视频| 亚洲无人区一区二区三区| 亚洲AV日韩精品久久久久| 亚洲精品自产拍在线观看动漫| 亚洲第一精品电影网| 亚洲一区二区三区不卡在线播放|