簡體   English   中英

GWT I18N在服務器端

[英]GWT I18N on the server side

實施GWT服務器端國際化的最佳方法是什么?

  1. 使用本機Java屬性文件(不確定如何讀取以及如何找到正確的語言文件)(unicode字符串需要進行ASCII編碼)

  2. 使用GWTI18N.java - GWT模塊,它可以讓您在客戶端和服務器上無縫使用GWT I18N,並使用“java.lang.reflect.Proxy方法”

  3. 使用Kotori I18N - ......

  4. 其他想法?

如何找到客戶端到服務器的本地化並傳遞?

在服務器端,我有一個仍然不使用任何GWT依賴源的Servlet,最好不要這樣做嗎?

我找到了這個解決方案,它看起來非常好

gwt-i18n-server - 在服務器端提供gwt i18n功能的簡單支持

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

可以通過以下方式找到客戶端當前區域設置:

LocaleInfo.getCurrentLocale().getLocaleName()

在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");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM