Korzystam z validatora validates_confirmations_of dla pola :password, aby skorzystać z dobroci potwierdzenia wpisanego hasła. Domyślnie wszystkie validatory mają taki format komunikatu
:pole message
np.
password doesn’t match confirmation
Z angielskim jest wszystko fajnie, ale gorzej z polskim bo tłumaczenie: hasło nie pasuje do potwierdzenia ni jak mi nie pasuje. Czy da się jakoś złamać ten standard i tworzyć własne komunikaty z błędami. Dużo bardziej mi by pasowało “Wpisane hasła są różne”.
Napisałem sobie dodatkowy moduł, który jest dołączany do ActiveRecord - pozwala na łatwą zamianę nazw poszczególnych pól na język polski.
Żeby rozwiązać problem odmiany (np. “jest pusty”, “jest pusta”) dodaje przed nazwą każdego pola "Wartość pola "…
Kiedy chce mieć komunikat, który nie dodaje tekstu “Wartość pola”, to w tłumaczeniu nazwy pola daję “^” na początku. Aby pozbyć się całej nazwy
pola po prostu używam samego “^”.
Szczegóły poniżej:
[code=ruby]#moduł
module Apohllo
module LocalErrors
def self.included(mod)
mod.extend(SingletonMethods)
end
module SingletonMethods
def local_field_names(fields={})
self.extend(ClassMethods)
cattr_accessor :humanized_field_names
self.humanized_field_names = fields
end
end
module ClassMethods
def human_attribute_name(attribute_key_name)
name = self.humanized_field_names[attribute_key_name] || super
if name !~ /\A\^/
"Wartość pola " + name
else
name.sub /\A\^/, ""
end
end
end
class Person < ActiveRecord::Base
validates_acceptance_of :confirmed,
:message => “Musisz wyrazić zgodę na przetwarzanie danych osobowych”
local_field_names “confirmed” => “^”, “name” => “imię”, “surname” => “nazwisko”,
“email” => “e-mail”, “phone” => “telefon”, “street” => “ulica”,
“postal_code” => “kod pocztowy”, “city” => “miejscowość”
end[/code]
Jeśli w tym pluginie jest już metod typu local_fileds_names (lub jakiś jej odpowiednik) to możesz ją zmodyfikować w podobny sposób.
Po to, żeby stworzyć lepsze
Zwróć uwagę, że tamten plugin nie pozwala na zdefiniowanie własnych nazw pól. Poza tym język polski jest językiem fleksyjnym i jak chcemy mieć ładne komunikaty to większa elastyczność mojego rozwiązania jest zdecydowanie pożądana.
Korzystając z tamtego pluginu dla każdej walidacji (nie dla KAŻDEGO TYPU) musiałby zdefiniować własny komunikat.
Trochę zbyt WET IMHO
A tak mogę mieć komunikaty w stylu:
Wartość pola ‘abc’ jest… (domyślny)
Wartość pola ‘ulica’ jest (określenie nazwy pola)
Miasto nie znajduje się na liście (określenie nazwy pola “z daszkiem”)
Ten email jest niepoprawny, został wybrany przez innego użytkownika (określenie nazwy pola i treści komunikatu)