问题描述
使用国家宝石 https://github.com/hexorx/countries
我们有方法:
ISO3166::Country.find_all_countries_by_continent('Europe')
我们还有:
ISO3166::Country.countries
但我们没有:
ISO3166::Country.continents
我想要一个可以使用 I18n 进行翻译的“按大陆过滤”select
。
解决方法
据我所知(我可能是错的),我认为 hexorx/countries 本身不会给你这种可能性。
附: 如果它可以使事情发生,我已经为此创建了一个 feature request。
,您可以使用
获得所有大陆ISO3166::Data.cache.map {|_,v| v['continent']}.uniq
#=> ["Asia","North America","Africa","Europe","South America","Antarctica","Australia"]
由于此列表在可预见的未来极不可能发生变化,因此您可以自行缓存这些结果
ISO3166::CONTINENTS = ISO3166::Data.cache.map {|_,v| v['continent']}.uniq.sort
然后您可以在任何需要的地方重复使用常量 ISO3166::CONTINENTS
。
话虽如此,i18n_data
gem(用于翻译国家/地区)似乎并未提供大洲名称的翻译,因此您可能需要自行维护。
Set
也可能稍微提高效率:(虽然因为获取大陆只是简单的 Array
遍历和 Hash
查找,所以它已经相当快了)
ISO3166::CONTINENTS = ISO3166::Data.cache.each_with_object(Set.new) do |(_,v),s|
s.add(v['continent'])
end.sort