2009-08-28 24 views
16

Estaba buscando una solución de complemento/gema para extender los rieles nativos i18n para almacenar mis traducciones en mi base de datos. Tal vez utilicé los términos de búsqueda incorrectos, pero todo lo que encontré fue la información, que el cambio de backend ES realmente posible y este blog entry que describe cómo escribir mi propio back-end.Rieles: almacenar traducciones en la base de datos

¡Es difícil imaginar que todas esas aplicaciones de rieles tengan sus traducciones almacenadas en archivos yml o que cada desarrollador haya escrito sus propios backends!

¿Conoces las soluciones de trabajo para esto? ¡Almacenar textos de líneas múltiples en yml realmente me deprime! ;)

Gracias y saluda,

Joe

Respuesta

19

i18n tiene soporte incorporado para utilizar la base de datos como back-end de traducción.

Crear una tabla utilizando este código en una migración:

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

A continuación, agregue un inicializador en config/inicializadores/i18n.rb con contenidos:

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

Y por último ... poner traducciones en la mesa. Algo así como:

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

A partir de i18n 0.5.0 Creo que movieron este código a su propia gema ... Olvidé cómo se llama esa gema.

+0

Las Guías de Rails tienen algunas cosas sobre este tema (http://guides.rubyonrails.org/i18n.html#using-different-backends). Gracias por llenar los huecos @Jason! – captainpete

1

Es posible que desee para tratar de http://github.com/joshmh/globalize2/tree/master

+1

Hola, Aram, bien, globalize hace que sea fácil de traducir el contenido relacionado con el modelo, pero ¿qué pasa con todo el contenido estático como impresión, sobre, contenido de correo electrónico, etc.? – xijo

+0

Imagino que tendrías que escribir tu propio backend entonces. ¿Qué estás tratando de hacer exactamente? –

+0

Mi proyecto actual tiene que manejarse con una gran cantidad de textos de descripción, pero como se volverá más dinámico en el futuro, decidimos usar los raíles desde el principio. ¡Ahora nuestros archivos yml tienen más de 1000 líneas! Tal vez crearé un modelo y almacenaré pares clave-valor serializados en él. No es bello en absoluto, sino un compromiso ... – xijo

9

fin encontré lo que estaba buscando con la ayuda de Sven Fuchs:

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

Este plugin impresionante de Dylan Stamat hace exactamente lo que su nombre indica y maneja el almacenamiento en caché.

Sven también mencionó, que la rama actual de i18n/active_record proporciona un motor de ActiveRecord así:

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

cierta discusión sobre este tema está pasando en el grupo de usuarios i18n Goolge :

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

Problema resuelto, gracias a Mr I18n Sven Fuchs! ;)

+0

¡Agradable! Es bueno escuchar que tienes una buena solución. Gracias por compartir, también. –

0

, tuvimos una buena experiencia con fast_gettext

tiene un backend respaldado por DB que viene con un controlador para hacer las traducciones a través de Internet. El almacenamiento en caché está incorporado, aunque tuvimos que codificar la precarga de todas las traducciones en el inicio (es mucho más rápido que obtenerlas una a una con el almacenamiento en caché).

+0

¿Podría compartir la precarga en la wiki de quick_gettext, para que otros puedan reutilizarla? – grosser

+0

¡Me gustaría eso también! – caesarsol

Cuestiones relacionadas