2010-10-28 5 views
4

Dans mon application Rails, j'aimerais utiliser simultanément 2 backends, le premier stockant des traductions dans une BD, et le second étant le backend basé sur YML par défaut. Je voudrais que ce deuxième backend serve de backend backend, c'est-à-dire que si une traduction n'est pas trouvée dans la première, Rails recherche la traduction dans la seconde.Est-il possible d'utiliser simultanément 2 backend I18n et d'utiliser le second uniquement comme repli?

Est-il possible de réaliser cela?

Modifier:

Ma motivation est que je voudrais ne pas avoir à stocker les traductions par défaut Rails dans le premier back-end. Le premier backend que j'utilise est livré avec une interface web d'administration qui affiche toutes les traductions contenues dans le backend, je ne veux pas encombrer cette interface avec ces traductions par défaut. Et je voudrais ne pas avoir à les importer dans le premier backend, ni avoir à les mettre à jour quand ils sont actualisés.

+1

pourquoi voudriez-vous faire cela? N'est-il pas plus facile de stocker la traduction dans un backend une fois pour toutes? –

Répondre

3

La gemme i18n fait cela et est compatible avec les rails. En fait, il est recommandé de l'utiliser.

De l'rdoc de I18n :: backend Chaîne:

Backend que les chaînes multiples autres backends et chacun d'entre eux les contrôles lorsqu'une traduction doit être recherché. Ceci est utile lorsque vous souhaitez que utilise des traductions standard avec un backend Simple, mais stocke les traductions d'application personnalisées dans une base de données ou dans d'autres backends.

Pour utiliser le backend de chaîne instanciez-le et réglez-le sur le module I18n. Vous pouvez ajouter backends chaînés par l'initialiseur ou backends accesseur:

# preserves the existing Simple backend set to I18n.backend 
I18n.backend = I18n::Backend::Chain.new(I18n::Backend::ActiveRecord.new, I18n.backend) 

La mise en œuvre suppose que tous les backends ajoutés à la chaîne mettre en œuvre une méthode de recherche avec la même API que back-end simple fait.

+0

Merci balu! C'est exactement ce dont j'avais besoin. – Florent2