i18n_data 0.2.6 → 0.2.7
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.
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/i18n_data.gemspec +3 -3
- data/lib/i18n_data/file_data_provider.rb +10 -15
- data/lib/i18n_data/live_data_provider.rb +3 -3
- data/lib/i18n_data.rb +9 -4
- data/spec/i18n_data/file_data_provider_spec.rb +4 -3
- data/spec/i18n_data_spec.rb +39 -30
- metadata +18 -9
data/Rakefile
CHANGED
@@ -85,5 +85,5 @@ begin
|
|
85
85
|
|
86
86
|
Jeweler::GemcutterTasks.new
|
87
87
|
rescue LoadError
|
88
|
-
puts "Jeweler, or one of its dependencies, is not available. Install it with: sudo gem install
|
88
|
+
puts "Jeweler, or one of its dependencies, is not available. Install it with: sudo gem install jeweler"
|
89
89
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.7
|
data/i18n_data.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{i18n_data}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.7"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Michael Grosser"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2010-03-22}
|
13
13
|
s.email = %q{grosser.michael@gmail.com}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"README.markdown"
|
@@ -190,7 +190,7 @@ Gem::Specification.new do |s|
|
|
190
190
|
s.homepage = %q{http://github.com/grosser/i18n_data}
|
191
191
|
s.rdoc_options = ["--charset=UTF-8"]
|
192
192
|
s.require_paths = ["lib"]
|
193
|
-
s.rubygems_version = %q{1.3.
|
193
|
+
s.rubygems_version = %q{1.3.6}
|
194
194
|
s.summary = %q{country/language names and 2-letter-code pairs, in 85 languages}
|
195
195
|
s.test_files = [
|
196
196
|
"spec/spec_helper.rb",
|
@@ -4,8 +4,8 @@ module I18nData
|
|
4
4
|
extend self
|
5
5
|
|
6
6
|
def codes(type, language_code)
|
7
|
-
unless data = read_from_file(type, language_code)
|
8
|
-
raise NoTranslationAvailable
|
7
|
+
unless data = read_from_file(cache_file_for(type, language_code))
|
8
|
+
raise NoTranslationAvailable, "#{type}-#{language_code}"
|
9
9
|
end
|
10
10
|
data
|
11
11
|
end
|
@@ -16,7 +16,7 @@ module I18nData
|
|
16
16
|
[:languages, :countries].each do |type|
|
17
17
|
begin
|
18
18
|
data = provider.send(:codes, type, language_code)
|
19
|
-
write_to_file(data, type, language_code)
|
19
|
+
write_to_file(data, cache_file_for(type, language_code))
|
20
20
|
rescue NoTranslationAvailable
|
21
21
|
end
|
22
22
|
end
|
@@ -25,31 +25,26 @@ module I18nData
|
|
25
25
|
|
26
26
|
private
|
27
27
|
|
28
|
-
def read_from_file(
|
29
|
-
file = cache_for(type, language_code)
|
28
|
+
def read_from_file(file)
|
30
29
|
return nil unless File.exist?(file)
|
31
30
|
data = {}
|
32
|
-
|
33
|
-
code, translation = line.split(DATA_SEPERATOR)
|
31
|
+
File.readlines(file).each do |line|
|
32
|
+
code, translation = line.strip.split(DATA_SEPERATOR, 2)
|
34
33
|
data[code] = translation
|
35
34
|
end
|
36
35
|
data
|
37
36
|
end
|
38
37
|
|
39
|
-
def write_to_file(data,
|
38
|
+
def write_to_file(data, file)
|
40
39
|
return if data.empty?
|
41
|
-
file = cache_for(type, language_code)
|
42
40
|
FileUtils.mkdir_p File.dirname(file)
|
43
41
|
File.open(file,'w') do |f|
|
44
|
-
f.
|
42
|
+
f.write data.map{|code, translation| "#{code}#{DATA_SEPERATOR}#{translation}" } * "\n"
|
45
43
|
end
|
46
44
|
end
|
47
45
|
|
48
|
-
def
|
49
|
-
|
50
|
-
end
|
51
|
-
|
52
|
-
def cache(file)
|
46
|
+
def cache_file_for(type,language_code)
|
47
|
+
file = "#{type}-#{language_code}"
|
53
48
|
File.join(File.dirname(__FILE__), '..', '..', 'cache', 'file_data_provider', "#{file}.txt")
|
54
49
|
end
|
55
50
|
end
|
@@ -33,14 +33,14 @@ module I18nData
|
|
33
33
|
|
34
34
|
def translate(type, language, to_language_code)
|
35
35
|
translated = translations(type, to_language_code)[language]
|
36
|
-
translated.
|
36
|
+
translated.to_s.empty? ? nil : translated
|
37
37
|
end
|
38
38
|
|
39
39
|
def translated(type, language_code)
|
40
40
|
translations = {}
|
41
41
|
send("english_#{type}").each do |code,name|
|
42
42
|
translation = translate(type, name, language_code)
|
43
|
-
translations[code] = translation
|
43
|
+
translations[code] = translation || name
|
44
44
|
end
|
45
45
|
translations
|
46
46
|
end
|
@@ -51,7 +51,7 @@ module I18nData
|
|
51
51
|
url = TRANSLATIONS[type]+"#{language_code.downcase}.po"
|
52
52
|
data = open(url).readlines
|
53
53
|
rescue
|
54
|
-
raise NoTranslationAvailable
|
54
|
+
raise NoTranslationAvailable, "for #{type} and language code = #{language_code}"
|
55
55
|
end
|
56
56
|
|
57
57
|
po_to_hash data
|
data/lib/i18n_data.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'active_support'
|
2
|
-
|
3
1
|
module I18nData
|
4
2
|
VERSION = File.read( File.join(File.dirname(__FILE__), '..', 'VERSION') ).strip
|
5
3
|
|
@@ -38,10 +36,17 @@ module I18nData
|
|
38
36
|
|
39
37
|
def recognise_code(type, search)
|
40
38
|
search = search.strip
|
41
|
-
|
39
|
+
|
40
|
+
# common languages first <-> faster in majority of cases
|
41
|
+
common_languages = ['EN','ES','FR','DE','ZH']
|
42
|
+
langs = (common_languages + (languages.keys - common_languages))
|
43
|
+
|
44
|
+
langs.each do |code|
|
42
45
|
begin
|
43
46
|
send(type, code).each do |code, name|
|
44
|
-
|
47
|
+
# supports "Dutch" and "Dutch; Flemish", checks for inclusion first -> faster
|
48
|
+
match_found = (name.include?(search) and name.split(';').map{|s| s.strip }.include?(search))
|
49
|
+
return code if match_found
|
45
50
|
end
|
46
51
|
rescue NoTranslationAvailable
|
47
52
|
end
|
@@ -3,7 +3,8 @@ require 'i18n_data/file_data_provider'
|
|
3
3
|
|
4
4
|
describe I18nData::FileDataProvider do
|
5
5
|
before do
|
6
|
-
|
6
|
+
@cache_file = I18nData::FileDataProvider.send(:cache_file_for,"XX","YY")
|
7
|
+
`rm -f #{@cache_file}`
|
7
8
|
end
|
8
9
|
|
9
10
|
def read(x,y)
|
@@ -12,12 +13,12 @@ describe I18nData::FileDataProvider do
|
|
12
13
|
|
13
14
|
it "preserves data when writing and then reading" do
|
14
15
|
data = {"x"=>"y","z"=>"w"}
|
15
|
-
I18nData::FileDataProvider.send(:write_to_file,data,
|
16
|
+
I18nData::FileDataProvider.send(:write_to_file, data, @cache_file)
|
16
17
|
read("XX","YY").should == data
|
17
18
|
end
|
18
19
|
|
19
20
|
it "does not write empty data sets" do
|
20
|
-
I18nData::FileDataProvider.send(:write_to_file,{},
|
21
|
+
I18nData::FileDataProvider.send(:write_to_file,{}, @cache_file)
|
21
22
|
lambda{read("XX","YY")}.should raise_error I18nData::NoTranslationAvailable
|
22
23
|
end
|
23
24
|
end
|
data/spec/i18n_data_spec.rb
CHANGED
@@ -7,6 +7,10 @@ describe I18nData do
|
|
7
7
|
require "i18n_data/live_data_provider"
|
8
8
|
require "i18n_data/file_data_provider"
|
9
9
|
|
10
|
+
def blank_keys_or_values(hash)
|
11
|
+
hash.detect{|k,v| k.to_s.empty? or v.to_s.empty?}
|
12
|
+
end
|
13
|
+
|
10
14
|
providers = [I18nData::FileDataProvider]
|
11
15
|
providers << I18nData::LiveDataProvider unless ENV['RUN_CODE_RUN']
|
12
16
|
providers.each do |provider|
|
@@ -22,7 +26,7 @@ describe I18nData do
|
|
22
26
|
|
23
27
|
describe :english do
|
24
28
|
it "does not contain blanks" do
|
25
|
-
I18nData.languages.
|
29
|
+
blank_keys_or_values(I18nData.languages).should == nil
|
26
30
|
end
|
27
31
|
|
28
32
|
it "has english as default" do
|
@@ -48,7 +52,7 @@ describe I18nData do
|
|
48
52
|
end
|
49
53
|
|
50
54
|
it "does not contain blanks" do
|
51
|
-
I18nData.languages('GL').
|
55
|
+
blank_keys_or_values(I18nData.languages('GL')).should == nil
|
52
56
|
end
|
53
57
|
|
54
58
|
it "is written in unicode" do
|
@@ -64,7 +68,7 @@ describe I18nData do
|
|
64
68
|
end
|
65
69
|
|
66
70
|
it "does not contain blanks" do
|
67
|
-
I18nData.countries.
|
71
|
+
blank_keys_or_values(I18nData.countries).should == nil
|
68
72
|
end
|
69
73
|
|
70
74
|
it "contains all countries" do
|
@@ -86,7 +90,7 @@ describe I18nData do
|
|
86
90
|
end
|
87
91
|
|
88
92
|
it "does not contain blanks" do
|
89
|
-
I18nData.countries('GL').
|
93
|
+
blank_keys_or_values(I18nData.countries('GL')).should == nil
|
90
94
|
end
|
91
95
|
|
92
96
|
it "is written in unicode" do
|
@@ -95,41 +99,46 @@ describe I18nData do
|
|
95
99
|
end
|
96
100
|
end
|
97
101
|
end
|
102
|
+
end
|
98
103
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
104
|
+
describe :country_code do
|
105
|
+
before :all do
|
106
|
+
I18nData.data_provider = I18nData::FileDataProvider
|
107
|
+
end
|
103
108
|
|
104
|
-
|
105
|
-
|
106
|
-
|
109
|
+
it "recognises a countries name" do
|
110
|
+
I18nData.country_code('Germany').should == 'DE'
|
111
|
+
end
|
107
112
|
|
108
|
-
|
109
|
-
|
110
|
-
|
113
|
+
it "recognises with blanks" do
|
114
|
+
I18nData.country_code(" Germany \n\r ").should == 'DE'
|
115
|
+
end
|
111
116
|
|
112
|
-
|
113
|
-
|
114
|
-
end
|
117
|
+
it "returns nil when it cannot recognise" do
|
118
|
+
I18nData.country_code('XY').should == nil
|
115
119
|
end
|
120
|
+
end
|
116
121
|
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
122
|
+
describe :language_code do
|
123
|
+
before :all do
|
124
|
+
I18nData.data_provider = I18nData::FileDataProvider
|
125
|
+
end
|
121
126
|
|
122
|
-
|
123
|
-
|
124
|
-
|
127
|
+
it "recognises a countries name" do
|
128
|
+
I18nData.language_code('Deutsch').should == 'DE'
|
129
|
+
end
|
125
130
|
|
126
|
-
|
127
|
-
|
128
|
-
|
131
|
+
it "recognizes languages that are ; seperated" do
|
132
|
+
I18nData.language_code('Dutch').should == 'NL'
|
133
|
+
I18nData.language_code('Flemish').should == 'NL'
|
134
|
+
end
|
129
135
|
|
130
|
-
|
131
|
-
|
132
|
-
|
136
|
+
it "recognises with blanks" do
|
137
|
+
I18nData.language_code(" Deutsch \n\r ").should == 'DE'
|
138
|
+
end
|
139
|
+
|
140
|
+
it "returns nil when it cannot recognise" do
|
141
|
+
I18nData.language_code('XY').should == nil
|
133
142
|
end
|
134
143
|
end
|
135
144
|
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: i18n_data
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 2
|
8
|
+
- 7
|
9
|
+
version: 0.2.7
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Michael Grosser
|
@@ -9,19 +14,21 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date:
|
17
|
+
date: 2010-03-22 00:00:00 +01:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: activesupport
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
requirements:
|
21
25
|
- - ">="
|
22
26
|
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
23
29
|
version: "0"
|
24
|
-
|
30
|
+
type: :runtime
|
31
|
+
version_requirements: *id001
|
25
32
|
description:
|
26
33
|
email: grosser.michael@gmail.com
|
27
34
|
executables: []
|
@@ -215,18 +222,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
215
222
|
requirements:
|
216
223
|
- - ">="
|
217
224
|
- !ruby/object:Gem::Version
|
225
|
+
segments:
|
226
|
+
- 0
|
218
227
|
version: "0"
|
219
|
-
version:
|
220
228
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
221
229
|
requirements:
|
222
230
|
- - ">="
|
223
231
|
- !ruby/object:Gem::Version
|
232
|
+
segments:
|
233
|
+
- 0
|
224
234
|
version: "0"
|
225
|
-
version:
|
226
235
|
requirements: []
|
227
236
|
|
228
237
|
rubyforge_project:
|
229
|
-
rubygems_version: 1.3.
|
238
|
+
rubygems_version: 1.3.6
|
230
239
|
signing_key:
|
231
240
|
specification_version: 3
|
232
241
|
summary: country/language names and 2-letter-code pairs, in 85 languages
|