Rails 2 Multiidioma - Globalize
Hace escasos días he terminado un proyecto multiidioma con Rails 2 y Globalize (la versión "for 1.2"). Me he encontrado con varios problemas, por lo que voy a tratar de dar algunos consejos al respecto.
En primer lugar recomendar leer esto y esto sobre cómo usar Globalize si es vuestra primera aplicación RoR+Globalize y comentar que algunos de los problemas que me he encontrado son:
- Error al tratar de traducir modelos de ActiveRecord.
- El tema de las "rutas" y los "recursos" es un poco especial con el código que genera el scaffold con Rails 2 por defecto.
- Para que mantenga el idioma no basta con especificar en "routes.rb" las líneas:
map.connect ':locale/:controller/:action/:id'
map.connect ':locale/:controller/:action/:id.:format'
Algunos pasos necesarios:
Para solucionar el tema del error al traducir los modelos basta con aplicar el siguiente parche. Seguro que alguien os explicará por qué mejor que yo... :-P
Además de las línias que especificabamos hasta ahora en "routes.rb" debemos tener en cuenta el nuevo sistema de recursos y rutas rest que viene por defecto con Rails 2 y especificar el "path_prefix" delante de cada uno de nuestros recursos.
Por ejemplo:
map.resources :colors, :path_prefix => ':locale'
en lugar del que viene por defecto:
map.resources :colors
Una vez hecho este cambio hay algunos conflictos en las rutas que nos ha generado Rails por defecto con el scaffold, por ejemplo:
<%= link_to "Show", color_path(@color) %>
Rails no sabrá interpretar esta ruta y nos generará un error, eso es debido a que parece estar utilizando @color para encontrar el parámetro :locale que pedimos en el routes.rb. Bastará con hacer un pequeño cambio:
<%= link_to "Show", article_path(:id => @article) %>
Debemos específicar que @article es la :id y no el parámetro :locale (éste podemos especificarlo en el enlace también, pero normalmente lo cojo directamente con un :before_filter en application.rb).
También me he encontrado con algunos errores en los enlaces de editar, eliminar, etc... Pero se solucionan con el mismo sistema o, en su defecto, usando el antiguo sistema de rails 1.2.x para crear los enlaces.
Por ejemplo:
<%= link_to 'Editar'.t , :action => "edit", :controller => "colors", :locale => "es", :id => @color %>
Otro pequeño problema debido al "path_prefix" es un error en el formulario de "editar", se soluciona cambiando:
<% form_for(@color) do |f| %>
por algo así cómo:
<% form_for(@color, :url => {:controller => "colors", :action => "update", :id => @color.id }) do |f| %>
Estoy casi convencido de que debe haber algo más "corto" que cause el mismo efecto pero no he sabido encontrarlo, si alguien tiene la solucion no me iría del todo mal acortar esto... ;-)
Nada más creo, aparte de esto todo lo demás es igual o muy parecido a usar Globalize con las versiones anteriores de Rails. Hay multitud de artículos al respecto cómo los dos citados al inicio de éste post.
Sólo recordaros que Rails 2 ya no trae por defecto el "in_place_editor" por lo que deberéis instalar algun plugin para el apartado dónde traducimos los literales estáticos.
David - 2 months ago | Ruby on Rails | 29 comentarios




