module StringTools::Transliteration
Constants
- LAYOUT_EN_TO_RU_MAP
- LAYOUT_PERSISTENT
- LAYOUT_RU_TO_EN_MAP
- TRANSLIT_RU_TO_EN_MAP
Public Instance Methods
transliteration_variations(str)
click to toggle source
Public: варианты строки с учетом смены раскладки и/или транслитерации для Русского и Английского языков
Смена раскладки выполняется в обе стороны, транслитерация - с Русского на Английский.
str - String
Examples
transliteration_variations('Ruby') => ['Ruby', 'Кгин', 'kgin'] transliteration_variations('Слово') => ['Слово', 'ckjdj', 'slovo'] transliteration_variations('КомпанияPro') => ['КомпанияPro'] transliteration_variations('ويكيبيدي') => ['ويكيبيدي']
returns Array of String
# File lib/string_tools.rb, line 430 def transliteration_variations(str) str_as_chars = str.chars converted = convert_layout(str_as_chars) layout_swap = converted[:chars].try(:join) tranliterated = (converted[:was_ru] ? transliterate(str_as_chars) : transliterate(converted[:chars])).try(:join) [str, layout_swap, tranliterated].tap(&:compact!) end
Private Instance Methods
convert_layout(splitted_string)
click to toggle source
Internal: Смена раскладки массива символов, ru <-> en.
Возвращает Hash с двумя ключами: :chars - Array, символы в другой раскладке(nil если не удалось сменить раскладку) :was_ru - Bool, принадлежали ли все символы русскому языку.
splitted_string - Array of String
Example:
convert_layout(['a', 'b', 'c']) => {chars: ['ф', 'и', 'с'], was_ru: false} convert_layout(['а', 'б', 'в']) => {chars: ['f', ',', 'd'], was_ru: true} convert_layout(['ﻮ', 'ﻴ', 'ﻜ']) => {chars: nil, was_ru: false}
returns Array
# File lib/string_tools.rb, line 458 def convert_layout(splitted_string) str_arr = splitted_string.map do |char| LAYOUT_RU_TO_EN_MAP[char] || LAYOUT_PERSISTENT[char] || break end return {chars: str_arr, was_ru: true} if str_arr {chars: splitted_string.map { |char| LAYOUT_EN_TO_RU_MAP[char] || LAYOUT_PERSISTENT[char] || break }, was_ru: false} end
transliterate(splitted_string)
click to toggle source
Internal: Транслитерация массива символов, ru -> en
Если символа нет в словаре, не изменяет его.
splitted string - Array of String
Returns Array
# File lib/string_tools.rb, line 475 def transliterate(splitted_string) return unless splitted_string splitted_string.map { |char| TRANSLIT_RU_TO_EN_MAP[char] || char } end