]> git.openstreetmap.org Git - rails.git/blobdiff - vendor/plugins/i18n_data/lib/i18n_data/file_data_provider.rb
Added localized language names with plugin from http://github.com/grosser/i18n_data...
[rails.git] / vendor / plugins / i18n_data / lib / i18n_data / file_data_provider.rb
diff --git a/vendor/plugins/i18n_data/lib/i18n_data/file_data_provider.rb b/vendor/plugins/i18n_data/lib/i18n_data/file_data_provider.rb
new file mode 100644 (file)
index 0000000..7aec752
--- /dev/null
@@ -0,0 +1,56 @@
+module I18nData
+  module FileDataProvider
+    DATA_SEPERATOR = ";;"
+    extend self
+
+    def codes(type,language_code)
+      unless data = read_from_file(type,language_code)
+        raise NoTranslationAvailable.new("#{type}-#{language_code}")
+      end
+      data
+    end
+
+    def write_cache(provider)
+      languages = provider.codes(:languages,'EN').keys
+      languages.each{|language_code|
+        [:languages,:countries].each {|type|
+          begin
+            data = provider.send(:codes,type,language_code)
+            write_to_file(data,type,language_code)
+          rescue NoTranslationAvailable
+          end
+        }
+      }
+    end
+
+  private
+
+    def read_from_file(type,language_code)
+      file = cache_for(type,language_code)
+      return nil unless File.exist?(file)
+      data = {}
+      IO.read(file).split("\n").each{|line|
+        code, translation = line.split(DATA_SEPERATOR)
+        data[code] = translation
+      }
+      data
+    end
+
+    def write_to_file(data,type,language_code)
+      return if data.empty?
+      file = cache_for(type,language_code)
+      FileUtils.mkdir_p(File.dirname(file))
+      File.open(file,'w') do |f|
+        f.puts data.map{|code,translation|"#{code}#{DATA_SEPERATOR}#{translation}"} * "\n"
+      end
+    end
+
+    def cache_for(type,language_code)
+      cache("#{type}-#{language_code}")
+    end
+
+    def cache(file)
+      File.join(File.dirname(__FILE__),'..','..','cache','file_data_provider',"#{file}.txt")
+    end
+  end
+end
\ No newline at end of file