module I18nData
Constants
- VERSION
Public Class Methods
countries(language_code='EN')
click to toggle source
# File lib/i18n_data.rb, line 22 def countries(language_code='EN') fetch :countries, language_code do data_provider.codes(:countries, normal_to_region_code(language_code.to_s.upcase)) end end
country_code(name)
click to toggle source
# File lib/i18n_data.rb, line 28 def country_code(name) recognise_code(:countries, name) end
data_provider()
click to toggle source
# File lib/i18n_data.rb, line 36 def data_provider @data_provider ||= ( require 'i18n_data/file_data_provider' FileDataProvider ) end
data_provider=(provider)
click to toggle source
# File lib/i18n_data.rb, line 43 def data_provider=(provider) @cache = nil @data_provider = provider end
language_code(name)
click to toggle source
# File lib/i18n_data.rb, line 32 def language_code(name) recognise_code(:languages, name) end
languages(language_code='EN')
click to toggle source
# File lib/i18n_data.rb, line 16 def languages(language_code='EN') fetch :languages, language_code do data_provider.codes(:languages, normal_to_region_code(language_code.to_s.upcase)) end end
Private Class Methods
available_language_codes()
click to toggle source
NOTE: this is not perfect since the used provider might have more or less languages available but it's better than just using the available english language codes
# File lib/i18n_data.rb, line 90 def available_language_codes @available_languges ||= begin files = Dir[File.expand_path("../../cache/file_data_provider/languages-*", __FILE__)] files.map! { |f| f[/languages-(.*)\./, 1] } end end
fetch(type, language_code) { || ... }
click to toggle source
# File lib/i18n_data.rb, line 50 def fetch(type, language_code) @cache ||= Hash.new { |h, k| h[k] = {} } @cache[type].fetch(language_code) { @cache[type][language_code] = yield } end
normal_to_region_code(normal)
click to toggle source
hardcode languages that do not have a default type e.g. zh does not exist, but zh_CN does
# File lib/i18n_data.rb, line 57 def normal_to_region_code(normal) { "ZH" => "zh_CN", "BN" => "bn_IN", }[normal] || normal end
recognise_code(type, search)
click to toggle source
# File lib/i18n_data.rb, line 64 def recognise_code(type, search) search = search.strip # common languages first <-> faster in majority of cases language_codes = ['EN','ES','FR','DE','ZH'] | available_language_codes language_codes.each do |language_code| options = begin send(type, language_code) rescue NoTranslationAvailable next end options.each do |code, name| # support "Dutch" and "Dutch; Flemish", checks for inclusion first to skip the splitting # then check for exact match return code if name.include?(search) && (name == search || name.split('; ').include?(search)) end end nil # not found end