Module: UaEnv::Transliteration::National

Defined in:
lib/uaenv/transliteration/national.rb

Constant Summary collapse

UA_UPPER =
%w{ А Б В Г Ґ Д Е Є Ж З И І Ї Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ю Я Ь ' }
UA_LOWER =
%w{ а б в г ґ д е є ж з и і ї й к л м н о п р с т у ф х ц ч ш щ ю я ь ' }
UA =
UA_LOWER + UA_UPPER
NATIONAL_LOWER =
['a', 'b', 'v', ['h', 'gh'], 'g', 'd',
 'e', ['ie','ye'], 'zh', 'z', 'y', 'i',
 ['i','yi'], ['i','y'], 'k', 'l', 'm', 'n',
 'o', 'p', 'r', 's', 't', 'u',
 'f', 'kh', 'ts', 'ch', 'sh', 'sch',
 ['iu','yu'], ['ia','ya'], '\'', '"'
]
NATIONAL_UPPER =
NATIONAL_LOWER.map{ |i| i.is_a?( Array ) ? i.map{ |j| j.upcase } : i.upcase }
NATIONAL =
NATIONAL_LOWER + NATIONAL_UPPER
TABLE =
{}

Class Method Summary collapse

Class Method Details

.translify(str) ⇒ Object

Просто замінює кирилицю в строці на латиницю



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/uaenv/transliteration/national.rb', line 35

def self.translify(str)
  chars = str.split(//)

  result = ''
  chars.each_with_index do | char, index |
    variant = (index != 0 ? ( chars[index - 1] == " " ? 1 : 0 ) : 1)
    if UA_UPPER.include?(char) && UA_LOWER.include?(chars[index+1])
      # "Яна" => "Yana"
      ch = (TABLE[char].is_a?(Array) ? TABLE[char][variant].downcase.capitalize : TABLE[char].downcase.capitalize)
      result << ch

    elsif UA_UPPER.include?(char)
      # "ЯНА" => "YANA"
      ch = (TABLE[char].is_a?(Array) ? TABLE[char][variant] : TABLE[char] )
      result << ch

    elsif UA_LOWER.include?(char)
      # "яна" => "yana"
      ch = (TABLE[char].is_a?(Array) ? TABLE[char][variant] : TABLE[char] )
      result << ch

    else
      result << char
    end

  end
  return result

end