2013-03-06 2 views
3

내 응용 프로그램의 대부분은 https://developers.google.com/web-toolkit/doc/latest/DevGuideI18n (주로 UIBinder 접근 방식)에 나와있는 권장 국제화 기술을 사용할 수 있습니다.동적으로 생성 된 내용에 대한 GWT 국제화

현재 개체를 가져 와서 해당 속성/필드를 동적으로 표시하는 단일 위젯을 사용하고 있으므로 UIBinder와 앞서 언급 한 국제화 기술을 사용할 수 없습니다.

디자인을 변경하고 표시하려는 각 유형의 객체에 대해 여러 위젯을 작성하거나 아직 찾지 못한 국제화 기술이 필요합니까 ??

답변

3

Dynamic String Internationalization 섹션에서 개발자 안내서를 다시 읽어야합니다.

접근 방식은 로케일 지원을 코딩해야 함을 의미합니다. 우리는 Dictionary 클래스를 사용하여이 작업을 수행했습니다. 로케일 지원을 제공하는 트릭은 각 로케일에 대한 사전을 갖는 것입니다.

1 단계 쿠키와 함께 GWT module.gwt.xml의 로캘 개념을 사용하는지 확인하십시오. gwt 응용 프로그램이로드되기 전에 쿠키 GWT_LOCALE이 설정되었는지 확인하십시오. 당신이 수요에 게으르게이 인출하고자하는 경우 선행 HTML 스크립트 태그 또는 사용 RequestBuilder를 사용하여

<extend-property name="locale" values="en,ar,de" /> 
<set-property name="locale" value="en" /> 
<set-property-fallback name="locale" value="en" /> 
<set-configuration-property name="locale.cookie" value="GWT_LOCALE" /> 
<set-configuration-property name="locale.useragent" value="Y" /> 

단계 2 로드 WidgetMessages.js. WidgetMessages.js

의 내용
var widget_messages_en = { 
    "today" : "Today", 
    "now" : "Now" 
}; 

var widget_messages_ar= { 
    "today" : "۷ڤدجچ", 
    "now" : "چڤت" 
} 

var widget_messages_de= { 
    "today" : "Today", 
    "now" : "Now" 
} 

단계 3 프로세스 및 로컬 해시 맵에 사전로드합니다.

private static Map<String, Dictionary> I18N_DICTIONARIES = new HashMap<String, Dictionary>(); 

    private static Dictionary createDictionary(String dictionaryName) 
    { 
      String moduleId = dictionaryName + "_messages_" + LocaleInfo.getCurrentLocale().getLocaleName(); 
      Dictionary dictionary = Dictionary.getDictionary(moduleId); 
      I18N_DICTIONARIES.put(dictionaryName, dictionary); 
      return dictionary; 
    } 

    public static String getI18NString(String dictionaryName, String stringToInternationalize) 
    { 
     Dictionary dictionary = I18N_DICTIONARIES.get(dictionaryName); 
     if (dictionary == null) 
     { 
      dictionary = createDictionary(dictionaryName); 
     } 
     String i18string = null; 
     if (dictionary == null) 
      return stringToInternationalize; 
     try 
     { 
      i18string = dictionary.get(stringToInternationalize); 
     } 
     catch (Exception e) 
     { 
     } 
     return i18string; 
    } 

- 당신이 i18nstrings에 문자열을 처리하고 위젯에 사용할 수있는 위의 접근 방식의 여러 가지 변화를 시도 할 수 있습니다 ....

관련 문제