2010-08-17 150 views
11

實現GWT服務器端國際化的最佳方式是什麼?服務器端的GWT I18N

  1. 使用本地Java屬性文件(不知道如何閱讀,如何找到合適的語言文件)(unicode字符串必須是ASCII編碼)

  2. 使用GWTI18N.java - GWT模塊,讓你無縫在客戶端和服務器以及使用GWT國際化的使用「java.lang.reflect.Proxy法」

  3. 使用Kotori I18N - ...

  4. 其他的想法?

如何查找並通過本地化從客戶端切斷?

在服務器端我有一個Servlet,它仍然不使用任何GWT相關的源代碼,最好不要這樣做?

回答

16

我發現這個解決方案,它看起來非常好

gwt-i18n-server - 提供服務器端

目的是允許對GWT開發人員使用他們的常量一個簡單的支持GWT國際化功能和消息接口在服務器端(見國際化)。該實現基於java反射api。它從類路徑(與接口相同的文件夾)加載屬性文件。它支持Constants,ConstantsWithLookup,Messages(也是複數)。許可證是LGPL。

客戶端當前的區域可以發現這樣說:

LocaleInfo.getCurrentLocale().getLocaleName() 
+0

這很容易,它的工作prefectly – 2010-08-17 15:00:42

0

在這裏SO繼其他線程,我想出了這個解決方案,也考慮用於屬性文件的編碼(這可能會很麻煩作爲資源包默認使用「ISO-8859-1」):

import java.io.UnsupportedEncodingException; 
import java.util.Locale; 
import java.util.ResourceBundle; 

public class MyResourceBundle { 

    // feature variables 
    private ResourceBundle bundle; 
    private String fileEncoding; 

    public MyResourceBundle(Locale locale, String fileEncoding){ 
     this.bundle = ResourceBundle.getBundle("com.app.Bundle", locale); 
     this.fileEncoding = fileEncoding; 
    } 

    public MyResourceBundle(Locale locale){ 
     this(locale, "UTF-8"); 
    } 

    public String getString(String key){ 
     String value = bundle.getString(key); 
     try { 
      return new String(value.getBytes("ISO-8859-1"), fileEncoding); 
     } catch (UnsupportedEncodingException e) { 
      return value; 
     } 
    } 
} 

使用,這將是比普通的ResourceBundle的使用非常相似的方式:

private MyResourceBundle labels = new MyResourceBundle("es", "UTF-8"); 
String label = labels.getString(key) 

或者你可以使用它默認使用UTF-8的可選的構造:

private MyResourceBundle labels = new MyResourceBundle("es");