Module: Russian::Transliteration
- Defined in:
- lib/russian/transliteration.rb
Overview
Russian transliteration tables and helpers.
Transliteration is heavily based on the [rutils](github.com/julik/rutils) gem by Julian “julik” Tarkhanov and contributors, then cleaned up and adapted for this gem.
Таблицы и хелперы для русской транслитерации.
Транслитерация во многом основана на gem [rutils](github.com/julik/rutils) Юлика Тарханова и соавторов, а затем упрощена и адаптирована для этого gem’а.
Constant Summary collapse
- LOWER_SINGLE =
{ "і" => "i", "ґ" => "g", "ё" => "yo", "№" => "#", "є" => "e", "ї" => "yi", "а" => "a", "б" => "b", "в" => "v", "г" => "g", "д" => "d", "е" => "e", "ж" => "zh", "з" => "z", "и" => "i", "й" => "y", "к" => "k", "л" => "l", "м" => "m", "н" => "n", "о" => "o", "п" => "p", "р" => "r", "с" => "s", "т" => "t", "у" => "u", "ф" => "f", "х" => "h", "ц" => "ts", "ч" => "ch", "ш" => "sh", "щ" => "sch", "ъ" => "'", "ы" => "y", "ь" => "", "э" => "e", "ю" => "yu", "я" => "ya" }.freeze
- LOWER_MULTI =
{ "ье" => "ie", "ьё" => "ie" }.freeze
- UPPER_SINGLE =
{ "Ґ" => "G", "Ё" => "YO", "Є" => "E", "Ї" => "YI", "І" => "I", "А" => "A", "Б" => "B", "В" => "V", "Г" => "G", "Д" => "D", "Е" => "E", "Ж" => "ZH", "З" => "Z", "И" => "I", "Й" => "Y", "К" => "K", "Л" => "L", "М" => "M", "Н" => "N", "О" => "O", "П" => "P", "Р" => "R", "С" => "S", "Т" => "T", "У" => "U", "Ф" => "F", "Х" => "H", "Ц" => "TS", "Ч" => "CH", "Ш" => "SH", "Щ" => "SCH", "Ъ" => "'", "Ы" => "Y", "Ь" => "", "Э" => "E", "Ю" => "YU", "Я" => "YA" }.freeze
- UPPER_MULTI =
{ "ЬЕ" => "IE", "ЬЁ" => "IE" }.freeze
- LOWER =
LOWER_SINGLE.merge(LOWER_MULTI).freeze
- UPPER =
UPPER_SINGLE.merge(UPPER_MULTI).freeze
- TITLE =
UPPER.transform_values(&:capitalize).freeze
- MULTI_KEYS =
LOWER_MULTI.merge(UPPER_MULTI).keys.sort_by(&:length).reverse.freeze
- TOKEN_RE =
/#{Regexp.union(MULTI_KEYS).source}|./m
Class Method Summary collapse
-
.transliterate(str) ⇒ String
Transliterates a string containing Cyrillic characters.
Class Method Details
.transliterate(str) ⇒ String
Transliterates a string containing Cyrillic characters.
The method preserves non-Cyrillic characters and follows the historical casing rules of the gem.
Транслитерирует строку, содержащую кириллические символы.
Метод сохраняет некириллические символы и следует историческим правилам gem’а для регистра.
91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/russian/transliteration.rb', line 91 def transliterate(str) tokens = str.scan(TOKEN_RE) tokens.each_with_index.map do |token, index| lower = LOWER[token] next lower if lower upper = UPPER[token] next TITLE[token] if upper && LOWER[tokens[index + 1]] next upper if upper token end.join end |