2010-07-06 3 views

답변

5

, 난 다음 코드

locale.provider=com.sample.web.resource.I18nStruts2Adapter 
locale.resolver=com.sample.web.resource.I18nStruts2Adapter 



package com.sample.web.resource; 

import com.opensymphony.xwork2.ActionContext; 
import com.opensymphony.xwork2.LocaleProvider; 
import com.opensymphony.xwork2.TextProvider; 
import com.opensymphony.xwork2.util.ValueStack; 
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 
import org.apache.struts2.views.jsp.TagUtils; 
import org.displaytag.Messages; 
import org.displaytag.localization.I18nResourceProvider; 
import org.displaytag.localization.LocaleResolver; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.jsp.PageContext; 
import javax.servlet.jsp.tagext.Tag; 
import java.util.Iterator; 
import java.util.Locale; 


public class I18nStruts2Adapter implements LocaleResolver, I18nResourceProvider { 

    /** 
    * prefix/suffix for missing entries. 
    */ 
    public static final String UNDEFINED_KEY = "???"; //$NON-NLS-1$ 

    /** 
    * logger. 
    */ 
    private static Log log = LogFactory.getLog(I18nStruts2Adapter.class); 

    /** 
    * @see LocaleResolver#resolveLocale(javax.servlet.http.HttpServletRequest) 
    */ 
    public Locale resolveLocale(HttpServletRequest request) { 

     Locale result = null; 
     ValueStack stack = ActionContext.getContext().getValueStack(); 

     Iterator iterator = stack.getRoot().iterator(); 
     while (iterator.hasNext()) { 
      Object o = iterator.next(); 

      if (o instanceof LocaleProvider) { 
       LocaleProvider lp = (LocaleProvider) o; 
       result = lp.getLocale(); 

       break; 
      } 
     } 

     if (result == null) { 
      log.debug("Missing LocalProvider actions, init locale to default"); 
      result = Locale.getDefault(); 
     } 

     return result; 
    } 

    /** 
    * @see I18nResourceProvider#getResource(String, String, 
    *  javax.servlet.jsp.tagext.Tag , javax.servlet.jsp.PageContext) 
    */ 
    public String getResource(String resourceKey, String defaultValue, Tag tag, 
      PageContext pageContext) { 

     // if resourceKey isn't defined either, use defaultValue 
     String key = (resourceKey != null) ? resourceKey : defaultValue; 
     System.out.println("Key :"+key); 
     String message = null; 
     ValueStack stack = TagUtils.getStack(pageContext); 
     Iterator iterator = stack.getRoot().iterator(); 

     while (iterator.hasNext()) { 
      Object o = iterator.next(); 

      if (o instanceof TextProvider) { 
       TextProvider tp = (TextProvider) o; 
       message = tp.getText(key); 

       break; 
      } 
     } 

     // if user explicitely added a titleKey we guess this is an error 
     if (message == null && resourceKey != null) { 
      log.debug(Messages 
        .getString("Localization.missingkey", resourceKey)); //$NON-NLS-1$ 
      message = UNDEFINED_KEY + resourceKey + UNDEFINED_KEY; 
     } 

     return message; 
    } 

} 
을 사용하여 해결 한
1

일부 코드를 표시하고 문제를 해결하십시오.

<s:text name="my.key"/>을 사용하여 라벨이 해당 페이지에 올바르게로드되고 있는지 확인하십시오. my.key의 값이 표시되면 언어 파일이 제대로로드되었음을 알 수 있습니다.

titleKey="my.key" 속성이 display:column 인 경우 작동해야합니다. 또한 titleKey는 case sensetive이며, titlekey가 아닙니다.

표시 tag.properties에
관련 문제