rails-i18n 0.1.0 → 5.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +439 -0
- data/MIT-LICENSE.txt +1 -1
- data/README.md +104 -48
- data/lib/rails-i18n.rb +1 -4
- data/lib/rails_i18n.rb +2 -0
- data/lib/rails_i18n/common_pluralizations/east_slavic.rb +42 -0
- data/lib/rails_i18n/common_pluralizations/one_other.rb +19 -0
- data/lib/rails_i18n/common_pluralizations/one_two_other.rb +28 -0
- data/lib/rails_i18n/common_pluralizations/one_upto_two_other.rb +19 -0
- data/lib/rails_i18n/common_pluralizations/one_with_zero_other.rb +20 -0
- data/lib/rails_i18n/common_pluralizations/other.rb +17 -0
- data/lib/rails_i18n/common_pluralizations/romanian.rb +28 -0
- data/lib/rails_i18n/common_pluralizations/west_slavic.rb +27 -0
- data/lib/rails_i18n/railtie.rb +33 -0
- data/lib/rails_i18n/unicode.rb +1 -0
- data/rails/locale/af.yml +213 -0
- data/rails/locale/ar.yml +256 -204
- data/rails/locale/az.yml +203 -0
- data/rails/locale/be.yml +269 -0
- data/rails/locale/bg.yml +176 -302
- data/rails/locale/bn.yml +176 -0
- data/rails/locale/bs.yml +232 -141
- data/rails/locale/ca.yml +176 -230
- data/rails/locale/cs.yml +218 -0
- data/rails/locale/cy.yml +222 -197
- data/rails/locale/da.yml +183 -211
- data/rails/locale/de-AT.yml +191 -166
- data/rails/locale/de-CH.yml +190 -165
- data/rails/locale/de-DE.yml +219 -0
- data/rails/locale/de.yml +190 -201
- data/rails/locale/el-CY.yml +202 -0
- data/rails/locale/el.yml +178 -149
- data/rails/locale/en-AU.yml +193 -198
- data/rails/locale/en-CA.yml +215 -0
- data/rails/locale/en-CY.yml +215 -0
- data/rails/locale/en-GB.yml +192 -197
- data/rails/locale/en-IE.yml +215 -0
- data/rails/locale/en-IN.yml +215 -0
- data/rails/locale/en-NZ.yml +215 -0
- data/rails/locale/en-US.yml +193 -200
- data/rails/locale/en-ZA.yml +215 -0
- data/rails/locale/en.yml +215 -0
- data/rails/locale/eo.yml +165 -189
- data/rails/locale/es-419.yml +219 -0
- data/rails/locale/es-AR.yml +190 -190
- data/rails/locale/es-CL.yml +195 -200
- data/rails/locale/es-CO.yml +189 -190
- data/rails/locale/es-CR.yml +219 -0
- data/rails/locale/es-EC.yml +219 -0
- data/rails/locale/es-ES.yml +219 -0
- data/rails/locale/es-MX.yml +189 -197
- data/rails/locale/es-NI.yml +219 -0
- data/rails/locale/es-PA.yml +219 -0
- data/rails/locale/es-PE.yml +200 -151
- data/rails/locale/es-US.yml +219 -0
- data/rails/locale/es-VE.yml +219 -0
- data/rails/locale/es.yml +198 -204
- data/rails/locale/et.yml +183 -236
- data/rails/locale/eu.yml +187 -201
- data/rails/locale/fa.yml +183 -199
- data/rails/locale/fi.yml +188 -202
- data/rails/locale/fr-CA.yml +185 -195
- data/rails/locale/fr-CH.yml +185 -192
- data/rails/locale/fr-FR.yml +217 -0
- data/rails/locale/fr.yml +184 -189
- data/rails/locale/gl.yml +172 -0
- data/rails/locale/he.yml +176 -205
- data/rails/locale/hi-IN.yml +172 -197
- data/rails/locale/hi.yml +172 -197
- data/rails/locale/hr.yml +224 -143
- data/rails/locale/hu.yml +173 -192
- data/rails/locale/id.yml +193 -168
- data/rails/locale/is.yml +192 -206
- data/rails/locale/it-CH.yml +202 -0
- data/rails/locale/it.yml +192 -215
- data/rails/locale/ja.yml +184 -205
- data/rails/locale/ka.yml +211 -0
- data/rails/locale/km.yml +167 -0
- data/rails/locale/kn.yml +172 -198
- data/rails/locale/ko.yml +182 -205
- data/rails/locale/lb.yml +209 -0
- data/rails/locale/lo.yml +221 -227
- data/rails/locale/lt.yml +204 -167
- data/rails/locale/lv.yml +199 -187
- data/rails/locale/mk.yml +184 -140
- data/rails/locale/ml.yml +210 -0
- data/rails/locale/mn.yml +180 -177
- data/rails/locale/mr-IN.yml +207 -0
- data/rails/locale/ms.yml +202 -0
- data/rails/locale/nb.yml +184 -189
- data/rails/locale/ne.yml +205 -0
- data/rails/locale/nl.yml +190 -203
- data/rails/locale/nn.yml +186 -117
- data/rails/locale/oc.yml +212 -0
- data/rails/locale/or.yml +196 -0
- data/rails/locale/pa.yml +208 -0
- data/rails/locale/pl.yml +217 -210
- data/rails/locale/pt-BR.yml +200 -216
- data/rails/locale/pt.yml +216 -0
- data/rails/locale/rm.yml +194 -147
- data/rails/locale/ro.yml +185 -187
- data/rails/locale/ru.yml +244 -351
- data/rails/locale/sk.yml +210 -235
- data/rails/locale/sl.yml +198 -222
- data/rails/locale/sq.yml +208 -0
- data/rails/locale/sr.yml +224 -141
- data/rails/locale/sv-SE.yml +191 -257
- data/rails/locale/sv.yml +207 -0
- data/rails/locale/sw.yml +174 -202
- data/rails/locale/ta.yml +208 -0
- data/rails/locale/te.yml +215 -0
- data/rails/locale/th.yml +170 -0
- data/rails/locale/tl.yml +202 -0
- data/rails/locale/tr.yml +189 -157
- data/rails/locale/tt.yml +218 -0
- data/rails/locale/ug.yml +207 -0
- data/rails/locale/uk.yml +245 -330
- data/rails/locale/ur.yml +209 -0
- data/rails/locale/uz.yml +254 -0
- data/rails/locale/vi.yml +187 -226
- data/rails/locale/wo.yml +208 -0
- data/rails/locale/zh-CN.yml +154 -223
- data/rails/locale/zh-HK.yml +213 -0
- data/rails/locale/zh-TW.yml +180 -217
- data/rails/locale/zh-YUE.yml +213 -0
- data/rails/pluralization/ak.rb +3 -0
- data/rails/pluralization/am.rb +3 -0
- data/rails/pluralization/ar.rb +32 -0
- data/rails/pluralization/az.rb +3 -0
- data/rails/pluralization/be.rb +3 -0
- data/rails/pluralization/bg.rb +3 -0
- data/rails/pluralization/bh.rb +3 -0
- data/rails/pluralization/bm.rb +3 -0
- data/rails/pluralization/bn.rb +3 -0
- data/rails/pluralization/bo.rb +3 -0
- data/rails/pluralization/br.rb +31 -0
- data/rails/pluralization/bs.rb +3 -0
- data/rails/pluralization/by.rb +3 -0
- data/rails/pluralization/ca.rb +3 -0
- data/rails/pluralization/cs.rb +3 -0
- data/rails/pluralization/cy.rb +24 -0
- data/rails/pluralization/da.rb +3 -0
- data/rails/pluralization/de-AT.rb +3 -0
- data/rails/pluralization/de-CH.rb +3 -0
- data/rails/pluralization/de-DE.rb +3 -0
- data/rails/pluralization/de.rb +3 -0
- data/rails/pluralization/dz.rb +3 -0
- data/rails/pluralization/el.rb +3 -0
- data/rails/pluralization/en-AU.rb +3 -0
- data/rails/pluralization/en-CA.rb +3 -0
- data/rails/pluralization/en-GB.rb +3 -0
- data/rails/pluralization/en-IN.rb +3 -0
- data/rails/pluralization/en-NZ.rb +3 -0
- data/rails/pluralization/en.rb +3 -0
- data/rails/pluralization/eo.rb +3 -0
- data/rails/pluralization/es-419.rb +3 -0
- data/rails/pluralization/es-AR.rb +3 -0
- data/rails/pluralization/es-CL.rb +3 -0
- data/rails/pluralization/es-CO.rb +3 -0
- data/rails/pluralization/es-CR.rb +3 -0
- data/rails/pluralization/es-EC.rb +3 -0
- data/rails/pluralization/es-ES.rb +3 -0
- data/rails/pluralization/es-MX.rb +3 -0
- data/rails/pluralization/es-NI.rb +3 -0
- data/rails/pluralization/es-PA.rb +3 -0
- data/rails/pluralization/es-PE.rb +3 -0
- data/rails/pluralization/es-US.rb +3 -0
- data/rails/pluralization/es-VE.rb +3 -0
- data/rails/pluralization/es.rb +3 -0
- data/rails/pluralization/et.rb +3 -0
- data/rails/pluralization/eu.rb +3 -0
- data/rails/pluralization/fa.rb +3 -0
- data/rails/pluralization/ff.rb +3 -0
- data/rails/pluralization/fi.rb +3 -0
- data/rails/pluralization/fr-CA.rb +3 -0
- data/rails/pluralization/fr-CH.rb +3 -0
- data/rails/pluralization/fr-FR.rb +3 -0
- data/rails/pluralization/fr.rb +3 -0
- data/rails/pluralization/ga.rb +27 -0
- data/rails/pluralization/gd.rb +25 -0
- data/rails/pluralization/gl.rb +3 -0
- data/rails/pluralization/guw.rb +3 -0
- data/rails/pluralization/gv.rb +22 -0
- data/rails/pluralization/he.rb +3 -0
- data/rails/pluralization/hi-IN.rb +3 -0
- data/rails/pluralization/hi.rb +3 -0
- data/rails/pluralization/hr.rb +3 -0
- data/rails/pluralization/hsb.rb +28 -0
- data/rails/pluralization/hu.rb +3 -0
- data/rails/pluralization/id.rb +3 -0
- data/rails/pluralization/ig.rb +3 -0
- data/rails/pluralization/ii.rb +3 -0
- data/rails/pluralization/is.rb +3 -0
- data/rails/pluralization/it-CH.rb +3 -0
- data/rails/pluralization/it.rb +3 -0
- data/rails/pluralization/iu.rb +3 -0
- data/rails/pluralization/ja.rb +3 -0
- data/rails/pluralization/jv.rb +3 -0
- data/rails/pluralization/ka.rb +3 -0
- data/rails/pluralization/kab.rb +3 -0
- data/rails/pluralization/kde.rb +3 -0
- data/rails/pluralization/kea.rb +3 -0
- data/rails/pluralization/km.rb +3 -0
- data/rails/pluralization/kn.rb +3 -0
- data/rails/pluralization/ko.rb +3 -0
- data/rails/pluralization/ksh.rb +23 -0
- data/rails/pluralization/kw.rb +3 -0
- data/rails/pluralization/lag.rb +24 -0
- data/rails/pluralization/ln.rb +3 -0
- data/rails/pluralization/lo.rb +3 -0
- data/rails/pluralization/lt.rb +27 -0
- data/rails/pluralization/lv.rb +22 -0
- data/rails/pluralization/mg.rb +3 -0
- data/rails/pluralization/mk.rb +22 -0
- data/rails/pluralization/ml.rb +3 -0
- data/rails/pluralization/mn.rb +3 -0
- data/rails/pluralization/mo.rb +3 -0
- data/rails/pluralization/mr-IN.rb +3 -0
- data/rails/pluralization/ms.rb +3 -0
- data/rails/pluralization/mt.rb +28 -0
- data/rails/pluralization/my.rb +3 -0
- data/rails/pluralization/naq.rb +3 -0
- data/rails/pluralization/nb.rb +3 -0
- data/rails/pluralization/ne.rb +3 -0
- data/rails/pluralization/nl.rb +3 -0
- data/rails/pluralization/nn.rb +3 -0
- data/rails/pluralization/nso.rb +3 -0
- data/rails/pluralization/oc.rb +3 -0
- data/rails/pluralization/or.rb +3 -0
- data/rails/pluralization/pa.rb +3 -0
- data/rails/pluralization/pl.rb +29 -0
- data/rails/pluralization/pt.rb +3 -0
- data/rails/pluralization/ro.rb +3 -0
- data/rails/pluralization/root.rb +3 -0
- data/rails/pluralization/ru.rb +3 -0
- data/rails/pluralization/sah.rb +3 -0
- data/rails/pluralization/se.rb +3 -0
- data/rails/pluralization/ses.rb +3 -0
- data/rails/pluralization/sg.rb +3 -0
- data/rails/pluralization/sh.rb +3 -0
- data/rails/pluralization/shi.rb +3 -0
- data/rails/pluralization/sk.rb +3 -0
- data/rails/pluralization/sl.rb +28 -0
- data/rails/pluralization/sma.rb +3 -0
- data/rails/pluralization/smi.rb +3 -0
- data/rails/pluralization/smj.rb +3 -0
- data/rails/pluralization/smn.rb +3 -0
- data/rails/pluralization/sms.rb +3 -0
- data/rails/pluralization/sr.rb +3 -0
- data/rails/pluralization/sv-SE.rb +3 -0
- data/rails/pluralization/sv.rb +3 -0
- data/rails/pluralization/sw.rb +3 -0
- data/rails/pluralization/th.rb +3 -0
- data/rails/pluralization/ti.rb +3 -0
- data/rails/pluralization/tl.rb +3 -0
- data/rails/pluralization/to.rb +3 -0
- data/rails/pluralization/tr.rb +3 -0
- data/rails/pluralization/tzm.rb +21 -0
- data/rails/pluralization/uk.rb +3 -0
- data/rails/pluralization/ur.rb +3 -0
- data/rails/pluralization/vi.rb +3 -0
- data/rails/pluralization/wa.rb +3 -0
- data/rails/pluralization/wo.rb +3 -0
- data/rails/pluralization/yo.rb +3 -0
- data/rails/pluralization/zh-CN.rb +3 -0
- data/rails/pluralization/zh-HK.rb +3 -0
- data/rails/pluralization/zh-TW.rb +3 -0
- data/rails/pluralization/zh-YUE.rb +3 -0
- data/rails/pluralization/zh.rb +3 -0
- data/rails/transliteration/az.yml +24 -0
- data/rails/transliteration/bg.yml +64 -0
- data/rails/transliteration/ca.yml +28 -0
- data/rails/transliteration/de.yml +12 -0
- data/rails/transliteration/el.yml +104 -0
- data/rails/transliteration/es.yml +18 -0
- data/rails/transliteration/fa.yml +47 -0
- data/rails/transliteration/fr.yml +36 -0
- data/rails/transliteration/hu.yml +22 -0
- data/rails/transliteration/oc.yml +28 -0
- data/rails/transliteration/pl.yml +22 -0
- data/rails/transliteration/pt.yml +28 -0
- data/rails/transliteration/ro.yml +14 -0
- data/rails/transliteration/ru.rb +93 -0
- data/rails/transliteration/uk.rb +129 -0
- data/rails/transliteration/vi.yml +138 -0
- metadata +376 -118
- data/rails/locale/bn-IN.yml +0 -223
- data/rails/locale/cs.rb +0 -229
- data/rails/locale/dsb.yml +0 -225
- data/rails/locale/fur.yml +0 -184
- data/rails/locale/gl-ES.yml +0 -236
- data/rails/locale/gsw-CH.yml +0 -222
- data/rails/locale/hsb.yml +0 -233
- data/rails/locale/pt-PT.yml +0 -230
- data/rails/locale/sr-Latn.yml +0 -159
- data/rails/locale/th.rb +0 -199
@@ -0,0 +1,47 @@
|
|
1
|
+
fa:
|
2
|
+
i18n:
|
3
|
+
transliterate:
|
4
|
+
rule:
|
5
|
+
'آ': 'a'
|
6
|
+
'ا': 'a'
|
7
|
+
'ب': 'b'
|
8
|
+
'پ': 'p'
|
9
|
+
'ت': 't'
|
10
|
+
'ث': 's'
|
11
|
+
'ج': 'g'
|
12
|
+
'چ': 'ch'
|
13
|
+
'ح': 'h'
|
14
|
+
'خ': 'kh'
|
15
|
+
'د': 'd'
|
16
|
+
'ذ': 'z'
|
17
|
+
'ر': 'r'
|
18
|
+
'ز': 'z'
|
19
|
+
'ژ': 'j'
|
20
|
+
'س': 's'
|
21
|
+
'ش': 'sh'
|
22
|
+
'ص': 's'
|
23
|
+
'ض': 'z'
|
24
|
+
'ط': 't'
|
25
|
+
'ظ': 'z'
|
26
|
+
'ع': 'a'
|
27
|
+
'غ': 'q'
|
28
|
+
'ف': 'f'
|
29
|
+
'ق': 'q'
|
30
|
+
'ک': 'k'
|
31
|
+
'گ': 'gh'
|
32
|
+
'ل': 'l'
|
33
|
+
'م': 'm'
|
34
|
+
'ن': 'n'
|
35
|
+
'و': 'v'
|
36
|
+
'ه': 'h'
|
37
|
+
'ی': 'i'
|
38
|
+
'۰': '0'
|
39
|
+
'۱': '1'
|
40
|
+
'۲': '2'
|
41
|
+
'۳': '3'
|
42
|
+
'۴': '4'
|
43
|
+
'۵': '5'
|
44
|
+
'۶': '6'
|
45
|
+
'۷': '7'
|
46
|
+
'۸': '8'
|
47
|
+
'۹': '9'
|
@@ -0,0 +1,36 @@
|
|
1
|
+
fr:
|
2
|
+
i18n:
|
3
|
+
transliterate:
|
4
|
+
rule:
|
5
|
+
à: "a"
|
6
|
+
â: "a"
|
7
|
+
æ: "ae"
|
8
|
+
ç: "c"
|
9
|
+
é: "e"
|
10
|
+
è: "e"
|
11
|
+
ê: "e"
|
12
|
+
ë: "e"
|
13
|
+
î: "i"
|
14
|
+
ï: "i"
|
15
|
+
ô: "o"
|
16
|
+
œ: "oe"
|
17
|
+
ù: "u"
|
18
|
+
û: "u"
|
19
|
+
ü: "u"
|
20
|
+
ÿ: "y"
|
21
|
+
À: "A"
|
22
|
+
Â: "A"
|
23
|
+
Æ: "Ae"
|
24
|
+
Ç: "C"
|
25
|
+
É: "E"
|
26
|
+
È: "E"
|
27
|
+
Ê: "E"
|
28
|
+
Ë: "E"
|
29
|
+
Î: "I"
|
30
|
+
Ï: "I"
|
31
|
+
Ô: "O"
|
32
|
+
Œ: "Oe"
|
33
|
+
Ù: "U"
|
34
|
+
Û: "U"
|
35
|
+
Ü: "U"
|
36
|
+
Ÿ: "Y"
|
@@ -0,0 +1,28 @@
|
|
1
|
+
oc:
|
2
|
+
i18n:
|
3
|
+
transliterate:
|
4
|
+
rule:
|
5
|
+
à: "a"
|
6
|
+
á: "a"
|
7
|
+
ç: "c"
|
8
|
+
é: "e"
|
9
|
+
è: "e"
|
10
|
+
ë: "e"
|
11
|
+
í: "i"
|
12
|
+
ï: "i"
|
13
|
+
ó: "o"
|
14
|
+
ò: "o"
|
15
|
+
ú: "u"
|
16
|
+
ü: "u"
|
17
|
+
À: "A"
|
18
|
+
Á: "A"
|
19
|
+
Ç: "C"
|
20
|
+
É: "E"
|
21
|
+
È: "E"
|
22
|
+
Ë: "E"
|
23
|
+
Í: "I"
|
24
|
+
Ï: "I"
|
25
|
+
Ó: "O"
|
26
|
+
Ò: "O"
|
27
|
+
Ú: "U"
|
28
|
+
Ü: "U"
|
@@ -0,0 +1,28 @@
|
|
1
|
+
pt:
|
2
|
+
i18n:
|
3
|
+
transliterate:
|
4
|
+
rule:
|
5
|
+
á: "a"
|
6
|
+
à: "a"
|
7
|
+
ã: "a"
|
8
|
+
â: "a"
|
9
|
+
é: "e"
|
10
|
+
ê: "e"
|
11
|
+
í: "i"
|
12
|
+
ó: "o"
|
13
|
+
õ: "o"
|
14
|
+
ú: "u"
|
15
|
+
Á: "A"
|
16
|
+
À: "A"
|
17
|
+
Ã: "A"
|
18
|
+
É: "E"
|
19
|
+
Ê: "E"
|
20
|
+
Í: "I"
|
21
|
+
Ó: "O"
|
22
|
+
Õ: "O"
|
23
|
+
Ú: "U"
|
24
|
+
Æ: "Ae"
|
25
|
+
æ: "ae"
|
26
|
+
º: "o"
|
27
|
+
ª: "a"
|
28
|
+
ç: "c"
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# (c) Yaroslav Markin, Julian "julik" Tarkhanov and Co
|
4
|
+
# https://github.com/yaroslav/russian/blob/master/lib/russian/transliteration.rb
|
5
|
+
|
6
|
+
module RailsI18n
|
7
|
+
module Transliteration
|
8
|
+
module Russian
|
9
|
+
class << self
|
10
|
+
def rule
|
11
|
+
lambda do |string|
|
12
|
+
next '' unless string
|
13
|
+
|
14
|
+
chars = string.scan(%r{#{multi_keys.join '|'}|\w|.})
|
15
|
+
|
16
|
+
result = ""
|
17
|
+
|
18
|
+
chars.each_with_index do |char, index|
|
19
|
+
if upper.has_key?(char) && lower.has_key?(chars[index+1])
|
20
|
+
# combined case
|
21
|
+
result << upper[char].downcase.capitalize
|
22
|
+
elsif upper.has_key?(char)
|
23
|
+
result << upper[char]
|
24
|
+
elsif lower.has_key?(char)
|
25
|
+
result << lower[char]
|
26
|
+
else
|
27
|
+
result << char
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
result
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
# use instance variables instead of constants to prevent warnings
|
38
|
+
# on re-evaling after I18n.reload!
|
39
|
+
|
40
|
+
def upper
|
41
|
+
@upper ||= begin
|
42
|
+
upper_single = {
|
43
|
+
"Ґ"=>"G","Ё"=>"YO","Є"=>"E","Ї"=>"YI","І"=>"I",
|
44
|
+
"А"=>"A","Б"=>"B","В"=>"V","Г"=>"G",
|
45
|
+
"Д"=>"D","Е"=>"E","Ж"=>"ZH","З"=>"Z","И"=>"I",
|
46
|
+
"Й"=>"Y","К"=>"K","Л"=>"L","М"=>"M","Н"=>"N",
|
47
|
+
"О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T",
|
48
|
+
"У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",
|
49
|
+
"Ш"=>"SH","Щ"=>"SCH","Ъ"=>"'","Ы"=>"Y","Ь"=>"",
|
50
|
+
"Э"=>"E","Ю"=>"YU","Я"=>"YA",
|
51
|
+
}
|
52
|
+
|
53
|
+
(upper_single.merge(upper_multi)).freeze
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def lower
|
58
|
+
@lower ||= begin
|
59
|
+
lower_single = {
|
60
|
+
"і"=>"i","ґ"=>"g","ё"=>"yo","№"=>"#","є"=>"e",
|
61
|
+
"ї"=>"yi","а"=>"a","б"=>"b",
|
62
|
+
"в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"zh",
|
63
|
+
"з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
|
64
|
+
"м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
|
65
|
+
"с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
|
66
|
+
"ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"'",
|
67
|
+
"ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya",
|
68
|
+
}
|
69
|
+
|
70
|
+
(lower_single.merge(lower_multi)).freeze
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def upper_multi
|
75
|
+
@upper_multi ||= { "ЬЕ"=>"IE", "ЬЁ"=>"IE" }
|
76
|
+
end
|
77
|
+
|
78
|
+
def lower_multi
|
79
|
+
@lower_multi ||= { "ье"=>"ie", "ьё"=>"ie" }
|
80
|
+
end
|
81
|
+
|
82
|
+
def multi_keys
|
83
|
+
@multi_keys ||= (lower_multi.merge(upper_multi)).keys.sort_by {|s| s.length}.reverse.freeze
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
{ :ru => {
|
91
|
+
:i18n => {
|
92
|
+
:transliterate => {
|
93
|
+
:rule => RailsI18n::Transliteration::Russian.rule }}}}
|
@@ -0,0 +1,129 @@
|
|
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
|
+
next '' unless string
|
10
|
+
|
11
|
+
string.gsub(/./) do |char|
|
12
|
+
# Regexp.last_match is local to the thread and method scope
|
13
|
+
# of the method that did the pattern match.
|
14
|
+
@pre_match, @post_match = $`, $'
|
15
|
+
|
16
|
+
case char
|
17
|
+
when 'Ж'
|
18
|
+
lookahead_upcase 'ZH'
|
19
|
+
when 'Х'
|
20
|
+
lookahead_upcase 'KH'
|
21
|
+
when 'Ц'
|
22
|
+
lookahead_upcase 'TS'
|
23
|
+
when 'Ч'
|
24
|
+
lookahead_upcase 'CH'
|
25
|
+
when 'Ш'
|
26
|
+
lookahead_upcase 'SH'
|
27
|
+
when 'Щ'
|
28
|
+
lookahead_upcase 'SHCH'
|
29
|
+
when 'г'
|
30
|
+
behind =~ /[зЗ]/ ? 'gh' : 'h'
|
31
|
+
when 'Г'
|
32
|
+
behind =~ /[зЗ]/ ? lookahead_upcase('GH') : 'H'
|
33
|
+
when 'є'
|
34
|
+
letter?(behind) ? 'ie' : 'ye'
|
35
|
+
when 'Є'
|
36
|
+
letter?(behind) ? lookahead_upcase('IE') : lookahead_upcase('YE')
|
37
|
+
when 'ї'
|
38
|
+
letter?(behind) ? 'i' : 'yi'
|
39
|
+
when 'Ї'
|
40
|
+
letter?(behind) ? 'I' : lookahead_upcase('YI')
|
41
|
+
when 'й'
|
42
|
+
letter?(behind) ? 'i' : 'y'
|
43
|
+
when 'Й'
|
44
|
+
letter?(behind) ? 'I' : 'Y'
|
45
|
+
when 'ю'
|
46
|
+
letter?(behind) ? 'iu' : 'yu'
|
47
|
+
when 'Ю'
|
48
|
+
letter?(behind) ? lookahead_upcase('IU') : lookahead_upcase('YU')
|
49
|
+
when 'я'
|
50
|
+
letter?(behind) ? 'ia' : 'ya'
|
51
|
+
when 'Я'
|
52
|
+
letter?(behind) ? lookahead_upcase('IA') : lookahead_upcase('YA')
|
53
|
+
when "'"
|
54
|
+
# remove apostrophe inside a word
|
55
|
+
letter?(behind) && letter?(ahead) ? '' : "'"
|
56
|
+
else
|
57
|
+
straight_lookup[char] || char
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
if RUBY_VERSION < '1.9'
|
66
|
+
# two bytes will be enough for Cyrillic
|
67
|
+
class_eval <<-END, __FILE__, __LINE__ + 1
|
68
|
+
def behind
|
69
|
+
tail = @pre_match && @pre_match[-2..-1]
|
70
|
+
tail && tail.split(//).last
|
71
|
+
end
|
72
|
+
|
73
|
+
def ahead
|
74
|
+
@post_match && @post_match[0..1].split(//).first
|
75
|
+
end
|
76
|
+
END
|
77
|
+
else
|
78
|
+
class_eval <<-END, __FILE__, __LINE__ + 1
|
79
|
+
def behind
|
80
|
+
@pre_match && @pre_match[-1]
|
81
|
+
end
|
82
|
+
|
83
|
+
def ahead
|
84
|
+
@post_match && @post_match[0]
|
85
|
+
end
|
86
|
+
END
|
87
|
+
end
|
88
|
+
|
89
|
+
def downcased?(symbol)
|
90
|
+
symbol =~ downcased_regexp
|
91
|
+
end
|
92
|
+
|
93
|
+
def downcased_regexp
|
94
|
+
@downcased_regexp ||= /[а-яґєії]/
|
95
|
+
end
|
96
|
+
|
97
|
+
# apostrophe can be inside a word
|
98
|
+
def letter?(symbol)
|
99
|
+
symbol =~ letter_regexp
|
100
|
+
end
|
101
|
+
|
102
|
+
def letter_regexp
|
103
|
+
@letter_regexp ||= /[а-яґєіїА-ЯҐЄІЇ'’]/
|
104
|
+
end
|
105
|
+
|
106
|
+
def lookahead_upcase(word)
|
107
|
+
downcased?(ahead) ? word.capitalize : word.upcase
|
108
|
+
end
|
109
|
+
|
110
|
+
def straight_lookup
|
111
|
+
@straight_lookup ||= {
|
112
|
+
'а'=>'a','б'=>'b','в'=>'v','ґ'=>'g','д'=>'d','е'=>'e','ж'=>'zh',
|
113
|
+
'з'=>'z','и'=>'y','і'=>'i','к'=>'k','л'=>'l','м'=>'m','н'=>'n','о'=>'o',
|
114
|
+
'п'=>'p','р'=>'r','с'=>'s','т'=>'t','у'=>'u','ф'=>'f','х'=>'kh','ц'=>'ts',
|
115
|
+
'ч'=>'ch','ш'=>'sh','щ'=>'shch','ь'=>'','’'=>'',
|
116
|
+
'А'=>'A','Б'=>'B','В'=>'V','Ґ'=>'G','Д'=>'D','Е'=>'E',
|
117
|
+
'З'=>'Z','И'=>'Y','І'=>'I','К'=>'K','Л'=>'L','М'=>'M','Н'=>'N','О'=>'O',
|
118
|
+
'П'=>'P','Р'=>'R','С'=>'S','Т'=>'T','У'=>'U','Ф'=>'F','Ь'=>''
|
119
|
+
}
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
{ :uk => {
|
127
|
+
:i18n => {
|
128
|
+
:transliterate => {
|
129
|
+
:rule => RailsI18n::Transliteration::Ukrainian.rule }}}}
|