2016-04-18 1 views
1

j'ai un en-tête dans une page où je voudrais apparaître quelque chose comme ceci:I18n comment se traduit le nom du modèle en vue

« aanpassen bewoner » « aanpassen gebruiker »

« aanpassen » est néerlandais pour Edit. 'bewoner', 'gebruiker' sont des noms de classe traduits de Senior, Utilisateur.

J'ai traduit les cours d'enregistrement actif dans le fichier comme ceci:

nl: 
    activerecord: 
    models: 
     user: 
     one: 'Gebruiker' 

Est-il possible d'écrire l'en-tête une fois dans les vues (ou en classe d'aide) il prend le modèle, il est actuellement montrant et montre la traduction? Idéalement, je n'aurais qu'une seule ligne de code que je pourrais utiliser dans toutes les vues d'édition de toutes les classes (à condition qu'elles soient traduites bien sûr).

Répondre

0

Vous pouvez essayer de deviner le modèle actuel (qui est la partie la plus difficile je pense) du nom du contrôleur actuel et ensuite vous pouvez essayer de le faire. L'aide suivante ne vient que:

# application_helper.rb 
def translated_model_name(model = controller_name) 
    model_class = model.to_s.singularize.camelize 
    Object.const_defined?(model_class) ? model_class.constantize.model_name.human : model.to_s 
end 

L'assistant essaie de deviner le nom du modèle et utilise ensuite la méthode model_name.human pour traduire (voir docs). Il peut être utilisé dans votre modèle de cette façon:

# e.g. in users/index.html.erb 
<%= translated_model_name %> 
# => prints translation for the :user model 

# whereas in seniors/show.html.erb 
<%= translated_model_name %> 
# => prints translation for the :senior model 

Si le nom du modèle ne peut pas être deviné automatiquement à partir du nom du contrôleur, vous pouvez la remplacer par un paramètre à l'aide:

# e.g. in some_non_model_path/index.html.erb 
<%= translated_model_name(:user) %> 
# => prints translation for the :user model