代码之家  ›  专栏  ›  技术社区  ›  Julian Popov

服务器端GWT I18N

  •  11
  • Julian Popov  · 技术社区  · 14 年前

    实现GWT服务器端国际化的最佳方法是什么?

    1. 使用本机Java属性文件(不知道如何读取和如何找到正确的语言文件)(Unicode字符串需要ASCII编码)

    2. 使用 GWTI18N.java -GWT模块,让您在客户机和服务器上无缝地使用GWTI18N,并使用“java.lang.reflect.proxy方法”

    3. 使用 Kotori I18N -…

    4. 其他想法?

    如何找到本地化并将其从客户机传递到服务器?

    在服务器端,我有一个servlet,它仍然不使用任何依赖于GWT的源,最好不要这样做吗?

    2 回复  |  直到 8 年前
        1
  •  16
  •   Bob    13 年前

    我找到了这个溶液,看起来很好

    gwt-i18n-server -在服务器端提供对GWTI18N功能的简单支持

    目的是允许GWT开发人员在服务器端使用其常量和消息接口(参见国际化)。该实现是基于Java反射API的。它从类路径(与接口相同的文件夹)加载属性文件。它支持常量、constantswithlookup、messages(复数)。许可证是LGPL。

    客户端当前区域设置可以通过以下方式找到:

    LocaleInfo.getCurrentLocale().getLocaleName()
    
        2
  •  0
  •   carlossierra    8 年前

    在So中的其他线程之后,我提出了这个解决方案,它还考虑了用于属性文件的编码(在ResourceBundle默认使用“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");