用Rails I18n翻译Ruby枚举符号?

时间:2016-07-04 07:15:19

标签: ruby-on-rails ruby enums internationalization rails-i18n

因为我对Ruby和Rails很陌生,我不完全确定如何最好地提出这个问题,但这是我的情况。我的任务是将使用Rails构建的日语Web应用程序翻译成英语,我主要是通过在config / locales / ja.yml和en.yml文件中创建一长串单词/短语并引用它来实现这一点。他们在视图中使用t('...')。

但是,我现在有一种情况,即下拉选择表格从模型的枚举中提取值。

模型中的相关行:

enum gender: %i(男性 女性)

视图中的相关行:

<%= f.select :gender, User.genders.keys.to_a, {}, { class: "form-control" } %>

我一直在尝试各种各样的事情,包括尝试使用涉及enum_help gem的解决方案。

如果可能的话,我想避免更改模型中的行,因为这是我不太了解的更大代码库的一部分,但如果有必要,我将不得不这样做。我怎样才能最容易地将下拉框翻译成适合日语的“男性”和“女性”,而英语中的“男性”和“女性”呢?

2 个答案:

答案 0 :(得分:0)

例如,在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 :(得分:0)

很简单。

  1. 安装 gem translate_enum
<块引用>

gem install tr​​anslate_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"
    

希望这一切正常!