根据他们的i18n翻译排序列表

时间:2010-11-08 20:34:28

标签: ruby-on-rails sorting internationalization

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

i18n档案:

  basic_categories:  
    item_1: Z
    item_2: A
    item_3: F
视图上的

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

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

2 个答案:

答案 0 :(得分:0)

出于性能原因,如果列表太长,您可能希望在数据库中进行翻译。 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 %>

答案 1 :(得分:0)

您还可以将带有翻译的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")