module I18nData::LiveDataProvider

fetches data online from debian svn

Constants

ROOT
TRANSLATIONS
XML_CODES

Public Instance Methods

codes(type, language_code) click to toggle source
# File lib/i18n_data/live_data_provider.rb, line 20
def codes(type, language_code)
  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 78
def english_countries
  @english_countries ||= begin
    codes = {}
    xml(:countries).elements.each('*/iso_3166_entry') do |entry|
      name = entry.attributes['name'].to_s.gsub("'", "\\'")
      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 65
def english_languages
  @english_languages ||= begin
    codes = {}
    xml(:languages).elements.each('*/iso_639_entry') do |entry|
      name = entry.attributes['name'].to_s.gsub("'", "\\'")
      code = entry.attributes['iso_639_1_code'].to_s.upcase
      next if code.empty? or name.empty?
      codes[code] = name
    end
    codes
  end
end
po_to_hash(data) click to toggle source
# File lib/i18n_data/live_data_provider.rb, line 90
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 31
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 36
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 45
def translations(type, language_code)
  @translations ||= {}
  @translations["#{type}_#{language_code}"] ||= begin
    code = language_code.split("_")
    code[0].downcase!
    code = code.join("_")

    begin
      url = TRANSLATIONS[type]+"#{code}.po"
      data = open(url).read
    rescue
      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 99
def xml(type)
  xml = open(XML_CODES[type]).read
  REXML::Document.new(xml)
end