GWT服务器端的国际化处理技术(I18N)

12
什么是实施GWT服务器端国际化的最佳方法?
  1. 使用本机Java属性文件(不确定如何读取和定位正确的语言文件)(Unicode字符串需要进行ASCII编码)

  2. 使用GWTI18N.java- GWT模块,可在客户端和服务器上无缝使用GWT I18N,并使用“java.lang.reflect.Proxy方法”

  3. 使用Kotori I18N - ...

  4. 其他想法?

如何从客户端查找并传递本地化信息到服务器?

在服务器端,我有一个Servlet仍未使用任何依赖于GWT的源代码,这样做是否更好?

2个回答

17

我发现了这个解决方案,它看起来非常好

gwt-i18n-server - 在服务器端提供对GWT国际化特性的简单支持

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

可以通过以下方式找到客户端当前语言环境:

LocaleInfo.getCurrentLocale().getLocaleName()

0

在 Stack Overflow 上跟随其他线程,我想出了这个解决方案,它还考虑了属性文件使用的编码(这可能会很麻烦,因为 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");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接