使用Rails I18n翻译Ruby枚举符号?

3
因为我对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解决方案,但效果甚微。

如果可能的话,我想避免更改模型中的行,因为这是一个我不太了解的庞大代码库的一部分,但如果必要的话,我将不得不这样做。如何最轻松地将下拉框翻译成适当的“男性”和“女性”,以便日语显示为“男性”和“女性”,而英语则显示为“Male”和“Female”?

2个回答

1
例如,在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" } %>

0

这很容易。

  1. 安装 translate_enum gem

gem install translate_enum

  1. 在模型中包含 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: "男"
               female: "女"
    
  • 希望这个能正常工作!

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接