2010-08-17 29 views
11

Jaki jest najlepszy sposób wdrożenia internacjonalizacji GWT Server Side?GWT I18N po stronie serwera

  1. użyć właściwości natywne pliki Java (nie wiem, jak czytać i jak znaleźć plik językowy z prawej) (Unicode łańcuch musi być ASCII zakodowane)

  2. Zastosowanie GWTI18N.java - moduł GWT która daje szwu zastosowanie GWT I18N zarówno na kliencie i na serwerze i korzysta z metody "java.lang.reflect.Proxy"

  3. zastosowanie Kotori I18N - ...

  4. inne pomysły?

Jak znaleźć i przekazać lokalizację z klienta na serwer?

Po stronie serwera mam Servlet, który nadal nie używa żadnego źródła zależnego od GWT, czy lepiej tego nie robić?

Odpowiedz

16

znalazłem to rozwiązanie i wygląda bardzo dobrze

gwt-i18n-server - Zapewnia prostą obsługę funkcji i18n gwt po stronie serwera

Celem jest umożliwienie do dewelopera GWT do korzystania z ich Stałe i interfejsy Messages po stronie serwera (Zobacz internationzation). Implementacja jest oparta na java odzwierciedlają api. Ładuje pliki właściwości ze ścieżki klasy (ten sam folder, co interfejs). Obsługuje Constants, ConstantsWithLookup, Messages (również w liczbie mnogiej). Licencja to LGPL.

Client aktualne ustawienia regionalne można znaleźć w ten sposób:

LocaleInfo.getCurrentLocale().getLocaleName() 
+0

To proste i wszystko działa perfekcyjnie –

0

innych wątków tutaj w SO, wpadłem na to rozwiązanie, które uważa również kodowanie używane dla plików Properties (co może być kłopotliwe jak ResourceBundle wykorzystuje domyślnie „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; 
     } 
    } 
} 

sposobu korzystania ten byłby bardzo podobny niż regularnego stosowania ResourceBundle:

private MyResourceBundle labels = new MyResourceBundle("es", "UTF-8"); 
String label = labels.getString(key) 

Albo można użyć alternatywnego konstruktora, który używa UTF-8 domyślnie:

private MyResourceBundle labels = new MyResourceBundle("es"); 
Powiązane problemy