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