grosser-i18n_data 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grosser-i18n_data
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Grosser
@@ -9,54 +9,9 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-02-02 00:00:00 -08:00
12
+ date: 2009-02-04 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: rexml
17
- version_requirement:
18
- version_requirements: !ruby/object:Gem::Requirement
19
- requirements:
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: "0"
23
- version:
24
- - !ruby/object:Gem::Dependency
25
- name: open-uri
26
- version_requirement:
27
- version_requirements: !ruby/object:Gem::Requirement
28
- requirements:
29
- - - ">="
30
- - !ruby/object:Gem::Version
31
- version: "0"
32
- version:
33
- - !ruby/object:Gem::Dependency
34
- name: echoe
35
- version_requirement:
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: "0"
41
- version:
42
- - !ruby/object:Gem::Dependency
43
- name: spec
44
- version_requirement:
45
- version_requirements: !ruby/object:Gem::Requirement
46
- requirements:
47
- - - ">="
48
- - !ruby/object:Gem::Version
49
- version: "0"
50
- version:
51
- - !ruby/object:Gem::Dependency
52
- name: mocha
53
- version_requirement:
54
- version_requirements: !ruby/object:Gem::Requirement
55
- requirements:
56
- - - ">="
57
- - !ruby/object:Gem::Version
58
- version: "0"
59
- version:
60
15
  - !ruby/object:Gem::Dependency
61
16
  name: activesupport
62
17
  version_requirement:
@@ -66,26 +21,16 @@ dependencies:
66
21
  - !ruby/object:Gem::Version
67
22
  version: "0"
68
23
  version:
69
- description: country/language names and 2-letter-code pairs, in 85 languages, for country/language
24
+ description:
70
25
  email: grosser.michael@gmail.com
71
26
  executables: []
72
27
 
73
28
  extensions: []
74
29
 
75
- extra_rdoc_files:
76
- - lib/i18n_data/file_data_provider.rb
77
- - lib/i18n_data/live_data_provider.rb
78
- - lib/i18n_data.rb
79
- - README.markdown
30
+ extra_rdoc_files: []
31
+
80
32
  files:
81
- - Manifest
82
- - lib/i18n_data/file_data_provider.rb
83
- - lib/i18n_data/live_data_provider.rb
84
- - lib/i18n_data.rb
85
- - spec/i18n_data_spec.rb
86
- - spec/i18n_data/file_data_provider_spec.rb
87
- - spec/i18n_data/live_data_provider_spec.rb
88
- - spec/spec_helper.rb
33
+ - cache/file_data_provider
89
34
  - cache/file_data_provider/languages-TR.txt
90
35
  - cache/file_data_provider/countries-ZU.txt
91
36
  - cache/file_data_provider/countries-FA.txt
@@ -237,19 +182,12 @@ files:
237
182
  - cache/file_data_provider/countries-RW.txt
238
183
  - cache/file_data_provider/languages-ET.txt
239
184
  - cache/file_data_provider/languages-AF.txt
240
- - Rakefile
241
- - README.markdown
242
- - i18n_data.gemspec
243
185
  has_rdoc: true
244
186
  homepage: http://github.com/grosser/i18n_data
245
187
  post_install_message:
246
188
  rdoc_options:
247
- - --line-numbers
248
189
  - --inline-source
249
- - --title
250
- - I18n_data
251
- - --main
252
- - README.markdown
190
+ - --charset=UTF-8
253
191
  require_paths:
254
192
  - lib
255
193
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -262,14 +200,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
262
200
  requirements:
263
201
  - - ">="
264
202
  - !ruby/object:Gem::Version
265
- version: "1.2"
203
+ version: "0"
266
204
  version:
267
205
  requirements: []
268
206
 
269
- rubyforge_project: i18n_data
207
+ rubyforge_project:
270
208
  rubygems_version: 1.2.0
271
209
  signing_key:
272
210
  specification_version: 2
273
- summary: country/language names and 2-letter-code pairs, in 85 languages, for country/language
211
+ summary: country/language names and 2-letter-code pairs, in 85 languages
274
212
  test_files: []
275
213
 
data/README.markdown DELETED
@@ -1,58 +0,0 @@
1
- Problem
2
- =======
3
- - Present users coutries/languages in their language
4
- - Convert a country/language-name to its code
5
-
6
- Solution
7
- ========
8
- - A list of 2-letter-code/name pairs for all countries/languages in all languages
9
- - A tool to convert a coutry/language name into 2-letter-code
10
- - Write countries/language into a cache-file, and use this file for production applications languages/countries list
11
-
12
- Containing
13
- ==========
14
- Translations through [pkg-isocodes](http://svn.debian.org/wsvn/pkg-isocodes/trunk/iso-codes/)
15
- 185 Language codes (iso 639 - 2 letter)
16
- in 66 Languages
17
- 246 Country codes (iso 3166 - 2 letter)
18
- in 85 Languages
19
-
20
- Usage
21
- =====
22
-
23
- sudo gem install grosser-i18n_data
24
- require 'i18n_data'
25
- ...
26
- I18nData.languages # {"DE"=>"German",...}
27
- I18nData.languages('DE') # {"DE"=>"Deutsch",...}
28
- I18nData.languages('FR') # {"DE"=>"Allemand",...}
29
- ...
30
-
31
- I18nData.countries # {"DE"=>"Germany",...}
32
- I18nData.countries('DE') # {"DE"=>"Deutschland",...}
33
- ...
34
-
35
- #Not yet implemented...
36
- I18nData.language_code('German') # DE
37
- I18nData.language_code('Deutsch') # DE
38
- I18nData.language_code('Allemand') # DE
39
- ..
40
-
41
- I18nData.country_code('Germany') # DE
42
- I18nData.country_code('Deutschland') # DE
43
- ..
44
-
45
- Data Providers
46
- ==============
47
- - FileDataProvider: _FAST_ (default) (loading data from cache-files)
48
- - LiveDataProvider: _SLOW_ (fetching up-to-date data from svn repos)
49
-
50
- TODO
51
- ====
52
- - include other language/country code formats (3-letter codes...) ?
53
-
54
- Author
55
- ======
56
- Michael Grosser
57
- grosser.michael@gmail.com
58
- Hereby placed under public domain, do what you want, just do not hold me accountable...
data/Rakefile DELETED
@@ -1,80 +0,0 @@
1
- $LOAD_PATH << File.join(File.dirname(__FILE__),"..","lib")
2
- require 'lib/i18n_data'#TODO should not be necessary but is :/
3
- require 'yaml'
4
-
5
- desc "Run all specs in spec directory"
6
- task :test do |t|
7
- options = "--colour --format progress --loadby --reverse"
8
- files = FileList['spec/**/*_spec.rb']
9
- system("spec #{options} #{files}")
10
- end
11
-
12
- desc "write all languages to output"
13
- task :all_languages do
14
- I18nData.languages.keys.each do |lc|
15
- `rake languages LANGUAGE=#{lc}`
16
- end
17
- end
18
-
19
- desc "write languages to output/languages_{language}"
20
- task :languages do
21
- raise unless language = ENV['LANGUAGE']
22
- `mkdir output -p`
23
- data = I18nData.languages(language.upcase)
24
- File.open("output/languages_#{language.downcase}.yml",'w') {|f|f.puts data.to_yaml}
25
- end
26
-
27
- desc "write all countries to output"
28
- task :all_countries do
29
- I18nData.languages.keys.each do |lc|
30
- `rake countries LANGUAGE=#{lc}`
31
- end
32
- end
33
-
34
- desc "write countries to output/countries_{language}"
35
- task :countries do
36
- raise unless language = ENV['LANGUAGE']
37
- `mkdir output -p`
38
- data = I18nData.countries(language.upcase)
39
- File.open("output/countries_#{language.downcase}.yml",'w') {|f|f.puts data.to_yaml}
40
- end
41
-
42
- desc "write example output, just to show off :D"
43
- task :example_output do
44
- `mkdir example_output -p`
45
-
46
- #all names for germany, france, united kingdom and unites states
47
- ['DE','FR','GB','US'].each do |cc|
48
- names = I18nData.languages.keys.map do |lc|
49
- begin
50
- [I18nData.countries(lc)[cc], I18nData.languages[lc]]
51
- rescue I18nData::NoOnlineTranslationAvaiable
52
- nil
53
- end
54
- end
55
- File.open("example_output/all_names_for_#{cc}.txt",'w') {|f|
56
- f.puts names.reject(&:nil?).map{|x|x*" ---- "} * "\n"
57
- }
58
- end
59
- end
60
-
61
- desc "write cache for I18nData::FileDataProvider"
62
- task :write_cache_for_file_data_provider do
63
- require 'i18n_data/file_data_provider'
64
- require 'i18n_data/live_data_provider'
65
- I18nData::FileDataProvider.write_cache(I18nData::LiveDataProvider)
66
- end
67
-
68
- require 'echoe'
69
-
70
- Echoe.new('i18n_data', '0.2.0') do |p|
71
- p.description = "country/language names and 2-letter-code pairs, in 85 languages, for country/language "
72
- p.url = "http://github.com/grosser/i18n_data"
73
- p.author = "Michael Grosser"
74
- p.email = "grosser.michael@gmail.com"
75
- p.ignore_pattern = ["tmp/*", "script/*", "nbproject/*", "nbproject/*/*", "output/*", "example_output/*"]
76
- p.dependencies = ['rexml','open-uri'] #requires activesupport, but crashes on require when activesupport is already loaded WTF!
77
- p.development_dependencies = ['echoe','spec','mocha','activesupport']
78
- end
79
-
80
- task :update_gemspec => [:manifest, :build_gemspec]
data/i18n_data.gemspec DELETED
@@ -1,49 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- Gem::Specification.new do |s|
4
- s.name = %q{i18n_data}
5
- s.version = "0.2.0"
6
-
7
- s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
- s.authors = ["Michael Grosser"]
9
- s.date = %q{2009-02-02}
10
- s.description = %q{country/language names and 2-letter-code pairs, in 85 languages, for country/language}
11
- s.email = %q{grosser.michael@gmail.com}
12
- s.extra_rdoc_files = ["lib/i18n_data/file_data_provider.rb", "lib/i18n_data/live_data_provider.rb", "lib/i18n_data.rb", "README.markdown"]
13
- s.files = ["Manifest", "lib/i18n_data/file_data_provider.rb", "lib/i18n_data/live_data_provider.rb", "lib/i18n_data.rb", "spec/i18n_data_spec.rb", "spec/i18n_data/file_data_provider_spec.rb", "spec/i18n_data/live_data_provider_spec.rb", "spec/spec_helper.rb", "cache/file_data_provider/languages-TR.txt", "cache/file_data_provider/countries-ZU.txt", "cache/file_data_provider/countries-FA.txt", "cache/file_data_provider/languages-SL.txt", "cache/file_data_provider/countries-MS.txt", "cache/file_data_provider/languages-IS.txt", "cache/file_data_provider/countries-WA.txt", "cache/file_data_provider/languages-ES.txt", "cache/file_data_provider/languages-EO.txt", "cache/file_data_provider/countries-BE.txt", "cache/file_data_provider/countries-EL.txt", "cache/file_data_provider/countries-VE.txt", "cache/file_data_provider/languages-BE.txt", "cache/file_data_provider/languages-VI.txt", "cache/file_data_provider/countries-DE.txt", "cache/file_data_provider/countries-TK.txt", "cache/file_data_provider/languages-EU.txt", "cache/file_data_provider/countries-EU.txt", "cache/file_data_provider/countries-AM.txt", "cache/file_data_provider/countries-PA.txt", "cache/file_data_provider/countries-NN.txt", "cache/file_data_provider/countries-KK.txt", "cache/file_data_provider/countries-SV.txt", "cache/file_data_provider/languages-UK.txt", "cache/file_data_provider/countries-TI.txt", "cache/file_data_provider/countries-HU.txt", "cache/file_data_provider/countries-AR.txt", "cache/file_data_provider/countries-MI.txt", "cache/file_data_provider/countries-HY.txt", "cache/file_data_provider/languages-WA.txt", "cache/file_data_provider/countries-CS.txt", "cache/file_data_provider/countries-NL.txt", "cache/file_data_provider/countries-MT.txt", "cache/file_data_provider/languages-KO.txt", "cache/file_data_provider/languages-NB.txt", "cache/file_data_provider/countries-CY.txt", "cache/file_data_provider/countries-NB.txt", "cache/file_data_provider/countries-MN.txt", "cache/file_data_provider/countries-HR.txt", "cache/file_data_provider/countries-EO.txt", "cache/file_data_provider/countries-PL.txt", "cache/file_data_provider/languages-MT.txt", "cache/file_data_provider/languages-BR.txt", "cache/file_data_provider/countries-VI.txt", "cache/file_data_provider/languages-EN.txt", "cache/file_data_provider/languages-GA.txt", "cache/file_data_provider/countries-TT.txt", "cache/file_data_provider/countries-DA.txt", "cache/file_data_provider/languages-MS.txt", "cache/file_data_provider/countries-HI.txt", "cache/file_data_provider/languages-AZ.txt", "cache/file_data_provider/languages-RW.txt", "cache/file_data_provider/countries-SO.txt", "cache/file_data_provider/languages-GL.txt", "cache/file_data_provider/languages-NN.txt", "cache/file_data_provider/countries-FR.txt", "cache/file_data_provider/countries-ET.txt", "cache/file_data_provider/languages-FR.txt", "cache/file_data_provider/languages-DE.txt", "cache/file_data_provider/languages-BG.txt", "cache/file_data_provider/languages-ZU.txt", "cache/file_data_provider/languages-HR.txt", "cache/file_data_provider/languages-XH.txt", "cache/file_data_provider/languages-HU.txt", "cache/file_data_provider/countries-TR.txt", "cache/file_data_provider/countries-JA.txt", "cache/file_data_provider/languages-PS.txt", "cache/file_data_provider/languages-CY.txt", "cache/file_data_provider/languages-LV.txt", "cache/file_data_provider/countries-LV.txt", "cache/file_data_provider/countries-GL.txt", "cache/file_data_provider/languages-BS.txt", "cache/file_data_provider/languages-OC.txt", "cache/file_data_provider/languages-HI.txt", "cache/file_data_provider/countries-UK.txt", "cache/file_data_provider/countries-OC.txt", "cache/file_data_provider/countries-FO.txt", "cache/file_data_provider/countries-KM.txt", "cache/file_data_provider/languages-MN.txt", "cache/file_data_provider/countries-TL.txt", "cache/file_data_provider/countries-SL.txt", "cache/file_data_provider/countries-XH.txt", "cache/file_data_provider/languages-SV.txt", "cache/file_data_provider/countries-ID.txt", "cache/file_data_provider/languages-LT.txt", "cache/file_data_provider/languages-ID.txt", "cache/file_data_provider/languages-DA.txt", "cache/file_data_provider/languages-RU.txt", "cache/file_data_provider/countries-IT.txt", "cache/file_data_provider/countries-BS.txt", "cache/file_data_provider/countries-AF.txt", "cache/file_data_provider/countries-RO.txt", "cache/file_data_provider/languages-CS.txt", "cache/file_data_provider/countries-DZ.txt", "cache/file_data_provider/languages-MR.txt", "cache/file_data_provider/languages-TI.txt", "cache/file_data_provider/countries-ES.txt", "cache/file_data_provider/countries-ML.txt", "cache/file_data_provider/countries-GA.txt", "cache/file_data_provider/countries-SR.txt", "cache/file_data_provider/countries-GU.txt", "cache/file_data_provider/countries-BR.txt", "cache/file_data_provider/languages-FA.txt", "cache/file_data_provider/countries-WO.txt", "cache/file_data_provider/languages-RO.txt", "cache/file_data_provider/languages-VE.txt", "cache/file_data_provider/countries-KN.txt", "cache/file_data_provider/languages-MI.txt", "cache/file_data_provider/countries-SK.txt", "cache/file_data_provider/countries-SQ.txt", "cache/file_data_provider/languages-PT.txt", "cache/file_data_provider/languages-AM.txt", "cache/file_data_provider/countries-MR.txt", "cache/file_data_provider/countries-LT.txt", "cache/file_data_provider/languages-EL.txt", "cache/file_data_provider/countries-BG.txt", "cache/file_data_provider/countries-SW.txt", "cache/file_data_provider/countries-EN.txt", "cache/file_data_provider/languages-TH.txt", "cache/file_data_provider/countries-BN.txt", "cache/file_data_provider/countries-CA.txt", "cache/file_data_provider/countries-TA.txt", "cache/file_data_provider/languages-TA.txt", "cache/file_data_provider/countries-NE.txt", "cache/file_data_provider/countries-PT.txt", "cache/file_data_provider/countries-IS.txt", "cache/file_data_provider/countries-RU.txt", "cache/file_data_provider/countries-HE.txt", "cache/file_data_provider/languages-TT.txt", "cache/file_data_provider/languages-IT.txt", "cache/file_data_provider/languages-JA.txt", "cache/file_data_provider/languages-PL.txt", "cache/file_data_provider/languages-HE.txt", "cache/file_data_provider/languages-SK.txt", "cache/file_data_provider/countries-PS.txt", "cache/file_data_provider/languages-MK.txt", "cache/file_data_provider/countries-KO.txt", "cache/file_data_provider/countries-FI.txt", "cache/file_data_provider/countries-AZ.txt", "cache/file_data_provider/languages-AR.txt", "cache/file_data_provider/countries-KU.txt", "cache/file_data_provider/countries-KA.txt", "cache/file_data_provider/languages-NL.txt", "cache/file_data_provider/languages-FI.txt", "cache/file_data_provider/countries-MK.txt", "cache/file_data_provider/countries-TH.txt", "cache/file_data_provider/languages-SR.txt", "cache/file_data_provider/languages-CA.txt", "cache/file_data_provider/countries-RW.txt", "cache/file_data_provider/languages-ET.txt", "cache/file_data_provider/languages-AF.txt", "Rakefile", "README.markdown", "i18n_data.gemspec"]
14
- s.has_rdoc = true
15
- s.homepage = %q{http://github.com/grosser/i18n_data}
16
- s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "I18n_data", "--main", "README.markdown"]
17
- s.require_paths = ["lib"]
18
- s.rubyforge_project = %q{i18n_data}
19
- s.rubygems_version = %q{1.3.1}
20
- s.summary = %q{country/language names and 2-letter-code pairs, in 85 languages, for country/language}
21
-
22
- if s.respond_to? :specification_version then
23
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
24
- s.specification_version = 2
25
-
26
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
27
- s.add_runtime_dependency(%q<rexml>, [">= 0"])
28
- s.add_runtime_dependency(%q<open-uri>, [">= 0"])
29
- s.add_development_dependency(%q<echoe>, [">= 0"])
30
- s.add_development_dependency(%q<spec>, [">= 0"])
31
- s.add_development_dependency(%q<mocha>, [">= 0"])
32
- s.add_development_dependency(%q<activesupport>, [">= 0"])
33
- else
34
- s.add_dependency(%q<rexml>, [">= 0"])
35
- s.add_dependency(%q<open-uri>, [">= 0"])
36
- s.add_dependency(%q<echoe>, [">= 0"])
37
- s.add_dependency(%q<spec>, [">= 0"])
38
- s.add_dependency(%q<mocha>, [">= 0"])
39
- s.add_dependency(%q<activesupport>, [">= 0"])
40
- end
41
- else
42
- s.add_dependency(%q<rexml>, [">= 0"])
43
- s.add_dependency(%q<open-uri>, [">= 0"])
44
- s.add_dependency(%q<echoe>, [">= 0"])
45
- s.add_dependency(%q<spec>, [">= 0"])
46
- s.add_dependency(%q<mocha>, [">= 0"])
47
- s.add_dependency(%q<activesupport>, [">= 0"])
48
- end
49
- end
@@ -1,56 +0,0 @@
1
- module I18nData
2
- module FileDataProvider
3
- DATA_SEPERATOR = ";;"
4
- extend self
5
-
6
- def codes(type,language_code)
7
- unless data = read_from_file(type,language_code)
8
- raise NoTranslationAvailable.new("#{type}-#{language_code}")
9
- end
10
- data
11
- end
12
-
13
- def write_cache(provider)
14
- languages = provider.codes(:languages,'EN').keys
15
- languages.each{|language_code|
16
- [:languages,:countries].each {|type|
17
- begin
18
- data = provider.send(:codes,type,language_code)
19
- write_to_file(data,type,language_code)
20
- rescue NoTranslationAvailable
21
- end
22
- }
23
- }
24
- end
25
-
26
- private
27
-
28
- def read_from_file(type,language_code)
29
- file = cache_for(type,language_code)
30
- return nil unless File.exist?(file)
31
- data = {}
32
- IO.read(file).split("\n").each{|line|
33
- code, translation = line.split(DATA_SEPERATOR)
34
- data[code] = translation
35
- }
36
- data
37
- end
38
-
39
- def write_to_file(data,type,language_code)
40
- return if data.empty?
41
- file = cache_for(type,language_code)
42
- FileUtils.mkdir_p(File.dirname(file))
43
- File.open(file,'w') do |f|
44
- f.puts data.map{|code,translation|"#{code}#{DATA_SEPERATOR}#{translation}"} * "\n"
45
- end
46
- end
47
-
48
- def cache_for(type,language_code)
49
- cache("#{type}-#{language_code}")
50
- end
51
-
52
- def cache(file)
53
- File.join(File.dirname(__FILE__),'..','..','cache','file_data_provider',"#{file}.txt")
54
- end
55
- end
56
- end
@@ -1,97 +0,0 @@
1
- require 'open-uri'
2
- require 'rexml/document'
3
- gem 'activesupport', '> 2.2'
4
- require 'activesupport'
5
-
6
- module I18nData
7
- # fetches data online from debian svn
8
- module LiveDataProvider
9
- extend ActiveSupport::Memoizable
10
- extend self
11
-
12
- XML_CODES = {
13
- :countries => 'http://svn.debian.org/viewsvn/*checkout*/pkg-isocodes/trunk/iso-codes/iso_3166/iso_3166.xml',
14
- :languages => 'http://svn.debian.org/viewsvn/*checkout*/pkg-isocodes/trunk/iso-codes/iso_639/iso_639.xml'
15
- }
16
- TRANSLATIONS = {
17
- :languages => 'http://svn.debian.org/viewsvn/*checkout*/pkg-isocodes/trunk/iso-codes/iso_639/',
18
- :countries => 'http://svn.debian.org/viewsvn/*checkout*/pkg-isocodes/trunk/iso-codes/iso_3166/'
19
- }
20
-
21
- def codes(type,language_code)
22
- language_code = language_code.upcase
23
- if language_code == 'EN'
24
- send("english_#{type}")
25
- else
26
- translated(type,language_code)
27
- end
28
- end
29
-
30
- private
31
-
32
- def translate(type,language,to_language_code)
33
- translated = translations(type,to_language_code)[language]
34
- translated.to_s.empty? ? nil : translated
35
- end
36
-
37
- def translated(type,language_code)
38
- translations = {}
39
- send("english_#{type}").each do |code,name|
40
- translation = translate(type,name,language_code)
41
- translations[code] = translation ? translation : name
42
- end
43
- translations
44
- end
45
- memoize :translated
46
-
47
- def translations(type,language_code)
48
- begin
49
- data = open(TRANSLATIONS[type]+"#{language_code.downcase}.po").readlines
50
- rescue
51
- raise NoTranslationAvailable.new("for #{type} and language code = #{language_code}")
52
- end
53
-
54
- po_to_hash(data)
55
- end
56
- memoize :translations
57
-
58
- def english_languages
59
- codes = {}
60
- xml(:languages).elements.each('*/iso_639_entry') do |entry|
61
- name = entry.attributes['name'].to_s.gsub("'","\\'")
62
- code = entry.attributes['iso_639_1_code'].to_s.upcase
63
- next if code.empty? or name.empty?
64
- codes[code]=name
65
- end
66
- codes
67
- end
68
- memoize :english_languages
69
-
70
- def english_countries
71
- codes = {}
72
- xml(:countries).elements.each('*/iso_3166_entry') do |entry|
73
- name = entry.attributes['name'].to_s.gsub("'","\\'")
74
- code = entry.attributes['alpha_2_code'].to_s.upcase
75
- codes[code]=name
76
- end
77
- codes
78
- end
79
- memoize :english_countries
80
-
81
- def po_to_hash(data)
82
- names = data.select{|l| l =~ /^msgid/}.map{|line| line.match(/^msgid "(.*?)"/)[1]}
83
- translations = data.select{|l| l =~ /^msgstr/}.map{|line| line.match(/^msgstr "(.*?)"/)[1]}
84
-
85
- translated = {}
86
- names.each_with_index do |name,index|
87
- translated[name]=translations[index]
88
- end
89
- translated
90
- end
91
-
92
- def xml(type)
93
- xml = open(XML_CODES[type]).read
94
- REXML::Document.new(xml)
95
- end
96
- end
97
- end
data/lib/i18n_data.rb DELETED
@@ -1,31 +0,0 @@
1
- require 'activesupport'
2
- module I18nData
3
- extend self
4
-
5
- def languages(language_code='EN')
6
- data_provider.codes(:languages,language_code)
7
- end
8
-
9
- def countries(language_code='EN')
10
- data_provider.codes(:countries,language_code)
11
- end
12
-
13
- def data_provider
14
- if @data_provider
15
- @data_provider
16
- else
17
- require 'i18n_data/file_data_provider'
18
- FileDataProvider
19
- end
20
- end
21
-
22
- def data_provider=(provider)
23
- @data_provider = provider
24
- end
25
-
26
- class NoTranslationAvailable < Exception
27
- def to_s
28
- "NoTranslationAvailable -- #{super}"
29
- end
30
- end
31
- end
@@ -1,23 +0,0 @@
1
- require File.join(File.dirname(__FILE__),'..',"spec_helper")
2
- require 'i18n_data/file_data_provider'
3
-
4
- describe I18nData::FileDataProvider do
5
- before do
6
- `rm -f #{I18nData::FileDataProvider.send(:cache_for,"XX","YY")}`
7
- end
8
-
9
- def read(x,y)
10
- I18nData::FileDataProvider.codes(x,y)
11
- end
12
-
13
- it "preserves data when writing and then reading" do
14
- data = {"x"=>"y","z"=>"w"}
15
- I18nData::FileDataProvider.send(:write_to_file,data,"XX","YY")
16
- read("XX","YY").should == data
17
- end
18
-
19
- it "does not write empty data sets" do
20
- I18nData::FileDataProvider.send(:write_to_file,{},"XX","YY")
21
- lambda{read("XX","YY")}.should raise_error I18nData::NoTranslationAvailable
22
- end
23
- end
@@ -1,40 +0,0 @@
1
- require File.join(File.dirname(__FILE__),'..',"spec_helper")
2
- require 'i18n_data/live_data_provider'
3
-
4
- describe I18nData::LiveDataProvider do
5
- describe :po_to_hash do
6
- def po_to_hash(text)
7
- I18nData::LiveDataProvider.send(:po_to_hash,text)
8
- end
9
- it "parses po file into translations" do
10
- text = <<EOF
11
- # come comment msgstr
12
- msgid "one"
13
- msgstr "1"
14
- EOF
15
- po_to_hash(text).should == {"one"=>"1"}
16
- end
17
- it "keeps order of translations" do
18
- text = <<EOF
19
- msgid "one"
20
- msgstr "1"
21
- msgid "two"
22
- msgstr ""
23
- msgid "three"
24
- msgstr "3"
25
- EOF
26
- po_to_hash(text).should == {"one"=>"1","two"=>"","three"=>"3"}
27
- end
28
- pending_it "finds x-line long translations" do
29
- text = <<EOF
30
- #. name for chu, cu
31
- msgid ""
32
- "Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church "
33
- "Slavonic"
34
- msgstr "Kirchenslavisch"
35
- EOF
36
- long_name = "Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic"
37
- po_to_hash(text)[long_name].should == "Kirchenslavisch"
38
- end
39
- end
40
- end
@@ -1,79 +0,0 @@
1
- require File.expand_path("spec_helper", File.dirname(__FILE__))
2
-
3
- NUM_2_LETTER_LANGUAGES = 185
4
- NUM_COUNTRIES = 246
5
-
6
- describe I18nData do
7
- require "i18n_data/live_data_provider"
8
- require "i18n_data/file_data_provider"
9
- [I18nData::LiveDataProvider,I18nData::FileDataProvider].each do |provider|
10
- describe "using #{provider}" do
11
- before :all do
12
- I18nData.data_provider = provider
13
- end
14
- describe :languages do
15
- it "raises NoTranslationAvailable for unavailable languages" do
16
- lambda{I18nData.languages('XX')}.should raise_error(I18nData::NoTranslationAvailable)
17
- end
18
- describe :english do
19
- it "does not contain blanks" do
20
- I18nData.languages.detect {|k,v| k.blank? or v.blank?}.should == nil
21
- end
22
- it "has english as default" do
23
- I18nData.languages['DE'].should == 'German'
24
- end
25
- it "contains all languages" do
26
- I18nData.languages.size.should == NUM_2_LETTER_LANGUAGES
27
- end
28
- end
29
- describe :translated do
30
- it "is translated" do
31
- I18nData.languages('DE')['DE'].should == 'Deutsch'
32
- end
33
- it "contains all languages" do
34
- I18nData.languages('DE').size.should == NUM_2_LETTER_LANGUAGES
35
- end
36
- it "has english names for not-translateable languages" do
37
- I18nData.languages('IS')['HA'].should == I18nData.languages['HA']
38
- end
39
- it "does not contain blanks" do
40
- I18nData.languages('GL').detect {|k,v| k.blank? or v.blank?}.should == nil
41
- end
42
- it "is written in unicode" do
43
- I18nData.languages('DE')['DA'].should == 'Dänisch'
44
- end
45
- end
46
- end
47
- describe :countries do
48
- describe :english do
49
- it "has english as default" do
50
- I18nData.countries['DE'].should == 'Germany'
51
- end
52
- it "does not contain blanks" do
53
- I18nData.countries.detect {|k,v| k.blank? or v.blank?}.should == nil
54
- end
55
- it "contains all countries" do
56
- I18nData.countries.size.should == NUM_COUNTRIES
57
- end
58
- end
59
- describe :translated do
60
- it "is translated" do
61
- I18nData.countries('DE')['DE'].should == 'Deutschland'
62
- end
63
- it "contains all countries" do
64
- I18nData.countries('DE').size.should == NUM_COUNTRIES
65
- end
66
- it "has english names for not-translateable countries" do
67
- I18nData.countries('IS')['PK'].should == I18nData.countries['PK']
68
- end
69
- it "does not contain blanks" do
70
- I18nData.countries('GL').detect {|k,v| k.blank? or v.blank?}.should == nil
71
- end
72
- it "is written in unicode" do
73
- I18nData.countries('DE')['DK'].should == 'Dänemark'
74
- end
75
- end
76
- end
77
- end
78
- end
79
- end
data/spec/spec_helper.rb DELETED
@@ -1,32 +0,0 @@
1
- # ---- requirements
2
- require 'rubygems'
3
- require 'activesupport'
4
- require 'spec'
5
- require 'mocha'
6
-
7
- $LOAD_PATH << File.expand_path("../lib", File.dirname(__FILE__))
8
- require 'i18n_data'
9
-
10
- # ---- bugfix
11
- #`exit?': undefined method `run?' for Test::Unit:Module (NoMethodError)
12
- #can be solved with require test/unit but this will result in extra test-output
13
- module Test
14
- module Unit
15
- def self.run?
16
- true
17
- end
18
- end
19
- end
20
-
21
-
22
- # ---- rspec
23
- Spec::Runner.configure do |config|
24
- config.mock_with :mocha
25
- end
26
-
27
- # ---- Helpers
28
- def pending_it(text,&block)
29
- it text do
30
- pending(&block)
31
- end
32
- end