GWT I18N на стороне сервера - PullRequest
11 голосов
/ 17 августа 2010

Каков наилучший способ реализации интернационализации на стороне сервера GWT?

  1. Использовать собственные файлы свойств Java (не знаете, как читать и как найти нужный языковой файл) (строка в юникоде)должен быть в кодировке ASCII)

  2. Использовать GWTI18N.java - модуль GWT, который дает вам бесшовное использование GWT I18N как на клиенте, так и на сервере и использует "java".lang.reflect.Proxy метод "

  3. Использование Kotori I18N - ...

  4. Другие идеи?

Как найти и передать локализацию от клиента к серверу?

На стороне сервера у меня есть сервлет, который до сих пор не использует какой-либо источник, зависящий от GWT, лучше?не делать этого?

Ответы [ 2 ]

16 голосов
/ 17 августа 2010

Я нашел это решение, и оно выглядит очень хорошо

gwt-i18n-server - обеспечивает простую поддержку функции gwt i18n на стороне сервера

Цель состоит в том, чтобы позволить разработчику GWT использовать свои интерфейсы Константы и Сообщения на стороне сервера (см. Интернационализация). Реализация основана на Java отражают API. Он загружает файлы свойств из classpath (та же папка, что и интерфейс). Он поддерживает Constants, ConstantsWithLookup, Messages (тоже во множественном числе). Лицензия LGPL.

Текущий язык клиента можно найти следующим образом:

LocaleInfo.getCurrentLocale().getLocaleName()
0 голосов
/ 05 мая 2016

Следуя другим темам здесь, в 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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...