Internacionalización en los ftl

15 views
Skip to first unread message

Marianela Moras

unread,
Sep 5, 2011, 4:40:25 PM9/5/11
to katar...@googlegroups.com
Gente,

Necesito utilizar internacionalización desde los .ftl y aún no lo logro.

Si utilizo ${message("key")}  en el ftl da el error Expression message is undefined
Y si importo <#import "/spring.ftl" as spring/>  y desde el ftl uso <@spring.message "key"/> el error es Expression spring is undefined

Alguien ya utilizó internacionalización directamente desde los .ftl?
Aclaro que ya declaré el bean messageSource de spring y lo estoy utilizando perfectamente desde los controllers...

Espero sus comentarios, gracias!

Marianela



Pablo Graña

unread,
Sep 5, 2011, 9:25:58 PM9/5/11
to katar...@googlegroups.com
Un problema que veo es el import. Deberia ser:

<#import "spring.ftl" as spring />

Justo en estos ultimos releases estamos agregando internacionalizacion
en Katari. Estamos usando una estrategia que permite:

1- Que los modulos puedan ser localizados por su autor.
2- Que un tercero pueda agregar traducciones a otro modulo,
simplemente agregando un jar.
3- Que el que empaqueta la webapp pueda redefinir cualquier mensaje en
cualquier idioma.

Tambien estamos incluyendo un mecanismo para seleccionar el locale:

* Si se postea lang=<blah>, se toma ese lenguaje para el request.
* Usamos el cookie locale resolver.
* Evitamos el uso de messages.properties sin el locale.
* Definimos un 'fallback locale', el locale que se usa si no se
encuentra la traduccion.

En estos dias voy a hacer un release que incluye la
internacionalizacion de menues.

Saludos

2011/9/5 Marianela Moras <alejand...@globant.com>:

> --
> You received this message because you are subscribed to the Google Groups
> "katari-user" group.
> To post to this group, send email to katar...@googlegroups.com.
> To unsubscribe from this group, send email to
> katari-user...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/katari-user?hl=en.
>

--
Pablo Gra\~na
Chief Architect
Globant
Arg Office: +54 (11) 4109 1743
UK  Office: +44 (20) 7043 8269 int 8043
US  Office: +1 (212) 400 7686 int 8043

Marianela Moras

unread,
Sep 6, 2011, 7:36:34 AM9/6/11
to katar...@googlegroups.com
Efectivamente el import es sin / y además incluí el import dentro del ftl del mismo weblet, no en el decorator donde se estaba incluyendo el import de katari, con eso se solucionó el problema :)

Gracias!!!

2011/9/5 Pablo Graña <pablo...@globant.com>

Pablo Graña

unread,
Sep 6, 2011, 8:35:54 AM9/6/11
to katar...@googlegroups.com
Para traducir los decorators tenes que hacer otra cosa.

En la version 0.36 (o 0.35, no recuerdo), hay un
FreemarkerDecoratorServlet que implementa un mecanismo similar al del
DispatcherServlet de spring. Con eso podes incluir el spring.ftl en
los decorators y usar @spring.message. Para usar esto, tenes que:

1- Actualizar a una nueva version de katari. Esto puede que no sea
trivial, porque actualizamos katari a spring 3.0. No debera ser tan
costoso, tampoco, en 1/2 dia tiene que salir. Hay que 'vigilar' las
dependencias: que no se 'cuele' alguna de spring 2.5 (mvn
dependency:tree ayuda).

2- Definir un bean KatariMessageSource en el module.xml del style module:

<!-- Message source for this module, loaded from localized "messages_xx"
files.
Note: as this message source is not named messageSource, it is not used as
the defaulte message source for the application context. -->
<bean id="decorator.messageSource"
class="com.globant.katari.core.spring.KatariMessageSource"
p:basename="classpath:/com/globant/katari/style/lang/messages"
p:debugPrefix='../katari-style/src/main/resources'
p:debug-ref='debugMode'>
<constructor-arg index='0' value='local-login'/>
<constructor-arg index='1' ref='katari.messageSource'/>
</bean>

3- Cambiar la declaracion de FreemarkerDecoratorServlet. Aca hay hay un ejemplo:

<bean
class="com.globant.katari.core.sitemesh.FreemarkerDecoratorServlet">
<constructor-arg index='0' ref='decorator.messageSource'/>
</bean>
</constructor-arg>
<constructor-arg index="1">
<map>
<entry key="TemplatePath"
value="class://com/globant/katari/style"/>
<entry key="DebugPrefix"
value="../katari-style/src/main/resources"/>
<entry key="AdditionalTemplatePaths"

value="class://com/globant/katari/core/web;class://org/springframework/web/servlet/view/freemarker"/>
<entry key="AdditionalDebugPrefixes"

value="../katari-core/src/main/resources;../katari-core/src/main/resources;"/>
<entry key="debug" value-ref="debugMode"/>
</map>
</constructor-arg>
</bean>

(lo mas importante es la referencia al messageSource)

4- Escribir las traducciones en los messages_<locale>.properties.

NOTA: los ejemplos anteriores hay que adaptarlos al proyecto concreto.

saludos

2011/9/6 Marianela Moras <alejand...@globant.com>:

Reply all
Reply to author
Forward
0 new messages