module I18nData::FileDataProvider

Constants

DATA_SEPARATOR

Public Instance Methods

codes(type, language_code) click to toggle source
# File lib/i18n_data/file_data_provider.rb, line 6
def codes(type, language_code)
  unless data = read_from_file(cache_file_for(type, language_code))
    raise NoTranslationAvailable, "#{type}-#{language_code}"
  end
  data
end
write_cache(provider) click to toggle source
# File lib/i18n_data/file_data_provider.rb, line 13
def write_cache(provider)
  languages = provider.codes(:languages, 'EN').keys + ['zh_CN', 'zh_TW', 'zh_HK','bn_IN','pt_BR']
  languages.each do |language_code|
    [:languages, :countries].each do |type|
      begin
        data = provider.send(:codes, type, language_code)
        write_to_file(data, cache_file_for(type, language_code))
      rescue NoTranslationAvailable
      end
    end
  end
end

Private Instance Methods

cache_file_for(type,language_code) click to toggle source
# File lib/i18n_data/file_data_provider.rb, line 46
def cache_file_for(type,language_code)
  file = "#{type}-#{language_code.upcase}"
  File.join(File.dirname(__FILE__), '..', '..', 'cache', 'file_data_provider', "#{file}.txt")
end
read_from_file(file) click to toggle source
# File lib/i18n_data/file_data_provider.rb, line 28
def read_from_file(file)
  return nil unless File.exist?(file)
  data = {}
  File.readlines(file).each do |line|
    code, translation = line.strip.split(DATA_SEPARATOR, 2)
    data[code] = translation
  end
  data
end
write_to_file(data, file) click to toggle source
# File lib/i18n_data/file_data_provider.rb, line 38
def write_to_file(data, file)
  return if data.empty?
  FileUtils.mkdir_p File.dirname(file)
  File.open(file,'w') do |f|
    f.write data.map{|code, translation| "#{code}#{DATA_SEPARATOR}#{translation}" } * "\n"
  end
end