gpt4 book ai didi

ruby-on-rails - Rails i18n - 如何翻译模型的枚举

转载 作者:行者123 更新时间:2023-12-01 23:09:43 25 4
gpt4 key购买 nike

我有以下模型:

class Person < ActiveRecord::Base
enum gender: [:female, :male]
...
end

然后我将性别的选择添加到它的表单中,如下所示:
<%= form_for ([@person]) do |f| %>
...
<div class="form-group">
<%= f.collection_radio_buttons :gender, Person.genders, :first, :first %>
</div>
...
<% end %>

但是我不想将常量显示为字符串,而是想将其翻译成葡萄牙语。

我已经尝试将其添加到 people 下的 pt.yml 文件中,但没有成功。
pt:
activerecord:
attributes:
female: Feminino
male: Mascúlino

我知道这个问题与 How to use i18n with Rails 4 enums 非常相似但是这个问题已经被标记为已回答,我正在寻找一个更好更简单的解决方案......

感谢您抽出宝贵时间帮助我:)

最佳答案

阅读后How to use i18n with Rails 4 enums更仔细地回答我来到这个解决方案:

  • 根据 rails guides - “如果您需要访问给定模型中的嵌套属性,您应该将它们嵌套在翻译文件模型级别的模型/属性下”-
  • yml文件应如下所示:
    pt:
    activerecord:
    attributes:
    person/gender:
    female: Feminino
    male: Mascúlino
  • 我们需要创建一个方法来返回翻译后的 enum因为没有任何方法能够翻译整个 enum立刻。 Rails 只有一种方法可以翻译给定键的值,即 People.human_attribute_name("gender.female")。

  • 好的,我们将创建一个新方法,但我们应该把它放在哪里?

    我想 Helpers是放置它的最佳位置,因为我正在更改枚举值以便轻松地将它们附加到 form collection ,尽管大多数答案都建议将其放在 Models 中.

    现在我的 person_helper.rb看起来像这样:
    def human_attribute_genders
    Hash[Person.genders.map { |k,v| [k, Person.human_attribute_name("gender.#{k}")] }]
    end

    还有我的 view :
    <%= f.collection_radio_buttons :gender, human_attribute_genders, :first, :second %>

    非常简单,效果很好!

    如果有人对改进我的解决方案有任何建议,我很高兴收到您的来信:)

    例如,我可以将方法提取到 application_helper.rb像这样:
    def human_attribute_enum(model_name, enum_attr, attr_name)
    Hash[enum_attr.map { |k,v| [k, I18n.t("activerecord.attributes.#{model_name}/#{attr_name}.#{k}")] }]
    end

    但是它需要在 view 中传递很多参数...

    关于ruby-on-rails - Rails i18n - 如何翻译模型的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43116134/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com