Comment faire pour récupérer toutes les traductions à partir de fichiers yml dans les Rails I18n
Je devine que les rails stocke toutes les analysée traductions yml fichiers dans une sorte de tableau/hachage.
Est-il un moyen d'accéder à ce?
Par exemple, si j'ai un fichier:
en:
test_string: "testing this"
warning: "This is just an example
Je pourrais faire quelque chose comme, I18n.translations_store[:fr][:chaîne_test] ?
J'ai pu analyser le fichier yml avec YAML::load, mais dans mon cas, j'ai coupé l'yml fichiers dans des sous-dossiers pour l'organisation, et je suis assez sûr que les rails déjà analysé tous.
Vous devez vous connecter pour publier un commentaire.
Vous avez obtenu à l'appel d'une méthode privée sur le backend. C'est de cette façon, vous obtenez l'accès:
translations
sera vide si le backend n'est pas initialisé, c'est à dire si vous ne l'avez pas utilisé pour autre chose encore. Vous verrez si vous ouvrez une nouvelle console et essayer de charger les traductions. Vous pouvez contourner ce problème en faisantI18n.t(:foo); translations = I18n.backend.send(:translations)
(même si vous n'avez pas defoo
traduction). Je suis sûr qu'il ya une meilleure façon.I18n.backend.send(:init_translations) unless I18n.backend.initialized?
I18n.t('.')
I18n.enforce_available_locales!(:fr)
où:fr
est souhaitable de paramètres régionaux.Comme par 8xx8 commentaire, une version simplifiée de:
est
Ce qui atténue d'avoir à la fois de la précharge des traductions ou spécifiez les paramètres régionaux.
I18n.t(".")
. Merci.Si vous utilisez
I18n::Fallbacks
malheureusement, vous ne pouvez pas utiliserI18n.t('.')
qu'elle retourne le contenu de la locale courante (eg. "en-GB") et rien à partir de secours locales (par exemple, "en"). Pour contourner cela, vous pouvez effectuer une itération sur les réserves et à l'utilisationdeep_merge!
de les combiner.La valeur par défaut I18n backend est I18n::Backend::Simple, qui n'expose pas les traductions de vous. (I18.backend.traductions est une méthode protégée.)
Ce n'est généralement pas une bonne idée, mais si vous avez vraiment besoin de cette info et ne peut pas analyser le fichier, vous pouvez étendre le backend de classe.
Vous pouvez ensuite appeler
I18n.backend.translations_store
pour obtenir de l'analyse des traductions. Vous ne devriez pas compter sur cette stratégie à long terme, mais il obtient les informations dont vous avez besoin maintenant.Si vous faites cela dans une tâche rake, n'oubliez pas d'inclure l'environnement, ou sinon il ne sera pas charger vos propres paramètres régionaux qui vit sous
config/locales/
Pour le peuple errant dans cette vieille question, il y a une solution qui ne nécessite pas d'appeler les méthodes protected. Changer votre
yml
fichier comme suit:Maintenant vous pouvez simplement extraire toutes les traductions à l'aide de
I18n.t("all")
, qui a l'avantage de automatiquement de l'initialisation et le rechargement des traductions, le mode de développement (quelque chose qui ne se produit pas si vous appelez le protégé méthodes.)