2010-08-17 2 views
11

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

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

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

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

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

Как я могу найти и передать локализацию от клиента, чтобы разорвать?

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

ответ

16

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

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

Целью является, чтобы позволить разработчику GWT использовать свои Константы и интерфейсы сообщений на стороне сервера (см. интернационализацию). Реализация основана на java-отражении api. Он загружает файлы свойств из пути к классам (той же папке, что и интерфейс). Он поддерживает константы, константыWithLookup, сообщения (множественное число тоже). Лицензия - LGPL.

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

LocaleInfo.getCurrentLocale().getLocaleName() 
+0

Это легко, и это работает втирают –

0

другие следующие темы здесь в 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"); 
Смежные вопросы