Polish gem - poprawne pluralization i formaty daty

Po długiej walce z I18n, przepisałem Russian na Polish.

Instalujemy przez dodanie gema polish albo instalacje pluginu.

Dodaje sie automagicznie, sam ustawia default locale na pl. Wtedy do dyspozycji mamy:

  • dobre formatowanie daty: 25. grudnia 2009, a nie 25 Grudzień 2009
  • jeżeli podajemy format daty jako strftime, to i tak dobrze odmieni miesiąc
  • działające pluralization: Rails wie, że 2,3,4 to :few a nie :other
  • podstawowe tłumaczenie ActiveRecord, ActiveSupport, ActionView (wzięte z I18n)

czekam na opinie :slight_smile:

nie jestem pewien dlaczego to mi się nie podoba, muszę zobaczyć w praktyce :slight_smile:

Jak się gem zachowa w przypadku apliakcji wielojęzycznej?

Jak w jakikolwiek sposób nadpisujesz I18n.locale, to to będzie aktywny locale. Czyli tak jak w każdej aplikacji, tylko zamiast domyślnie en masz pl.

kiedyś robiłem coś podobnego jeśli chodzi o pluralizację, jak nie znałem Proc jeszcze :slight_smile:
http://gist.github.com/45266

zainstalowałem gem z pierwszego postu i nie przetłumaczyło mi min. Password cannot be blank

Tak na pierwszy rzut oka w lib / polish / locale / activerecord.yml
powinno być

pl: activerecord: errors: messages:
zamiast

pl: messages:

Chyba poprawiłem :wink:

Witam,

zainstalowałem ten plugin i mam taki błąd:

translation data {:one=>"{{model}} nie został zachowany z powodu jednego błędu", :other=>"{{model}} nie został zachowany z powodu {{count}} błędów"} can not be used with :count => 3

co może być przyczyną?

Hmm, mam ten sam błąd:

[code]I18n::InvalidPluralizationData in (…)

translation data {:other=>"{{model}} nie został zachowany z powodu {{count}} błędów", :one=>"{{model}} nie został zachowany z powodu jednego błędu"} can not be used with :count => 3[/code]

Zareklamuję się w wątku - poprawny downcase/upcase dla UTF-8 i ISO-8859-2 w moim gemie string_pl. Oczywiście dla tych, którzy używają Rubiego 1.9. Forkowanie mile widziane.

Do tej pory żyłem w przekonaniu, że 1.9 ma poprawnie zaimplementowaną obsługę różnych kodowań i takie hack’i nie są potrzebne. Mógłbyś rzucić trochę światła na tę sprawę upcase/downcase ?

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/307725

EDIT

Chodzi o to, że konwersja w różnych kodowaniach jest “niebanalna”. Obecnie poprawnie robi to chyba tylko Java oraz Perl (pewnie też jest jakaś biblioteka dla C, ale się nie orientuję). Zauważ, że tutaj nie chodzi tylko o UTF-8 (w pythonie działa upcase/downcase, ale tam jest wszystko sprowadzane do UTF), ale o wszystkie możliwe kodowania.

Dodam jeszcze, że trzeba zaimplementować metodę sort, ale póki co nie mam pomysłu jak to elegancko zrobić.

Wysłałem Ci pull request’a, dodałem Windows-1250, testy i zmienilem nazwe na string_case_pl, o sortowaniu muszę pomyśleć.

dostałem taki błąd

dla

POST_CODE_LENGTH = 5..20 validates_length_of :post_code, :within => POST_CODE_LENGTH
ktoś wie o co chodzi ?

Już rozwiązane, poszedł pull request

które pole w localach odpowieda za to że mając zdefiniowane np.

Dostanę komunikat dla atrubutu password: Hasło

Coś chyba namieszałem i nie wiem co, bo dostaje bez ‘Hasło’

mi się podoba gem :slight_smile: zarzuciłem forka w wolnej chwili coś zaproponuje :slight_smile:

Trochę odgrzewam thread, ale:

Zrobiłem nową wersję i myślę że wyszła całkiem sensownie. Wymaga Rails 3, więc jak ktoś chcę używać z 2.3 to “< 0.1.0” do gema.

W dużym skrócie:

  • poprawiłem skróty miesięcy / dni, parę literówek itd
  • pluralization przeniesione do pliku z tłumaczeniem - nowy ficzer w nowym I18n
  • wybieranie grudzień/grudnia przeniesione do Proca w tłumaczeniu - również dzięki nowemu I18n
  • pluralization wyrzucone z backendu, wystarczy dodać moduł I18n::Backend::Pluralization do Simple (albo jakiegokolwiek innego)
  • te trzy zmiany pozwoliły usunięcie I18n::Backend::Advanced

W zasadzie, oprócz tego nieszczęsnego helpera do daty ze standalone months to wszystko by można przenieść do polskiego tłumaczenia w rails-i18n. Ale nie wiem jeszcze jak wygląda proces, a moje dane są inne niż te z CLDR (swoją drogą troche wtf), więc olałem na razie.

Czy trzeba coś specjalnego robić aby ten backend zaczał działać?

[code]> I18n.translate(:months, :scope => :date)
=> {:one=>“miesiąc”, :other=>“miesięcy”, :few=>“miesiące”}

I18n.translate(:months, :count => 4, :scope => :date)
=> “miesięcy”[/code]

A ustawiłeś locale na :pl? Możesz sprawdzić przez “I18n.locale”. U mnie działa:

ruby-1.9.2-p0 > I18n.t(:months, :scope => :date) => {:one=>"miesiąc", :few=>"miesiące", :other=>"miesięcy"} ruby-1.9.2-p0 > I18n.translate(:months, :count => 4, :scope => :date) => "miesiące" ruby-1.9.2-p0 > I18n.locale => :pl

Ustawiłem oczywiście. Czy to rails3? Czy poza dołączeniem gema do Gemfile trzeba cokolwiek innego robić? Inicjalizacja, rejestracja, etc?