rails-i18n 0.5.2 → 0.6.0.beta1
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/README.md +13 -0
- data/lib/rails_i18n/railtie.rb +11 -4
- data/rails/transliteration/ru.rb +66 -47
- data/rails/transliteration/uk.rb +104 -0
- metadata +13 -12
data/README.md
CHANGED
@@ -17,6 +17,19 @@ or run this command:
|
|
17
17
|
|
18
18
|
Note that your rails version must be 3.0 or higher if you want to install `rails-i18n` as a gem. For rails 2.x, install it manually as described below.
|
19
19
|
|
20
|
+
## Configuration
|
21
|
+
|
22
|
+
By default `rails-i18n` loads all locale files, pluralization and
|
23
|
+
transliteration rules available in the gem. This behaviour can be changed, if you
|
24
|
+
specify in `config/environments/*` the locales which have to be loaded via
|
25
|
+
`I18n.available_locales` option:
|
26
|
+
|
27
|
+
config.i18n.available_locales = ['es-CO', :de]
|
28
|
+
|
29
|
+
or
|
30
|
+
|
31
|
+
config.i18n.available_locales = :nl
|
32
|
+
|
20
33
|
## Manual installation
|
21
34
|
|
22
35
|
Download the locale files that are found in the directory [rails/locale](http://github.com/svenfuchs/rails-i18n/tree/master/rails/locale/) and put them into the `config/locales` directory of your Rails application.
|
data/lib/rails_i18n/railtie.rb
CHANGED
@@ -2,11 +2,13 @@ require 'rails'
|
|
2
2
|
|
3
3
|
module RailsI18n
|
4
4
|
class Railtie < ::Rails::Railtie #:nodoc:
|
5
|
-
initializer 'rails-i18n' do
|
5
|
+
initializer 'rails-i18n' do |app|
|
6
6
|
RailsI18n::Railtie.instance_eval do
|
7
|
-
|
8
|
-
|
9
|
-
add(
|
7
|
+
pattern = pattern_from app.config.i18n.available_locales
|
8
|
+
|
9
|
+
add("rails/locale/#{pattern}.yml")
|
10
|
+
add("rails/pluralization/#{pattern}.rb")
|
11
|
+
add("rails/transliteration/#{pattern}.{rb,yml}")
|
10
12
|
|
11
13
|
init_pluralization_module
|
12
14
|
end
|
@@ -19,6 +21,11 @@ module RailsI18n
|
|
19
21
|
I18n.load_path.concat(files)
|
20
22
|
end
|
21
23
|
|
24
|
+
def self.pattern_from(args)
|
25
|
+
array = Array(args || [])
|
26
|
+
array.blank? ? '*' : "{#{array.join ','}}"
|
27
|
+
end
|
28
|
+
|
22
29
|
def self.init_pluralization_module
|
23
30
|
I18n.backend.class.send(:include, I18n::Backend::Pluralization)
|
24
31
|
end
|
data/rails/transliteration/ru.rb
CHANGED
@@ -1,65 +1,84 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
# (c) Yaroslav Markin, Julian "julik" Tarkhanov and Co
|
2
4
|
# https://github.com/yaroslav/russian/blob/master/lib/russian/transliteration.rb
|
3
5
|
|
4
6
|
module RailsI18n
|
5
7
|
module Transliteration
|
6
8
|
module Russian
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
"з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
|
12
|
-
"м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
|
13
|
-
"с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
|
14
|
-
"ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"'",
|
15
|
-
"ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya",
|
16
|
-
}
|
9
|
+
class << self
|
10
|
+
def rule
|
11
|
+
lambda do |string|
|
12
|
+
chars = string.scan(%r{#{multi_keys.join '|'}|\w|.})
|
17
13
|
|
18
|
-
|
19
|
-
"ье"=>"ie",
|
20
|
-
"ьё"=>"ie",
|
21
|
-
}
|
14
|
+
result = ""
|
22
15
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
16
|
+
chars.each_with_index do |char, index|
|
17
|
+
if upper.has_key?(char) && lower.has_key?(chars[index+1])
|
18
|
+
# combined case
|
19
|
+
result << upper[char].downcase.capitalize
|
20
|
+
elsif upper.has_key?(char)
|
21
|
+
result << upper[char]
|
22
|
+
elsif lower.has_key?(char)
|
23
|
+
result << lower[char]
|
24
|
+
else
|
25
|
+
result << char
|
26
|
+
end
|
27
|
+
end
|
33
28
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
}
|
29
|
+
result
|
30
|
+
end
|
31
|
+
end
|
38
32
|
|
39
|
-
|
40
|
-
UPPER = (UPPER_SINGLE.merge(UPPER_MULTI)).freeze
|
41
|
-
MULTI_KEYS = (LOWER_MULTI.merge(UPPER_MULTI)).keys.sort_by {|s| s.length}.reverse.freeze
|
33
|
+
private
|
42
34
|
|
43
|
-
|
44
|
-
|
45
|
-
chars = string.scan(%r{#{MULTI_KEYS.join '|'}|\w|.})
|
35
|
+
# use instance variables instead of constants to prevent warnings
|
36
|
+
# on re-evaling after I18n.reload!
|
46
37
|
|
47
|
-
|
38
|
+
def upper
|
39
|
+
@upper ||= begin
|
40
|
+
upper_single = {
|
41
|
+
"Ґ"=>"G","Ё"=>"YO","Є"=>"E","Ї"=>"YI","І"=>"I",
|
42
|
+
"А"=>"A","Б"=>"B","В"=>"V","Г"=>"G",
|
43
|
+
"Д"=>"D","Е"=>"E","Ж"=>"ZH","З"=>"Z","И"=>"I",
|
44
|
+
"Й"=>"Y","К"=>"K","Л"=>"L","М"=>"M","Н"=>"N",
|
45
|
+
"О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T",
|
46
|
+
"У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",
|
47
|
+
"Ш"=>"SH","Щ"=>"SCH","Ъ"=>"'","Ы"=>"Y","Ь"=>"",
|
48
|
+
"Э"=>"E","Ю"=>"YU","Я"=>"YA",
|
49
|
+
}
|
48
50
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
51
|
+
(upper_single.merge(upper_multi)).freeze
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def lower
|
56
|
+
@lower ||= begin
|
57
|
+
lower_single = {
|
58
|
+
"і"=>"i","ґ"=>"g","ё"=>"yo","№"=>"#","є"=>"e",
|
59
|
+
"ї"=>"yi","а"=>"a","б"=>"b",
|
60
|
+
"в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"zh",
|
61
|
+
"з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
|
62
|
+
"м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
|
63
|
+
"с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
|
64
|
+
"ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"'",
|
65
|
+
"ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya",
|
66
|
+
}
|
67
|
+
|
68
|
+
(lower_single.merge(lower_multi)).freeze
|
60
69
|
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def upper_multi
|
73
|
+
@upper_multi ||= { "ЬЕ"=>"IE", "ЬЁ"=>"IE" }
|
74
|
+
end
|
75
|
+
|
76
|
+
def lower_multi
|
77
|
+
@lower_multi ||= { "ье"=>"ie", "ьё"=>"ie" }
|
78
|
+
end
|
61
79
|
|
62
|
-
|
80
|
+
def multi_keys
|
81
|
+
@multi_keys ||= (lower_multi.merge(upper_multi)).keys.sort_by {|s| s.length}.reverse.freeze
|
63
82
|
end
|
64
83
|
end
|
65
84
|
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module RailsI18n
|
4
|
+
module Transliteration
|
5
|
+
module Ukrainian
|
6
|
+
class << self
|
7
|
+
def rule
|
8
|
+
lambda do |string|
|
9
|
+
string.gsub(/./) do |char|
|
10
|
+
# Regexp.last_match is local to the thread and method scope
|
11
|
+
# of the method that did the pattern match.
|
12
|
+
@pre_match, @post_match = $`, $'
|
13
|
+
|
14
|
+
case char
|
15
|
+
when 'Ж'
|
16
|
+
lookahead_upcase 'ZH'
|
17
|
+
when 'Х'
|
18
|
+
lookahead_upcase 'KH'
|
19
|
+
when 'Ц'
|
20
|
+
lookahead_upcase 'TS'
|
21
|
+
when 'Ч'
|
22
|
+
lookahead_upcase 'CH'
|
23
|
+
when 'Ш'
|
24
|
+
lookahead_upcase 'SH'
|
25
|
+
when 'Щ'
|
26
|
+
lookahead_upcase 'SHCH'
|
27
|
+
when 'г'
|
28
|
+
behind =~ /з/i ? 'gh' : 'h'
|
29
|
+
when 'Г'
|
30
|
+
behind =~ /з/i ? lookahead_upcase('GH') : 'H'
|
31
|
+
when 'є'
|
32
|
+
letter?(behind) ? 'ie' : 'ye'
|
33
|
+
when 'Є'
|
34
|
+
letter?(behind) ? lookahead_upcase('IE') : lookahead_upcase('YE')
|
35
|
+
when 'ї'
|
36
|
+
letter?(behind) ? 'i' : 'yi'
|
37
|
+
when 'Ї'
|
38
|
+
letter?(behind) ? 'I' : lookahead_upcase('YI')
|
39
|
+
when 'й'
|
40
|
+
letter?(behind) ? 'i' : 'y'
|
41
|
+
when 'Й'
|
42
|
+
letter?(behind) ? 'I' : 'Y'
|
43
|
+
when 'ю'
|
44
|
+
letter?(behind) ? 'iu' : 'yu'
|
45
|
+
when 'Ю'
|
46
|
+
letter?(behind) ? lookahead_upcase('IU') : lookahead_upcase('YU')
|
47
|
+
when 'я'
|
48
|
+
letter?(behind) ? 'ia' : 'ya'
|
49
|
+
when 'Я'
|
50
|
+
letter?(behind) ? lookahead_upcase('IA') : lookahead_upcase('YA')
|
51
|
+
when "'"
|
52
|
+
# remove apostrophe inside a word
|
53
|
+
letter?(behind) && letter?(ahead) ? '' : "'"
|
54
|
+
else
|
55
|
+
straight_lookup[char] || char
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def behind
|
64
|
+
@pre_match && @pre_match[-1]
|
65
|
+
end
|
66
|
+
|
67
|
+
def ahead
|
68
|
+
@post_match && @post_match[0]
|
69
|
+
end
|
70
|
+
|
71
|
+
def downcased?(symbol)
|
72
|
+
symbol =~ /\p{Ll}/
|
73
|
+
end
|
74
|
+
|
75
|
+
# apostrophe can be inside a word
|
76
|
+
# TODO what about hyphen?
|
77
|
+
def letter?(symbol)
|
78
|
+
symbol =~ /[\p{L}'’]/
|
79
|
+
end
|
80
|
+
|
81
|
+
def lookahead_upcase(word)
|
82
|
+
downcased?(ahead) ? word.capitalize : word.upcase
|
83
|
+
end
|
84
|
+
|
85
|
+
def straight_lookup
|
86
|
+
@straight_lookup ||= {
|
87
|
+
'а'=>'a','б'=>'b','в'=>'v','ґ'=>'g','д'=>'d','е'=>'e','ж'=>'zh',
|
88
|
+
'з'=>'z','и'=>'y','і'=>'i','к'=>'k','л'=>'l','м'=>'m','н'=>'n','о'=>'o',
|
89
|
+
'п'=>'p','р'=>'r','с'=>'s','т'=>'t','у'=>'u','ф'=>'f','х'=>'kh','ц'=>'ts',
|
90
|
+
'ч'=>'ch','ш'=>'sh','щ'=>'shch','ь'=>'','’'=>'',
|
91
|
+
'А'=>'A','Б'=>'B','В'=>'V','Ґ'=>'G','Д'=>'D','Е'=>'E',
|
92
|
+
'З'=>'Z','И'=>'Y','І'=>'I','К'=>'K','Л'=>'L','М'=>'M','Н'=>'N','О'=>'O',
|
93
|
+
'П'=>'P','Р'=>'R','С'=>'S','Т'=>'T','У'=>'U','Ф'=>'F','Ь'=>''
|
94
|
+
}
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
{ :uk => {
|
102
|
+
:i18n => {
|
103
|
+
:transliterate => {
|
104
|
+
:rule => RailsI18n::Transliteration::Ukrainian.rule }}}}
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-i18n
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.6.0.beta1
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Rails I18n Group
|
@@ -13,7 +13,7 @@ date: 2012-03-17 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: i18n
|
16
|
-
requirement: &
|
16
|
+
requirement: &12820520 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0.5'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *12820520
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rails
|
27
|
-
requirement: &
|
27
|
+
requirement: &12816640 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 3.0.0
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *12816640
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec-rails
|
38
|
-
requirement: &
|
38
|
+
requirement: &12843140 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 2.7.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *12843140
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: i18n-spec
|
49
|
-
requirement: &
|
49
|
+
requirement: &12839960 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 0.1.1
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *12839960
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: spork
|
60
|
-
requirement: &
|
60
|
+
requirement: &12837560 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: 1.0rc
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *12837560
|
69
69
|
description: A set of common locale data and translations to internationalize and/or
|
70
70
|
localize your Rails applications.
|
71
71
|
email: rails-i18n@googlegroups.com
|
@@ -243,6 +243,7 @@ files:
|
|
243
243
|
- rails/pluralization/sms.rb
|
244
244
|
- rails/transliteration/ru.rb
|
245
245
|
- rails/transliteration/bg.yml
|
246
|
+
- rails/transliteration/uk.rb
|
246
247
|
- rails/transliteration/hu.yml
|
247
248
|
- README.md
|
248
249
|
- MIT-LICENSE.txt
|