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!

Tags


comments powered by Disqus