[code] <% @order.errors.each do |attribute, error| %>
<%= attribute %>
<%= error %>
<% end %>[/code]
w modelu mam walidację pół żeby nie były puste i jak składam zamówienie z pustymi polami to wyrzuca błąd z tym, ze nazwy atrybutów nie są tłumaczone, błąd natomiast jest przetłumaczony
W pliku pl.yml mam między innymi
ok. dzięki, ja mam tłumaczenie, dość rozbudowane, mam przetłumaczone modele, atrybuty i wszystko jest ok. tylko właśnie w błędach nazwy atrybutów nie są tłumaczone. Trochę to dziwne jest bo błędy są po polsku a nazwy atrybutów po angielsku. Ja nie chcę zmieniać komunikatów błędów, te co są wystarczają, trochę to bez sensu, że mając przetłumaczone wszystko muszę ustawiać od nowa pełne komunikaty żeby tylko jedno słowo było dodatkowo przetłumaczone. Zielony jestem ale na mój gust powinno być inaczej.
errors:
format: "%{attribute} %{message}"
attributes:
user: "Użytkownik"
cost: "Koszt"
name: "Imie"
lastname: "Nazwisko"
phone: "Telefon"
address: "Adres"
city: "Miasto"
messages:
accepted: "musi zostać zaakceptowane"
blank: "nie może być puste"
confirmation: "nie zgadza się z potwierdzeniem"
empty: "nie może być puste"
equal_to: "musi być równe %{count}"
even: "musi być parzyste"
exclusion: "jest zarezerwowane"
greater_than: "musi być większe od %{count}"
greater_than_or_equal_to: "musi być większe lub równe %{count}"
inclusion: "nie znajduje się na liście dopuszczalnych wartości"
invalid: "jest nieprawidłowe"
less_than: "musi być mniejsze od %{count}"
less_than_or_equal_to: "musi być mniejsze lub równe %{count}"
not_a_number: "nie jest liczbą"
not_an_integer: "musi być liczbą całkowitą"
odd: "musi być nieparzyste"
record_invalid: "Negatywne sprawdzenie poprawności: %{errors}"
taken: "zostało już zajęte"
too_long: "jest za długie (maksymalnie %{count} znaków)"
too_short: "jest za krótkie (przynajmniej %{count} znaków)"
wrong_length: "ma nieprawidłową długość (powinna wynosić %{count} znaków)"
patrząc na to format: “%{attribute} %{message}” to wydawało mi się, że jak dodam tutaj attributes to pociągnie stąd nazwy, jednak nie, pytanie skąd są pobierane, bo pewnie tam wystarczy je przetłumaczyć
Moim zdaniem masz do wyboru dwie opcje:
a) jeśli w dalszym ciągu chcesz iterować po errors to zamiast atrybutu musisz wypisać Model.human_attribute_name(attribute)
b) iterować po errors.full_messages
[code=ruby]<% @order.errors.each do |attribute, error| %>
<%= attribute %>
<%= error %>
<% end %>[/code]
attribute to nie nazwa tłumaczone a klucz w hashu. Klucz to oryginalna nazwa attrybutu w modelu (bez żadnych dodatkowych przekształceń).