Problem z tłumaczeniem

Witam.
Napotkałem na problem w Rails 3.0.3 który występuje gdy aplikację uruchomię przez nginx+passenger a nie występuje jak uruchomię webricka.
Problem polega na tym że jeśli dam w modelu

validates :login, :presence=>{:message=>I18n.t("login.blad")}

To przy wyświetleniu błędu dostaję komunikat że nie ma zdefiniowanych takich tłumaczeń i co ciekawe z przedrostkiem en a lokalizacje mam ustawioną na pl.
albo

JAKASSTALA = I18n.t("login.blad")

Jeśli w widoku próbuję wyświetlić JAKASSTALA to dostaje translation missing: ale jak dodam metodę

def self.jakasstala I18n.t("login.blad") end
i wywołam w widoku to tłumaczenie jest i poprawnie jest wyświetlane.

Spotkał się ktoś z czymś takim wcześniej i ma jakiś pomysł?

To nie zadziała, ponieważ (ja to tak rozumiem) stałe muszą mieć wartość nadaną w momencie odpalania kodu. Wybór języka następuje pozniej więc i18n nie wie dla jakiego jezyka chcesz tłumaczenie.

Jest to spowodowane tym, że przy starcie aplikacji locale nie jest ustawiony i pliki z tłumaczeniami nie są jeszcze wczytane.

Nie znam zbyt dobrze nowego API ‘validates’, bo nie używam w nowych projektach ActiveRecorda, ale powinno się dać jako message przekazać proc:

validates :costam, :presence => { :message => lambda { I18n.t('costam') } }

A jak się nie da, to albo dodaj ticket na lighthousie albo poszukaj jak przetłumaczyć ten błąd bezpośrednio w pliku yml z tłumaczeniami.

Drogus masz u mnie dużego browara, dzięki za pomoc.

Chciałbym zauważyć, że Mencio mnie wyprzedził, bo za długo posta pisałem :wink:

W teorii tak :wink: ale praktyczny przykład był twój.
Ale swoją drogą to ciekawe dlaczego na webricku to działa?

[quote=zajac]W teorii tak :wink: ale praktyczny przykład był twój.
Ale swoją drogą to ciekawe dlaczego na webricku to działa?[/quote]
A na webricku odpalałeś w trybie development? Jeżeli tak, to w development modele są ładowane tylko jeżeli są potrzebne, więc pewnie plik z modelem wczytywał się już po załadowaniu tłumaczeń.

Może coś wspólnego z : https://rails.lighthouseapp.com/projects/8994/tickets/5522-model-classes-are-loaded-before-i18n-is-set-when-running-tests

Chyba znalazłem rozwiązanie jak to bardziej po bożemu zrobić, jak mam

validates :user_id, :presence=>{ :message=>:wiadomosc }

To w plikach językowaych

activerecord: errors: message: attributes: user_id: wiadomosc: "Wiadomość"
i działa.