r18n-core 0.2.2 → 0.2.3

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/base/pl.yml ADDED
@@ -0,0 +1,7 @@
1
+ ok: OK
2
+ save: Zapisz
3
+ cancel: Anuluj
4
+ yes: Tak
5
+ no: Nie
6
+ exit: Wyjście
7
+ delete: Usuń
data/lib/r18n-core.rb CHANGED
@@ -18,13 +18,14 @@ You should have received a copy of the GNU Lesser General Public License
18
18
  along with this program. If not, see <http://www.gnu.org/licenses/>.
19
19
  =end
20
20
 
21
- $KCODE = 'u'
21
+ $KCODE = 'u' if '1.8.' == RUBY_VERSION[0..3]
22
22
 
23
23
  require 'pathname'
24
24
 
25
25
  dir = Pathname(__FILE__).dirname.expand_path + 'r18n-core'
26
26
  require dir + 'version'
27
27
  require dir + 'locale'
28
+ require dir + 'unsupported_locale'
28
29
  require dir + 'translated_string'
29
30
  require dir + 'untranslated'
30
31
  require dir + 'translation'
@@ -41,8 +42,27 @@ module R18n
41
42
  def get
42
43
  Thread.current['i18n']
43
44
  end
45
+
46
+ # String, which will be print by untranslated items. You can use special
47
+ # values:
48
+ # * <tt>%1</tt> – path to untranslated string.
49
+ # * <tt>%2</tt> – part in path, that exists in translation.
50
+ # * <tt>%3</tt> – part in path, that isn’t exists in translation.
51
+ #
52
+ # For example, if you have in translation only:
53
+ # user:
54
+ # login: Login
55
+ #
56
+ # And write code:
57
+ #
58
+ # R18n.untranslated = '%2[%3]'
59
+ #
60
+ # i18n.user.password #=> "user.[password]"
61
+ attr_accessor :untranslated
44
62
  end
45
63
 
64
+ self.untranslated = '%1'
65
+
46
66
  module Utils
47
67
  # Recursively hash merge.
48
68
  def self.deep_merge!(a, b)
@@ -106,13 +106,7 @@ module R18n
106
106
  def initialize(locales, translations_dirs = nil)
107
107
  locales = [locales] if locales.is_a? String
108
108
 
109
- @locales = locales.map do |locale|
110
- if Locale.exists? locale
111
- Locale.load(locale)
112
- else
113
- locale
114
- end
115
- end
109
+ @locales = locales.map { |i| Locale.load(i) }
116
110
 
117
111
  locales << @@default
118
112
  if @locales.first.kind_of? Locale
@@ -138,8 +132,8 @@ module R18n
138
132
  end
139
133
  end
140
134
 
141
- # Return Hash with titles (or code for translation without locale file) of
142
- # available translations.
135
+ # Return Hash with titles (or code for unsupported locales) for available
136
+ # translations.
143
137
  def translations
144
138
  Translation.available(@translations_dirs).inject({}) do |all, code|
145
139
  all[code] = if Locale.exists? code
@@ -67,22 +67,21 @@ module R18n
67
67
  File.exists?(File.join(LOCALES_DIR, locale + '.yml'))
68
68
  end
69
69
 
70
- # Default pluralization rule to translation without locale file
71
- def self.default_pluralize(n)
72
- n == 0 ? 0 : n == 1 ? 1 : 'n'
73
- end
74
-
75
70
  # Load locale by RFC 3066 +code+
76
71
  def self.load(code)
77
72
  code.delete! '/'
78
73
  code.delete! '\\'
79
74
  code.delete! ';'
80
75
 
76
+ return UnsupportedLocale.new(code) unless exists? code
77
+
81
78
  data = {}
82
79
  klass = R18n::Locale
83
- while code
80
+ default_loaded = false
81
+
82
+ while code and exists? code
84
83
  file = LOCALES_DIR + "#{code}.yml"
85
- raise "Locale #{code} isn't exists" if not File.exists? file
84
+ default_loaded = true if I18n.default == code
86
85
 
87
86
  if R18n::Locale == klass and File.exists? LOCALES_DIR + "#{code}.rb"
88
87
  require LOCALES_DIR + "#{code}.rb"
@@ -94,31 +93,41 @@ module R18n
94
93
  data = Utils.deep_merge! loaded, data
95
94
  end
96
95
 
96
+ unless default_loaded
97
+ code = I18n.default
98
+ while code and exists? code
99
+ loaded = YAML.load_file(LOCALES_DIR + "#{code}.yml")
100
+ code = loaded['include']
101
+ data = Utils.deep_merge! loaded, data
102
+ end
103
+ end
104
+
97
105
  klass.new(data)
98
106
  end
107
+
108
+ attr_reader :data
99
109
 
100
- # Create locale object hash with +locale+ data.
110
+ # Create locale object with locale +data+.
101
111
  #
102
112
  # This is internal a constructor. To load translation use
103
113
  # <tt>R18n::Translation.load(locales, translations_dir)</tt>.
104
- def initialize(locale)
105
- p 1 if locale.is_a? String
106
- @locale = locale
114
+ def initialize(data)
115
+ @data = data
107
116
  end
108
117
 
109
118
  # Get information about locale
110
119
  def [](name)
111
- @locale[name]
120
+ @data[name]
112
121
  end
113
122
 
114
123
  # Is another locale has same code
115
124
  def ==(locale)
116
- @locale['code'] == locale['code']
125
+ @data['code'] == locale['code']
117
126
  end
118
127
 
119
128
  # Human readable locale code and title
120
129
  def inspect
121
- "Locale #{@locale['code']} (#{@locale['title']})"
130
+ "Locale #{@data['code']} (#{@data['title']})"
122
131
  end
123
132
 
124
133
  # Returns the integer in String form, according to the rules of the locale.
@@ -126,7 +135,7 @@ module R18n
126
135
  def format_integer(integer)
127
136
  str = integer.to_s
128
137
  str[0] = '−' if 0 > integer # Real typographic minus
129
- group = @locale['numbers']['group_delimiter']
138
+ group = @data['numbers']['group_delimiter']
130
139
 
131
140
  str.gsub(/(\d)(?=(\d\d\d)+(?!\d))/) do |match|
132
141
  match + group
@@ -136,7 +145,7 @@ module R18n
136
145
  # Returns the float in String form, according to the rules of the locale.
137
146
  # It will also put real typographic minus.
138
147
  def format_float(float)
139
- decimal = @locale['numbers']['decimal_separator']
148
+ decimal = @data['numbers']['decimal_separator']
140
149
  self.format_integer(float.to_i) + decimal + float.to_s.split('.').last
141
150
  end
142
151
 
@@ -150,27 +159,27 @@ module R18n
150
159
  def strftime(time, format)
151
160
  if format.is_a? Symbol
152
161
  if :month == format
153
- return @locale['months']['standalone'][time.month - 1]
162
+ return @data['months']['standalone'][time.month - 1]
154
163
  end
155
- format = @locale['formats'][format.to_s]
164
+ format = @data['formats'][format.to_s]
156
165
  end
157
166
 
158
167
  translated = ''
159
168
  format.scan(/%[EO]?.|./o) do |c|
160
169
  case c.sub(/^%[EO]?(.)$/o, '%\\1')
161
170
  when '%A'
162
- translated << @locale['week']['days'][time.wday]
171
+ translated << @data['week']['days'][time.wday]
163
172
  when '%a'
164
- translated << @locale['week']['abbrs'][time.wday]
173
+ translated << @data['week']['abbrs'][time.wday]
165
174
  when '%B'
166
- translated << @locale['months']['names'][time.month - 1]
175
+ translated << @data['months']['names'][time.month - 1]
167
176
  when '%b'
168
- translated << @locale['months']['abbrs'][time.month - 1]
177
+ translated << @data['months']['abbrs'][time.month - 1]
169
178
  when '%p'
170
179
  translated << if time.hour < 12
171
- @locale['time']['am']
180
+ @data['time']['am']
172
181
  else
173
- @locale['time']['pm']
182
+ @data['time']['pm']
174
183
  end
175
184
  else
176
185
  translated << c
@@ -24,11 +24,15 @@ module R18n
24
24
  # String locale
25
25
  attr_reader :locale
26
26
 
27
+ # Path for this translation.
28
+ attr_reader :path
29
+
27
30
  # Returns a new string object containing a copy of +str+, which translated
28
- # to +locale+
29
- def initialize(str, locale)
31
+ # for +path+ to +locale+
32
+ def initialize(str, locale, path)
30
33
  super(str)
31
34
  @locale = locale
35
+ @path = path
32
36
  end
33
37
  end
34
38
  end
@@ -137,11 +137,7 @@ module R18n
137
137
  end
138
138
  translations << translation
139
139
 
140
- if Locale.exists? locale
141
- Locale.load(locale)
142
- else
143
- locale
144
- end
140
+ Locale.load(locale)
145
141
  end
146
142
 
147
143
  self.new(locales, translations)
@@ -158,13 +154,15 @@ module R18n
158
154
  @@call_proc
159
155
  end
160
156
 
161
- # Create translation hash with messages in +translations+ for +locales+.
157
+ # Create translation hash for +path+ with messages in +translations+ for
158
+ # +locales+.
162
159
  #
163
160
  # This is internal a constructor. To load translation use
164
161
  # <tt>R18n::Translation.load(locales, translations_dir)</tt>.
165
- def initialize(locales, translations)
162
+ def initialize(locales, translations, path = '')
166
163
  @locales = locales
167
164
  @translations = translations
165
+ @path = path
168
166
  end
169
167
 
170
168
  # Short and pretty way to get translation by method name. If translation
@@ -182,6 +180,8 @@ module R18n
182
180
  # Translation can contain variable part. Just set is as <tt>%1</tt>,
183
181
  # <tt>%2</tt>, etc in translations file and set values in next +params+.
184
182
  def [](name, *params)
183
+ path = @path.empty? ? name : "#{@path}.#{name}"
184
+
185
185
  @translations.each_with_index do |translation, i|
186
186
  result = translation[name]
187
187
  next if result.nil?
@@ -197,16 +197,11 @@ module R18n
197
197
  when 'pl'
198
198
  locale = @locales[i]
199
199
 
200
- if locale.is_a? Locale
201
- type = locale.pluralize(params.first)
202
-
203
- if params.first.is_a? Float
204
- params[0] = locale.format_float(params.first)
205
- elsif params.first.is_a? Integer
206
- params[0] = locale.format_integer(params.first)
207
- end
208
- else
209
- type = Locale.default_pluralize(params.first)
200
+ type = locale.pluralize(params.first)
201
+ if params.first.is_a? Float
202
+ params[0] = locale.format_float(params.first)
203
+ elsif params.first.is_a? Integer
204
+ params[0] = locale.format_integer(params.first)
210
205
  end
211
206
 
212
207
  type = 'n' if not result.value.include? type
@@ -221,17 +216,17 @@ module R18n
221
216
  params.each_with_index do |param, i|
222
217
  result.gsub! "%#{i+1}", param.to_s
223
218
  end
224
- return TranslatedString.new(result, @locales[i])
219
+ return TranslatedString.new(result, @locales[i], path)
225
220
  elsif result.is_a? Hash
226
221
  return self.class.new(@locales, @translations.map { |i|
227
222
  i[name] or {}
228
- })
223
+ }, path)
229
224
  else
230
225
  return result.clone
231
226
  end
232
227
  end
233
228
 
234
- return Untranslated.instance
229
+ return Untranslated.new(path, name)
235
230
  end
236
231
  end
237
232
  end
@@ -0,0 +1,59 @@
1
+ # encoding: utf-8
2
+ =begin
3
+ Locale withou information file to i18n support.
4
+
5
+ Copyright (C) 2008 Andrey “A.I.” Sitnik <andrey@sitnik.ru>
6
+
7
+ This program is free software: you can redistribute it and/or modify
8
+ it under the terms of the GNU Lesser General Public License as published by
9
+ the Free Software Foundation, either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU Lesser General Public License for more details.
16
+
17
+ You should have received a copy of the GNU Lesser General Public License
18
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
19
+ =end
20
+
21
+ module R18n
22
+ # Locale without information file. Contain only it code, empty title and data
23
+ # from default locale.
24
+ class UnsupportedLocale
25
+ # Create object for unsupported locale with +code+ and load other locale
26
+ # data from default locale.
27
+ def initialize(code)
28
+ @@default_locale ||= Locale.load(I18n.default)
29
+ @code = code
30
+ end
31
+
32
+ # Human readable locale code and title
33
+ def inspect
34
+ "Unsupported locale #{@code}"
35
+ end
36
+
37
+ # Get information about locale
38
+ def [](name)
39
+ case name
40
+ when 'code'
41
+ @code
42
+ when 'title'
43
+ ''
44
+ else
45
+ @@default_locale[name]
46
+ end
47
+ end
48
+
49
+ # Is another locale has same code
50
+ def ==(locale)
51
+ @code == locale['code']
52
+ end
53
+
54
+ # Proxy to default locale object.
55
+ def method_missing(name, *params)
56
+ @@default_locale.send(name, *params)
57
+ end
58
+ end
59
+ end
@@ -24,18 +24,41 @@ module R18n
24
24
  # Return if translation isn’t exists. Unlike nil, it didn’t raise error when
25
25
  # you try to access for subtranslations.
26
26
  class Untranslated
27
- include ::Singleton
27
+ # Path to translation.
28
+ attr_reader :path
29
+
30
+ # Path, that isn’t in translation.
31
+ attr_reader :untranslated_path
32
+
33
+ # Path, that exists in translation.
34
+ attr_reader :translated_path
35
+
36
+ def initialize(path, untranslated_path)
37
+ @path = path
38
+ @untranslated_path = untranslated_path
39
+ @translated_path = path[0...(-untranslated_path.length)]
40
+ end
28
41
 
29
42
  def nil?
30
43
  true
31
44
  end
32
45
 
33
46
  def method_missing(*params)
34
- self
47
+ self[params.first]
35
48
  end
36
49
 
37
50
  def [](*params)
38
- self
51
+ Untranslated.new("#{@path}.#{params.first}",
52
+ "#{@untranslated_path}.#{params.first}")
53
+ end
54
+
55
+ def to_s
56
+ if R18n.untranslated.respond_to? :gsub
57
+ R18n.untranslated.gsub('%1', @path).gsub('%2', @translated_path).
58
+ gsub('%3', @untranslated_path)
59
+ else
60
+ R18n.untranslated
61
+ end
39
62
  end
40
63
  end
41
64
  end
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module R18n
3
- VERSION = '0.2.2' unless defined? R18n::VERSION
3
+ VERSION = '0.2.3' unless defined? R18n::VERSION
4
4
  end
data/locales/en.yml CHANGED
@@ -2,8 +2,6 @@ title: English
2
2
  code: en
3
3
  sublocales: []
4
4
  direction: ltr
5
-
6
- pluralization: "n == 0 ? 0 : n == 1 ? 1 : 'n'"
7
5
 
8
6
  week:
9
7
  start: sunday
data/locales/pl.rb ADDED
@@ -0,0 +1,22 @@
1
+ module R18n
2
+ module Locales
3
+ class Pl < R18n::Locale
4
+ def pluralize(n)
5
+ return 0 if n == 0
6
+ # 0 - 0
7
+ # 1 - 1
8
+ # 2..4 - 2
9
+ # n
10
+
11
+ case n % 10
12
+ when 1
13
+ n > 10 ? 'n' : 1
14
+ when 2..4
15
+ n % 100 > 10 && n % 100 < 20 ? 'n' : 2
16
+ else
17
+ 'n'
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
data/locales/pl.yml ADDED
@@ -0,0 +1,33 @@
1
+ title: Polski
2
+ code: pl
3
+ sublocales: []
4
+ direction: ltr
5
+
6
+ pluralization: "n == 0 ? 0 : n == 1 ? 1 : 'n'"
7
+
8
+ week:
9
+ start: monday
10
+ days: [Niedziela, Poniedziałek, Wtorek, Sroda, Czwartek, Piątek, Sobota]
11
+ abbrs: [Niedz, Pon, Wt, Sr, Czw, Pt, Sob]
12
+
13
+ months:
14
+ names: [Stycznia, Lutego, Marca, Kwietnia, Maja, Czerwca, Lipa, Sierpnia, Września, Pażdziernika, Listopada, Grudnia]
15
+ abbrs: [Sty, Lut, Mar, Kwi, Maj, Cze, Lip, Sie, Wrz, Paź, Lis, Gru]
16
+ standalone: [Styczen, Luty, Marzec, Kwiecień, Maj, Czerwiec, Lipiec, Sierpień, Wrzesień, Pażdziernik, Listopad, Grudzień]
17
+
18
+ time:
19
+ am: AM
20
+ pm: PM
21
+
22
+ formats:
23
+ time: "%H:%M"
24
+ date: "%d/%m/%Y"
25
+ short_date: "%d %b"
26
+ long_date: "%d %B, %Y"
27
+ datetime: "%a %d %b %H:%M:%S %Z %Y"
28
+ short_datetime: "%d %b %H:%M"
29
+ long_datetime: "%d %B, %Y %H:%M"
30
+
31
+ numbers:
32
+ decimal_separator: "."
33
+ group_delimiter: ","
data/spec/i18n_spec.rb CHANGED
@@ -20,7 +20,8 @@ describe R18n::I18n do
20
20
  i18n.locales.should == [R18n::Locale.load('en')]
21
21
 
22
22
  i18n = R18n::I18n.new(['ru', 'no_LC'], DIR)
23
- i18n.locales.should == [R18n::Locale.load('ru'), 'no_LC']
23
+ i18n.locales.should == [R18n::Locale.load('ru'),
24
+ R18n::UnsupportedLocale.new('no_LC')]
24
25
  end
25
26
 
26
27
  it "should return translations dir" do
data/spec/locale_spec.rb CHANGED
@@ -30,12 +30,6 @@ describe R18n::Locale do
30
30
  en_US['week'].should == en['week']
31
31
  end
32
32
 
33
- it "should raise error if locale isn't exists" do
34
- lambda {
35
- R18n::Locale.load('no_LC')
36
- }.should raise_error
37
- end
38
-
39
33
  it "should be equal to another locale with same code" do
40
34
  ru = R18n::Locale.load('ru')
41
35
  en = R18n::Locale.load('en')
@@ -60,10 +54,13 @@ describe R18n::Locale do
60
54
  locale.pluralize(5).should == 'n'
61
55
  end
62
56
 
63
- it "should has default pluralization to translation without locale file" do
64
- R18n::Locale.default_pluralize(0).should == 0
65
- R18n::Locale.default_pluralize(1).should == 1
66
- R18n::Locale.default_pluralize(5).should == 'n'
57
+ it "should use UnsupportedLocale if locale file isn't exists" do
58
+ locale = R18n::Locale.load('no_LC')
59
+ locale.should be_a(R18n::UnsupportedLocale)
60
+ locale['code'].should == 'no_LC'
61
+ locale['title'].should be_empty
62
+ locale['direction'].should == 'ltr'
63
+ locale.pluralize(5).should == 'n'
67
64
  end
68
65
 
69
66
  it "should format number in local traditions" do
@@ -89,9 +86,8 @@ describe R18n::Locale do
89
86
  end
90
87
 
91
88
  it "should delete slashed from locale for security reasons" do
92
- lambda {
93
- R18n::Locale.load('../spec/translations/general/en')
94
- }.should raise_error
89
+ locale = R18n::Locale.load('../spec/translations/general/en')
90
+ locale.should be_a(R18n::UnsupportedLocale)
95
91
  end
96
92
 
97
93
  end
@@ -0,0 +1,25 @@
1
+ require File.join(File.dirname(__FILE__), "..", "spec_helper")
2
+ require File.join(File.dirname(__FILE__), "..", "..", "locales", "pl")
3
+
4
+ describe R18n::Locales::Pl do
5
+ it "should use Polish pluralization" do
6
+ ru = R18n::Locale.load 'pl'
7
+ ru.pluralize(0).should == 0
8
+
9
+ ru.pluralize(1).should == 1
10
+ ru.pluralize(21).should == 'n'
11
+ ru.pluralize(101).should == 'n'
12
+
13
+ ru.pluralize(2).should == 2
14
+ ru.pluralize(4).should == 2
15
+ ru.pluralize(22).should == 2
16
+ ru.pluralize(102).should == 2
17
+
18
+ ru.pluralize(5).should == 'n'
19
+ ru.pluralize(11).should == 'n'
20
+ ru.pluralize(12).should == 'n'
21
+ ru.pluralize(57).should == 'n'
22
+ ru.pluralize(111).should == 'n'
23
+ ru.pluralize(112).should == 'n'
24
+ end
25
+ end
data/spec/r18n_spec.rb CHANGED
@@ -21,5 +21,14 @@ describe R18n do
21
21
  :b => { :ba => 1, :bb => 2, :bc => 2 },
22
22
  :c => 2 }
23
23
  end
24
+
25
+ it "should set untranslated format" do
26
+ translation = R18n::Translation.load('en', DIR)
27
+ R18n.untranslated = nil
28
+ translation.in.not.to_s.should be_nil
29
+
30
+ R18n.untranslated = '%1 %2[%3]'
31
+ translation.in.not.to_s.should == 'in.not in.[not]'
32
+ end
24
33
 
25
34
  end
@@ -35,21 +35,34 @@ describe R18n::Translation do
35
35
 
36
36
  it "should load use hierarchical translations" do
37
37
  translation = R18n::Translation.load(['ru', 'en'], DIR)
38
- translation.in.another.should == 'Иерархический'
39
- translation['in']['another'].should == 'Иерархический'
38
+ translation.in.another.level.should == 'Иерархический'
39
+ translation['in']['another']['level'].should == 'Иерархический'
40
40
  translation.only.english.should == 'Only in English'
41
41
  end
42
+
43
+ it "should save path for translation" do
44
+ translation = R18n::Translation.load('en', DIR)
45
+
46
+ translation.in.another.level.path.should == 'in.another.level'
47
+
48
+ translation.in.another.not.exists.path.should == 'in.another.not.exists'
49
+ translation.in.another.not.exists.untranslated_path.should == 'not.exists'
50
+ translation.in.another.not.exists.translated_path.should == 'in.another.'
51
+
52
+ translation.not.untranslated_path.should == 'not'
53
+ translation.not.translated_path.should == ''
54
+ end
42
55
 
43
56
  it "should return string with locale info" do
44
57
  translation = R18n::Translation.load(['no_LC', 'en'], DIR)
45
- translation.one.locale.should == 'no_LC'
58
+ translation.one.locale.should == R18n::UnsupportedLocale.new('no_LC')
46
59
  translation.two.locale.should == R18n::Locale.load('en')
47
60
  end
48
61
 
49
62
  it "should load translations from several dirs" do
50
63
  translation = R18n::Translation.load(['no_LC', 'en'], [TWO, DIR])
51
64
  translation.in.two.should == 'Two'
52
- translation.in.another.should == 'Hierarchical'
65
+ translation.in.another.level.should == 'Hierarchical'
53
66
  end
54
67
 
55
68
  it "should use extension translations" do
@@ -4,7 +4,8 @@ two: Two
4
4
  params: Is %1 between %1 and %2?
5
5
 
6
6
  in:
7
- another: Hierarchical
7
+ another:
8
+ level: Hierarchical
8
9
 
9
10
  only:
10
11
  english: Only in English
@@ -1,4 +1,5 @@
1
1
  one: Один
2
2
 
3
3
  in:
4
- another: Иерархический
4
+ another:
5
+ level: Иерархический
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: r18n-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrey "A.I." Sitnik
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-25 00:00:00 +04:00
12
+ date: 2009-07-22 00:00:00 +08:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -23,28 +23,32 @@ extra_rdoc_files:
23
23
  - README.rdoc
24
24
  - LICENSE
25
25
  files:
26
- - base/ru.yml
27
- - base/kk.yml
28
- - base/fr.yml
29
- - base/en.yml
30
26
  - base/de.yml
27
+ - base/en.yml
28
+ - base/fr.yml
29
+ - base/pl.yml
30
+ - base/ru.yml
31
31
  - base/eo.yml
32
+ - base/kk.yml
33
+ - lib/r18n-core.rb
32
34
  - lib/r18n-core
35
+ - lib/r18n-core/unsupported_locale.rb
36
+ - lib/r18n-core/translation.rb
33
37
  - lib/r18n-core/untranslated.rb
34
38
  - lib/r18n-core/i18n.rb
39
+ - lib/r18n-core/translated_string.rb
35
40
  - lib/r18n-core/locale.rb
36
41
  - lib/r18n-core/version.rb
37
- - lib/r18n-core/translation.rb
38
- - lib/r18n-core/translated_string.rb
39
- - lib/r18n-core.rb
42
+ - locales/de.yml
43
+ - locales/en.yml
40
44
  - locales/ru.rb
41
- - locales/ru.yml
42
- - locales/kk.yml
45
+ - locales/pl.rb
43
46
  - locales/fr.yml
47
+ - locales/pl.yml
48
+ - locales/ru.yml
44
49
  - locales/en_US.yml
45
- - locales/en.yml
46
- - locales/de.yml
47
50
  - locales/eo.yml
51
+ - locales/kk.yml
48
52
  - LICENSE
49
53
  - README.rdoc
50
54
  has_rdoc: true
@@ -74,21 +78,22 @@ signing_key:
74
78
  specification_version: 2
75
79
  summary: I18n tool to translate your Ruby application.
76
80
  test_files:
77
- - spec/locales
78
- - spec/locales/ru_spec.rb
79
- - spec/spec_helper.rb
80
81
  - spec/translations
81
- - spec/translations/two
82
- - spec/translations/two/fr.yml
83
- - spec/translations/two/en.yml
84
- - spec/translations/general
85
- - spec/translations/general/ru.yml
86
- - spec/translations/general/no_LC.yml
87
- - spec/translations/general/en.yml
88
82
  - spec/translations/extension
89
83
  - spec/translations/extension/no_TR.yml
90
84
  - spec/translations/extension/en.yml
91
- - spec/translation_spec.rb
92
- - spec/r18n_spec.rb
85
+ - spec/translations/general
86
+ - spec/translations/general/en.yml
87
+ - spec/translations/general/no_LC.yml
88
+ - spec/translations/general/ru.yml
89
+ - spec/translations/two
90
+ - spec/translations/two/en.yml
91
+ - spec/translations/two/fr.yml
92
+ - spec/locales
93
+ - spec/locales/pl_spec.rb
94
+ - spec/locales/ru_spec.rb
93
95
  - spec/locale_spec.rb
94
96
  - spec/i18n_spec.rb
97
+ - spec/r18n_spec.rb
98
+ - spec/spec_helper.rb
99
+ - spec/translation_spec.rb