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 :)