2016-04-18 4 views
1

ich einen Header auf einer Seite, wo ich möchte so etwas erscheinen:I18n, wie der Modellname in den Ansichten erhalten übersetzt

‚aanpassen bewoner‘ ‚aanpassen Gebruiker‘

‚aanpassen‘ ist niederländisch für Bearbeiten. 'bewoner', 'gebruiker' sind übersetzte Klassennamen von Senior, Benutzer.

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

Gibt es eine Möglichkeit, es noch die Header einmal in den Ansichten (oder in Hilfsklasse), so dauert es, das Modell zu schreiben ist:

Ich habe die aktiven Datensatz Klassen in der Datei wie folgt übersetzt zeigt und zeigt die Übersetzung? Idealerweise hätte ich nur eine Codezeile, die ich in allen Bearbeitungsansichten aller Klassen verwenden könnte (sofern sie natürlich übersetzt werden).

Antwort

0

Sie können versuchen, das aktuelle Modell (das ist der schwierigste Teil, denke ich) aus dem aktuellen Controller-Namen zu erraten, und dann können Sie versuchen, I18n es. Die folgenden Helfer machen genau das:

# 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 

Der Helfer versucht, die Modellnamen zu erraten, und verwendet dann die model_name.human Methode für sie zu übersetzen (siehe docs). Es kann auf diese Weise in der Vorlage verwendet werden:

# 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 

Wenn der Modellname nicht automatisch von dem Controller-Namen zu erraten, können Sie es mit einem Parameter der Helfer außer Kraft setzen können:

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