Pergunta

Até onde eu sei, a forma aceita de definir os nomes "humanizados" de campos no Rails 3 é usar locales:

# config/locales/en.yml
en:
  activerecord:
    attributes:
      member:
        username: 'username' # rather than 'Username'

No entanto, eu simplesmente quero que o Rails 3 use versões em minúsculas de seus nomes humanizados padrão.Existe uma maneira fácil e integrada de fazer isso?

Um exemplo para ajudar a esclarecer: Quando dentro de um form_for, <%= f.label :username %> exibe "Nome de usuário" por padrão.Eu quero que ele exiba "nome de usuário".

Foi útil?

Solução

O auxiliar label é padronizado para usar human_attribute_name paratransformar um atributo em um nome humano.Se você olhar a fonte, human_attribute_name tenta algumas coisas antes de voltar para attributes.to_s.humanize.Ele tenta a tradução primeiro e, em seguida, procura uma opção :default no hash de opções.

Portanto, a maneira mais simples / melhor de obter a funcionalidade desejada é substituir human_attribute_name pelo seu próprio, que fornece uma opção :default e, em seguida, chama o original.Rails fornece uma maneira razoável de fazer esse tipo de coisa com alias_method_chain, então ...

Já ouvi o suficiente, é só me dar a resposta!

Coloque o seguinte em qualquer arquivo em config/initializers e reinicie seu aplicativo:

module ActiveModel
  module Translation
    def human_attribute_name_with_foo attribute, options = {}
      human_attribute_name_without_foo attribute, options.merge( :default => attribute.humanize.downcase )
    end

    alias_method_chain :human_attribute_name, :foo
  end
end

Outras dicas

Eu tive o mesmo problema. Eu resolvi isso via css:

Em foo.html.erb:

<%= f.label :username, :class => "my_class" %>

Em bar.css:

label.my_class {
    text-transform:   lowercase;
}

Eu também preferiria uma solução diferente.Mas esse é o único que consegui encontrar até agora.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top