因为我是Ruby和Rails的新手,我不完全确定如何最好地表达这个问题,但这是我的情况。我的任务是将一个用Rails构建的日语web应用程序翻译成英语,我主要是通过在config/locale/ja中创建一长串单词/短语来做到这一点。Yml和en。并使用t('…')在视图中引用它们。
然而,我现在有一个下拉选择表单从模型的枚举中提取值的情况。
模型中的相关行:
enum gender: %i(男性 女性)
视图中的相关行:
<%= f.select :gender, User.genders.keys.to_a, {}, { class: "form-control" } %>
我一直在尝试各种各样的东西,但收效甚微,包括试图使用涉及enum_help gem的解决方案。
如果可能的话,我想避免改变模型中的行,因为这是一个更大的代码库的一部分,我不太了解,但如果有必要,我必须这样做。我怎样才能最容易地把下拉框翻译成日语中的"中文"one_answers"中文",而英语中的"中文"one_answers"中文"呢?
以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
- 视图文件:
-
最后在
config/locales/en.yml
文件中:activerecord: attributes: gender: gender_list: male: "Male" female: "Female"
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] })
希望这工作良好!