Posterous theme by Cory Watilo

Sites com múltiplos idiomas utilizando Mongoid

A versão 2.4.0 da gem Mongoid foi lançada recentemente e traz algumas novidades interessantes para quem trabalha em sites com mais de um idioma.

Antes precisavamos usar a criatividade e desenvolver nossos próprios sistemas para armazenar os dados em vários idiomas. Isso era um desafio em bancos de dados relacionais e em bancos NoSQL. Na nu design, empresa onde eu trabalho, usamos isso em vários sites e necessitavamos de uma solução simples. Meu colega de trabalho Lucas Renan desenvolveu uma gem chamada MongoidI18nEmbedded que facilitava bastante o trabalho, mas não era tão simples de usar.

Agora o Mongoid traz funcionalidades nativas que ajudam muito no armazenamento de dados em mais de um idioma. Para criar um campo com suporte a vários idioma é só usar a opção localize: true. Veja o exemplo abaixo:

class Article
  include Mongoid::Document

  field :title, localize: true
end

Com esse simple localize: true é possível armazenar um hash com vários idiomas nesse campo.

article = Article.new
article.title_translations = {en: 'Title in english', pt: 'Título em português'}

I18n.locale = :en
article.title #=> 'Title in english'

I18n.locale = :pt
article.title #=> 'Título em português'

Infelizmente essa incrível funcionalidade ainda não é muito conhecida. Por sorte consegui descobrir ela enquanto estudava um jeito de armazenar dados em vários idiomas com Mongoid criando um tipo de campo personalizado.

Forms

Para utilizar esses campos com múltiplos idiomas eu criei uma gem chamada Localized Fields que utiliza um FormBuilder personalizado para enviar os dados no formato que o Mongoid necessita.

<%= form_for @article do |f| %>
  <%= f.localized_fields do |localized_fields| %>
    <%= localized_fields.label :title %>
    <%= localized_fields.text_field :title %>
  <% end %>
<% end %>

O helper localized_fields cria os campos para todos os idiomas retornados pelo método I18n.avalibles_locales. O método I18n.available_locales retorna os idiomas que tenham arquivos .yml na pasta config/locales. Ou você pode configurar esses idiomas manualmente utilizando o comando abaixo:

I18n.available_locales = [:pt, :en, :es, :de]

Colaboração

Se alguém quiser traduzir esse artigo para o inglês eu ficaria muito grato. Como essas funcionalidades não foram muito divulgadas é possível que muitas pessoas tenham os mesmos problemas que eu tive e não utilizem essa solução nativa do Mongoid por falta de conhecimento. Qualquer um pode colaborar no desenvolvimento das gems. Durante o desenvolvimento da versão 2.4.0 do Mongoid eu tive alguns problemas e envie três pull-requests com correções e melhorias que foram aceitas pelo Durran Jordan, criador do Mongoid.

Instalando Ruby no Windows

Instalar o Ruby no Windows é muito mais simples que no Ubuntu.

Ruby Installer

(download)

O Ruby Installer é um excelente projeto e torna muito mais fácil a vida de quem quer programar em Ruby no Windows. Só que existem outros problemas.

Everybody Hates Windows

Eu não acho que Windows seja a melhor opção para quem quer programar, exceto se você quiser programar para .NET. Eu passo a maior parte do tempo entre o editor de texto e o Terminal, e o Windows peca nos dois. O Prompt de Comando do Windows é terrível, não tem nem como copiar e colar texto de uma maneira descente. Na época que eu programava em Windows também não existia nenhum editor de texto bom, por sorte agora exite o Sublime Text. A melhor opção para quem quer programar no Windows continua sendo o dual boot com Ubuntu, hauhauhauhaua.

Instalando o Ruby

A instalação não tem segredo, Next, Install e Finish.

(download)

Mais fácil que isso só se instalasse o Rails, Bundler, Git e SQLite também. E é isso que o Rails Installer faz. Se você não precisa do Rails é melhor usar o Ruby Installer, caso contrario o Rails Installer é a melhor opção.

Rails Installer

Rails_installer_site

O Rails Installer facilita muito mais a vida para quem quer usar o Rails. Ele instalar tudo que um desenvolvedor Rails precisa.

(download)

Depois é só colocar seu nome completo e email para configurar o Git e o Rails Installer também irá gerar uma chave ssh. Depois é só começar a usar.

(download)

Conclusão

Instalar o Ruby no Windows é muito fácil, o problema é trabalhar com aquele Prompt de Comando do inferno e sem bash. A menos que você tenha um bom motivo para continuar programando em Windows é melhor instalar um Linux ou comprar um Mac. Depois vou fazer um post sobre os desafios para quem quer sair do Windows. Espero que esse micro tutorial tenha sido útil.

Até a próxima.

Instalando Ruby no Ubuntu com RVM

Versões do Ruby

Como o Ruby é uma linguagem open source é possível criar diferentes versões do interpretador Ruby. A implementação de referência é chamada MRI (Matz’s Ruby Interpreter) e atualmente está na versão 1.9.2. Num próximo post eu explico mais sobre as outras versões de Ruby.

RVM

O RVM (Ruby enVironment (Version) Manager) é um script para gerenciar ambientes Ruby e trocar entre eles. Como o RVM depende do bash ele só funciona no Linux e no Mac.

Como instalar

Antes de rodar o script do RVM é necessário instalar dois pacotes.

sudo apt-get install curl git-core

Depois é só rodar o script do RVM e aguardar a instalação.

bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)

Agora o RVM está instalado. Para o bash entender os comandos do RVM é necessário rodar o comando abaixo ou fechar o Terminal e abrir novamente.

source ~/.bashrc

Após a instalação o RVM escreve na tela algumas instruções para instalar as dependências para as diversas versões do Ruby. Para instalar as dependências do MRI é só rodar o comando abaixo.

sudo apt-get install build-essential bison openssl libreadline6 libreadline6-dev zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake

Pronto. Agora é só instalar a versão do Ruby que desejar. Eu recomendo usar o Ruby MRI 1.9.2 que é a versão estável mais recente.

rvm install 1.9.2

Agora que você tem o Ruby 1.9.2 instalado é só configurá-lo como sua versão padrão.

rvm use 1.9.2 --default

Junto com o Ruby o RVM instala o gerenciador de pacotes RubyGems.

Trocando de versão

Vamos supor que eu tenha um projeto antigo que só funciona no Ruby 1.8.7. Sem o RVM eu teria que desinstalar minha versão 1.9.2 e instalar a 1.8.7. Caso eu quisesse voltar para 1.9.2 eu teria que instalá-la novamente.

O RVM facilita muito a vida de quem trabalha com várias versão de Ruby. Para instalar o Ruby 1.8.7 é simples.

rvm install 1.8.7

Para ver as versões que eu tenho instaladas é só digitar:

rvm list

Agora eu tenho as versões 1.9.2 e 1.8.7 instaladas, mas se eu for no Terminal e digitar ruby -v eu continuo usando a versão 1.9.2. Para trocar de versão é só informar ao RVM qual versão você deseja utilizar.

rvm use 1.8.7

Agora se eu rodar ruby -v eu vejo o Ruby 1.8.7. Como eu não coloquei --default no final do comando eu continuo com o Ruby 1.9.2 como padrão caso que reinicie o terminal ou abra uma nova aba.

Mais informações

Tem um episódio sobre o RVM no RailsCasts que está meio desatualizado, mas ajuda bastante ainda. A melhor fonte é o próprio site do RVM que explica bem o funcionamento.

Espero ter ajudado com esse micro tutorial sobre Ruby no Ubuntu.

Até a próxima.

Início

Sketched_wireframes_10
Olá a todos.

Estou criando esse blog com objetivo de compartilhar o dia-a-dia do desenvolvimento de alguns produtos que pretendo criar e permitir que qualquer um colabore, com códigos, design ou idéias.

A idéia surgiu depois que eu li alguns livros sobre startups e achei que seria legal criar um blog para mostrar como é feito o desenvolvimento de um produto por alguém que não tem muita experiência.

Além disso pretendo postar tutoriais de programação e outras coisas que eu acho interessante.

Até a próxima.