Tengo un problema con la internacionalización. Estoy tratando de implementar el soporte de dos idiomas en mi aplicación GWT. Desafortunadamente, nunca encontré un ejemplo completo de cómo hacerlo con la ayuda de UiBinder. Eso es lo que hice:¿Cómo implementar i18n en la aplicación GWT?
Mi módulo I18nexample.gwt.xml:
<?xml version="1.0" encoding="UTF-8"?>
<module rename-to='i18nexample'>
<inherits name="com.google.gwt.user.User" />
<inherits name='com.google.gwt.user.theme.clean.Clean' />
<inherits name="com.google.gwt.i18n.I18N" />
<inherits name="com.google.gwt.i18n.CldrLocales" />
<entry-point class='com.myexample.i18nexample.client.ExampleI18N' />
<servlet path="/start" class="com.myexample.i18nexample.server.StartServiceImpl" />
<extend-property name="locale" values="en, fr" />
<set-property-fallback name="locale" value="en" />
</module>
Mi interfaz Message.java:
package com.myexample.i18nexample.client;
import com.google.gwt.i18n.client.Constants;
public interface Message extends Constants {
String greeting();
}
El mismo paquete com.myexample.i18nexample.client
tiene tres archivo de propiedades :
Message.properti es:
greeting = hello
Message_en.properties:
greeting = hello
Message_fr.properties:
greeting = bonjour
mi archivo UiBinder Greeting.ui.xml:
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder
xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui"
ui:generateFormat="com.google.gwt.i18n.rebind.format.PropertiesFormat"
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
ui:generateLocales="default" >
<ui:with type="com.myexample.i18nexample.client.Message" field="string" />
<g:HTMLPanel>
<ui:msg key="greeting" description="greeting">Default greeting</ui:msg>
</g:HTMLPanel>
</ui:UiBinder>
Cuando se inicia la aplicación, siempre me dan la salida en el navegador:
Default greeting
¿Por qué? ¿Qué estoy haciendo mal?
Me trataron de ejecutar la aplicación de diferentes URL:
http://127.0.0.1:8888/i18nexample.html?gwt.codesvr=127.0.0.1:9997
http://127.0.0.1:8888/i18nexample.html?locale=en&gwt.codesvr=127.0.0.1:9997
http://127.0.0.1:8888/i18nexample.html?locale=fr&gwt.codesvr=127.0.0.1:9997
El resultado no cambia. Aunque esperaba en el último caso un mensaje bonjour
.
Si por ejemplo yo uso un g:Buttton
en lugar del mensaje ui:msg
:
<g:HTMLPanel>
<g:Button text="{string.greeting}" />
</g:HTMLPanel>
en cuando me siento como resultado del botón con el texto "hello"
Y si entro en la URL:
http://127.0.0.1:8888/i18nexample.html?locale=fr&gwt.codesvr=127.0.0.1:9997
El texto del botón cambia a "bonjour"
. Aquí todo funciona como se espera. Pero, ¿por qué la internacionalización no funciona en mi primer caso?
Y si hay una diferencia entre lo siguiente:
<ui:msg description="greeting">Default greeting</ui:msg>
<ui:msg description="greeting">hello</ui:msg>
<ui:msg description="greeting"></ui:msg>
Debería existir diferentes resultados en estos casos? Cómo escribir correctamente?
Explíqueme los principios de la internacionalización en GWT y por qué mi ejemplo no funciona. Cualquier sugerencia sería muy apreciada.
Perdónenme, los archivos '.properties' por supuesto están nombrados correctamente. Es solo un error tipográfico. Gracias por su respuesta. Pero desafortunadamente no agrega claridad para mí y mi problema. Todo funciona correctamente sin el uso de UiBinder. Pero quiero entender cómo internacionalizar una aplicación correctamente exactamente con UiBinder. –
¿Podría escribir exactamente lo que necesito para corregir o proporcionar un enlace a la muestra completa? ¡Estaría muy agradecido! –
Consulte https://developers.google.com/web-toolkit/doc/latest/DevGuideUiBinderI18n. Si desea usar 'ui: msg', debe proporcionar los archivos de propiedades en el mismo paquete, con el mismo nombre que la interfaz de UiBinder. con un sufijo 'ImplGenMessages'. Alternativamente, puede usar 'com/google/gwt/i18n/client/LocalizedResource_ .properties' y/pero luego centralizar todos sus mensajes. Y de nuevo, use '-gen' y mire el código generado. –