i18n_data 0.2.6 → 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
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 technicalpickles-jeweler -s http://gems.github.com"
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.6
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.6"
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{2009-12-13}
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.5}
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.new("#{type}-#{language_code}")
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(type, language_code)
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
- IO.read(file).split("\n").each do |line|
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, type, language_code)
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.puts data.map{|code, translation| "#{code}#{DATA_SEPERATOR}#{translation}" } * "\n"
42
+ f.write data.map{|code, translation| "#{code}#{DATA_SEPERATOR}#{translation}" } * "\n"
45
43
  end
46
44
  end
47
45
 
48
- def cache_for(type,language_code)
49
- cache "#{type}-#{language_code}"
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.blank? ? nil : 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 ? translation : name
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.new("for #{type} and language code = #{language_code}")
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
- languages.keys.each do |code|
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
- return code if search == name
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
- `rm -f #{I18nData::FileDataProvider.send(:cache_for,"XX","YY")}`
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,"XX","YY")
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,{},"XX","YY")
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
@@ -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.detect {|k,v| k.blank? or v.blank?}.should == nil
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').detect {|k,v| k.blank? or v.blank?}.should == nil
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.detect {|k,v| k.blank? or v.blank?}.should == nil
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').detect {|k,v| k.blank? or v.blank?}.should == nil
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
- describe :country_code do
100
- before :all do
101
- I18nData.data_provider = I18nData::FileDataProvider
102
- end
104
+ describe :country_code do
105
+ before :all do
106
+ I18nData.data_provider = I18nData::FileDataProvider
107
+ end
103
108
 
104
- it "recognises a countries name" do
105
- I18nData.country_code('Germany').should == 'DE'
106
- end
109
+ it "recognises a countries name" do
110
+ I18nData.country_code('Germany').should == 'DE'
111
+ end
107
112
 
108
- it "recognises with blanks" do
109
- I18nData.country_code(" Germany \n\r ").should == 'DE'
110
- end
113
+ it "recognises with blanks" do
114
+ I18nData.country_code(" Germany \n\r ").should == 'DE'
115
+ end
111
116
 
112
- it "returns nil when it cannot recognise" do
113
- I18nData.country_code('XY').should == nil
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
- describe :language_code do
118
- before :all do
119
- I18nData.data_provider = I18nData::FileDataProvider
120
- end
122
+ describe :language_code do
123
+ before :all do
124
+ I18nData.data_provider = I18nData::FileDataProvider
125
+ end
121
126
 
122
- it "recognises a countries name" do
123
- I18nData.language_code('Deutsch').should == 'DE'
124
- end
127
+ it "recognises a countries name" do
128
+ I18nData.language_code('Deutsch').should == 'DE'
129
+ end
125
130
 
126
- it "recognises with blanks" do
127
- I18nData.language_code(" Deutsch \n\r ").should == 'DE'
128
- end
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
- it "returns nil when it cannot recognise" do
131
- I18nData.language_code('XY').should == nil
132
- end
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
- version: 0.2.6
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: 2009-12-13 00:00:00 +01:00
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
- type: :runtime
18
- version_requirement:
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
- version:
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.5
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