Witam, chciałem dsię dowiedzieć jak organizujecie polskojęzyczne aplikacje.
Rozważamy dwa przypadki:
Załóżmy, że tworzymy aplikację skierowaną wyłącznie na polski rynek (odrzucamy możliwośc migracji na inne języki - nie ma sensu - zmieniłaby się logika aplikacji ze względu na odmienne prawo w innych państwach).
Zakłądamy, że tworzymy aplikację, która w przyszłości być może będzie tłumaczona na inne języki.
W przypadku drugim zastanawiam się nad użyciem Globalize. Zastanawiam się czy użycie Globalize w przypadku pierwszym jest uzasadnione (tylko skomplikuje to nieco aplikacę dodatkowo :()
Jak długo możesz uniknąć przechodzenia na Globalize2 (ze względu na jego niebanalność oraz nieoptymalne zaciąganie danych z bazy), tak długo unikaj. Ale nie dłużej
Przy okazji: http://tomash.wrug.eu/2009/06/01/migrating-to-rails-2-3-with-globalize.html
Zasadniczo mój pet-project, bitspudlo.com, jest od półtora roku i kilku wersji railsów dwujęzyczne (i trzywalutowe), więc pytaj o co chcesz
Czyli hack z HUMINIZED_ATTRIBUTES nie jest brzydki? Chodzi o dług techniczny, co by się później w coś nie w kopać, czego teraz nie jestem w stanie przewidzieć
Dzięki za link.
Potrzebujesz humanized attributes do error_messages_for, jak mniemam?
I tak prędzej czy później będziesz ten helper prze/nadpisywał, a ze względu na “radości” polskiej gramatyki najlepiej do i18n włożyć cały komunikat błędu (wraz z polską nazwą pola/atrybutu), a w error_messages_for niech po prostu nie wyświetla nazwy pola.
W elegancki to się w dużym skrócie nie da, trzeba pisać całe komunikaty.
Tzn. pewnie mamy na forum specjalistów od gramatyk generatywnych itp. narzędzi, które teoretycznie powinny uwolnić od trudów polskiej fleksji i pisania całych komunikatów z palca, ale jeszcze nie widziałem udanej implementacji w aplikacji webowej (co nie znaczy że nie jest możliwa!).
pl:
activerecord:
errors:
template:
header:
one: "Nie udało się zapisać {{ model|genitive }}"
Co by dało komunikat: “Nie udało się zapisać produktu”.
Być może warto by było wysłać parę commitów do Railsowego API. Amerykanie tego nie zrobią, bo większość z nich tego nie potrzebuje i nie zna języków, które bez tego brzmią koślawo. Jak byście widzieli spolszczanie za pomocą takiego mechanizmu? Jak to wygląda w innych frameworkach?
W 100% się zgadzam, Amerykanie tego za nas na pewno nie zrobią. W pewnych momentach w pracy zacząłem się zastanawiać, czy Railsów w ogóle na poważnie używa ktokolwiek spoza USA. Mam na myśli takie kwiatki jak np. domyślne kodowanie US-ASCII w widokach (brak możliwości zmiany bez ingerencji w kod RoR), czy brak obsługi europejskich bucketów w najpopularniejszej bibliotece do obsługi S3 - AWS S3.
Ja kiedyś popełniłem takie proste rozszerzenie, ale nie wiem czy działa z najnowszymi railsami, nie ma testów i w ogóle trzeba by nad tym trochę popracować: http://github.com/drogus/genderized/tree/master
W każdym razie jak używałem, to działało spoko, mogłem właściwie zapomnieć o customowych komunikatach - wystarczyło zdefiniować wszystkie komunikaty w trzech formach - dla rodzaju żeńskiego, męskiego i nijakiego i dodać informację o rodzaju do każdego atrybutu.
Angielski ma tylko 1 przypadek dla rzeczowników (2 jeśli dodamy zaimki osobowe).
Świetny pomysł z napisaniem takiego gem’a/plugin’u, oprócz polskiego system powinien też ucieszyć użytkowników innych języków z przypadkami (np. niemiecki 4 przypadki z tego co pamiętam, fiński 16, czy węgierski 29).
Zaimplementowałem pierwszy i ostatni feature - przy czym b. istotna sprawa, miałem do dyspozycji bibliotekę fleksji j. polskiego, która niestety nie jest otwarta. Dodam tylko, że niestety nawet teoria dot. fleksji nie obejmuje pewnych zjawisk - mamy dwa typy rzeczowników w rodzaju nijakim: osobowe i nieosobowe: dziecko i krzesło. Poprawna odmiana 5 x dziecko, to pięcioro dzieci, natomiast 5 x krzesło, to pięć krzeseł. Sprawdźcie sobie w jakimkolwiek dostępnym Wam słowniku, czy odróżnia te dwa typy rzeczowników nijakich. Niestety znam odpowiedź.
Jeśli ktoś zrobi implementację tego mechanizmu dla kilku języków, to stawiam mu flaszkę
Widzę, że podszedłeś full zawodowo (masochistycznie? ;)) do tematu.
Ale ten patent z :one, :few, :many wygląda w końcu na przygotowany specjalnie dla wykręconych języków a’la polski. Mi nic więcej do szczęścia nie potrzeba, chcę tylko w paru miejscach w widokach dać bardziej ludzkie komuniakty (“14 minut temu” zamiast “14 minuty temu”).
@RazorJack: podałeś linka do tego pliku, więc pewnie to u Ciebie działa co nie? Coś robię źle? Coś więcej potrzeba do działania tego patentu?
No mi by się marzyła biblioteka, która realizuje tego rodzaju zadanie bez dodatkowych działań ze strony programisty.
Tzn. niezależnie od tego, czy byłyby to “minuty”, “błędy” czy jakieś dziwolągi, to biblioteka robiłaby odpowiednią odmianę. Ale problem jest naprawdę dosyć skomplikowany. Jak skończę pracować nad swoim kodem, to pewnie go umieszczę w githubie - tyle, że będzie działał pod warunkiem dostępności odpowiedniego słownika fleksyjnego… lub jego fragmentu przygotowanego przez programistę.
Swoją drogą często w aplikacjach przetłumaczonych na j. polski (Facebook, Rememberthemilk, etc.) są właśnie błędy związane z odmianą polskich słów - Amerykanie zazwyczaj nie przewidują, że może być więcej przypadków.
Ja się póki co ograniczyłem do takiego rozwiązania: http://gist.github.com/190594. Szczególnie marzył mi się taki helper “pluralize” jak w russian, więc sobie pożyczyłem