Rewrite humanize
I have an application with all tables and field names in English, but the whole views now need to be in Portuguese.
Because I'm always using the humanize method, a simple solutions should emerge.
First solution:
class Ticket
HUMANIZED_ATTRIBUTES = {
:category > "Categoria",
:title > "Assunto"
}
def self.human_attribute_name(attr)
HUMANIZED_ATTRIBUTES[attr.to_sym] || super
end
end
Setting the human_attribue_name in each model works ok,
but if like in my case, you have 20 models and all of them have a description, title,... much duplication...
So I thought in doing something similar to this in my enviroment.rb:
Inflector.inflections do |inflect|
inflect.plural /^(foo)$/i, '\1ze'
inflect.singular /^(foo)ze/i, '\1'
end
But for the humanized method instead of pluralize. Yah It would make sense that way, but rails doesn't provide that feature. You can go
here to find a patch for getting that functionality into your rails, I hope they get that into the core... anyway If didn't want to download the patch, how do I solve the problem?
Maybe a rubbish solution but perfect to get what I was needing, translate my views with few lines of code!
What I've done? Just added those lines into my environment.rb
class String
def humanize
{:movie => "Filme",
:movies => "Filmes",
:name => "Nome",
:title => "TÃtulo",
:synopsis => "Sinopse",
:genre => "Genero",
:author => "Autor",
:authors => "Autores"
...
}[self.gsub(/_id$/, "").to_sym] || super
end
end
I simply redefined the humanize method for whole strings. It works perfectly in my case, because I'm always calling humanize in my views.
keep humanizing the world!