Patch para o Globalize funcionar com template handler não nativo

Quando usamos o Globalize 1.2, plugin de internacionalização para Rails, com parsers de templates não nativos, tais como Liquid, HAML ou FlexImage caimos num bug que pode tirar o sono de qualquer um.

Tudo funciona bem até o momento que chamamos o Locale.set do Globalize. Neste momento o Globalize ativa um locale para a aplicação e passa a usar sua própria rotina que substitui o render_file do próprio Rails.

O problema é que estes parsers utilizam extensões de arquivos próprias e a rotina do Globalize só entende as extensões nativas do Rails como possíveis extensões para arquivos de view.

Os handlers citamos acima utilizam as extensões .liquid, .haml e .flexi respectivamente enquanto as extensões nativas são rjs, rhtml e rxml.

Para fazer o Globalize entender as extensões dos novos handlers ativados, altere a linha 8 no arquivo vendor/plugins/globalize-1.2/lib/globalize/rails/action_view.rb, trocando isso:

@@re_extension = /\.(rjs|rhtml|rxml|flexi)$/

por isso:

@@re_extension = Regexp.new "\.(#{ActionView::Base.template_handler_extensions.join("|")})$"

Agora o Globalize vai funcionar bem com qualquer template handler!

Abraços e até a próxima.