Posts Tagged 'Inflections'

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!


Last Regedor’s twitts

Last Regedor's bookmarks