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 +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
|