我有一系列国家:
Country.all.sort{ |c1,c2| c1[0] <=> c2[0] }
如何合并Countries Gem的translations
方法?因此,如果传入一个语言环境,我可以找回一系列已翻译的国家/地区吗?
答案 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
在humanized
和Enumeration#to_a
方法上提供I18n查找,因为哈希键是符号。 I18n字符串位于枚举上。&#39; enumeration_name&#39;。&#39; key&#39;:
# your locale file
pt:
enumerations:
relationship_status:
married: Casado