Rails: przechowuj tłumaczenia w bazie danych

Szukałem rozwiązania plugin / gem, aby rozszerzyć natywne rails i18n do przechowywania moich tłumaczeń w mojej bazie danych. Może użyłem niewłaściwych wyszukiwań, ale znalazłem tylko informację, że zmiana backendu jest rzeczywiście możliwa i ten wpis na blogu opisujący jak napisać własny backend.

Trudno sobie wyobrazić, że te wszystkie aplikacje rails, które mają swoje tłumaczenia przechowywane w plikach yml lub każdy programista napisał własne backendy!

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

Dzięki i pozdrawiam,

Joe

Author: xijo, 2009-08-28

4 answers

I18n ma wbudowane wsparcie dla korzystania z bazy danych jako zaplecza tłumaczeniowego.

Utwórz tabelę używając tego kodu podczas 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 dodaj inicjalizator w config / initializers / i18n.RB o treści:

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

I ostatni... umieść tłumaczenia w tabeli. Coś w stylu:

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

Od i18n 0.5.0 wydaje mi się, że przenieśli ten kod do własnego klejnotu... Zapomniałem, jak się nazywa ten klejnot.

 20
Author: Jason,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-24 05:35:26

W końcu znalazłem to, czego szukałem z pomocą Svena Fuchsa:

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

To dość niesamowite plugin Dylan Stamat robi dokładnie to, co nazwa wskazuje i dodatkowo obsługuje buforowanie!

Sven wspomniał również, że bieżąca gałąź i18n/active_record zapewnia również backend ActiveRecord:

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

Dyskusja na ten temat toczy się w grupie użytkowników goolge i18n:

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

Problem rozwiązany, dzięki Panu i18n Svenowi Fuchsowi! ;)

 9
Author: xijo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-25 15:59:44
 1
Author: Aram Verstegen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-28 13:27:13

Mieliśmy dobre doświadczenia z fast_gettext

Posiada backend oparty na DB, który jest dostarczany z kontrolerem do wykonywania tłumaczeń przez Internet. Buforowanie jest wbudowany, choć musieliśmy kod pre-loading wszystkich tłumaczeń na boot (to jest znacznie szybciej, a następnie dostać je jeden po drugim z buforowania).

 0
Author: Vitaly Kushner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-31 23:23:58