Rails 4 Active Record Enums sind großartig, aber was ist das richtige Muster für die Übersetzung mit i18n?
ruby-on-rails-4
enums
Chris Beck
quelle
quelle
{locale}.activerecord.attributes.{model}.{attribute}
und einet_enum(model, enum, value)
Hilfsmethode geschrieben, damit die Enum-Übersetzungen neben der Label-Übersetzung liegenAb Rails 5 erben alle Modelle von
ApplicationRecord
.Ich verwende diese Oberklasse, um eine generische Lösung für die Übersetzung von Aufzählungen zu implementieren:
Dann füge ich die Übersetzungen in meine
.yml
Datei ein:Um die Übersetzung zu erhalten, die ich verwende:
quelle
<%= f.select :status, User.statuses.keys.collect { |status| [User.human_enum_name(:status, status), status] } %>
.human_enum_name(@user, :status)
self.human_enum_collection(enum_name)
. Code wäresend(enum_name.to_s.pluralize).keys.collect { |val| [human_enum_name(enum_name, val), val] }
Hier ist eine Ansicht:
Hier ist ein Modell (Sie können diesen Code tatsächlich in einen Helfer oder Dekorateur verschieben).
Und hier ist die Gebietsschemadatei:
quelle
.human_attribute_name('genders.male')
nicht funktionierenUm die Internationalisierung ähnlich wie bei jedem anderen Attribut zu halten, habe ich das verschachtelte Attribut wie hier zu sehen verwendet .
Wenn Sie eine Klasse haben
User
:Und so
yml
ähnlich:Sie können verwenden:
quelle
activerecord.attributes.<fieldname>
, dielabel
Übersetzung für Formularhelfer zu seinModell:
Gebietsschema:
Und auf der Ansicht (.slim):
quelle
Wenn Sie die Antwort von user3647358 näher erläutern, können Sie dies sehr genau so erreichen, wie Sie es bei der Übersetzung von Attributnamen gewohnt sind.
Gebietsschemadatei:
Übersetzen Sie mit I18n # t:
quelle
Versuchen Sie, TranslateEnum gem für diese Zwecke zu verwenden
quelle
Ich habe ein Juwel dafür geschaffen.
http://rubygems.org/gems/translated_attribute_value
Fügen Sie Ihrem Gemfile hinzu:
Wenn Sie ein Statusfeld für den Benutzer haben:
Und aus Ihrer Sicht können Sie so anrufen:
Es funktioniert mit Active Record, Mongoid oder jeder anderen Klasse mit Getter / Setter:
https://github.com/viniciusoyama/translated_attribute_value
quelle
Wenn wir die Antworten von Repolês und Aliaksandr für Rails 5 kombinieren , können wir zwei Methoden erstellen, mit denen Sie einen einzelnen Wert oder eine Sammlung von Werten aus einem Enum-Attribut übersetzen können.
Richten Sie die Übersetzungen in Ihrer
.yml
Datei ein:In der
ApplicationRecord
Klasse, von der alle Modelle erben, definieren wir eine Methode, die Übersetzungen für einen einzelnen Wert verarbeitet, und eine andere, die Arrays durch Aufrufen verarbeitet:In unseren Ansichten können wir dann einzelne Werte übersetzen:
Oder die gesamte Sammlung von Enum-Werten:
quelle
Probieren Sie das Juwel enum_help aus . Aus seiner Beschreibung:
quelle
Hier ist eine
t_enum
Hilfsmethode, die ich benutze.enum_helper.rb :
user.rb :
en.yml :
quelle
Das Model:
Die Gebietsschemadatei:
Verwendung:
quelle
@user.role
, denn das ist das Hauptproblem.Ich bevorzuge einen einfachen Helfer in application_helper
Dann in meiner YML-Datei:
quelle
Noch ein anderer Weg, ich finde es ein bisschen bequemer, ein Anliegen in Modellen zu verwenden
Besorgnis, Sorge :
YML:
Aussicht :
Vergessen Sie nicht, Ihrem Modell Bedenken hinzuzufügen:
quelle
Sie können einfach einen Helfer hinzufügen:
und richten Sie es wie gewohnt ein:
Verwenden Sie es dann mit Ihrer Auswahl:
my_something_list
quelle
quelle