翻译来自Countries Gem in Rails的国家/地区

时间:2014-03-12 23:31:04

标签: ruby-on-rails

我有一系列国家:

Country.all.sort{ |c1,c2| c1[0] <=> c2[0] }

如何合并Countries Gemtranslations方法?因此,如果传入一个语言环境,我可以找回一系列已翻译的国家/地区吗?

3 个答案:

答案 0 :(得分:2)

我决定分叉存储库并添加一个方法来返回已翻译的名称列表。

我的前叉:https://github.com/LostTie/countries

我的拉取请求:https://github.com/hexorx/countries/pull/130

添加了返回已翻译国家/地区名称列表的方法#all_translated(locale)

  • 返回的列表只是一个国家/地区名称字符串数组
  • 返回的列表按翻译语言
  • 按字母顺序排列
  • 缺少语言环境的国家/地区将从列表中删除

示例:Country.translate_all('fr')将按字母顺序为您提供所有可提供法语本地化的国家/地区的数组。

原始答案:

translated_countries = []
Country.all.each do |c|
    translated_coutries << c.translations['fr'] # 'fr' for French
end

translated_countries.all.sort{ |c1,c2| c1[0] <=> c2[0] }

如果按照您的预期执行,您可以使用proc或其他一些可能符合您需求的方式将do块粉碎成更优雅的方法。

答案 1 :(得分:1)

locale = 'fr'
translate = ->(country) { Country.new(country[1]).translations[locale] }
Country.all.sort { |c1, c2| c1[0] <=> c2[0] }.map(&translate)

请注意,Country.all会返回一个国家/地区名称和字母数组,因此我们必须从每个alpha创建一个新的Country实例。

答案 2 :(得分:1)

我使用gem进行枚举,例如:https://github.com/cassiomarques/enumerate_it,它提供I18n支持。

枚举创建为类:

class RelationshipStatus < EnumerateIt::Base
  associate_values(
    :single,
    :married,
    :widow,
    :divorced
  )
end

humanizedEnumeration#to_a方法上提供I18n查找,因为哈希键是符号。 I18n字符串位于枚举上。&#39; enumeration_name&#39;。&#39; key&#39;:

# your locale file
pt:
  enumerations:
    relationship_status:
      married: Casado