r18n-core 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
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