Utilisez une autre clé I18n dans une interpolation I18n
Cela pourrait être i18n-ception mais disons que j'ai un fichier en.yml
comme ci-dessous
en:
my_var: Foo
my_message: "This is a message where I'd like to interpolate I18n's %{my_var}"
Existe-t-il un moyen d'indiquer à I18n que %{my_var}
devrait être la clé my_var
dans en.yml
?
Je sais que je pourrais accomplir en faisant quelque chose comme
I18n.t 'my_message', :my_var => I18n.t('my_var')
Mais j'espérais que I18n a un moyen d'auto-référencer les clés.
3 réponses
C'est en fait une question assez commune, mais la réponse courte est non, ce n'est malheureusement pas possible: (
Actuellement, je lutte pour cela... Et enfin, je crée un type yaml personnalisé.
Dans la section init.
Psych.add_builtin_type('i18n') { |_type, value|
->(_key, _options) do
value.gsub(/%\{([\w.]+)\}/) do |match|
key = $1.to_sym
if I18n.exists?(key)
I18n.t(key)
else
match
end
end
end
}
I18n.reload!
, Dans fr.yml
en:
my_var: Foo
my_message: !!i18n "This is a message where I'd like to interpolate I18n's %{my_var}"
!!i18n
Appliquer le type intégré personnalisé.
Comme vous l'avez dit, peut-être que ce n'est pas une solution si directe d'appeler deux fois de la vue à la traduction
<%= t("my_message", my_var: t("my_var") ) %>
, Mais vous donne la possibilité d'appeler une variable
<%= t("my_message", my_var: t("my_#{$item[:slug]}") ) %>