首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据i18n转换对列表进行排序

根据i18n转换对列表进行排序
EN

Stack Overflow用户
提问于 2010-11-09 04:34:28
回答 2查看 1.4K关注 0票数 3

给定我的数据库中的项目列表以及它们在i18n文件中各自的翻译。

i18n文件:

代码语言:javascript
复制
  basic_categories:  
    item_1: Z
    item_2: A
    item_3: F

在视图上:

代码语言:javascript
复制
      <% @basic_categories.each do |category| %>
        <%= t("basic_categories.#{category.name}") %>
      <% end %>

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-09 07:17:21

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

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

在控制器中,使用ruby构建一个字符串或散列数组:

代码语言:javascript
复制
@basic_categories = categories.collect { |category|
  { :name => I18n.t("basic_categories.#{category.name}"), ... }
}.sort_by { |category| category[:name] }

并使用拼音对其进行排序,请参见http://ruby-doc.org/core/classes/Enumerable.html

在你看来很简单:

代码语言:javascript
复制
<% @basic_categories.each do |category| %>
  <%= category[:name] %>
  ...
<% end %>
票数 1
EN

Stack Overflow用户

发布于 2018-08-28 17:53:24

您也可以将带有翻译的json传递给PG查询,然后根据json的翻译值进行排序:

代码语言:javascript
复制
categories_i18n = I18n.backend.instance_variable_get(:@translations).dig(:en, :basic_categories).to_json
@basic_categories = categories.order("'#{categories_i18n}::json'->>name")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4127812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档