隨筆-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 閱讀(73188) 評論(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 下一頁 
          主站蜘蛛池模板: 岱山县| 茶陵县| 棋牌| SHOW| 梁平县| 孝义市| 新建县| 彝良县| 临洮县| 张家口市| 祁门县| 抚顺市| 铜山县| 沙湾县| 台东县| 堆龙德庆县| 中西区| 晋州市| 昆明市| 上杭县| 敖汉旗| 永顺县| 寿宁县| 石嘴山市| 莆田市| 上杭县| 常宁市| 汕尾市| 富平县| 神池县| 翁牛特旗| 巩义市| 辉县市| 玉山县| 洪江市| 马尔康县| 资源县| 获嘉县| 新河县| 军事| 玉溪市|