i18n 0.6.5 → 0.6.8
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of i18n might be problematic. Click here for more details.
- data/lib/i18n.rb +35 -1
- data/lib/i18n/backend/base.rb +4 -0
- data/lib/i18n/backend/chain.rb +6 -0
- data/lib/i18n/config.rb +12 -0
- data/lib/i18n/exceptions.rb +25 -3
- data/lib/i18n/tests/basics.rb +5 -0
- data/lib/i18n/version.rb +1 -1
- data/test/i18n/exceptions_test.rb +7 -3
- data/test/i18n_test.rb +103 -1
- metadata +85 -72
- data/CHANGELOG.textile +0 -152
data/lib/i18n.rb
CHANGED
@@ -25,7 +25,7 @@ module I18n
|
|
25
25
|
|
26
26
|
# Write methods which delegates to the configuration object
|
27
27
|
%w(locale backend default_locale available_locales default_separator
|
28
|
-
exception_handler load_path).each do |method|
|
28
|
+
exception_handler load_path enforce_available_locales).each do |method|
|
29
29
|
module_eval <<-DELEGATORS, __FILE__, __LINE__ + 1
|
30
30
|
def #{method}
|
31
31
|
config.#{method}
|
@@ -147,6 +147,7 @@ module I18n
|
|
147
147
|
locale = options.delete(:locale) || config.locale
|
148
148
|
handling = options.delete(:throw) && :throw || options.delete(:raise) && :raise # TODO deprecate :raise
|
149
149
|
|
150
|
+
enforce_available_locales!(locale)
|
150
151
|
raise I18n::ArgumentError if key.is_a?(String) && key.empty?
|
151
152
|
|
152
153
|
result = catch(:exception) do
|
@@ -167,6 +168,12 @@ module I18n
|
|
167
168
|
end
|
168
169
|
alias :t! :translate!
|
169
170
|
|
171
|
+
# Returns true if a translation exists for a given key, otherwise returns false.
|
172
|
+
def exists?(key, locale = config.locale)
|
173
|
+
raise I18n::ArgumentError if key.is_a?(String) && key.empty?
|
174
|
+
config.backend.exists?(locale, key)
|
175
|
+
end
|
176
|
+
|
170
177
|
# Transliterates UTF-8 characters to ASCII. By default this method will
|
171
178
|
# transliterate only Latin strings to an ASCII approximation:
|
172
179
|
#
|
@@ -224,6 +231,7 @@ module I18n
|
|
224
231
|
locale = options && options.delete(:locale) || config.locale
|
225
232
|
handling = options && (options.delete(:throw) && :throw || options.delete(:raise) && :raise)
|
226
233
|
replacement = options && options.delete(:replacement)
|
234
|
+
enforce_available_locales!(locale)
|
227
235
|
config.backend.transliterate(locale, key, replacement)
|
228
236
|
rescue I18n::ArgumentError => exception
|
229
237
|
handle_exception(handling, exception, locale, key, options || {})
|
@@ -234,6 +242,7 @@ module I18n
|
|
234
242
|
options = options ? options.dup : {}
|
235
243
|
locale = options.delete(:locale) || config.locale
|
236
244
|
format = options.delete(:format) || :default
|
245
|
+
enforce_available_locales!(locale)
|
237
246
|
config.backend.localize(locale, object, format, options)
|
238
247
|
end
|
239
248
|
alias :l :localize
|
@@ -262,6 +271,24 @@ module I18n
|
|
262
271
|
keys
|
263
272
|
end
|
264
273
|
|
274
|
+
# Returns true when the passed locale is in I18.available_locales.
|
275
|
+
# Returns false otherwise.
|
276
|
+
# Compare with Strings as `locale` may be coming from user input
|
277
|
+
def locale_available?(locale)
|
278
|
+
I18n.available_locales.map(&:to_s).include?(locale.to_s)
|
279
|
+
end
|
280
|
+
|
281
|
+
# Raises an InvalidLocale exception when the passed locale is not
|
282
|
+
# included in I18n.available_locales.
|
283
|
+
# Returns false otherwise
|
284
|
+
def enforce_available_locales!(locale)
|
285
|
+
handle_enforce_available_locales_deprecation
|
286
|
+
|
287
|
+
if config.enforce_available_locales
|
288
|
+
raise I18n::InvalidLocale.new(locale) if !locale_available?(locale)
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
265
292
|
# making these private until Ruby 1.9.2 can send to protected methods again
|
266
293
|
# see http://redmine.ruby-lang.org/repositories/revision/ruby-19?rev=24280
|
267
294
|
private
|
@@ -329,5 +356,12 @@ module I18n
|
|
329
356
|
"(an instance of which is set to I18n.exception_handler by default)."
|
330
357
|
exception.is_a?(MissingTranslation) ? exception.message : raise(exception)
|
331
358
|
end
|
359
|
+
|
360
|
+
def handle_enforce_available_locales_deprecation
|
361
|
+
if config.enforce_available_locales.nil? && !@unenforced_available_locales_deprecation
|
362
|
+
$stderr.puts "[deprecated] I18n.enforce_available_locales will default to true in the future. If you really want to skip validation of your locale you can set I18n.enforce_available_locales = false to avoid this message."
|
363
|
+
@unenforced_available_locales_deprecation = true
|
364
|
+
end
|
365
|
+
end
|
332
366
|
})
|
333
367
|
end
|
data/lib/i18n/backend/base.rb
CHANGED
@@ -42,6 +42,10 @@ module I18n
|
|
42
42
|
entry
|
43
43
|
end
|
44
44
|
|
45
|
+
def exists?(locale, key)
|
46
|
+
lookup(locale, key) != nil
|
47
|
+
end
|
48
|
+
|
45
49
|
# Acts the same as +strftime+, but uses a localized version of the
|
46
50
|
# format string. Takes a key from the date/time formats translations as
|
47
51
|
# a format argument (<em>e.g.</em>, <tt>:short</tt> in <tt>:'date.formats'</tt>).
|
data/lib/i18n/backend/chain.rb
CHANGED
@@ -56,6 +56,12 @@ module I18n
|
|
56
56
|
throw(:exception, I18n::MissingTranslation.new(locale, key, options))
|
57
57
|
end
|
58
58
|
|
59
|
+
def exists?(locale, key)
|
60
|
+
backends.any? do |backend|
|
61
|
+
backend.exists?(locale, key)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
59
65
|
def localize(locale, object, format = :default, options = {})
|
60
66
|
backends.each do |backend|
|
61
67
|
catch(:exception) do
|
data/lib/i18n/config.rb
CHANGED
@@ -8,6 +8,7 @@ module I18n
|
|
8
8
|
|
9
9
|
# Sets the current locale pseudo-globally, i.e. in the Thread.current hash.
|
10
10
|
def locale=(locale)
|
11
|
+
I18n.enforce_available_locales!(locale)
|
11
12
|
@locale = locale.to_sym rescue nil
|
12
13
|
end
|
13
14
|
|
@@ -28,6 +29,7 @@ module I18n
|
|
28
29
|
|
29
30
|
# Sets the current default locale. Used to set a custom default locale.
|
30
31
|
def default_locale=(locale)
|
32
|
+
I18n.enforce_available_locales!(locale)
|
31
33
|
@@default_locale = locale.to_sym rescue nil
|
32
34
|
end
|
33
35
|
|
@@ -105,5 +107,15 @@ module I18n
|
|
105
107
|
def load_path=(load_path)
|
106
108
|
@@load_path = load_path
|
107
109
|
end
|
110
|
+
|
111
|
+
# [Deprecated] this will default to true in the future
|
112
|
+
# Defaults to nil so that it triggers the deprecation warning
|
113
|
+
def enforce_available_locales
|
114
|
+
@@enforce_available_locales ||= nil
|
115
|
+
end
|
116
|
+
|
117
|
+
def enforce_available_locales=(enforce_available_locales)
|
118
|
+
@@enforce_available_locales = enforce_available_locales
|
119
|
+
end
|
108
120
|
end
|
109
121
|
end
|
data/lib/i18n/exceptions.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
|
1
3
|
module I18n
|
2
4
|
# Handles exceptions raised in the backend. All exceptions except for
|
3
5
|
# MissingTranslationData exceptions are re-thrown. When a MissingTranslationData
|
@@ -7,7 +9,19 @@ module I18n
|
|
7
9
|
include Module.new {
|
8
10
|
def call(exception, locale, key, options)
|
9
11
|
if exception.is_a?(MissingTranslation)
|
10
|
-
|
12
|
+
#
|
13
|
+
# TODO: this block is to be replaced by `exception.message` when
|
14
|
+
# rescue_format is removed
|
15
|
+
if options[:rescue_format] == :html
|
16
|
+
if @rescue_format_deprecation
|
17
|
+
$stderr.puts "[DEPRECATED] I18n's :recue_format option will be removed from a future release. All exception messages will be plain text. If you need the exception handler to return an html format please set or pass a custom exception handler."
|
18
|
+
@rescue_format_deprecation = true
|
19
|
+
end
|
20
|
+
exception.html_message
|
21
|
+
else
|
22
|
+
exception.message
|
23
|
+
end
|
24
|
+
|
11
25
|
elsif exception.is_a?(Exception)
|
12
26
|
raise exception
|
13
27
|
else
|
@@ -45,8 +59,9 @@ module I18n
|
|
45
59
|
end
|
46
60
|
|
47
61
|
def html_message
|
48
|
-
key
|
49
|
-
|
62
|
+
key = CGI.escapeHTML titleize(keys.last)
|
63
|
+
path = CGI.escapeHTML keys.join('.')
|
64
|
+
%(<span class="translation_missing" title="translation missing: #{path}">#{key}</span>)
|
50
65
|
end
|
51
66
|
|
52
67
|
def keys
|
@@ -63,6 +78,13 @@ module I18n
|
|
63
78
|
def to_exception
|
64
79
|
MissingTranslationData.new(locale, key, options)
|
65
80
|
end
|
81
|
+
|
82
|
+
protected
|
83
|
+
|
84
|
+
# TODO : remove when #html_message is removed
|
85
|
+
def titleize(key)
|
86
|
+
key.to_s.gsub('_', ' ').gsub(/\b('?[a-z])/) { $1.capitalize }
|
87
|
+
end
|
66
88
|
end
|
67
89
|
|
68
90
|
include Base
|
data/lib/i18n/tests/basics.rb
CHANGED
@@ -41,6 +41,11 @@ module I18n
|
|
41
41
|
assert_equal I18n.available_locales, I18n.available_locales
|
42
42
|
end
|
43
43
|
|
44
|
+
test "exists? is implemented by the backend" do
|
45
|
+
I18n.backend.store_translations(:foo, :bar => 'baz')
|
46
|
+
assert I18n.exists?(:bar, :foo)
|
47
|
+
end
|
48
|
+
|
44
49
|
test "storing a nil value as a translation removes it from the available locale data" do
|
45
50
|
I18n.backend.store_translations(:en, :to_be_deleted => 'bar')
|
46
51
|
assert_equal 'bar', I18n.t(:to_be_deleted, :default => 'baz')
|
data/lib/i18n/version.rb
CHANGED
@@ -28,9 +28,13 @@ class I18nExceptionsTest < Test::Unit::TestCase
|
|
28
28
|
end
|
29
29
|
|
30
30
|
test "MissingTranslationData html_message is a span with the titlelized last key token" do
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
exception = I18n::MissingTranslationData.new(:de, :foo, :scope => :bar)
|
32
|
+
assert_equal '<span class="translation_missing" title="translation missing: de.bar.foo">Foo</span>', exception.html_message
|
33
|
+
end
|
34
|
+
|
35
|
+
test "MissingTranslationData html_message html escapes key names" do
|
36
|
+
exception = I18n::MissingTranslationData.new(:de, '<script>Evil</script>', :scope => '<iframe src="example.com" />')
|
37
|
+
assert_equal '<span class="translation_missing" title="translation missing: de.<iframe src="example.com" />.<script>Evil</script>"><Script>Evil</Script></span>', exception.html_message
|
34
38
|
end
|
35
39
|
|
36
40
|
test "ExceptionHandler returns the html_message if :rescue_format => :html was given" do
|
data/test/i18n_test.rb
CHANGED
@@ -4,6 +4,7 @@ require 'test_helper'
|
|
4
4
|
class I18nTest < Test::Unit::TestCase
|
5
5
|
def setup
|
6
6
|
I18n.backend.store_translations(:'en', :currency => { :format => { :separator => '.', :delimiter => ',', } })
|
7
|
+
I18n.backend.store_translations(:'nl', :currency => { :format => { :separator => ',', :delimiter => '.', } })
|
7
8
|
end
|
8
9
|
|
9
10
|
test "exposes its VERSION constant" do
|
@@ -36,6 +37,15 @@ class I18nTest < Test::Unit::TestCase
|
|
36
37
|
end
|
37
38
|
end
|
38
39
|
|
40
|
+
test "raises an I18n::InvalidLocale exception when setting an unavailable default locale" do
|
41
|
+
begin
|
42
|
+
I18n.config.enforce_available_locales = true
|
43
|
+
assert_raise(I18n::InvalidLocale) { I18n.default_locale = :klingon }
|
44
|
+
ensure
|
45
|
+
I18n.config.enforce_available_locales = false
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
39
49
|
test "uses the default locale as a locale by default" do
|
40
50
|
assert_equal I18n.default_locale, I18n.locale
|
41
51
|
end
|
@@ -46,6 +56,15 @@ class I18nTest < Test::Unit::TestCase
|
|
46
56
|
assert_equal :de, Thread.current[:i18n_config].locale
|
47
57
|
I18n.locale = :en
|
48
58
|
end
|
59
|
+
|
60
|
+
test "raises an I18n::InvalidLocale exception when setting an unavailable locale" do
|
61
|
+
begin
|
62
|
+
I18n.config.enforce_available_locales = true
|
63
|
+
assert_raise(I18n::InvalidLocale) { I18n.locale = :klingon }
|
64
|
+
ensure
|
65
|
+
I18n.config.enforce_available_locales = false
|
66
|
+
end
|
67
|
+
end
|
49
68
|
|
50
69
|
test "can set the configuration object" do
|
51
70
|
begin
|
@@ -187,14 +206,56 @@ class I18nTest < Test::Unit::TestCase
|
|
187
206
|
assert_raise(I18n::ArgumentError) { I18n.t("") }
|
188
207
|
end
|
189
208
|
|
209
|
+
test "translate given an unavailable locale rases an I18n::InvalidLocale" do
|
210
|
+
begin
|
211
|
+
I18n.config.enforce_available_locales = true
|
212
|
+
assert_raise(I18n::InvalidLocale) { I18n.t(:foo, :locale => 'klingon') }
|
213
|
+
ensure
|
214
|
+
I18n.config.enforce_available_locales = false
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
test "exists? given an existing key will return true" do
|
219
|
+
assert_equal true, I18n.exists?(:currency)
|
220
|
+
end
|
221
|
+
|
222
|
+
test "exists? given a non-existing key will return false" do
|
223
|
+
assert_equal false, I18n.exists?(:bogus)
|
224
|
+
end
|
225
|
+
|
226
|
+
test "exists? given an existing dot-separated key will return true" do
|
227
|
+
assert_equal true, I18n.exists?('currency.format.delimiter')
|
228
|
+
end
|
229
|
+
|
230
|
+
test "exists? given a non-existing dot-separated key will return false" do
|
231
|
+
assert_equal false, I18n.exists?('currency.format.bogus')
|
232
|
+
end
|
233
|
+
|
234
|
+
test "exists? given an existing key and an existing locale will return true" do
|
235
|
+
assert_equal true, I18n.exists?(:currency, :nl)
|
236
|
+
end
|
237
|
+
|
238
|
+
test "exists? given a non-existing key and an existing locale will return false" do
|
239
|
+
assert_equal false, I18n.exists?(:bogus, :nl)
|
240
|
+
end
|
241
|
+
|
190
242
|
test "localize given nil raises an I18n::ArgumentError" do
|
191
243
|
assert_raise(I18n::ArgumentError) { I18n.l nil }
|
192
244
|
end
|
193
245
|
|
194
|
-
test "localize
|
246
|
+
test "localize given an Object raises an I18n::ArgumentError" do
|
195
247
|
assert_raise(I18n::ArgumentError) { I18n.l Object.new }
|
196
248
|
end
|
197
249
|
|
250
|
+
test "localize given an unavailable locale rases an I18n::InvalidLocale" do
|
251
|
+
begin
|
252
|
+
I18n.config.enforce_available_locales = true
|
253
|
+
assert_raise(I18n::InvalidLocale) { I18n.l(Time.now, :locale => 'klingon') }
|
254
|
+
ensure
|
255
|
+
I18n.config.enforce_available_locales = false
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
198
259
|
test "can use a lambda as an exception handler" do
|
199
260
|
begin
|
200
261
|
previous_exception_handler = I18n.exception_handler
|
@@ -251,4 +312,45 @@ class I18nTest < Test::Unit::TestCase
|
|
251
312
|
}
|
252
313
|
end
|
253
314
|
|
315
|
+
test "transliterate given an unavailable locale rases an I18n::InvalidLocale" do
|
316
|
+
begin
|
317
|
+
I18n.config.enforce_available_locales = true
|
318
|
+
assert_raise(I18n::InvalidLocale) { I18n.transliterate('string', :locale => 'klingon') }
|
319
|
+
ensure
|
320
|
+
I18n.config.enforce_available_locales = false
|
321
|
+
end
|
322
|
+
end
|
323
|
+
|
324
|
+
test "I18n.locale_available? returns true when the passed locale is available" do
|
325
|
+
I18n.available_locales = [:en, :de]
|
326
|
+
assert_equal true, I18n.locale_available?(:de)
|
327
|
+
end
|
328
|
+
|
329
|
+
test "I18n.locale_available? returns true when the passed locale is a string and is available" do
|
330
|
+
I18n.available_locales = [:en, :de]
|
331
|
+
assert_equal true, I18n.locale_available?('de')
|
332
|
+
end
|
333
|
+
|
334
|
+
test "I18n.locale_available? returns false when the passed locale is unavailable" do
|
335
|
+
assert_equal false, I18n.locale_available?(:klingon)
|
336
|
+
end
|
337
|
+
|
338
|
+
test "I18n.enforce_available_locales! raises an I18n::InvalidLocale when the passed locale is unavailable" do
|
339
|
+
begin
|
340
|
+
I18n.config.enforce_available_locales = true
|
341
|
+
assert_raise(I18n::InvalidLocale) { I18n.enforce_available_locales!(:klingon) }
|
342
|
+
ensure
|
343
|
+
I18n.config.enforce_available_locales = false
|
344
|
+
end
|
345
|
+
end
|
346
|
+
|
347
|
+
test "I18n.enforce_available_locales! does nothing when the passed locale is available" do
|
348
|
+
I18n.available_locales = [:en, :de]
|
349
|
+
begin
|
350
|
+
I18n.config.enforce_available_locales = true
|
351
|
+
assert_nothing_raised { I18n.enforce_available_locales!(:en) }
|
352
|
+
ensure
|
353
|
+
I18n.config.enforce_available_locales = false
|
354
|
+
end
|
355
|
+
end
|
254
356
|
end
|
metadata
CHANGED
@@ -1,10 +1,15 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: i18n
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 6
|
9
|
+
- 8
|
10
|
+
version: 0.6.8
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Sven Fuchs
|
9
14
|
- Joshua Harvey
|
10
15
|
- Matt Aimonetti
|
@@ -13,78 +18,76 @@ authors:
|
|
13
18
|
autorequire:
|
14
19
|
bindir: bin
|
15
20
|
cert_chain: []
|
16
|
-
|
17
|
-
|
18
|
-
|
21
|
+
|
22
|
+
date: 2013-12-03 00:00:00 Z
|
23
|
+
dependencies:
|
24
|
+
- !ruby/object:Gem::Dependency
|
19
25
|
name: activesupport
|
20
|
-
requirement: !ruby/object:Gem::Requirement
|
21
|
-
none: false
|
22
|
-
requirements:
|
23
|
-
- - ! '>='
|
24
|
-
- !ruby/object:Gem::Version
|
25
|
-
version: 3.0.0
|
26
|
-
type: :development
|
27
26
|
prerelease: false
|
28
|
-
|
27
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
29
28
|
none: false
|
30
|
-
requirements:
|
31
|
-
- -
|
32
|
-
- !ruby/object:Gem::Version
|
29
|
+
requirements:
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
hash: 7
|
33
|
+
segments:
|
34
|
+
- 3
|
35
|
+
- 0
|
36
|
+
- 0
|
33
37
|
version: 3.0.0
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: sqlite3
|
36
|
-
requirement: !ruby/object:Gem::Requirement
|
37
|
-
none: false
|
38
|
-
requirements:
|
39
|
-
- - ! '>='
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version: '0'
|
42
38
|
type: :development
|
39
|
+
version_requirements: *id001
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: sqlite3
|
43
42
|
prerelease: false
|
44
|
-
|
43
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
45
44
|
none: false
|
46
|
-
requirements:
|
47
|
-
- -
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
none: false
|
54
|
-
requirements:
|
55
|
-
- - ! '>='
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version: '0'
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
hash: 3
|
49
|
+
segments:
|
50
|
+
- 0
|
51
|
+
version: "0"
|
58
52
|
type: :development
|
53
|
+
version_requirements: *id002
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
name: mocha
|
59
56
|
prerelease: false
|
60
|
-
|
61
|
-
none: false
|
62
|
-
requirements:
|
63
|
-
- - ! '>='
|
64
|
-
- !ruby/object:Gem::Version
|
65
|
-
version: '0'
|
66
|
-
- !ruby/object:Gem::Dependency
|
67
|
-
name: test_declarative
|
68
|
-
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
69
58
|
none: false
|
70
|
-
requirements:
|
71
|
-
- -
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
hash: 3
|
63
|
+
segments:
|
64
|
+
- 0
|
65
|
+
version: "0"
|
74
66
|
type: :development
|
67
|
+
version_requirements: *id003
|
68
|
+
- !ruby/object:Gem::Dependency
|
69
|
+
name: test_declarative
|
75
70
|
prerelease: false
|
76
|
-
|
71
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
77
72
|
none: false
|
78
|
-
requirements:
|
79
|
-
- -
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
hash: 3
|
77
|
+
segments:
|
78
|
+
- 0
|
79
|
+
version: "0"
|
80
|
+
type: :development
|
81
|
+
version_requirements: *id004
|
82
82
|
description: New wave Internationalization support for Ruby.
|
83
83
|
email: rails-i18n@googlegroups.com
|
84
84
|
executables: []
|
85
|
+
|
85
86
|
extensions: []
|
87
|
+
|
86
88
|
extra_rdoc_files: []
|
87
|
-
|
89
|
+
|
90
|
+
files:
|
88
91
|
- ci/Gemfile.no-rails
|
89
92
|
- ci/Gemfile.no-rails.lock
|
90
93
|
- ci/Gemfile.rails-2.3.x
|
@@ -179,30 +182,40 @@ files:
|
|
179
182
|
- test/test_helper.rb
|
180
183
|
- README.textile
|
181
184
|
- MIT-LICENSE
|
182
|
-
- CHANGELOG.textile
|
183
185
|
homepage: http://github.com/svenfuchs/i18n
|
184
|
-
licenses:
|
186
|
+
licenses:
|
185
187
|
- MIT
|
186
188
|
post_install_message:
|
187
189
|
rdoc_options: []
|
188
|
-
|
190
|
+
|
191
|
+
require_paths:
|
189
192
|
- lib
|
190
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
193
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
191
194
|
none: false
|
192
|
-
requirements:
|
193
|
-
- -
|
194
|
-
- !ruby/object:Gem::Version
|
195
|
-
|
196
|
-
|
195
|
+
requirements:
|
196
|
+
- - ">="
|
197
|
+
- !ruby/object:Gem::Version
|
198
|
+
hash: 3
|
199
|
+
segments:
|
200
|
+
- 0
|
201
|
+
version: "0"
|
202
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
197
203
|
none: false
|
198
|
-
requirements:
|
199
|
-
- -
|
200
|
-
- !ruby/object:Gem::Version
|
204
|
+
requirements:
|
205
|
+
- - ">="
|
206
|
+
- !ruby/object:Gem::Version
|
207
|
+
hash: 17
|
208
|
+
segments:
|
209
|
+
- 1
|
210
|
+
- 3
|
211
|
+
- 5
|
201
212
|
version: 1.3.5
|
202
213
|
requirements: []
|
203
|
-
|
204
|
-
|
214
|
+
|
215
|
+
rubyforge_project: "[none]"
|
216
|
+
rubygems_version: 1.8.6
|
205
217
|
signing_key:
|
206
218
|
specification_version: 3
|
207
219
|
summary: New wave Internationalization support for Ruby
|
208
220
|
test_files: []
|
221
|
+
|
data/CHANGELOG.textile
DELETED
@@ -1,152 +0,0 @@
|
|
1
|
-
h1. Changelog
|
2
|
-
|
3
|
-
h2. 0.5.0
|
4
|
-
|
5
|
-
* "Extract Backend::ActiveRecord to a separate gem":https://github.com/svenfuchs/i18n/commit/197dacebad356b910d69fa69a719c2ad10cf49e6 (see "i18n-active_record":https://github.com/svenfuchs/i18n-active_record)
|
6
|
-
* "Improve exception handling":https://github.com/svenfuchs/i18n/commit/2913ff9a7544f223f60e7d7b32c2a0e1af89812b (deprectates I18n.default_exception_handler)
|
7
|
-
* "Change MissingTranslationData message to 'translation missing: foo.bar'":https://github.com/svenfuchs/i18n/commit/68fdfe47952325411afe5942e971ce10b2bdf900
|
8
|
-
* "Expose MissingTranslationsData#keys method":https://github.com/svenfuchs/i18n/commit/3a37a389ecaac9670355b334e23e775549ee9822
|
9
|
-
* "Improve Cascade#lookup (add default options)":https://github.com/svenfuchs/i18n/commit/0b9a1f2058a2be9543106cc19d08071c359511e1
|
10
|
-
* "Finally remove deprecated interpolation syntax":https://github.com/svenfuchs/i18n/commit/2d43846d2b2a2e596f30fa58ea1c9ddb2243bb64
|
11
|
-
|
12
|
-
h2. 0.4.2 (2010-10-26)
|
13
|
-
|
14
|
-
* "Improve UTF8 handling":http://github.com/svenfuchs/i18n/commit/e8d5820a3b08eeca28de1a2b9c8a6ad2b9e6476c
|
15
|
-
* "Expose I18n::VERSION":http://github.com/svenfuchs/i18n/commit/b832037bac94c7144f45f3ff5e3b4e4089781726
|
16
|
-
* "Better deprecation output":http://github.com/svenfuchs/i18n/commit/2bee924464b8a9c33d3d7852eb1c8423aa38cc25
|
17
|
-
|
18
|
-
h2. 0.4.1 (2010-06-05)
|
19
|
-
|
20
|
-
* "Fix interpolation failure on Ruby 1.9":http://github.com/svenfuchs/i18n/commit/8d45bedb11c4136c00e853d104b00a8e67ec4894
|
21
|
-
|
22
|
-
h2. 0.4.0 (2010-05-27)
|
23
|
-
|
24
|
-
* "The localization proc also receives the object as option":http://github.com/svenfuchs/i18n/commit/4a8cd9fa660daaa3078e24c5851353ca377d9213
|
25
|
-
|
26
|
-
h2. 0.4.0.beta1 (2010-05-03)
|
27
|
-
|
28
|
-
* "Renamed Fast backend to Memoize backend":http://github.com/svenfuchs/i18n/commit/f7f7dc12c00a19d3876223771e14f8671ff313cd
|
29
|
-
|
30
|
-
* "Deprecate {{}} as interpolation syntax":http://github.com/svenfuchs/i18n/commit/8894ee521ef5788c415b625a6daf522af4c416e0
|
31
|
-
|
32
|
-
* "Allow nil translation to be stored again":http://github.com/svenfuchs/i18n/commit/f2074f1e82d10c2e9a801c8cc2f2a0c7c30703ba
|
33
|
-
|
34
|
-
h2. 0.4.0.beta (2010-04-30)
|
35
|
-
|
36
|
-
* "Added a KeyValue backend":http://github.com/svenfuchs/i18n/commit/28ca5f53ade7f545f8c0804e93564d4686b416a4
|
37
|
-
|
38
|
-
* "Added transliteration support":http://github.com/svenfuchs/i18n/commit/928fdb4794959e779e90f360eb01ba043672d8d5
|
39
|
-
|
40
|
-
* "Create Flatten backend module to aid handling flatten translations":http://github.com/svenfuchs/i18n/commit/2ec9d6998aa8facd7b15a3ef47a96cf2471cd8a1
|
41
|
-
|
42
|
-
* "Decouple the external separator (used when storing translations) from the internal separator in Fast and ActiveRecord backends":http://github.com/svenfuchs/i18n/commit/274cb4daa0ca5e3b2bd23b45eb7f9fc58f75a79d
|
43
|
-
|
44
|
-
h2. 0.3.7 (2010-04-17)
|
45
|
-
|
46
|
-
* "Speed up I18n.normalize_keys by caching reused normalizations and producing less garbage":http://github.com/svenfuchs/i18n/commit/819dac0fea9c29e6545801aa107e63e355728cd4
|
47
|
-
|
48
|
-
h2. 0.3.6 (2010-03-23)
|
49
|
-
|
50
|
-
* "Move gettext po parser to lib":http://github.com/svenfuchs/i18n/commit/b2f038663b55727ac2327e6f07a46ba5d69d600c
|
51
|
-
|
52
|
-
* "Move I18n configuration to I18n.config":http://github.com/svenfuchs/i18n/commit/4a7baea86663ead8c681008c3e80a622f0546b07
|
53
|
-
|
54
|
-
h2. 0.3.5 (2010-02-26)
|
55
|
-
|
56
|
-
* "Delegate I18n.normalize_translation_keys to I18n.normalize_keys and deprecate
|
57
|
-
the former":http://github.com/svenfuchs/i18n/commit/7284b04d5f5dd9679cb68875515cdd0cdfc96fef
|
58
|
-
|
59
|
-
h2. 0.3.4 (2010-02-25)
|
60
|
-
|
61
|
-
* "Rename I18n.normalize_translation_keys to I18n.normalize_keys and finally make it public":http://github.com/svenfuchs/i18n/commit/20b05fe5802df6c90fb70a4e3760b2b851b791b3
|
62
|
-
|
63
|
-
* "Added CLDR supoprt":http://github.com/svenfuchs/i18n/commit/860eadf671a231e7f5dffb1bb27fa318ff7a8786
|
64
|
-
|
65
|
-
h2. 0.3.3 (2009-12-29)
|
66
|
-
|
67
|
-
* "Use lib/i18n/version":http://github.com/svenfuchs/i18n/commit/ff426c8e7a2438b814cb303adadec292dacb752e
|
68
|
-
|
69
|
-
* "Added a benchmark suite":http://github.com/svenfuchs/i18n/commit/f9b5b9b113097724638bdab96862ffa404e67e70
|
70
|
-
|
71
|
-
* "Ensure links can be handled recursively":http://github.com/svenfuchs/i18n/commit/2c50bd209f3fc24fe9dfa694c81be64340f09b7d
|
72
|
-
|
73
|
-
* "Make sure we can lookup false values as translation data":http://github.com/svenfuchs/i18n/commit/561c82ba4b8921d03bfdf56cb2d0c2f287629001
|
74
|
-
|
75
|
-
* "Added Fast backend module":http://github.com/svenfuchs/i18n/commit/bd2f09f0a251ca793b0e8ecc7e32177a2f091c23
|
76
|
-
|
77
|
-
* "Added InterpolationCompiler backend module":http://github.com/svenfuchs/i18n/commit/91810887d1abfb28996a9183bc9004678290d28b
|
78
|
-
|
79
|
-
h2. 0.3.2 (2009-12-12)
|
80
|
-
|
81
|
-
* "Added Cascade backend":http://github.com/svenfuchs/i18n/commit/8009aef293e9ef8564c9005090d8380feabcaf6f
|
82
|
-
|
83
|
-
h2. 0.3.1 (2009-12-11)
|
84
|
-
|
85
|
-
* "Add PoParser to gemspec":http://github.com/svenfuchs/i18n/commit/d6b2763f39c932f66adb039b96882a472f883c51
|
86
|
-
* "Enable custom separators for ActiveRecord backend":http://github.com/svenfuchs/i18n/commit/9341d3fcfc951cc31807ba672d2b5d90909ef3e5
|
87
|
-
* "Pass interpolation values to interpolation procs":http://github.com/svenfuchs/i18n/commit/39c2ed8fbad645671cd5520ce7ad0aeefe2b0cca
|
88
|
-
* "Fix that ngettext supports keys with dots":http://github.com/svenfuchs/i18n/commit/7362a43c34364d500de8899cfcca6bf1a5e6d1c8
|
89
|
-
|
90
|
-
h2. 0.3.0 (2009-11-30)
|
91
|
-
|
92
|
-
* "Gettext backend and helpers":http://github.com/svenfuchs/i18n/commit/35a1740d2f10b808548af352006950da4017e374
|
93
|
-
* "Metadata module":http://github.com/svenfuchs/i18n/commit/2677208555179b36fcbe958c0e8bc642cf5bc020
|
94
|
-
* "Basic ActiveRecord backend":http://github.com/svenfuchs/i18n/commit/786632d0b42de423ecf0969622efc87f1691e2a2
|
95
|
-
* "Set encoding to UTF8 for all files":http://github.com/svenfuchs/i18n/commit/9be3d4a311b5bf583eec5d39986176cc40c112f2
|
96
|
-
* "Chain backend":http://github.com/svenfuchs/i18n/commit/08259ffb88b3005403648d77bc1cbca0b92f3cf5
|
97
|
-
* "Backend/cache implementation":http://github.com/svenfuchs/i18n/commit/e7bf15351cd2e27f5972eb40e65a5dd6f4a0feed
|
98
|
-
* "Pluralization module":http://github.com/svenfuchs/i18n/commit/9ca4c9ed52d4706566a6abeb2d78722dcc5d4764
|
99
|
-
* "add and adapt Globalize2 fallback implementation":http://github.com/svenfuchs/i18n/commit/1b37a303b27d6222b17162804b06323e5628768f
|
100
|
-
* "move Simple backend implementation to a Base backend class and extend Simple from Base.":http://github.com/svenfuchs/i18n/commit/32ddc80a04e6aa247f6d6613bde7f78c73396cb4
|
101
|
-
|
102
|
-
h2. 0.2.0 (2009-07-12)
|
103
|
-
|
104
|
-
* "Allow using Ruby 1.9 syntax for string interpolation (API addition)":http://github.com/svenfuchs/i18n/commit/c6e0b06d512f2af57199a843a1d8a40241b32861
|
105
|
-
* "Allow configuring the default scope separator, allow to pass a custom scope separator(API addition)":http://github.com/svenfuchs/i18n/commit/5b75bfbc348061adc11e3790187a187275bfd471 (e.g. I18n.t(:'foo|bar', :separator => '|')
|
106
|
-
* "Pass :format option to #translate for #localize more useful lambda support":http://github.com/svenfuchs/i18n/commit/e277711b3c844fe7589b8d3f9af0f7d1b969a273
|
107
|
-
* "Refactor Simple backend #resolve to #default and #resolve for more consistency. Now allows to pass lambdas as defaults and re-resolve Symbols":http://github.com/svenfuchs/i18n/commit/8c4ce3d923ce5fa73e973fe28217e18165549aba
|
108
|
-
* "Add lambda support to #translate (API addition)":http://github.com/svenfuchs/i18n/commit/c90e62d8f7d3d5b78f34cfe328d871b58884f115
|
109
|
-
* "Add lambda support to #localize (API addition)":http://github.com/svenfuchs/i18n/commit/9d390afcf33f3f469bb95e6888147152f6cc7442
|
110
|
-
|
111
|
-
h2. 0.1.3 (2009-02-27)
|
112
|
-
|
113
|
-
* "Remove unnecessary string encoding handling in the i18n simple backend which made the backend break on Ruby 1.9":http://github.com/svenfuchs/i18n/commit/4c3a970783861a94f2e89f46714fb3434e4f4f8d
|
114
|
-
|
115
|
-
h2. 0.1.2 (2009-01-09)
|
116
|
-
|
117
|
-
* "added #available_locales (returns an array of locales for which translations are available)":http://github.com/svenfuchs/i18n/commit/411f8fe7c8f3f89e9b6b921fa62ed66cb92f3af4
|
118
|
-
* "flatten load_path before using it so that a nested array of paths won't throw up":http://github.com/svenfuchs/i18n/commit/d473a068a2b90aba98135deb225d6eb6d8104d70
|
119
|
-
|
120
|
-
h2. 0.1.1 (2008-11-20)
|
121
|
-
|
122
|
-
* "Use :'en' as a default locale (in favor of :'en-US')":http://github.com/svenfuchs/i18n/commit/c4b10b246aecf7da78cb2568dd0d2ab7e6b8a230
|
123
|
-
* "Add #reload! to Simple backend":http://github.com/svenfuchs/i18n/commit/36dd2bd9973b9e1559728749a9daafa44693e964
|
124
|
-
|
125
|
-
h2. 0.1.0 (2008-10-25)
|
126
|
-
|
127
|
-
* "Fix Simple backend to distinguish false from nil values":http://github.com/svenfuchs/i18n/commit/39d9a47da14b5f3ba126af48923af8c30e135166
|
128
|
-
* "Add #load_path to public api, add initialize to simple backend and remove #load_translations from public api":http://github.com/svenfuchs/i18n/commit/c4c5649e6bc8f020f1aaf5a5470bde048e22c82d
|
129
|
-
* "Speed up Backend::Simple#interpolate":http://github.com/svenfuchs/i18n/commit/9e1ac6bf8833304e036323ec9932b9f33c468a35
|
130
|
-
* "Remove #populate and #store_translations from public API":http://github.com/svenfuchs/i18n/commit/f4e514a80be7feb509f66824ee311905e2940900
|
131
|
-
* "Use :other instead of :many as a plural key":http://github.com/svenfuchs/i18n/commit/0f8f20a2552bf6a2aa758d8fdd62a7154e4a1bf6
|
132
|
-
* "Use a class instead of a module for Simple backend":http://github.com/svenfuchs/i18n/commit/08f051aa61320c17debde24a83268bc74e33b995
|
133
|
-
* "Make Simple backend #interpolate deal with non-ASCII string encodings":http://github.com/svenfuchs/i18n/commit/d84a3f3f55543c084d5dc5d1fed613b8df148789
|
134
|
-
* "Fix default arrays of non-existant keys returning the default array":http://github.com/svenfuchs/i18n/commit/6c04ca86c87f97dc78f07c2a4023644e5ba8b839
|
135
|
-
|
136
|
-
h2. Initial implementation (June/July 2008)
|
137
|
-
|
138
|
-
Initial implementation by "Sven Fuchs":http://www.workingwithrails.com/person/9963-sven-fuchs based on previous discussion/consensus of the rails-i18n team (alphabetical order) and many others:
|
139
|
-
|
140
|
-
* "Matt Aimonetti":http://railsontherun.com
|
141
|
-
* "Sven Fuchs":http://www.workingwithrails.com/person/9963-sven-fuchs
|
142
|
-
* "Joshua Harvey":http://www.workingwithrails.com/person/759-joshua-harvey
|
143
|
-
* "Saimon Moore":http://saimonmoore.net
|
144
|
-
* "Stephan Soller":http://www.arkanis-development.de
|
145
|
-
|
146
|
-
h2. More information
|
147
|
-
|
148
|
-
* "Homepage":http://rails-i18n.org
|
149
|
-
* "Wiki":http://rails-i18n.org/wiki
|
150
|
-
* "Mailinglist":http://groups.google.com/group/rails-i18n
|
151
|
-
* "About the project/history":http://www.artweb-design.de/2008/7/18/finally-ruby-on-rails-gets-internationalized
|
152
|
-
* "Initial API Intro":http://www.artweb-design.de/2008/7/18/the-ruby-on-rails-i18n-core-api
|