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 +10 -72
- data/README.markdown +0 -58
- data/Rakefile +0 -80
- data/i18n_data.gemspec +0 -49
- data/lib/i18n_data/file_data_provider.rb +0 -56
- data/lib/i18n_data/live_data_provider.rb +0 -97
- data/lib/i18n_data.rb +0 -31
- data/spec/i18n_data/file_data_provider_spec.rb +0 -23
- data/spec/i18n_data/live_data_provider_spec.rb +0 -40
- data/spec/i18n_data_spec.rb +0 -79
- data/spec/spec_helper.rb +0 -32
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.
|
|
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-
|
|
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:
|
|
24
|
+
description:
|
|
70
25
|
email: grosser.michael@gmail.com
|
|
71
26
|
executables: []
|
|
72
27
|
|
|
73
28
|
extensions: []
|
|
74
29
|
|
|
75
|
-
extra_rdoc_files:
|
|
76
|
-
|
|
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
|
-
-
|
|
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
|
-
- --
|
|
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: "
|
|
203
|
+
version: "0"
|
|
266
204
|
version:
|
|
267
205
|
requirements: []
|
|
268
206
|
|
|
269
|
-
rubyforge_project:
|
|
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
|
|
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
|
data/spec/i18n_data_spec.rb
DELETED
|
@@ -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
|