2009-08-28 13 views
16

Szukałem rozwiązania typu plugin/gem, aby rozszerzyć natywne szyny i18n do przechowywania moich tłumaczeń do mojej bazy danych. Być może użyłem złych terminów wyszukiwania, ale znalazłem tylko informację, że zmiana backendu jest rzeczywiście możliwa i ta blog entry opisuje, jak napisać własny backend.Szyny: przechowuj tłumaczenia w bazie danych

Trudno sobie wyobrazić, że wszystkie te railsowe aplikacje zawierające tłumaczenia przechowywane są w plikach yml lub każdy programista tworzy własne backendy!

Czy znasz działające rozwiązania w tym zakresie? Przechowywanie tekstów wielowierszowych w yml naprawdę mnie rozczarowuje! ;)

Dzięki i wita,

Joe

Odpowiedz

19

i18n ma wbudowaną obsługę bazy danych jako zaplecza translacyjnego.

Tworzenie tabeli za pomocą tego kodu w migracji:

create_table :translations do |t| 
    t.string :locale 
    t.string :key 
    t.text :value 
    t.text :interpolations 
    t.boolean :is_proc, :default => false 
    end 

Następnie dodać inicjator w config/initializers/i18n.rb o treści:

I18n.backend = I18n::Backend::ActiveRecord.new 

I ostatni ... umieścić tłumaczenia na stole. Coś jak:

locale key  value 
en  Cool  Cool 
es  Cool  Frio 
en  nav.Home home 
es  nav.Home casa 
... 

Od i18n 0,5.0 Wierzę, że przenieśli ten kod do własnego klejnotu ... Zapomniałem, jak nazywa się ten klejnot.

+0

Przewodniki Railsowe mają kilka rzeczy na ten temat (http://guides.rubyonrails.org/i18n.html#using-different-backends). Dzięki za wypełnienie luk @Jason! – captainpete

1
+1

Witaj Aram, W porządku, globalizacja ułatwia tłumaczenie treści związanych z modelem, ale co z całą statyczną zawartością, np. Nadrukiem, treścią, treścią e-mail itp? – xijo

+0

Wyobrażam sobie, że musiałbyś wtedy napisać swój własny backend. Co dokładnie próbujesz zrobić? –

+0

Mój obecny projekt musi poradzić sobie z wieloma tekstami opisowymi - ale ponieważ w przyszłości będzie on bardziej dynamiczny, zdecydowaliśmy się użyć szyn od początku. Teraz nasze pliki yml mają ponad 1000 linii! Być może utworzę model i zachowam w nim parę seriali i par klucz-wartość. Nie piękne, ale kompromis .. – xijo

9

końcu znalazłem to, czego szukałem za pomocą Sven Fuchs:

http://github.com/dylanz/i18n_backend_database/tree/master

Ta dość niesamowita wtyczka Dylana Stamata robi dokładnie to, co wskazuje nazwa i dodatkowo obsługuje buforowanie!

Sven wspomniano również, że obecny oddział i18n/active_record zapewnia backend ActiveRecord także:

http://github.com/svenfuchs/i18n/blob/active_record/lib/i18n/backend/active_record.rb

Niektóre dyskusja na ten temat się dzieje w grupie użytkownika i18n goolge :

http://groups.google.com/group/rails-i18n/browse_thread/thread/6b7ba3c401890a7e

Problem rozwiązany, dzięki I18n Sven Fuchs! ;)

+0

Nice! Dobrze słyszeć, że masz dobre rozwiązanie. Dziękuję również za udostępnienie. –

0

Mieliśmy dobre doświadczenia z fast_gettext

ma to DB-backed backend, że pochodzi z kontrolerem, aby wykonać tłumaczenia w internecie. Buforowanie jest wbudowane, chociaż musieliśmy kodować wstępne ładowanie wszystkich tłumaczeń podczas rozruchu (jest to znacznie szybsze niż uzyskiwanie ich pojedynczo z buforowaniem).

+0

Czy możesz udostępnić wstępne ładowanie w wiki typu fast_gettext, aby inni mogli je ponownie wykorzystać? – grosser

+0

Też chciałbym! – caesarsol

Powiązane problemy