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
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.
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:
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! ;)
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
Możesz spróbować http://github.com/joshmh/globalize2/tree/master
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).
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