2010-08-17 18 views
11

¿Cuál es la mejor manera de implementar GWT Server Side Internationalization?GWT I18N en el lado del servidor

  1. Use archivos de propiedades Java nativa (no estoy seguro cómo leer y cómo localizar el archivo de idioma correcto) (cadena Unicode tienen que ser ASCII codificado)

  2. Uso GWTI18N.java - módulo de GWT, que le da sin problemas uso de GWT I18N tanto en el cliente y el servidor y utiliza "método java.lang.reflect.Proxy"

  3. uso Kotori I18N - ...

  4. Otras ideas?

¿Cómo puedo encontrar y pasar la localización del cliente al servidor?

En el lado del servidor tengo un servlet que todavía no utiliza ninguna fuente dependiente de GWT, ¿es mejor no hacerlo?

Respuesta

16

me encontré con esta solución y se ve muy bien

gwt-i18n-server - Proporciona un simple apoyo de la función i18n GWT en el lado del servidor

El objetivo es permitir a los desarrolladores de GWT a utilizar sus constantes y las interfaces de Mensajes en el lado del servidor (Ver internacionalización). La implementación se basa en java reflect api. Carga los archivos de propiedades desde classpath (misma carpeta que la interfaz). Es compatible con Constantes, Constantes con búsqueda, Mensajes (también en plural). La licencia es LGPL.

cliente localización actual se puede encontrar de esta manera:

LocaleInfo.getCurrentLocale().getLocaleName() 
+0

Es fácil y que está funcionando prefectamenta –

0

Después de otros hilos aquí en SO, me ocurrió con esta solución que también considera la codificación utilizada para los archivos de propiedades (que puede ser problemático como ResourceBundle usa por defecto "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; 
     } 
    } 
} 

la manera de utilizar este sería muy similar que el uso regular ResourceBundle:

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

O puede utilizar el constructor alternativo que utiliza UTF-8 por omisión:

private MyResourceBundle labels = new MyResourceBundle("es"); 
Cuestiones relacionadas