grosser-i18n_data 0.2.0 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
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