2009-08-28 6 views
16

Ero alla ricerca di una soluzione plugin/gem per estendere i binari nativi i18n per l'archiviazione delle mie traduzioni nel mio database. Forse ho usato i termini di ricerca sbagliati, ma tutto quello che ho trovato sono state le informazioni, che la modifica del back-end è effettivamente possibile e questo blog entry che descrive come scrivere il mio back-end.Rails: memorizzare le traduzioni nella banca dati

È difficile immaginare che tutte quelle app di rotaie là fuori con le loro traduzioni memorizzate in file yml o che ogni sviluppatore abbia scritto propri backend!

Conosci soluzioni di lavoro per questo? Memorizzare testi multilinea in yml mi fa davvero cadere! ;)

Grazie e saluta,

Joe

risposta

19

i18n ha il supporto integrato per l'utilizzo del database come backend di traduzione.

Crea una tabella utilizzando questo codice in una migrazione:

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

quindi aggiungere un inizializzatore in config/inizializzatori/i18n.rb con contenuti:

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

E per ultimo ... mettere traduzioni sul tavolo. Qualcosa del tipo:

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

A partire da i18n 0,5.0 Credo che abbiano spostato questo codice nella sua gemma ... Ho dimenticato cosa si chiama questa gemma.

+0

Le guide delle guide hanno alcune cose su questo argomento (http://guides.rubyonrails.org/i18n.html#using-different-backends). Grazie per aver inserito le lacune @Jason! – captainpete

1

Si potrebbe desiderare di provare http://github.com/joshmh/globalize2/tree/master

+1

Hello Aram, ok, globalize semplifica la traduzione di contenuti correlati al modello, ma che dire di tutto il contenuto statico come la stampa, informazioni, contenuto di posta elettronica, ecc.? – xijo

+0

Immagino che dovresti scrivere il tuo backend allora. Cosa stai cercando di fare esattamente? –

+0

Il mio progetto attuale deve gestire molti testi descrittivi, ma poiché in futuro diventerà più dinamico, abbiamo deciso di utilizzare i binari sin dall'inizio. Ora i nostri file yml hanno più di 1000 linee! Forse creerò un modello e memorizzerò coppie di valori-chiave serializzati. Non bello per niente, ma un compromesso .. – xijo

9

finalmente ho trovato quello che cercavo con l'aiuto di Sven Fuchs:

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

Questo fantastico plugin di Dylan Stamat fa esattamente ciò che il nome indica e gestisce inoltre la memorizzazione nella cache!

Sven ha anche ricordato, che il ramo corrente di i18n/active_record fornisce un backend ActiveRecord così:

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

Alcuni discussione su questo tema è in corso nella i18n gruppo di utenti Goolge :

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

Problema risolto, grazie a Mr I18n Sven Fuchs! ;)

+0

Bello! È bello sapere che hai una buona soluzione. Grazie anche per la condivisione. –

0

Abbiamo avuto una buona esperienza con fast_gettext

ha un backend DB-backed che viene fornito con un controller per fare le traduzioni attraverso il web. Il caching è integrato, anche se abbiamo dovuto codificare il precaricamento di tutte le traduzioni all'avvio (è molto più veloce quindi ottenerle una alla volta con la cache).

+0

Puoi condividere il preloading nel wiki fast_gettext, in modo che altri possano riutilizzarlo? – grosser

+0

Anche io mi piacerebbe! – caesarsol