【问题标题】:Sort list based on their i18n translation根据 i18n 翻译排序列表
【发布时间】:2018-08-28 17:53:23
【问题描述】:

鉴于我的数据库中有一个项目列表,以及它们在 i18n 文件中的相应翻译。

i18n 文件:

  basic_categories:  
    item_1: Z
    item_2: A
    item_3: F

在视图上:

      <% @basic_categories.each do |category| %>
        <%= t("basic_categories.#{category.name}") %>
      <% end %>

如何对每种语言的列表进行排序?

【问题讨论】:

    标签: ruby-on-rails sorting internationalization


    【解决方案1】:

    如果您的列表太长,出于性能原因,您可能希望将翻译保存在数据库中。 MySQL 排序比 ruby​​ 快。

    否则我认为你可以这样做:

    在您的控制器中,使用 ruby​​ 构建字符串或哈希数组:

    @basic_categories = categories.collect { |category|
      { :name => I18n.t("basic_categories.#{category.name}"), ... }
    }.sort_by { |category| category[:name] }
    

    然后用 ruby​​ 排序,见http://ruby-doc.org/core/classes/Enumerable.html

    在你看来简单:

    <% @basic_categories.each do |category| %>
      <%= category[:name] %>
      ...
    <% end %>
    

    【讨论】:

      【解决方案2】:

      您还可以将带有翻译的 json 传递给 PG 查询,然后按 json 中的翻译值排序:

      categories_i18n = I18n.backend.instance_variable_get(:@translations).dig(:en, :basic_categories).to_json
      @basic_categories = categories.order("'#{categories_i18n}::json'->>name")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-01
        • 2012-11-12
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        • 2021-04-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多