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!

0 Responses to “Rewrite humanize”



  1. No Comments Yet

Leave a Reply




Last Regedor’s twitts

Last Regedor's bookmarks