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!
0 Responses to “Rewrite humanize”