Przechodząc z Rails 3.0.1 na 3.0.2 umknęła mi jedna rzecz. Nikt nigdzie nie wspomniał o tym, że zmianie ulega sposób budowania tłumaczeń dla I18n.
O ile zmiana na pola defaultowe, jest całkiem fajna (a i tak ją stosowałem dawniej, przy pomocy pewnego "hacka" ;) ), o tyle zmiany odnośnie klas w modułach, przyprawiły mnie o 25 minutowe wkurzenie.
Zanim jednak do tego przejdziemy, wspomnę o tej fajniejszej zmianie. Otóż dawniej, kiedy chcieliśmy przetłumaczyć nazwy atrybutów z różnych modeli, musieliśmy (stosowanie tricków się nie liczy) wypisywać wszystkie atrybuty dla wszystkich modeli. Kończyło się to sytuację gdzie np. pole "Imię" dla modeli User i Admin było tłumaczone tak:
activerecord:
models:
user: Użyszkodnik
admin: Bóg
attributes:
user:
name: Imię
admin:
name: Imię
było to trochę niewygodne. W nowym I18n, możemy zrobić to tak:
attributes:
name: Imię
Oczywiście jeśli mamy model gdzie "name" to np. nazwa firmy, możemy wciąż dla tego wyjątku, dopisać całość w węźle Activerecord.
Druga zmiana też jest dobra, jednak trochę niespodziewana (a przynajmniej niezapowiedziana). Dawniej, polonizując modele w modułach, robiło się to tak(przykład dla klasy Profile::Admin):
activerecord:
models:
"profile/base": Profil
attributes:
"profile/admin":
views: Ilość odwiedzin
name: Imię
surname: Nazwisko
city: Miasto
jak widać powyżej, kiedy mieliśmy do czynienia z klasą w module, postępowaliśmy wg. schematu: moduł/model.
Nadeszło nowe i lepsze (ale cholerka, mogli powiadomić!). Od teraz moduł będzie stanowił gałąź-rodzica w pliku translacji, tak jak w poniższym przykładzie:
activerecord:
models:
profile:
base: Profil
attributes:
profile:
admin:
views: Ilość odwiedzin
name: Imię
surname: Nazwisko
city: Miasto
Takie zagnieżdżanie jest dużo wygodniejsze :)