Cześć, to chyba mój pierwszy post. Chciałbym wyświetlać daty publikacji postu ze słowną nazwą miesiąca, ale jest problem ponieważ miesiące muszą być odmienione. Jeśli użyję standardowej metody, czyli:
l(date, format: "%-d %B %Y")
To otrzymuję np. 13 styczeń 2015
, a poprawnie byłoby 13 stycznia 2015
. Do tej pory jedyne rozwiązanie tego problemu jakie znalazłem to dodanie oddzielnego “języka” z tłumaczeniami nazw miesięcy już odmienionych (nazwałem go pl-date
). Wtedy powyższy przykład wygląda tak:
l(date, format: "%-d %B %Y", locale: (I18n.locale == :pl)? 'pl-date' : :en)
W ten sposób generuje poprawne daty, ale chciałbym się dowiedzieć czy nie istnieje jakiś lepszy sposób nie wymagający kombinowania? Pytam bo dodatkowy język nieco miesza mi w dalszej części mojej aplikacji i chętnie bym się go pozbył.
Możesz nadpisać domyślne tłumaczenia na język polski.
Jasne, ale nie wiem czy nie będę ich gdzieś jeszcze używał samych nazw miesiąca do grupowania postów, więc wolałbym mieć też opcję wyświetlenia nieodmienionych nazw. Znalazłem podobny problem na Stacku http://stackoverflow.com/questions/4690213/month-names-inflection-in-rails-i18n, ale tam też nikt nie dał żadnej odpowiedzi która rozwiązywała by ten problem.
Proponuję zrobić plik z tłumaczeniami z odmienioną formą, a w miejscu gdzie chcesz użyć odmienionej formy tłumaczenia daj opcję locale
.
pl_months_genitive.yml
pl_months_genitive:
date:
formats:
default: ! '%-d %B'
month_names:
-
- stycznia
- lutego
- marca
- kwietnia
- maja
- czerwca
- lipca
- sierpnia
- września
- października
- listopada
- grudnia
W kodzie zrób <%= l object.date, locale: :pl_months_genitive %>
Tak to właśnie mam obecnie zrobione, ale niestety ze względu na użycie gemu https://github.com/enriclluelles/route_translator muszę zadeklarować w config/application.rb
używane języki przez I18n.available_locales
. Jak zadeklaruje [:en, :pl]
to nie mogę użyć opisywanej przez Ciebie metody, a z kolei zadeklarowanie [:en, :pl, 'pl_months_genitive']
powoduje wygenerowanie dużej ilości niepotrzebnych ścieżek (routes). Myślałem że istnieje inny sposób na rozwiązanie tego problemu.