module I18nData::LiveDataProvider
fetches data online from debian git
Constants
- CLONE_DEST
- REPO
- TRANSLATIONS
- XML_CODES
Public Instance Methods
clear_cache()
click to toggle source
# File lib/i18n_data/live_data_provider.rb, line 31 def clear_cache `rm -rf #{CLONE_DEST}` raise unless $?.success? end
codes(type, language_code)
click to toggle source
# File lib/i18n_data/live_data_provider.rb, line 20 def codes(type, language_code) ensure_checkout language_code = language_code.upcase if language_code == 'EN' send("english_#{type}") else translated(type, language_code) end end
Private Instance Methods
english_countries()
click to toggle source
# File lib/i18n_data/live_data_provider.rb, line 92 def english_countries @english_countries ||= begin codes = {} xml(:countries).elements.each('*/iso_3166_entry') do |entry| name = entry.attributes['name'].to_s name = "Taiwan" if name == "Taiwan, Province of China" code = entry.attributes['alpha_2_code'].to_s.upcase codes[code] = name end codes end end
english_languages()
click to toggle source
# File lib/i18n_data/live_data_provider.rb, line 79 def english_languages @english_languages ||= begin codes = {} xml(:languages).elements.each('*/iso_639_entry') do |entry| name = entry.attributes['name'].to_s code = entry.attributes['iso_639_1_code'].to_s.upcase next if code.empty? or name.empty? codes[code] = name end codes end end
ensure_checkout()
click to toggle source
# File lib/i18n_data/live_data_provider.rb, line 38 def ensure_checkout unless File.exist?(CLONE_DEST) `git clone #{REPO} #{CLONE_DEST}` raise unless $?.success? end end
get(url)
click to toggle source
# File lib/i18n_data/live_data_provider.rb, line 114 def get(url) File.read("#{CLONE_DEST}/#{url}") end
po_to_hash(data)
click to toggle source
# File lib/i18n_data/live_data_provider.rb, line 105 def po_to_hash(data) names = data.select{|l| l =~ /^msgid/ }.map{|line| line.match(/^msgid "(.*?)"/)[1] } translations = data.select{|l| l =~ /^msgstr/ }.map{|line| line.match(/^msgstr "(.*?)"/)[1] } Hash[names.each_with_index.map do |name,index| [name, translations[index]] end] end
translate(type, language, to_language_code)
click to toggle source
# File lib/i18n_data/live_data_provider.rb, line 45 def translate(type, language, to_language_code) translated = translations(type, to_language_code)[language] translated.to_s.empty? ? nil : translated end
translated(type, language_code)
click to toggle source
# File lib/i18n_data/live_data_provider.rb, line 50 def translated(type, language_code) @translated ||= {} @translated["#{type}_#{language_code}"] ||= begin Hash[send("english_#{type}").map do |code, name| [code, translate(type, name, language_code) || name] end] end end
translations(type, language_code)
click to toggle source
# File lib/i18n_data/live_data_provider.rb, line 59 def translations(type, language_code) @translations ||= {} @translations["#{type}_#{language_code}"] ||= begin code = language_code.split("_") code[0].downcase! code = code.join("_") url = TRANSLATIONS[type]+"#{code}.po" begin data = get(url) rescue Errno::ENOENT raise NoTranslationAvailable, "for #{type} and language code = #{code} (#{$!})" end data = data.force_encoding('utf-8') if data.respond_to?(:force_encoding) # 1.9 data = data.split("\n") po_to_hash data end end
xml(type)
click to toggle source
# File lib/i18n_data/live_data_provider.rb, line 118 def xml(type) REXML::Document.new(get(XML_CODES[type])) end