Après lecture du code source du module i18n de rails j'ai trouvé. Donc pour
mettre un texte de remplacement si une traduction n'existe pas (translation
missing), il faut utiliser l'option default pour la méthode t
(translate).
Exemple avec une traduction présente :
t(:hello)
#=> "hello"
Exemple
avec une traduction absente :
t(:test)
#=> "<span class=\"translation_missing\"
title=\"translation missing: en.test\">Test</span>"
Donc si vous faites ceci vous n'avez plus d'erreur :
t(:test, :default => "texte par défaut")
#=> "texte par défaut"
Pour tester en console il faut créé une instance ActionView et précéder la
fonction t de cette instance, comme suit :
av = ActionView::Base.new
av.t(:hello)
Sinon sur le net, un développeur propose une super idée : personnaliser
l'exception levé et faire appel à l'API de Google traduction
Voici le code pour cette 2ème solution (enfin vue que l'API va devenir
payante) :
module I18n
class << self
def raise_custom_exception(exception, locale, key, options)
if MissingTranslationData === exception
# do something with the missing translation
return translation
else
raise exception
end
end
end
end
I18n.exception_handler = :raise_custom_exception
Url de la discussion :
http://www.ruby-forum.com/topic/220355