2010-08-18 8 views
25

Zgodnie z ActionView documentation. Cytat:Szyny struktura i18n i yml dla etykiet formularzy

Tekst etykiety domyślnie nazwy atrybutu, chyba że tłumaczenie znajduje się w bieżącej lokalizacji I18n lub podać go jawnie (poprzez views.labels <MODELNAME> <atrybutu>..).

Mam model "użytkownika" i formularz rejestracyjny. Oto fragment odpowiedniej części:

<% form_for(@user) do |f| %> 
    ... 
    <p> 
    <%= f.label :username %> 
    <%= f.text_field :username, :class => 'full_width' %> 
    </p> 
    ... 
<% end %> 

Kropki ukrywają nieistotny kod.

Jak rozumiem dokumentację, gdybym dostarczyć tłumaczenie w moim pliku locale, w tym przypadku: dk, mój dk.yml patrząc tak:

dk: 
    views: 
     labels: 
      user: 
       username: 
        "blahblah" 

Szyny powinny przełożyć tekst etykiety i wstawić " blahblah "zamiast" Username ".

To się nie dzieje, więc musiałem coś przeoczyć. Każda pomoc doceniona.

Odpowiedz

26

Myślę, że znalazłem tutaj inne rozwiązanie.

Moja aplikacja była w wersji 2.3.5. Mam teraz zmienił go do 2.3.8 i <%= f.label :username %> teraz używa tłumaczenie w:

dk: 
    activerecord: 
    attributes: 
     user: 
     username: 

znalazłem wskazówkę w tym bilecie:

https://rails.lighthouseapp.com/projects/8994/tickets/745-form-label-should-use-i18n

+0

Co zrobić, jeśli chcesz mieć etykietę "Wprowadź swoje imię"? Nie uważam, aby ustawienie atrybutu frazy, która jest czysta, prawdopodobnie spowoduje pewne problemy w niektórych szczególnych przypadkach.Zobacz odpowiedź Voldy, aby uzyskać prawidłowy sposób dostosowania etykiety formularza. Możesz nawet używać obu podejść jednocześnie, ale podejście Voldy'ego zastąpi to podejście w twoim formularzu i powinno być – mizurnix

1

Metoda, którą wywołujemy, to nie jest metoda z, ale jest to w rzeczywistości metoda label_tag z ActionView::Helpers::FormTagHelper. Metoda form_for polega na przepisaniu kodu w danym bloku przez dodanie _tag do użytych helperów formularzy. Więc nie patrzysz na dokumentację odpowiedniej metody!

Jeszcze nie użyłem tej metody, ponieważ czasami etykieta dla pola może się różnić od wielu formularzy przy użyciu tego samego modelu, więc napisałem własnego pomocnika.

+0

Dziękuję, nie wiedziałem o tym. Metody form_for i label znajdują się na stronie dokumentu 'ActionView :: Helpers :: FormHelper', więc założyłem, że pracowali razem tak. Zmieniłem swój kod na: '<% = label: user,: username%>' Z tym samym plikiem yml, ale nadal nie otrzymuję tłumaczenia. Czy ma znaczenie, że wywołanie 'label' znajduje się w bloku' form_for'? – rhardih

+1

Szczerze mówiąc, nigdy nie miałem tej funkcji do pracy. Będąc ciekawym, właśnie przyjrzałem się kodowi Rails i myślę, że jest to stara funkcja i że dokumentacja nie została naprawiona: 'content = (text.blank?? Nil: text.to_s) || method_name.humanize' w linii 473 form_helper.rb –

+0

W takim przypadku powinieneś użyć metody 't' określającej' zasięg' obecny w pliku tłumaczenia '.yml'. '<% = t: title, scope: [: helpers,: label,: post]%>'. – mariowise

41

W Rails 3.1, który jest trochę zmienione.

<% form_for @post do |f| %> 
    <%= f.label :title %> 
    <%= f.text_field :title %> 
    <%= f.submit %> 
<% end %> 

en: 
    helpers: 
    label: 
     post: 
     title: 'Customized title' 
+3

Dzięki za to. Czy istnieje informacja o wydaniu lub coś, na co mogę popatrzeć, aby dowiedzieć się więcej o tym formacie? – astjohn

+1

Opis tego formatu jest dostępny w dokumentacji [ActionView :: Helpers :: FormHelper.label] (http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-label). – simonnordberg

+1

Mogę potwierdzić, że działa to również dla mnie w Rails 4.0. –