miércoles, 18 de noviembre de 2009

Internacionalización en wicket (aplicaciones multi idioma )

Obvio, no se usa mas poner los textos hace mil años =D, incluso, aunque la aplicacion este pensada para un solo idioma.
Por ? y facil, correcciones ortograficas, estandarizacion de palabras (no queda bien que un boton diga guardar, otro diga save, y otro aplicar )

Solucion magica gracias a java y wicket

archivos.properties

Simple, es un archivo de texto (o varios ) que tienen clave-valor para los textos (o configuraciones)



# comentarios
clave=valor

#clasico ejemplo hola mundo
message=Hola mundo !




ahora donde y como ponemos estos archivos ?

wicket busca primero en un archivo.properties con el mismo nombre que la pagina
por ej: home.html y home.java , va a buscar el home.properties, si no lo encuentra, va a buscar el de la clase super de este (WebPage.properties ) si no puede, su padre y asi hasta
llegar al object.java

si no encuentra la clave hasta ahi, busca por los componentes (por ejemplo panelMenu.properties , panelFooter.properties, etc ) o por la aplicacion.

Con esto, podemos tener uno con el nombre de la aplicacion, y sobreescribir si queremos algo particular, en uno

entonces


Application.properties



#clasico ejemplo hola mundo
message=Hola mundo !




home.properties



#clasico ejemplo hola mundo
message=Hola mundo sobreescrito


como se usa ?




<wicket:message key="message">esto se pisa si encuentra una clave (si no, no )</wicket:message>





en vez de poner el texto en el html


si lo queremos en un componente html por ejemplo un input



<input type="submit" value="Hello world"/>
lo reemplazamos por
<input type="submit" value="texto por defecto" wicket:message="value:helloworld"/>


y si quicieramos poner mas de una propiedad



<input type="submit" value="texto por defecto" wicket:message="value:helloworld,title:hellotitle"/>




como darle varios idiomas

se pone un archivo por cada idioma

(idioma por defecto)
application.properties
(ingles)
application.properties
(españo)
application.properties
(español argentina)
application.properties


codigos en http://msdn.microsoft.com/en-us/library/ms533052(VS.85).aspx

"si, m$ hace cosas buenas =P"



tambien podemos usar esto para configuraciones,

desde codigo java podemos levantarlo con wicket

new StringResourceModel(key, this,null)





MyPanel.properties:
bla=Un texto loco

MyPanel.html:
<span wicket:id="summary">Text that will be replaced.</span>

MyPanel.java:

Summary summary = ...;
add(new Label("summary", new StringResourceModel("bla", this, null)));





tambien se puede inducir cual locale usar

Locale.getDefault() y Locale.setDefault(Locale))




Referencias


http://cwiki.apache.org/WICKET/everything-about-wicket-internationalization.html
http://www.chuidiang.com/java/ResourceBundle/internacionalizacion.php
http://wicket.apache.org/docs/wicket-1.3.2/wicket/apidocs/org/apache/wicket/model/StringResourceModel.html
listado locales
http://msdn.microsoft.com/en-us/library/ms533052(VS.85).aspx















Powered by ScribeFire.

No hay comentarios.: