Rails i18n - Mettre un texte de remplacement si la traduction n'existe pas

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 : https://www.ruby-forum.com/topic/220355