Mongoid - tłumaczenia model w *.yml

Potrzebuję pomocy albowiem po przejściu na mongoDB przestały działać mi translacje modeli i atrybutów, używam mongoida… Nie chodzi mnie o translacje rekordów lecz po prostu aplikacji, zupełnie nie mogę tego znaleźć u wujka.

Zaprawdę powiadam Ci zacny rycerzu: przytocz że fragment pliku YML z tłumaczeniem kóre nie działa.

pl: activerecord: models: user: 'konto' attributes: user: password: 'hasło' password_confirmation: 'potwierdź hasło' current_password: 'aktualne hasło' name: 'twoja nazwa' email: 'e-mail' remember_me: 'zapamiętaj mnie'

Może głupie pytanie ale czy próbowałeś zastąpić “activerecord:” poprzez “mongoid:” ? Zakładam że używasz Rails 2.3.

Używam Rails 3 i takie sztuczki to w pierwszej kolejności były zanim wpadłem na forum :stuck_out_tongue: nawet próbowałem w ogóle usunąć to i przesunąć wcięcie. Problem pojawia się kiedy model nie dziedziczy po ActiveRecord… może trzebaby coś mu zrobić require? Bo po co ma dziedziczyć?

Nie działa: mongo, mongodb, mongoid, activerecord

A, no to z Rails 3 powinno działać tak samo jak z każdym ORMem ActiveModel, konkretnie:

a jaśniej:

activemodel: models: user: "User" article: "Article" ... attributes: user: picture: "Avatar" name: "Name" email: "Email" password: "Password" admin: Administrator? ....

Gdyby to co huber napisał nie działało, a wydaje mi się, że powinno, to spróbuj tego: http://blog.robert.pankowecki.pl/2009/12/how-to-intercept-all-calls-to-i18nt.html , żeby się dowiedzieć po czym Railsy próbują szukać. Odpal rails console. Przeklej ten kod i zapodaj czymś w stylu np User.human_attribute_name(:login). Gdyby puts było za słabe to zastąp przez Rails.logger.error(string)

Dzięki wielkie. Pomogła zamiana activerecord na activemodel!

Teraz zostały jeszcze niedziałające tłumaczenia “2 errors prohibited this user from being saved” z zupełnie niewiadomych dla mnie przyczyn, a robię zgodnie z tutorialem, reszta errorsów tłumaczy się prawidłowo:

pl: errors: template: header: one: "%{model} nie został zachowany z powodu jednego błędu" other: "%{model} nie został zachowany z powodu %{count} błędów" body: "Błędy dotyczą następujących pól:" full_messages: format: "%{message}"
nie działa też jak wrzucę pomiędzy “pl” a “errors” frazę “activemodel”.

Zajrzyj tutaj:

wychodzi na to że najpierw są brane errory z danego ORMa:

activerecord: errors: template: header: one: "{{model}} nie został zachowany z powodu jednego błędu" other: "{{model}} nie został zachowany z powodu {{count}} błędów" body: "Błędy dotyczą następujących pól:"
a następnie defaultowe:

activemodel: errors: template: header: one: "1 error prohibited this {{model}} from being saved" other: "{{count}} errors prohibited this {{model}} from being saved" # The variable :count is also available body: "There were problems with the following fields:"
Skoro nie łyka domyślnych, to prawdopodobnie trzeba to sprecyzować w sekcji odonoszącej się do Mongoida:

mongoid: errors: template: header: one: "{{model}} nie został zachowany z powodu jednego błędu" other: "{{model}} nie został zachowany z powodu {{count}} błędów" body: "Błędy dotyczą następujących pól:"

Niestety, definiowanie w sekcji mongoida nie pomaga :confused:

@Goorsky - Próbowałeś sprawdzić kodem, który podesłałem: http://blog.robert.pankowecki.pl/2009/12/how-to-intercept-all-calls-to-i18nt.html co wołają Railsy ? To na pewno Ci rozjaśni sytuację.

@paneq przyznaję, że próbowałem ale nie wiem jak to zrobić nie na atrybutach (gdzie to działa super) tylko na tym "2 errors prohibited’.

@Goorsky - próbowałeś użyć app
w konsoli ? app.post(… jakieś złe parametry by był błąd)
Możesz też z mojego przykladu zamienieć puts na Rails.logger.error i normalnie wyklikać błąd przez aplikację i zobaczyć co jest logu.

Jeśli i to nie działa to może wywoływana jest metoda localize zamiast translate . Wtedy wystarczy zmienić odpowiednio metody w tym kodzie i może wtedy zadziała ?

Inny bardzo prosty sposób: Dodaj before filter w application controllerze, który robi I18n.locale = :test
i wszystkie błędy ukażą ci się w formacie: Translation missing test, activerecord, errors, models, blah blah blah i zobaczysz po jakim kluczu próbuje tego szukać.

Powodzenia.

Dzięki, dzięki!

Okazuje się, że problemem jest lipnie napisana metoda helperowa Devise:

[code] def devise_error_messages!
return “” if resource.errors.empty?

messages = resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join
sentence = "#{pluralize(resource.errors.count, "error")} prohibited this #{resource_name} from being saved:"

html = <<-HTML
<div id="error_explanation">
  <h2>#{sentence}</h2>
  <ul>#{messages}</ul>
</div>
HTML

html.html_safe

end[/code]
chłopaki po prostu napisali kod “na pałe” :frowning:

Niezły wtf