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 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
@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”
Niezły wtf