GWT I18N на стороне сервера
Каков наилучший способ реализации интернационализации на стороне сервера GWT?
-
Используйте собственные файлы свойств Java (не знаете, как читать и как найти нужный языковой файл) (строка в Юникоде должна быть закодирована в ASCII)
-
Используйте GWTI18N.java - модуль GWT, который дает вам полное использование GWT I18N как на клиенте, так и на сервере и использует "java.lang.reflect.Proxy method"
-
Используйте Kotori I18N -...
-
Другие идеи?
Как я могу найти и передать локализацию от клиента, чтобы разорвать?
На стороне сервера у меня есть сервлет, который все еще не использует какой-либо зависимый от GWT источник, лучше ли этого делать?
Ответы
Ответ 1
Я нашел это решение, и он выглядит очень хорошо
gwt-i18n-server - Обеспечивает простую поддержку функции gwt i18n на стороне сервера
Цель состоит в том, чтобы позволить разработчику GWT использовать свои интерфейсы констант и сообщений на стороне сервера (см. интернационализацию). Реализация основана на java-отражении api. Он загружает файлы свойств из пути к классам (той же папке, что и интерфейс). Он поддерживает константы, константыWithLookup, сообщения (множественное число тоже). Лицензия - LGPL.
Текущая локализация клиента может быть найдена следующим образом:
LocaleInfo.getCurrentLocale().getLocaleName()
Ответ 2
Следуя другим темам здесь, в 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");