2011-06-30 26 views
12

Definimos todas nuestras cadenas constantes internacionalizadas en un solo archivo de propiedades LocalizableResource_xx.properties (una por idioma) ubicado en google.gwt.i18n.client.¿Cómo manejar las comillas simples en las constantes de internacionalización?

De esta manera es posible acceder a las constantes en el código Java a través de la interfaz de constantes

Window.alert(myConstants.helloWorld()); 

, así como para usarlos dentro de la UiBinder .ui.xml

<ui:attribute key="some.key" name="text" description="useful info" /> 

Este enfoque no funciona bien si la cadena contiene una comilla simple ('). Esto se debe a que el compilador GWT arroja un java.text.ParseException: Unterminated single quote: cuando procesa los archivos .ui.xml. Si escapamos de la cita, es decir, duplicarla (''), el compilador pasa pero las cadenas accedidas a través de la interfaz constante contienen ambas comillas simples (como en You can''t do that).

Reemplazar las comillas simples con la codificación utf-8 \ u0027 no ayuda (la misma excepción que en el ejemplo anterior).

¿Es de alguna manera posible utilizar el mismo archivo de propiedades en las plantillas de UiBinder y en el código de Java sin toparse con molestos problemas de comillas simples?

+1

Ha intentado escapar de esta manera: \ '? –

+2

(Solo como referencia: El Javadoc para ['java.util.Properties.load (Reader)'] (http://download.oracle.com/javase/6/docs/api/java/util/Properties.html# load (java.io.Reader)) dice: "Los escapes no son necesarios para comillas simples o dobles, sin embargo, según la regla anterior, los caracteres de comillas simples y dobles precedidos por una barra diagonal inversa aún producen caracteres de comillas simples y dobles, respectivamente.") –

+0

@ Paweł Dyda: Sí, lo he intentado, pero la 'java.text.ParseException' aún se ha producido. – z00bs

Respuesta

1

Puesto que no parece haber otra solución que voy a publicar nuestra solución para el problema mencionado:

Hemos creado una clase de contenedor que implementa la interfaz constantes que simplemente pasa las constantes i18n a un String modify(String) antes de que' re pasó a la persona que llama.

public class ConstantsWrapper implements MyConstants { 

    private static MyConstants sConstants = GWT.create(MyConstants.class); 

    public static String transform(String text) { 
     return text.replaceAll("''", "'"); 
    } 

    @Override 
    public String someText() { 
     return transform(sConstants.someText()); 
    } 

    ... 
} 

Todavía estoy esperando una solución real.

3

Tienes que escapar de sus caracteres utilizando los caracteres de escape HTML (por ejemplo & # 39, para representar una comilla simple ') antes de guardarlos en el archivo de localización:

Usted encontrará una lista de caracteres de escape HTML en http://www.theukwebdesigncompany.com/articles/entity-escape-characters.php (o puede buscar la "lista de escape html" en google).

En su caso tiene que escribir & # 39; en lugar de "'"

Espero que esto resuelva su problema.

+0

Gracias por su respuesta. No entiendo la diferencia entre las dos anotaciones tuyas. Pero cuando escribo '" '"' salen los tres caracteres. – z00bs

10

Este problema parece estar fijo en la versión actual.

'' (¡eso son dos comillas simples) funciona bien para nosotros!

6

El carbón de escape es la comilla simple ' (en lugar de la barra invertida habitual \)

Ejemplo:

register.form.success=Un courriel a 'ét'é envoy'é a l''adresse suivante ': {0} 
Cuestiones relacionadas