i18n_data 0.3.3 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -0
- data/Gemfile.lock +12 -10
- data/Rakefile +1 -17
- data/Readme.md +1 -1
- data/gem-public_cert.pem +20 -0
- data/i18n_data.gemspec +3 -1
- data/lib/i18n_data/version.rb +1 -1
- data/lib/i18n_data.rb +66 -52
- data/spec/i18n_data_spec.rb +18 -6
- data.tar.gz.sig +2 -0
- metadata +34 -6
- metadata.gz.sig +0 -0
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,26 +1,28 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
i18n_data (0.
|
4
|
+
i18n_data (0.4.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: http://rubygems.org/
|
8
8
|
specs:
|
9
|
+
bump (0.3.9)
|
9
10
|
diff-lcs (1.1.3)
|
10
|
-
rake (0.
|
11
|
-
rspec (2.
|
12
|
-
rspec-core (~> 2.
|
13
|
-
rspec-expectations (~> 2.
|
14
|
-
rspec-mocks (~> 2.
|
15
|
-
rspec-core (2.
|
16
|
-
rspec-expectations (2.
|
17
|
-
diff-lcs (~> 1.1.
|
18
|
-
rspec-mocks (2.
|
11
|
+
rake (10.0.3)
|
12
|
+
rspec (2.12.0)
|
13
|
+
rspec-core (~> 2.12.0)
|
14
|
+
rspec-expectations (~> 2.12.0)
|
15
|
+
rspec-mocks (~> 2.12.0)
|
16
|
+
rspec-core (2.12.2)
|
17
|
+
rspec-expectations (2.12.1)
|
18
|
+
diff-lcs (~> 1.1.3)
|
19
|
+
rspec-mocks (2.12.2)
|
19
20
|
|
20
21
|
PLATFORMS
|
21
22
|
ruby
|
22
23
|
|
23
24
|
DEPENDENCIES
|
25
|
+
bump
|
24
26
|
i18n_data!
|
25
27
|
rake
|
26
28
|
rspec (~> 2)
|
data/Rakefile
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'bundler/gem_tasks'
|
2
|
+
require 'bump/tasks'
|
2
3
|
$LOAD_PATH << "lib"
|
3
4
|
require 'i18n_data'
|
4
5
|
|
@@ -74,20 +75,3 @@ task :write_cache_for_file_data_provider do
|
|
74
75
|
puts "writing new caches, this can take a few minutes..."
|
75
76
|
I18nData::FileDataProvider.write_cache(I18nData::LiveDataProvider)
|
76
77
|
end
|
77
|
-
|
78
|
-
# extracted from https://github.com/grosser/project_template
|
79
|
-
rule /^version:bump:.*/ do |t|
|
80
|
-
sh "git status | grep 'nothing to commit'" # ensure we are not dirty
|
81
|
-
index = ['major', 'minor','patch'].index(t.name.split(':').last)
|
82
|
-
file = 'lib/i18n_data/version.rb'
|
83
|
-
|
84
|
-
version_file = File.read(file)
|
85
|
-
old_version, *version_parts = version_file.match(/(\d+)\.(\d+)\.(\d+)/).to_a
|
86
|
-
version_parts[index] = version_parts[index].to_i + 1
|
87
|
-
version_parts[2] = 0 if index < 2 # remove patch for minor
|
88
|
-
version_parts[1] = 0 if index < 1 # remove minor for major
|
89
|
-
new_version = version_parts * '.'
|
90
|
-
File.open(file,'w'){|f| f.write(version_file.sub(old_version, new_version)) }
|
91
|
-
|
92
|
-
sh "bundle && git add #{file} Gemfile.lock && git commit -m 'bump version to #{new_version}'"
|
93
|
-
end
|
data/Readme.md
CHANGED
@@ -57,5 +57,5 @@ Author
|
|
57
57
|
[Michael Grosser](http://grosser.it)<br/>
|
58
58
|
michael@grosser.it<br/>
|
59
59
|
License: MIT<br/>
|
60
|
-
[![Build Status](https://
|
60
|
+
[![Build Status](https://travis-ci.org/grosser/i18n_data.png)](https://travis-ci.org/grosser/i18n_data)
|
61
61
|
|
data/gem-public_cert.pem
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDMjCCAhqgAwIBAgIBADANBgkqhkiG9w0BAQUFADA/MRAwDgYDVQQDDAdtaWNo
|
3
|
+
YWVsMRcwFQYKCZImiZPyLGQBGRYHZ3Jvc3NlcjESMBAGCgmSJomT8ixkARkWAml0
|
4
|
+
MB4XDTEzMDIwMzE4MTMxMVoXDTE0MDIwMzE4MTMxMVowPzEQMA4GA1UEAwwHbWlj
|
5
|
+
aGFlbDEXMBUGCgmSJomT8ixkARkWB2dyb3NzZXIxEjAQBgoJkiaJk/IsZAEZFgJp
|
6
|
+
dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMorXo/hgbUq97+kII9H
|
7
|
+
MsQcLdC/7wQ1ZP2OshVHPkeP0qH8MBHGg6eYisOX2ubNagF9YTCZWnhrdKrwpLOO
|
8
|
+
cPLaZbjUjljJ3cQR3B8Yn1veV5IhG86QseTBjymzJWsLpqJ1UZGpfB9tXcsFtuxO
|
9
|
+
6vHvcIHdzvc/OUkICttLbH+1qb6rsHUceqh+JrH4GrsJ5H4hAfIdyS2XMK7YRKbh
|
10
|
+
h+IBu6dFWJJByzFsYmV1PDXln3UBmgAt65cmCu4qPfThioCGDzbSJrGDGLmw/pFX
|
11
|
+
FPpVCm1zgYSb1v6Qnf3cgXa2f2wYGm17+zAVyIDpwryFru9yF/jJxE38z/DRsd9R
|
12
|
+
/88CAwEAAaM5MDcwCQYDVR0TBAIwADAdBgNVHQ4EFgQUsiNnXHtKeMYYcr4yJVmQ
|
13
|
+
WONL+IwwCwYDVR0PBAQDAgSwMA0GCSqGSIb3DQEBBQUAA4IBAQAlyN7kKo/NQCQ0
|
14
|
+
AOzZLZ3WAePvStkCFIJ53tsv5Kyo4pMAllv+BgPzzBt7qi605mFSL6zBd9uLou+W
|
15
|
+
Co3s48p1dy7CjjAfVQdmVNHF3MwXtfC2OEyvSQPi4xKR8iba8wa3xp9LVo1PuLpw
|
16
|
+
/6DsrChWw74HfsJN6qJOK684hJeT8lBYAUfiC3wD0owoPSg+XtyAAddisR+KV5Y1
|
17
|
+
NmVHuLtQcNTZy+gRht3ahJRMuC6QyLmkTsf+6MaenwAMkAgHdswGsJztOnNnBa3F
|
18
|
+
y0kCSWmK6D+x/SbfS6r7Ke07MRqziJdB9GuE1+0cIRuFh8EQ+LN6HXCKM5pon/GU
|
19
|
+
ycwMXfl0
|
20
|
+
-----END CERTIFICATE-----
|
data/i18n_data.gemspec
CHANGED
@@ -6,7 +6,9 @@ Gem::Specification.new name, I18nData::VERSION do |s|
|
|
6
6
|
s.summary = "country/language names and 2-letter-code pairs, in 85 languages"
|
7
7
|
s.authors = ["Michael Grosser"]
|
8
8
|
s.email = "michael@grosser.it"
|
9
|
-
s.homepage = "
|
9
|
+
s.homepage = "https://github.com/grosser/#{name}"
|
10
10
|
s.files = `git ls-files`.split("\n")
|
11
11
|
s.license = "MIT"
|
12
|
+
s.signing_key = File.expand_path("~/.ssh/gem-private_key.pem")
|
13
|
+
s.cert_chain = ["gem-public_cert.pem"]
|
12
14
|
end
|
data/lib/i18n_data/version.rb
CHANGED
data/lib/i18n_data.rb
CHANGED
@@ -1,71 +1,85 @@
|
|
1
1
|
require 'i18n_data/version'
|
2
2
|
|
3
3
|
module I18nData
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
class NoTranslationAvailable < Exception
|
5
|
+
def to_s
|
6
|
+
"NoTranslationAvailable -- #{super}"
|
7
|
+
end
|
8
8
|
end
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
class << self
|
11
|
+
def languages(language_code='EN')
|
12
|
+
fetch :languages, language_code do
|
13
|
+
data_provider.codes(:languages, normal_to_region_code(language_code.to_s.upcase))
|
14
|
+
end
|
15
|
+
end
|
13
16
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
+
def countries(language_code='EN')
|
18
|
+
fetch :countries, language_code do
|
19
|
+
data_provider.codes(:countries, normal_to_region_code(language_code.to_s.upcase))
|
20
|
+
end
|
21
|
+
end
|
17
22
|
|
18
|
-
|
19
|
-
|
20
|
-
|
23
|
+
def country_code(name)
|
24
|
+
recognise_code(:countries, name)
|
25
|
+
end
|
21
26
|
|
22
|
-
|
23
|
-
|
24
|
-
@data_provider
|
25
|
-
else
|
26
|
-
require 'i18n_data/file_data_provider'
|
27
|
-
FileDataProvider
|
27
|
+
def language_code(name)
|
28
|
+
recognise_code(:languages, name)
|
28
29
|
end
|
29
|
-
end
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
def data_provider
|
32
|
+
if @data_provider
|
33
|
+
@data_provider
|
34
|
+
else
|
35
|
+
require 'i18n_data/file_data_provider'
|
36
|
+
FileDataProvider
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def data_provider=(provider)
|
41
|
+
@cache = nil
|
42
|
+
@data_provider = provider
|
43
|
+
end
|
34
44
|
|
35
|
-
|
45
|
+
private
|
36
46
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
47
|
+
def fetch(*args)
|
48
|
+
@cache ||= {}
|
49
|
+
if @cache.key?(args)
|
50
|
+
@cache[args]
|
51
|
+
else
|
52
|
+
@cache[args] = yield
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# hardcode languages that do not have a default type
|
57
|
+
# e.g. zh does not exist, but zh_CN does
|
58
|
+
def normal_to_region_code(normal)
|
59
|
+
{
|
60
|
+
"ZH" => "zh_CN",
|
61
|
+
"BN" => "bn_IN",
|
62
|
+
}[normal] || normal
|
63
|
+
end
|
64
|
+
|
65
|
+
def recognise_code(type, search)
|
66
|
+
search = search.strip
|
45
67
|
|
46
|
-
|
47
|
-
|
68
|
+
# common languages first <-> faster in majority of cases
|
69
|
+
common_languages = ['EN','ES','FR','DE','ZH']
|
70
|
+
langs = (common_languages + (languages.keys - common_languages))
|
48
71
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
match_found = (name.include?(search) and name.split(';').map{|s| s.strip }.include?(search))
|
58
|
-
return code if match_found
|
72
|
+
langs.each do |code|
|
73
|
+
begin
|
74
|
+
send(type, code).each do |code, name|
|
75
|
+
# supports "Dutch" and "Dutch; Flemish", checks for inclusion first -> faster
|
76
|
+
match_found = (name.include?(search) and name.split(';').map{|s| s.strip }.include?(search))
|
77
|
+
return code if match_found
|
78
|
+
end
|
79
|
+
rescue NoTranslationAvailable
|
59
80
|
end
|
60
|
-
rescue NoTranslationAvailable
|
61
81
|
end
|
62
|
-
|
63
|
-
nil
|
64
|
-
end
|
65
|
-
|
66
|
-
class NoTranslationAvailable < Exception
|
67
|
-
def to_s
|
68
|
-
"NoTranslationAvailable -- #{super}"
|
82
|
+
nil
|
69
83
|
end
|
70
84
|
end
|
71
85
|
end
|
data/spec/i18n_data_spec.rb
CHANGED
@@ -18,12 +18,18 @@ describe I18nData do
|
|
18
18
|
I18nData.data_provider = provider
|
19
19
|
end
|
20
20
|
|
21
|
-
describe
|
21
|
+
describe ".languages" do
|
22
22
|
it "raises NoTranslationAvailable for unavailable languages" do
|
23
23
|
lambda{I18nData.languages('XX')}.should raise_error(I18nData::NoTranslationAvailable)
|
24
24
|
end
|
25
25
|
|
26
|
-
|
26
|
+
it "is cached" do
|
27
|
+
id = I18nData.languages.object_id
|
28
|
+
I18nData.languages.object_id.should == id
|
29
|
+
I18nData.languages("DE").object_id.should_not == id
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "english" do
|
27
33
|
it "does not contain blanks" do
|
28
34
|
blank_keys_or_values(I18nData.languages).should == nil
|
29
35
|
end
|
@@ -37,7 +43,7 @@ describe I18nData do
|
|
37
43
|
end
|
38
44
|
end
|
39
45
|
|
40
|
-
describe
|
46
|
+
describe "translated" do
|
41
47
|
it "is translated" do
|
42
48
|
I18nData.languages('DE')['DE'].should == 'Deutsch'
|
43
49
|
end
|
@@ -68,8 +74,14 @@ describe I18nData do
|
|
68
74
|
end
|
69
75
|
end
|
70
76
|
|
71
|
-
describe
|
72
|
-
|
77
|
+
describe ".countries" do
|
78
|
+
it "is cached" do
|
79
|
+
id = I18nData.countries.object_id
|
80
|
+
I18nData.countries.object_id.should == id
|
81
|
+
I18nData.countries("DE").object_id.should_not == id
|
82
|
+
end
|
83
|
+
|
84
|
+
describe "english" do
|
73
85
|
it "has english as default" do
|
74
86
|
I18nData.countries['DE'].should == 'Germany'
|
75
87
|
end
|
@@ -83,7 +95,7 @@ describe I18nData do
|
|
83
95
|
end
|
84
96
|
end
|
85
97
|
|
86
|
-
describe
|
98
|
+
describe "translated" do
|
87
99
|
it "is translated" do
|
88
100
|
I18nData.countries('DE')['DE'].should == 'Deutschland'
|
89
101
|
end
|
data.tar.gz.sig
ADDED
metadata
CHANGED
@@ -1,15 +1,42 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: i18n_data
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Michael Grosser
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
|
-
cert_chain:
|
12
|
-
|
11
|
+
cert_chain:
|
12
|
+
- !binary |-
|
13
|
+
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURNakNDQWhxZ0F3SUJB
|
14
|
+
Z0lCQURBTkJna3Foa2lHOXcwQkFRVUZBREEvTVJBd0RnWURWUVFEREFkdGFX
|
15
|
+
Tm8KWVdWc01SY3dGUVlLQ1pJbWlaUHlMR1FCR1JZSFozSnZjM05sY2pFU01C
|
16
|
+
QUdDZ21TSm9tVDhpeGtBUmtXQW1sMApNQjRYRFRFek1ESXdNekU0TVRNeE1W
|
17
|
+
b1hEVEUwTURJd016RTRNVE14TVZvd1B6RVFNQTRHQTFVRUF3d0hiV2xqCmFH
|
18
|
+
RmxiREVYTUJVR0NnbVNKb21UOGl4a0FSa1dCMmR5YjNOelpYSXhFakFRQmdv
|
19
|
+
SmtpYUprL0lzWkFFWkZnSnAKZERDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFB
|
20
|
+
RGdnRVBBRENDQVFvQ2dnRUJBTW9yWG8vaGdiVXE5NytrSUk5SApNc1FjTGRD
|
21
|
+
Lzd3UTFaUDJPc2hWSFBrZVAwcUg4TUJIR2c2ZVlpc09YMnViTmFnRjlZVENa
|
22
|
+
V25ocmRLcndwTE9PCmNQTGFaYmpVamxqSjNjUVIzQjhZbjF2ZVY1SWhHODZR
|
23
|
+
c2VUQmp5bXpKV3NMcHFKMVVaR3BmQjl0WGNzRnR1eE8KNnZIdmNJSGR6dmMv
|
24
|
+
T1VrSUN0dExiSCsxcWI2cnNIVWNlcWgrSnJINEdyc0o1SDRoQWZJZHlTMlhN
|
25
|
+
SzdZUktiaApoK0lCdTZkRldKSkJ5ekZzWW1WMVBEWGxuM1VCbWdBdDY1Y21D
|
26
|
+
dTRxUGZUaGlvQ0dEemJTSnJHREdMbXcvcEZYCkZQcFZDbTF6Z1lTYjF2NlFu
|
27
|
+
ZjNjZ1hhMmYyd1lHbTE3K3pBVnlJRHB3cnlGcnU5eUYvakp4RTM4ei9EUnNk
|
28
|
+
OVIKLzg4Q0F3RUFBYU01TURjd0NRWURWUjBUQkFJd0FEQWRCZ05WSFE0RUZn
|
29
|
+
UVVzaU5uWEh0S2VNWVljcjR5SlZtUQpXT05MK0l3d0N3WURWUjBQQkFRREFn
|
30
|
+
U3dNQTBHQ1NxR1NJYjNEUUVCQlFVQUE0SUJBUUFseU43a0tvL05RQ1EwCkFP
|
31
|
+
elpMWjNXQWVQdlN0a0NGSUo1M3RzdjVLeW80cE1BbGx2K0JnUHp6QnQ3cWk2
|
32
|
+
MDVtRlNMNnpCZDl1TG91K1cKQ28zczQ4cDFkeTdDampBZlZRZG1WTkhGM013
|
33
|
+
WHRmQzJPRXl2U1FQaTR4S1I4aWJhOHdhM3hwOUxWbzFQdUxwdwovNkRzckNo
|
34
|
+
V3c3NEhmc0pONnFKT0s2ODRoSmVUOGxCWUFVZmlDM3dEMG93b1BTZytYdHlB
|
35
|
+
QWRkaXNSK0tWNVkxCk5tVkh1THRRY05UWnkrZ1JodDNhaEpSTXVDNlF5TG1r
|
36
|
+
VHNmKzZNYWVud0FNa0FnSGRzd0dzSnp0T25ObkJhM0YKeTBrQ1NXbUs2RCt4
|
37
|
+
L1NiZlM2cjdLZTA3TVJxemlKZEI5R3VFMSswY0lSdUZoOEVRK0xONkhYQ0tN
|
38
|
+
NXBvbi9HVQp5Y3dNWGZsMAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
|
39
|
+
date: 2013-02-13 00:00:00.000000000 Z
|
13
40
|
dependencies: []
|
14
41
|
description:
|
15
42
|
email: michael@grosser.it
|
@@ -200,6 +227,7 @@ files:
|
|
200
227
|
- example_output/all_names_for_FR.txt
|
201
228
|
- example_output/all_names_for_GB.txt
|
202
229
|
- example_output/all_names_for_US.txt
|
230
|
+
- gem-public_cert.pem
|
203
231
|
- i18n_data.gemspec
|
204
232
|
- lib/i18n_data.rb
|
205
233
|
- lib/i18n_data/file_data_provider.rb
|
@@ -209,7 +237,7 @@ files:
|
|
209
237
|
- spec/i18n_data/live_data_provider_spec.rb
|
210
238
|
- spec/i18n_data_spec.rb
|
211
239
|
- spec/spec_helper.rb
|
212
|
-
homepage:
|
240
|
+
homepage: https://github.com/grosser/i18n_data
|
213
241
|
licenses:
|
214
242
|
- MIT
|
215
243
|
post_install_message:
|
@@ -224,7 +252,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
224
252
|
version: '0'
|
225
253
|
segments:
|
226
254
|
- 0
|
227
|
-
hash:
|
255
|
+
hash: 3936433807610975866
|
228
256
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
229
257
|
none: false
|
230
258
|
requirements:
|
@@ -233,7 +261,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
233
261
|
version: '0'
|
234
262
|
segments:
|
235
263
|
- 0
|
236
|
-
hash:
|
264
|
+
hash: 3936433807610975866
|
237
265
|
requirements: []
|
238
266
|
rubyforge_project:
|
239
267
|
rubygems_version: 1.8.24
|
metadata.gz.sig
ADDED
Binary file
|