Posts Tagged ‘environment.rb’

Ruby on Rails Authlogic com I18n para pt-BR

Postado em 01 set 2009
Categoria(s) Ruby on Rails

Para traduzir as mensagens, campos e modelos do Authlogic para pt-BR basta seguir os passos abaixo:

1) Define o default_locale para pt-BR

Abra o arquivo config/environment.rb, descomente a linha e define o idioma para pt-BR:

...
  # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
  # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}')]
  config.i18n.default_locale = 'pt-BR'
end

2) Crie o arquivo pt-BR.yml

Dentro do diretório config/locales crie o arquivo pt-BR.yml, e adicione o seguinte conteúdo:

pt-BR:
  # Authlogic
  authlogic:
    error_messages:
      login_blank: "não pode ficar em branco"
      login_not_found: "não é válido"
      login_invalid: "deve usar somente letras, números, espaços e .-_@ por favor."
      consecutive_failed_logins_limit_exceeded: "Consecutivos logins que falharam limite excedido, a conta está desativada."
      email_invalid: "deve ser semelhante a um endereço de email."
      password_blank: "não pode ficar em branco"
      password_invalid: "não é válido"
      not_active: "Sua conta não está ativa"
      not_confirmed: "Sua conta não está confirmada"
      not_approved: "Sua conta não foi aprovada"
      no_authentication_details: "Você não forneceu nenhum detalhe para autenticação."
    models:
      user_session: "SessãoUsuário"
    attributes:
      user_session:
        login: "Usuário"
        email: "Email"
        password: "Senha"
        remember_me: "Lembrar me"

3) Reinicie a aplicação

Para garantir que todas as novas configurações sejam carregadas reinicie o servidor web.

4) Opcional: Instale o plugin para traduzir os labels dos formulários

./script/plugin install git://github.com/iain/i18n_label.git

Pronto!

Uma outra sugestão de leitura é: http://blog.patrickespake.com/2009/01/31/ruby-on-rails-22-como-usar-i18n-traduzir-as-mensagens-de-validacao-do-model-e-atributos-do-model/.

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

  • Share/Bookmark

Ruby on Rails 2.2 como usar I18n, traduzir as mensagens de validação do model e atributos do model

Postado em 31 jan 2009
Categoria(s) Ruby on Rails

No Ruby on Rails 2.2 existe o suporte para I18n, ou seja, criar aplicações para múltiplos idiomas.

Vou mostrar como habilitar isso no Ruby on Rails 2.2.

Primeiro pare a sua aplicação.

Abra o arquivo environment.rb localizado no diretório config, nesse arquivo procure pela seguinte linha:

1
# config.i18n.default_locale = :de

Ela está comentada e até esse momento o idioma padrão do projeto e o inglês.

Remove o comentário dessa linha e defina o idioma padrão para “pt-BR”:

1
2
3
4
# The internationalization framework can be changed to have another default locale (standard is :en) or more load paths.
# All files from config/locales/*.rb,yml are added automatically.
# config.i18n.load_path << Dir[File.join(RAILS_ROOT, 'my', 'locales', '*.{rb,yml}')]
config.i18n.default_locale = "pt-BR"

Agora precisamos criar um arquivo chamado pt-BR.yml, nesse arquivo irá ficar as traduções dos termos do projeto para o português.

Crie o arquivo pt-BR.yml no diretório config/locales, esse diretório config/locales é responsável por armazenar todos os arquivos de tradução do projeto.

Adicione o seguinte conteúdo no arquivo pt-BR.yml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
pt-BR:
  # formatos de data e hora
  date:
    formats:
      default: "%d/%m/%Y"
      short: "%d de %B"
      long: "%d de %B de %Y"
      only_day: "%d"
 
    day_names: [Domingo, Segunda, Terça, Quarta, Quinta, Sexta, Sábado]
    abbr_day_names: [Dom, Seg, Ter, Qua, Qui, Sex, Sáb]
    month_names: [~, Janeiro, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro]
    abbr_month_names: [~, Jan, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, Dez]
    order: [:day,:month,:year]
 
  time:
    formats:
      default: "%A, %d de %B de %Y, %H:%M hs"
      time: "%H:%M hs"
      short: "%d/%m, %H:%M hs"
      long: "%A, %d de %B de %Y, %H:%M hs"
      only_second: "%S"
      datetime:
        formats:
          default: "%Y-%m-%dT%H:%M:%S%Z"
    am: ''
    pm: ''
 
  # date helper distanci em palavras
  datetime:
    distance_in_words:
      half_a_minute: 'meio minuto'
      less_than_x_seconds:
        one: 'menos de 1 segundo'
        other: 'menos de {{count}} segundos'
 
      x_seconds:
        one: '1 segundo'
        other: '{{count}} segundos'
 
      less_than_x_minutes:
        one: 'menos de um minuto'
        other: 'menos de {{count}} minutos'
 
      x_minutes:
        one: '1 minuto'
        other: '{{count}} minutos'
 
      about_x_hours:
        one: 'aproximadamente 1 hora'
        other: 'aproximadamente {{count}} horas'
 
      x_days:
        one: '1 dia'
        other: '{{count}} dias'
 
      about_x_months:
        one: 'aproximadamente 1 mês'
        other: 'aproximadamente {{count}} meses'
 
      x_months:
        one: '1 mês'
        other: '{{count}} meses'
 
      about_x_years:
        one: 'aproximadamente 1 ano'
        other: 'aproximadamente {{count}} anos'
 
      over_x_years:
        one: 'mais de 1 ano'
        other: 'mais de {{count}} anos'
 
  # numeros
  number:
    format:
      precision: 3
      separator: ','
      delimiter: '.'
    currency:
      format:
        unit: 'R$'
        precision: 2
        format: '%u %n'
        separator: ','
        delimiter: '.'
    percentage:
      format:
        delimiter: '.'
    precision:
      format:
        delimiter: '.'
    human:
      format:
        precision: 1
        delimiter: '.'
  support:
    array:
      sentence_connector: "e"
      skip_last_comma: true
 
  # Active Record
  activerecord:
    errors:
      template:
        header:
          one: "{{model}} não pôde ser salvo: 1 erro"
          other: "{{model}} não pôde ser salvo: {{count}} erros."
        body: "Por favor, cheque os seguintes campos:"
      messages:
        inclusion: "não está incluso na lista"
        exclusion: "não está disponível"
        invalid: "não é válido"
        confirmation: "não bate com a confirmação"
        accepted: "precisa ser aceito"
        empty: "não pode ser vazio"
        blank: "não pode ser vazio"
        too_long: "é muito longo (não mais do que {{count}} caracteres)"
        too_short: "é muito curto (não menos do que {{count}} caracteres)"
        wrong_length: "não é do tamanho correto (precisa ter {{count}} caracteres)"
        taken: "não está disponível"
        not_a_number: "não é um número"
        greater_than: "precisa ser maior do que {{count}}"
        greater_than_or_equal_to: "precisa ser maior ou igual a {{count}}"
        equal_to: "precisa ser igual a {{count}}"
        less_than: "precisa ser menor do que {{count}}"
        less_than_or_equal_to: "precisa ser menor ou igual a {{count}}"
        odd: "precisa ser ímpar"
        even: "precisa ser par"

Esse arquivo pt-BR.yml foi retirado de: http://github.com/svenfuchs/rails-i18n/tree/master nesse endereço você poderá encontrar traduções para outros idiomas.

Pronto! Agora é só rodar a aplicação e ver as mensagens e o restante traduzido para o português.

1
ruby script/server

Outro detalhe super importante e gera muitas perguntas nas listas e fóruns, é como traduzir os nomes dos atributos do model, por exemplo eu tenho um model com os seguintes atributos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class CreateHistories < ActiveRecord::Migration
  def self.up
    create_table :histories do |t|
      t.string :title, :limit => 150, :null => false
      t.string :permalink, :limit => 255
      t.text :content, :null => false
      t.timestamps
    end
 
    add_index(:histories, :permalink, :unique => true)
  end
 
  def self.down
    drop_table :histories
  end
end

Eu tenho os atributos title, permalink e content, muitas pessoas como eu gostam de programar tudo em inglês.

O problema é quando é exibida as mensagens de validação, os nomes dos atributos vem todos em inglês, por exemplo:

1
2
3
4
5
6
2 erros para history
 
Foram detectados os seguintes erros:
 
    * Title não pode ser vazio
    * Content não pode ser vazio

Para resolver esse problema e ser feliz, existe um outro plugin chamado activerecord_i18n_defaults que pode ser encontrado aqui: http://github.com/dcrec1/activerecord_i18n_defaults/tree/master.

Vamos usar ele.

Instalação

No diretório raiz do projeto digite:

1
ruby script/plugin install git://github.com/dcrec1/activerecord_i18n_defaults.git

Agora lembra do arquivo pt-BR.yml que criamos acima, vamos abrir ele e inserir novas traduções para os atributos do model.

Procure no arquivo pt-BR.yml por essa parte:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
...
# Active Record
  activerecord:
    errors:
      template:
        header:
          one: "model não pôde ser salvo: 1 erro"
          other: "model não pôde ser salvo: count erros."
        body: "Por favor, cheque os seguintes campos:"
      messages:
        inclusion: "não está incluso na lista"
        exclusion: "não está disponível"
        invalid: "não é válido"
        confirmation: "não bate com a confirmação"
        accepted: "precisa ser aceito"
        empty: "não pode ser vazio"
        blank: "não pode ser vazio"
        too_long: "é muito longo (não mais do que count caracteres)"
        too_short: "é muito curto (não menos do que count caracteres)"
        wrong_length: "não é do tamanho correto (precisa ter count caracteres)"
        taken: "não está disponível"
        not_a_number: "não é um número"
        greater_than: "precisa ser maior do que count"
        greater_than_or_equal_to: "precisa ser maior ou igual a count"
        equal_to: "precisa ser igual a count"
        less_than: "precisa ser menor do que count"
        less_than_or_equal_to: "precisa ser menor ou igual a count"
        odd: "precisa ser ímpar"
        even: "precisa ser par"

Adicione o seguinte conteúdo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
...
  # Active Record
  activerecord:
    attributes:
      _all:
        created_at: "Data de criação"
        updated_at: "Data de atualização"
      history:
        title: "Título"
        content: "Conteúdo"
    errors:
      template:
        header:
          one: "model não pôde ser salvo: 1 erro"
          other: "model não pôde ser salvo: count erros."
        body: "Por favor, cheque os seguintes campos:"
      messages:
        inclusion: "não está incluso na lista"
        exclusion: "não está disponível"
        invalid: "não é válido"
        confirmation: "não bate com a confirmação"
        accepted: "precisa ser aceito"
        empty: "não pode ser vazio"
        blank: "não pode ser vazio"
        too_long: "é muito longo (não mais do que count caracteres)"
        too_short: "é muito curto (não menos do que count caracteres)"
        wrong_length: "não é do tamanho correto (precisa ter count caracteres)"
        taken: "não está disponível"
        not_a_number: "não é um número"
        greater_than: "precisa ser maior do que count"
        greater_than_or_equal_to: "precisa ser maior ou igual a count"
        equal_to: "precisa ser igual a count"
        less_than: "precisa ser menor do que count"
        less_than_or_equal_to: "precisa ser menor ou igual a count"
        odd: "precisa ser ímpar"
        even: "precisa ser par"

Ou seja, adicionei:

1
2
3
4
5
6
7
    attributes:
      _all:
        created_at: "Data de criação"
        updated_at: "Data de atualização"
      history:
        title: "Título"
        content: "Conteúdo"

Tudo que fica abaixo do atributo _all, no caso created_at e updated_at são atributos do model comuns entre vários models, você define ali e todo mundo que tiver esses atributos já serão traduzidos.

E a parte abaixo são atributos específicos do model history:

1
2
3
      history:
        title: "Título"
        content: "Conteúdo"

O bom de existir a parte com _all é que você não precisa ficar duplicando traduções, é o que as pessoas xaropes, manés e viciadas em acrónimos da informática chamam de DRY (o mundo seria bem melhor sem essas pessoas ;-)).

Eu percebi que a gem Brazilian Rails gera alguns conflitos nas mensagens de validações, por isso eu sugiro que você desabilite deixando o seu environment.rb assim:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
...
  # Specify gems that this application depends on.
  # They can then be installed with "rake gems:install" on new installations.
  # You have to specify the :lib option for libraries, where the Gem name (sqlite3-ruby) differs from the file itself (sqlite3)
  # config.gem "bj"
  # config.gem "hpricot", :version => '0.6', :source => "http://code.whytheluckystiff.net"
  # config.gem "sqlite3-ruby", :lib => "sqlite3"
  # config.gem "aws-s3", :lib => "aws/s3"
  # config.gem "brazilian-rails", :version => '2.0.13'
  config.gem "brcep", :version => '2.0.13'
  config.gem "brcpfcnpj", :version => '2.0.13'
  config.gem "brdata", :version => '2.0.13'
  config.gem "brdinheiro", :version => '2.0.13'
  config.gem "brhelper", :version => '2.0.13'
  config.gem "brnumeros", :version => '2.0.13'
  config.gem "brstring", :version => '2.0.13'
  # config.gem "brtraducao", :version => '2.0.13'
...

Mais informações: http://iain.nl/2008/09/translating-activerecord/.

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

  • Share/Bookmark