用 Rails I18n 翻译 Ruby 枚举符号?
Translating Ruby enum symbols with Rails I18n?
因为我对 Ruby 和 Rails 很陌生,所以我不确定如何最好地表达这个问题,但这是我的情况。我的任务是将 Rails 内置的日语网络应用程序翻译成英语,我主要是通过在 config/locales/ja.yml 中创建一长串 words/phrases 和en.yml 个文件并在视图中使用 t('...').
引用它们
但是,我现在遇到的情况是下拉选择表单从模型的枚举中提取值。
模型中的相关行:
enum gender: %i(男性 女性)
视图中的相关行:
<%= f.select :gender, User.genders.keys.to_a, {}, { class: "form-control" } %>
我一直在尝试各种方法但收效甚微,包括尝试使用涉及 enum_help gem.
的解决方案
如果可能,我想避免更改模型中的行,因为这是我不太了解的更大代码库的一部分,但如果有必要,我将不得不.我怎样才能最轻松地将下拉框翻译成日语的“男性”和“女性”,而英语的 "Male" 和 "Female"?
例如,在config/locales/en
中,您将有:
views:
genders:
male: "Man"
female: "Lady"
那么在你看来:
<%= f.select :gender, User.genders.keys.collect { |g| [t("views.genders.#{g.downcase}"), g] }, {}, { class: "form-control" } %>
很简单。
- 安装 gem translate_enum
gem install translate_enum
- 在模型中包含 TranslateEnum
class Gender < ActiveRecord::Base
include TranslateEnum
enum gender: { male: 0, female: 1}
- 在视图文件中:
f.select :gender, options_for_select(Gender.translated_statuses.map {|translation, k, _v| [translation, k] })
最后在 config/locales/en.yml
文件中:
activerecord:
attributes:
gender:
gender_list:
male: "Male"
female: "Female"
希望一切顺利!
因为我对 Ruby 和 Rails 很陌生,所以我不确定如何最好地表达这个问题,但这是我的情况。我的任务是将 Rails 内置的日语网络应用程序翻译成英语,我主要是通过在 config/locales/ja.yml 中创建一长串 words/phrases 和en.yml 个文件并在视图中使用 t('...').
引用它们但是,我现在遇到的情况是下拉选择表单从模型的枚举中提取值。
模型中的相关行:
enum gender: %i(男性 女性)
视图中的相关行:
<%= f.select :gender, User.genders.keys.to_a, {}, { class: "form-control" } %>
我一直在尝试各种方法但收效甚微,包括尝试使用涉及 enum_help gem.
的解决方案如果可能,我想避免更改模型中的行,因为这是我不太了解的更大代码库的一部分,但如果有必要,我将不得不.我怎样才能最轻松地将下拉框翻译成日语的“男性”和“女性”,而英语的 "Male" 和 "Female"?
例如,在config/locales/en
中,您将有:
views:
genders:
male: "Man"
female: "Lady"
那么在你看来:
<%= f.select :gender, User.genders.keys.collect { |g| [t("views.genders.#{g.downcase}"), g] }, {}, { class: "form-control" } %>
很简单。
- 安装 gem translate_enum
gem install translate_enum
- 在模型中包含 TranslateEnum
class Gender < ActiveRecord::Base include TranslateEnum enum gender: { male: 0, female: 1}
- 在视图文件中:
f.select :gender, options_for_select(Gender.translated_statuses.map {|translation, k, _v| [translation, k] })
最后在
config/locales/en.yml
文件中:activerecord: attributes: gender: gender_list: male: "Male" female: "Female"
希望一切顺利!