2009-08-28 11 views
16

Je cherchais une solution plugin/gem pour étendre les rails natifs i18n pour stocker mes traductions dans ma base de données. Peut-être que j'ai utilisé les mauvais termes de recherche, mais tout ce que j'ai trouvé était l'information, que changer le backend EST effectivement possible et ce blog entry qui décrit comment écrire mon propre backend.Rails: stocker des traductions dans la base de données

Il est difficile d'imaginer que toutes ces applications rails là-bas ayant leurs traductions stockées dans des fichiers yml ou chaque développeur a écrit ses propres backends!

Connaissez-vous des solutions de travail pour cela? Stocker des textes multilignes en yml me fait vraiment chuter! ;)

Merci et accueille,

Joe

Répondre

19

i18n prend en charge l'utilisation de la base de données en tant que backend de traduction.

Créer une table en utilisant ce code dans une migration:

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

Puis ajouter un initialiseur dans config/initializers/i18n.rb avec le contenu:

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

Et enfin ... mettre les traductions dans la table. Quelque chose comme:

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

À partir de i18n 0,5.0 Je crois qu'ils ont déplacé ce code dans son propre bijou ... J'oublie ce que cette gemme est appelée.

+0

Les guides Rails ont quelques trucs sur ce sujet (http://guides.rubyonrails.org/i18n.html#using-different-backends). Merci de remplir les espaces @Jason! – captainpete

1
+1

Bonjour Aram, okay, globaliser le rend facile de traduire le contenu relatif au modèle, mais qu'en est-il de tout le contenu statique comme l'empreinte, le contenu de l'e-mail, etc? – xijo

+0

J'imagine que vous auriez à écrire votre propre backend alors. Qu'est-ce que vous essayez de faire exactement? –

+0

Mon projet actuel doit traiter avec beaucoup de textes de description - mais parce que cela deviendra plus dynamique à l'avenir, nous avons décidé d'utiliser des rails depuis le début. Maintenant, nos fichiers yml ont plus de 1000 lignes! Peut-être que je vais créer un modèle et y stocker des paires clé-valeur sérialisées. Pas beau du tout, mais un compromis .. – xijo

9

j'ai finalement trouvé ce que je cherchais avec l'aide de Sven Fuchs:

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

Ce plugin assez génial par Dylan Stamat fait exactement ce que le nom indique et gère en plus la mise en cache! aussi

Sven mentionné, que la branche actuelle de i18n/active_record fournit un back-end ActiveRecord ainsi:

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

Une discussion sur ce sujet est en cours dans le groupe d'utilisateurs goolge i18n :

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

Problème résolu, grâce à M. I18n Sven Fuchs! ;)

+0

Nice! C'est bon d'entendre que vous avez une bonne solution. Merci pour le partage, aussi. –

0

Nous avons eu une bonne expérience avec fast_gettext

il dispose d'un back-end soutenu par DB qui vient avec un contrôleur pour faire les traductions sur le web. La mise en cache est intégrée, bien que nous ayons dû coder le pré-chargement de toutes les traductions au démarrage (il est beaucoup plus rapide que de les obtenir une par une avec la mise en cache).

+0

Pourriez-vous partager le préchargement dans le wiki fast_gettext, afin que les autres puissent le réutiliser? – grosser

+0

J'aimerais aussi ça! – caesarsol

Questions connexes