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