用 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" } %>

很简单。

  1. 安装 gem translate_enum

gem install translate_enum

  1. 在模型中包含 TranslateEnum
class Gender < ActiveRecord::Base

include TranslateEnum

enum gender: { male: 0, female: 1}
  1. 在视图文件中:

f.select :gender, options_for_select(Gender.translated_statuses.map {|translation, k, _v| [translation, k] })

  1. 最后在 config/locales/en.yml 文件中:

    activerecord:
     attributes:
       gender:
         gender_list:
           male: "Male"
               female: "Female"
    

希望一切顺利!