2016-10-03 80 views
4

我有一個多語言的struts應用程序,最近我將struts從2.3.20升級到2.3.29。升級後,泰米爾語不起作用,即使我們選擇泰米爾語言,文本也會以英文顯示。泰米爾語言選項不支持struts 2.3.29

我在選擇泰米爾語言時檢查了語言環境設置,它是正確的,即request_locale = ta_IN

我試着在我的自定義攔截器類中擴展I18nInterceptor,然後覆蓋如下的方法getLocaleFromParam()方法。這也沒有奏效。

所以,請讓我知道你是否有任何解決這個問題的方法。

泰米爾語在Struts的2.3.20做工精細

protected Locale getLocaleFromParam(Object requestedLocale) 
{ 
     Locale locale = null; 
     if (requestedLocale != null) { 
      locale = (requestedLocale instanceof Locale) ? 
        (Locale) requestedLocale : 
        LocalizedTextUtil.localeFromString 
           (requestedLocale.toString(), null); 
      if (locale != null) { 
       logger.debug("applied request locale="+locale); 
      } 
     } 
     return locale; 
} 
+0

的代碼似乎是正確的,你是怎麼加入這個攔截到STRUST?你刪除了struts的默認'i18n'攔截器嗎? –

+1

請參考http://stackoverflow.com/questions/36245849/struts-2-version-2-3-28-only-accepts-registered-locales –

+0

@AlirezaFattahi我提到了重寫getLocaleFromParam()方法的問題。我們如何使用未在JVM中註冊的區域設置。我沒有刪除默認堆棧。新的攔截器代碼如下。 <攔截> <攔截器名稱= 「langSelInterceptor」 \t類= 「com..LangInter」> <攔截器堆棧名稱= 「newStack」> <攔截器參考名稱= 「langSelInterceptor」 /> <攔截器參考名稱= 「defaultStack」/> <動作名稱= 「loginTamilLocale」 類= 「com.Action」> <攔截-REF名稱= 「newStack」/> –

回答

1

您需要更改替換您的攔截器。

默認堆在下面的支柱定義(https://struts.apache.org/docs/struts-defaultxml.html):

<interceptor-stack name="defaultStack"> 
    <interceptor-ref name="exception"/> 
    <interceptor-ref name="alias"/> 
    <interceptor-ref name="servletConfig"/> 
    <interceptor-ref name="i18n"/> 
    <interceptor-ref name="prepare"/> 
    <interceptor-ref name="chain"/> 
    <interceptor-ref name="scopedModelDriven"/> 
    <interceptor-ref name="modelDriven"/> 
    <interceptor-ref name="fileUpload"/> 
    <interceptor-ref name="checkbox"/> 
    <interceptor-ref name="datetime"/> 
    <interceptor-ref name="multiselect"/> 
    <interceptor-ref name="staticParams"/> 
    <interceptor-ref name="actionMappingParams"/> 
    <interceptor-ref name="params"/> 
    <interceptor-ref name="conversionError"/> 
    <interceptor-ref name="validation"> 
     <param name="excludeMethods">input,back,cancel,browse</param> 
    </interceptor-ref> 
    <interceptor-ref name="workflow"> 
      <param name="excludeMethods">input,back,cancel,browse</param> 
    </interceptor-ref> 
    <interceptor-ref name="debugging"/> 

您需要定義自己的攔截器,並將其添加到默認堆棧

<interceptor name="customi18n" 
     class="foo.bar.CustomI18NInterceptor" /> 

並添加它到你自己的堆棧:

//Give a new name to your stack 
<interceptor-stack name="customDefaultStack"> 
     <interceptor-ref name="exception"/> 
     <interceptor-ref name="alias"/> 
     <interceptor-ref name="servletConfig"/> 
     //Replace your customi18n interceptor 
     <interceptor-ref name="customi18n"/> 
    //Same as above 
    ..... 

請這個堆棧默認

<default-interceptor-ref name="customDefaultStack"/> 
+0

我按照上面告訴你的方式嘗試過。仍然沒有工作。當我嘗試從會話中打印語言環境信息時,它會正確打印泰米爾語言區域設置,即「ta_IN」。它仍然以英文呈現頁面。 logger.info(「Locale:」+ session。的getAttribute( 「WW_TRANS_I18N_LOCALE」)); –

+0

如果你設置默認語言環境struts \t'' –

+0

會發生什麼事情,如果我將ta_IN作爲struts.xml中的默認語言環境,它會正常工作。 –