115 lines
2.0 KiB
Elixir
115 lines
2.0 KiB
Elixir
defmodule Localizator.Translitor.RU do
|
||
@moduledoc """
|
||
Translit module for Russian language. By ICAO Standard (2012—2016)
|
||
"""
|
||
@locale "ru"
|
||
@table %{
|
||
" " => " ",
|
||
"А" => "A",
|
||
"Б" => "B",
|
||
"В" => "V",
|
||
"Г" => "G",
|
||
"Д" => "D",
|
||
"Е" => "E",
|
||
"Ё" => "E",
|
||
"Ж" => "Zh",
|
||
"З" => "Z",
|
||
"И" => "I",
|
||
"Й" => "I",
|
||
"К" => "K",
|
||
"Л" => "L",
|
||
"М" => "M",
|
||
"Н" => "N",
|
||
"О" => "O",
|
||
"П" => "P",
|
||
"Р" => "R",
|
||
"С" => "S",
|
||
"Т" => "T",
|
||
"У" => "U",
|
||
"Ф" => "F",
|
||
"Х" => "Kh",
|
||
"Ц" => "Ts",
|
||
"Ч" => "Ch",
|
||
"Ш" => "Sh",
|
||
"Щ" => "Shch",
|
||
"Ъ" => "",
|
||
"Ы" => "Y",
|
||
"Ь" => "",
|
||
"Э" => "E",
|
||
"Ю" => "Iu",
|
||
"Я" => "Ia",
|
||
"а" => "a",
|
||
"б" => "b",
|
||
"в" => "v",
|
||
"г" => "g",
|
||
"д" => "d",
|
||
"е" => "e",
|
||
"ё" => "e",
|
||
"ж" => "zh",
|
||
"з" => "z",
|
||
"и" => "i",
|
||
"й" => "i",
|
||
"к" => "k",
|
||
"л" => "l",
|
||
"м" => "m",
|
||
"н" => "n",
|
||
"о" => "o",
|
||
"п" => "p",
|
||
"р" => "r",
|
||
"с" => "s",
|
||
"т" => "t",
|
||
"у" => "u",
|
||
"ф" => "f",
|
||
"х" => "kh",
|
||
"ц" => "ts",
|
||
"ч" => "ch",
|
||
"ш" => "sh",
|
||
"щ" => "shch",
|
||
"ъ" => "",
|
||
"ы" => "y",
|
||
"ь" => "",
|
||
"э" => "e",
|
||
"ю" => "iu",
|
||
"я" => "ia"
|
||
}
|
||
@typedoc """
|
||
Plain Text
|
||
"""
|
||
@type text :: String.t()
|
||
|
||
@typedoc """
|
||
Locale
|
||
"""
|
||
@type locale :: String.t()
|
||
|
||
@behaviour Localizator.Translitor.Base
|
||
|
||
@impl true
|
||
@spec locale() :: {:ok, locale}
|
||
def locale(), do: @locale
|
||
|
||
@doc """
|
||
A russian to english transliteration
|
||
## Example
|
||
``elixir
|
||
iex> Localizator.Translitor.RU.convert("Роман Шевченко")
|
||
"Roman Shevchenko"
|
||
``
|
||
"""
|
||
@impl true
|
||
@spec convert(text) :: text
|
||
def convert(text) when is_bitstring(text) do
|
||
text
|
||
|> String.graphemes()
|
||
|> Enum.map(&convert_letter/1)
|
||
|> Enum.join()
|
||
end
|
||
|
||
defp convert_letter(letter) do
|
||
case Map.get(@table, letter) do
|
||
nil -> letter
|
||
latin -> latin
|
||
end
|
||
end
|
||
end
|