Depois de dar uma olhada no artigo do Carlos Brando e do Diego Carrion, resolvi dar uma catucada no I18n. Comecei com um exemplo simples citado nos blogs dos mesmos. Resolvi ir um pouco mais longe, usar o ActiveRecord e tentar internacionalizar mensagens pré-customizadas do rails e atributos das tabelas.
Bom, o resultado do meu arquivo de internacionalização foi esse:
Depois com seu arquivo de internacionalização pronto você pode criar um scaffold (scaffold é ótimo para exemplos/testes):script/generate scaffold post title:string description:text author:string
Adicione algumas validações no model post:
class Post < ActiveRecord::Base
validates_presence_of :title
validates_length_of :author, :within => 3..10
end
Depois de rodar os migrations acesse a URL de posts http://localhost:3000/posts/new tente criar um post sem digitar nada nos campos e veja todas as mensagens devidamente traduzidas.
Para traduzir os atributos da sua tabela/model você deverá usar algo como::human_attribute_names => {
:post => {
:title => "Título"
}
}
Se você quizer ser mais especifico para uma determinada validação de um atributo você pode fazer isso da seguinte forma:
:active_record => {
:error_messages => {
:custom => {
:post => {
:title => {
:blank => "erro especifico para título em branco no post"
}
}
}
}
}
#observe que isso tem que ser feito dentro do
#contexto do active_record.error_messages
Nota: Para minha surpresa acabei descobrindo um bug que acontece quando você não especifica mensagens default para o ActiveRecord no seu arquivo de localização. O que acontece é que o método full_messages do ActiveRecord procura por mensagens padrões para os validations e quando não encontra a chave, ele retorna um Array ao invés de uma String, por consequência o error_messages_for usa o full_messages esperando dele uma mensagem string, mas recebe esse bendito Array que não deveria ter sido retornado e ao concatenar a string com o Array dá pau. O erro na minha opinião é bem bobo mais é uma coisa que deve ser tratada…
Mais informações sobre I18n: http://www.artweb-design.de/2008/7/18/the-ruby-on-rails-i18n-core-api

