¿Cómo puedo internacionalizar una página GWT UIBinder con Mensajes?
internationalization (3)
Existe un problema conocido con UiBinder en combinación con la internacionalización, consulte también este hilo reciente en el bugtracker de gwt: http://code.google.com/p/google-web-toolkit/issues/detail?id=4355 .
En el comentario 4 se da una solución:
Si se llama a su archivo UiBinder, por ejemplo, ''LoginView.ui.xml'', llame al archivo de propiedades LoginViewLoginViewUiBinderImplGenMessages.properties (yes ''LoginView'' aparece dos veces) y póngalo junto al archivo java de la vista en el paquete fuente, por lo que en total '' Tendré 3 archivos:
LoginView.ui.xml LoginView.java LoginViewLoginViewUiBinderImplGenMessages.properties
Estoy tratando de internacionalizar una aplicación UIBinder con archivos de propiedades. Dado que ya tenemos muchas traducciones expuestas por la interfaz com.google.gwt.i18n.client.Messages (GWT 1.7.1), nos gustaría reutilizar estos mensajes.
He probado lo siguiente:
<!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"
xmlns:res="ui:with:be.credoc.iov.webapp.client.MessageConstants">
<g:HTMLPanel>
<div>
<res:msg key="email">Emaileke</res:msg>:
<g:TextBox ui:field="email" />
</div>
</g:HTMLPanel>
</ui:UiBinder>
La clase MessageConstants se ve así:
@DefaultLocale("nl")
public interface MessageConstants extends Messages {
String email();
}
Sin embargo, esto no funciona. ¿Cómo puedo hacer esto?
Actualizar:
Desde que Igor escribió su respuesta, ha habido un nuevo método para usar los mensajes en ui Binder.
<span>This <ui:text from="{msgRes.message}" /> has been internationalized</span>
Este método usa la integración de UiBinder de recursos de texto de GWT
Actualizar:
verifique la respuesta de logan a continuación para una solución disponible en las versiones recientes de GWT.
Tuve (en realidad, tengo) el mismo problema que tú: después de migrar a GWT 2.0, tenía un archivo de propiedades que quería usar en mis archivos de UiBinder. Desafortunadamente, no pude hacer que funcionara como quería, parece que los desarrolladores de GWT quieren que la gente use la sintaxis descrita en la guía i18n para UiBinder , donde se crea una interfaz de mensaje durante la compilación para cada plantilla de UiBinder, etc.
De todos modos, todavía puedes usar interfaces de Messages
externos como esta:
<!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:with field=''cc'' type=''path.to.i18n.SomeMessages''/>
<ui:with field=''res'' type=''path.to.resource.ResourceBundle''/>
<ui:style>
.required {
color: red;
font-weight: bold;
}
.right {
text-align: right;
}
.textBox {
margin-right: 7px;
}
</ui:style>
<g:HTMLPanel styleName=''{res.style.form} {res.style.mbox}'' ui:field=''mainPanel''>
<h2 ui:field=''loginHeader'' />
<h3 ui:field=''loginLabel'' />
<div class=''{style.textBox}''><g:TextBox ui:field="loginBox" /></div>
<h3 ui:field=''passwordLabel'' />
<div class=''{style.textBox}''><g:PasswordTextBox ui:field="passwordBox" /></div>
<div><g:CheckBox ui:field=''rememberMeCheckBox'' text=''{cc.rememberMeCheckboxText}'' /></div>
<div class=''{style.right}''><g:Button ui:field=''submitButton'' text=''{cc.loginSubmitButtonText}'' /></div>
</g:HTMLPanel>
</ui:UiBinder>
Sin embargo, eso solo funciona para cosas como el título de Button
, etc., no contenido de divs: / Puedes completarlos en la clase detrás de la plantilla de UiBinder, pero debería haber una mejor manera.
Tenía la esperanza de que pudieras establecer el HTML interno a través de innerHTML
(ya que UiBinder debería reconocer ese método y permitir establecer su valor a través de la plantilla XML / UiBinder) pero desafortunadamente, la última vez que lo revisé no funcionó: /