Witajcie.
Mam taki problem:
tworzę model, który korzysta z dobrodziejstw MongoDB.
Wszystko byłoby ok, bo MongoMapper fajną rzeczą jest, gdyby nie to, że przyszło mi do implementacji i18n takiego modelu. Standardowo wykorzystałbym globalize3, ale działa tylko z AR. Jakieś pomysły jak mogę obejść problem?
Z góry dzięki za pomoc
Co rozumiesz przez “implementację i18n”. Chcesz przetłumaczyć nazwę modelu, pola itd? Robi się to tak samo jak z AR, z tym że używasz klucza active_model zamiast active_record w pliku z tłumaczeniami.
sorry, jak dzisiaj czytam mojego wczorajszego posta, to sam go nie rozumiem
Chcę przetłumaczyć treść przechowywaną w bazie danych.
Przeklejając przykład z readme globalize3:
[code]I18n.locale = :en
post.title # => Globalize3 rocks!
I18n.locale = :he
post.title # => גלובאלייז2 שולט![/code]
Przy czym ja kolumn będę miał ok.6, natomiast języków 2 lub max 3.
Uch, może być ciężko, g3 używa podejścia do tłumaczeń modeli (osobna tabela dla każdego modelu, np. product_translations) które zupełnie nie pasuje do agregacyjnego (kolejne pola) podejścia dokumentowych baz danych.
Ale! Mógłbyś rozszerzyć g3 o wsparcie dla mongoida i/lub mongomappera. Jako jeden z maintainerów globalize3 mogę Ci obiecać że jeśli będzie to nieinwazyjnie napisane i przykryte testami (jako i całe g3 jest przykryte), to wciągnę.
W skrócie: zostawiasz kod który “przechwytuje” wywołania do oryginalnego pola (np. Model#title) i szuka go w translacjach na podstawie aktualnego I18n.locale. Zrobić trzeba wszystko ponadto, czyli żeby przechwycenie nie szukało w innej tabeli, tylko innym polu tego samego modelu (dokumentu). Plus kwestie zapisu, ale jak rozgryziesz metaprogramowanie którym zrobiony jest odczyt, to zrozumienie ideolo zapisu nie jest już żadnym problemem.
Swoją drogą interesujący ficzer (as in: mi też się może wkrótce przydać), zapraszam do zrobienia issue na githubie globalize3
[quote=krzyzak]sorry, jak dzisiaj czytam mojego wczorajszego posta, to sam go nie rozumiem
Chcę przetłumaczyć treść przechowywaną w bazie danych.
Przeklejając przykład z readme globalize3:
[code]I18n.locale = :en
post.title # => Globalize3 rocks!
I18n.locale = :he
post.title # => גלובאלייז2 שולט![/code]
Przy czym ja kolumn będę miał ok.6, natomiast języków 2 lub max 3.[/quote]
Uzywam tego do I18n z mongoid. Nie ma tam fallbackow i paru innych rzeczy ale generalnie dziala
@Tomash - dzięki za info, natomiast będę miał zdecydowanie za mało czasu na napisanie projektu, którego w/w problem jest częścią, abym zdążył to ogarnąć w taki sposób.
@lewy313 - super, wielkie dzięki!
w zasadzie masz troszkę bardziej rozbudowane coś, co ja zrobiłem u siebie jako proof-of-concept. W każdym razie należy Ci się piwo za ten kawałek kodu
O, to jest całkiem niezły punkt wyjścia!
mój początkowy kod, stworzony jako proof of concept działał zadowalająco - kod podany wyżej, po przeportowaniu go do mongomappera będzie spełniał moje wymagania w 99% (jeszcze sobie fallbacki może dopiszę).
@lewy313 - nie obrazisz się, jak wstawię sobie port Twojego kodu na mongomappera na githuba?
[quote=krzyzak]mój początkowy kod, stworzony jako proof of concept działał zadowalająco - kod podany wyżej, po przeportowaniu go do mongomappera będzie spełniał moje wymagania w 99% (jeszcze sobie fallbacki może dopiszę).
@lewy313 - nie obrazisz się, jak wstawię sobie port Twojego kodu na mongomappera na githuba?:)[/quote]
Oczywiscie ze nie
Wieksze zaslugi naleza sie temu panu https://github.com/Papipo/mongoid_i18n i Pankowi