Available Transforms

Copy Markdown View Source

This document lists all transforms available in unicode_transform, including the :from and :to option atoms, direct transform IDs for the :transform option, and the 380 CLDR XML rule sets that ship with unicode_transform.

Using transforms

There are three ways to invoke a transform:

# 1. :from / :to atoms (most convenient)
iex> Unicode.Transform.transform("Москва", from: :cyrillic, to: :latin)
{:ok, "Moskva"}

# 2. :transform string (for transforms without atom mappings)
iex> Unicode.Transform.transform("Հayaստan", transform: "Armenian-Latin-BGN")
{:ok, "Hayastan"}

# 3. :transform with :direction (for reverse transforms)
iex> Unicode.Transform.transform("アイウエオ", transform: "Hiragana-Katakana", direction: :reverse)
{:ok, "あいうえお"}

The :from option defaults to :any when omitted:

# These are equivalent:
iex> Unicode.Transform.transform("hello", to: :upper)
{:ok, "HELLO"}

iex> Unicode.Transform.transform("hello", from: :any, to: :upper)
{:ok, "HELLO"}

Both atoms and strings are accepted for :from and :to. The BCP47 script code or the Unicode script name are both acceptable.

iex> Unicode.Transform.transform("αβγδ", from: :greek, to: :latin)
{:ok, "abgd"}

iex> Unicode.Transform.transform("αβγδ", from: "Greek", to: "Latin")
{:ok, "abgd"}

iex> Unicode.Transform.transform("αβγδ", from: :grek, to: :latn)
{:ok, "abgd"}

Automatic Script detection

Use from: :detect to automatically detect scripts in the input:

iex> Unicode.Transform.transform("αβγδ мир", from: :detect, to: :latin)
{:ok, "abgd mir"}

When from: :detect is set, the string is analzed to identify the script or scripts used within it. A transform is applied for each script identified in the string.

Programmatic listing

To list all available transforms at runtime:

iex> Unicode.Transform.available_transforms() |> Enum.take(5)
["Amharic-Latin-BGN", "Any-Accents", "Any-Publishing", "Arabic-Latin-BGN", "Arabic-Latin"]

This returns a sorted list of all transform IDs unicode_transform can resolve.

Built-in transforms

These transforms are implemented directly in Elixir without CLDR XML rule sets.

:to atomTransform IDDescription
:nfcAny-NFCUnicode NFC normalization
:nfdAny-NFDUnicode NFD normalization
:nfkcAny-NFKCUnicode NFKC normalization
:nfkdAny-NFKDUnicode NFKD normalization
:upperAny-UpperUppercase mapping
:lowerAny-LowerLowercase mapping
:titleAny-TitleTitlecase mapping
:nullAny-NullIdentity (no change)
:removeAny-RemoveRemove all characters

Script name atoms

These atoms can be used with the :from and :to options. Each script has a full name atom and a BCP47 (ISO 15924) code atom that resolve to the same value.

Full nameBCP47 codeResolves to
:arabic:arab"Arabic"
:armenian:armn"Armenian"
:bengali:beng"Bengali"
:bopomofo:bopo"Bopomofo"
:canadian_aboriginal:cans"CanadianAboriginal"
:cyrillic:cyrl"Cyrillic"
:devanagari:deva"Devanagari"
:ethiopic:ethi"Ethiopic"
:georgian:geor"Georgian"
:greek:grek"Greek"
:gujarati:gujr"Gujarati"
:gurmukhi:guru"Gurmukhi"
:han:hani"Han"
:hangul:hang"Hangul"
:hebrew:hebr"Hebrew"
:hiragana:hira"Hiragana"
:kannada:knda"Kannada"
:katakana—"Katakana"
:khmer:khmr"Khmer"
:lao:laoo"Lao"
:latin:latn"Latin"
:malayalam:mlym"Malayalam"
:myanmar:mymr"Myanmar"
:oriya:orya"Oriya"
:sinhala:sinh"Sinhala"
:syriac:syrc"Syriac"
:tamil:taml"Tamil"
:telugu:telu"Telugu"
:thaana:thaa"Thaana"
:thai—"Thai"

Additional atoms without BCP47 equivalents:

AtomResolves to
:hant"Hant"
:interindic"InterIndic"
:jamo"Jamo"

Target atoms

AtomResolves to
:ascii"ASCII"
:fullwidth"Fullwidth"
:halfwidth"Halfwidth"

Special atoms

AtomResolves to
:publishing"Publishing"
:accents"Accents"
:any"Any"
:detectAutomatic script detection

Script-to-Latin transforms

These are the most commonly used transforms. Use from: <script>, to: :latin or the equivalent :transform string.

:from:toTransform IDBidirectional
:arabic:latinArabic-LatinYes
:armenian:latinArmenian-LatinNo (forward only)
:bengali:latinBengali-LatinYes
:canadian_aboriginal:latinCanadianAboriginal-LatinYes
:cyrillic:latinCyrillic-LatinYes
:devanagari:latinDevanagari-LatinYes
:georgian:latinGeorgian-LatinYes
:greek:latinGreek-LatinYes
:gujarati:latinGujarati-LatinYes
:gurmukhi:latinGurmukhi-LatinYes
:han:latinHan-LatinNo (forward only)
:hangul:latinHangul-LatinYes
:hant:latinHant-LatinNo (forward only)
:hebrew:latinHebrew-LatinYes
:hiragana:latinHiragana-LatinYes
:kannada:latinKannada-LatinYes
:katakana:latinKatakana-LatinYes
:khmer:latinKhmer-LatinYes
:lao:latinLao-LatinYes
:malayalam:latinMalayalam-LatinYes
:myanmar:latinMyanmar-LatinYes
:oriya:latinOriya-LatinYes
:sinhala:latinSinhala-LatinYes
:syriac:latinSyriac-LatinYes
:tamil:latinTamil-LatinYes
:telugu:latinTelugu-LatinYes
:thaana:latinThaana-LatinYes
:thai:latinThai-LatinYes

Bidirectional transforms can be used in reverse with from: :latin, to: <script>.

Latin-ASCII (accent stripping)

:from:toTransform ID
:latin:asciiLatin-ASCII
iex> Unicode.Transform.transform("café résumé", from: :latin, to: :ascii)
{:ok, "cafe resume"}

This transform has a dedicated fast-path module for maximum performance.

Width transforms

Transform IDDescription
Fullwidth-HalfwidthConvert fullwidth characters to halfwidth
Halfwidth-FullwidthConvert halfwidth characters to fullwidth (reverse)
iex> Unicode.Transform.transform("Hello", transform: "Fullwidth-Halfwidth")
{:ok, "Hello"}

Japanese script conversion

:from:toTransform IDBidirectional
:hiragana:katakanaHiragana-KatakanaYes
iex> Unicode.Transform.transform("あいうえお", from: :hiragana, to: :katakana)
{:ok, "アイウエオ"}

Han (Chinese) transforms

Transform IDDescription
Han-LatinChinese characters to Latin (pinyin)
Han-Latin-NamesChinese names to Latin (surname-first order)
Han-SpacedhanInsert spaces between Chinese characters
Simplified-TraditionalSimplified Chinese to Traditional Chinese
iex> Unicode.Transform.transform("中国", transform: "Han-Latin")
{:ok, "zhōng guó"}

Indic cross-script transforms

Every pair of Indic scripts has a direct transform via the InterIndic pivot. These are all bidirectional.

Available Indic scripts

Bengali, Devanagari, Gujarati, Gurmukhi, Kannada, Malayalam, Oriya, Tamil, Telugu

Cross-script matrix

Each Indic script can be transformed to every other Indic script. For example:

iex> Unicode.Transform.transform("हिन्दी", from: :devanagari, to: :bengali)
{:ok, "হিন্দী"}

iex> Unicode.Transform.transform("বাংলা", from: :bengali, to: :gujarati)
{:ok, "બાંલા"}

The full set of Indic cross-script files:

Source →BengaliDevanagariGujaratiGurmukhiKannadaMalayalamOriyaTamilTelugu
Bengali—✓✓✓✓✓✓✓✓
Devanagari✓—✓✓✓✓✓✓✓
Gujarati✓✓—✓✓✓✓✓✓
Gurmukhi✓✓✓—✓✓✓✓✓
Kannada✓✓✓✓—✓✓✓✓
Malayalam✓✓✓✓✓—✓✓✓
Oriya✓✓✓✓✓✓—✓✓
Tamil✓✓✓✓✓✓✓—✓
Telugu✓✓✓✓✓✓✓✓—

Indic-to-Arabic and Indic-to-Urdu

Each Indic script also has transforms to Arabic script and Urdu:

Transform IDDescription
Bengali-ArabicBengali to Arabic script
Bengali-urBengali to Urdu
Devanagari-ArabicDevanagari to Arabic script
Devanagari-urDevanagari to Urdu
Gujarati-ArabicGujarati to Arabic script
Gujarati-urGujarati to Urdu
Gurmukhi-ArabicGurmukhi to Arabic script
Gurmukhi-urGurmukhi to Urdu
Kannada-ArabicKannada to Arabic script
Kannada-urKannada to Urdu
Malayalam-ArabicMalayalam to Arabic script
Malayalam-urMalayalam to Urdu
Oriya-ArabicOriya to Arabic script
Oriya-urOriya to Urdu
Tamil-ArabicTamil to Arabic script
Tamil-urTamil to Urdu
Telugu-ArabicTelugu to Arabic script
Telugu-urTelugu to Urdu

InterIndic pivot transforms

These are internal transforms used by the cross-script Indic pipeline. They can also be used directly:

Transform IDDescription
Bengali-InterIndicBengali to InterIndic
Devanagari-InterIndicDevanagari to InterIndic
Gujarati-InterIndicGujarati to InterIndic
Gurmukhi-InterIndicGurmukhi to InterIndic
Kannada-InterIndicKannada to InterIndic
Malayalam-InterIndicMalayalam to InterIndic
Oriya-InterIndicOriya to InterIndic
Tamil-InterIndicTamil to InterIndic
Telugu-InterIndicTelugu to InterIndic
InterIndic-BengaliInterIndic to Bengali
InterIndic-DevanagariInterIndic to Devanagari
InterIndic-GujaratiInterIndic to Gujarati
InterIndic-GurmukhiInterIndic to Gurmukhi
InterIndic-KannadaInterIndic to Kannada
InterIndic-LatinInterIndic to Latin
InterIndic-MalayalamInterIndic to Malayalam
InterIndic-OriyaInterIndic to Oriya
InterIndic-TamilInterIndic to Tamil
InterIndic-TeluguInterIndic to Telugu
InterIndic-ArabicInterIndic to Arabic
InterIndic-urInterIndic to Urdu

BGN/PCGN romanization transforms

These follow the BGN/PCGN romanization standards used by the U.S. Board on Geographic Names and the Permanent Committee on Geographical Names.

Transform IDDescription
Amharic-Latin-BGNAmharic (Ethiopic) to Latin
Arabic-Latin-BGNArabic to Latin
Armenian-Latin-BGNArmenian to Latin
Azerbaijani-Latin-BGNAzerbaijani (Cyrillic) to Latin
Belarusian-Latin-BGNBelarusian to Latin
Bulgarian-Latin-BGNBulgarian to Latin
Georgian-Latin-BGNGeorgian to Latin
Georgian-Latin-BGN_1981Georgian to Latin (1981 system)
Greek-Latin-BGNGreek to Latin
Hebrew-Latin-BGNHebrew to Latin
Katakana-Latin-BGNKatakana to Latin
Kazakh-Latin-BGNKazakh to Latin
Kirghiz-Latin-BGNKirghiz to Latin
Korean-Latin-BGNKorean to Latin
Macedonian-Latin-BGNMacedonian to Latin
Maldivian-Latin-BGNMaldivian (Thaana) to Latin
Mongolian-Latin-BGNMongolian to Latin
Pashto-Latin-BGNPashto to Latin
Persian-Latin-BGNPersian to Latin
Russian-Latin-BGNRussian to Latin
Serbian-Latin-BGNSerbian to Latin
Turkmen-Latin-BGNTurkmen to Latin
Ukrainian-Latin-BGNUkrainian to Latin
Uzbek-Latin-BGNUzbek to Latin
iex> Unicode.Transform.transform("Москва", transform: "Russian-Latin-BGN")
{:ok, "Moskva"}

UNGEGN romanization

Uses the United Nations Group of Experts on Geographical Names(United Nations Group of Experts on Geographical Names)[https://en.wikipedia.org/wiki/United_Nations_Group_of_Experts_on_Geographical_Names] Romanization rules.

Transform IDDescription
Greek_Latin_UNGEGNGreek to Latin (UNGEGN standard)

Locale-specific transforms

German ASCII

:from:toTransform IDDescription
:de:ASCIIde-ASCIIContext-sensitive German umlaut conversion
iex> Unicode.Transform.transform("Ä ö ü", transform: "de-ASCII")
{:ok, "AE oe ue"}

# Also available via :from/:to
iex> Unicode.Transform.transform("Ä ö ü", from: "de", to: "ASCII")
{:ok, "AE oe ue"}

Locale-specific case transforms

These apply language-specific casing rules (e.g., Turkish dotted/dotless I, Lithuanian accent handling).

Transform IDDescription
az-LowerAzerbaijani lowercase
az-TitleAzerbaijani titlecase
az-UpperAzerbaijani uppercase
el-LowerGreek lowercase
el-TitleGreek titlecase
el-UpperGreek uppercase
lt-LowerLithuanian lowercase
lt-TitleLithuanian titlecase
lt-UpperLithuanian uppercase
nl-TitleDutch titlecase (IJ digraph handling)
tr-LowerTurkish lowercase
tr-TitleTurkish titlecase
tr-UpperTurkish uppercase
iex> Unicode.Transform.transform("İSTANBUL", transform: "tr-Lower")
{:ok, "istanbul"}

Ethiopic transforms

CLDR names these rule files by their BCP-47 identifier. Each row lists the forward alias followed by its BCP-47 form; transforms marked "both" also resolve in the reverse direction (for example Latin-Ethiopic/SERA or und-Ethi-t-und-latn-m0-sera).

Transform IDDirectionDescription
Ethiopic-Latin / und-Latn-t-und-ethibothEthiopic to Latin (default)
Ethiopic-Latin/ALALOC / und-Latn-t-und-ethi-m0-alalocbothEthiopic to Latin (ALA-LC)
Ethiopic-Latin/ALALOC_Geminate / und-Latn-t-und-ethi-m0-alaloc-geminateforwardEthiopic to Latin (ALA-LC, geminated)
Ethiopic-Latin/Aethiopica / und-Latn-t-und-ethi-m0-aethiopibothEthiopic to Latin (Aethiopica)
Ethiopic-Latin/Aethiopica_Geminate / und-Latn-t-und-ethi-m0-aethiopi-geminateforwardEthiopic to Latin (Aethiopica, geminated)
Ethiopic-Latin/Beta_Metsehaf / und-Latn-t-und-ethi-m0-betametsbothEthiopic to Latin (Beta Maṣāḥǝft)
Ethiopic-Latin/BetaMetsehaf_Geminate / und-Latn-t-und-ethi-m0-betamets-geminateforwardEthiopic to Latin (Beta Maṣāḥǝft, geminated)
Ethiopic-Latin/ES3842 / und-Latn-t-und-ethi-m0-es3842forwardEthiopic to Latin (ES 3842)
Ethiopic-Latin/IES_JES_1964 / und-Latn-t-und-ethi-m0-iesjes-1964bothEthiopic to Latin (IES/JES 1964)
Ethiopic-Latin/IES_JES_1964_Geminate / und-Latn-t-und-ethi-m0-iesjes-1964-geminateforwardEthiopic to Latin (IES/JES 1964, geminated)
Ethiopic-Latin/Lambdin / und-Latn-t-und-ethi-m0-lambdinbothEthiopic to Latin (Lambdin)
Ethiopic-Latin/SERA / und-Latn-t-und-ethi-m0-serabothEthiopic to Latin (SERA)
Ethiopic-Latin/Tekie_Alibekit / byn-Latn-t-byn-ethi-m0-tekiealibothBlin (Ethiopic) to Latin (Tekie Alibekit)
Ethiopic-Latin/Xaleget / byn-Latn-t-byn-ethi-m0-xalegetbothBlin (Ethiopic) to Latin (Xaleget)
Latin-Ethiopic/Williamson / und-Ethi-t-und-latn-m0-williamsbothLatin to Ethiopic (Williamson)
Amharic-Latin/BGN / am-Latn-t-am-m0-bgnforwardAmharic to Latin (BGN/PCGN)
Amharic-Amharic/Geminate / am-Ethi-t-am-ethi-m0-geminateforwardAmharic gemination marking
Ethiopic-Braille/Amharic / am-Brai-t-am-ethibothAmharic (Ethiopic) to Braille
am-Ethi-t-d0-morsebothAmharic (Ethiopic) to Morse code
Ethiopic-Cyrillic/Gutgarts / und-Cyrl-t-und-ethi-m0-gutgartsbothEthiopic to Cyrillic (Gutgarts)
Ethiopic-Ethiopic/Gurage / und-Ethi-t-sgw-ethi-m0-gurage-2013bothSebat Bet Gurage (Ethiopic) to standard Ethiopic (2013 orthography)
Geez-Musnad / und-Sarb-t-gz-ethibothGeʽez (Ethiopic) to Old South Arabian (Musnad)

Phonetic (IPA/FONIPA) transforms

Transforms to and from the [International Phonetic Alphabet](https://en.wikipedia.org/wiki/International_Phonetic_Alphabet#:~:text=The%20International%20Phonetic%20Alphabet%20(IPA,for%20the%20sounds%20of%20speech.).

Transform IDDescription
IPA-XSampaIPA to X-SAMPA notation
am-am_FONIPAAmharic to IPA
ar-ar_FONIPAArabic to IPA (via und_FONIPA-ar)
blt-fonipa-t-bltTai Dam to IPA
ch-ch_FONIPAChamorro to IPA
chr-chr_FONIPACherokee to IPA
cs-cs_FONIPACzech to IPA
cy-fonipa-t-cyWelsh to IPA
dsb-dsb_FONIPALower Sorbian to IPA
eo-eo_FONIPAEsperanto to IPA
es-es_FONIPASpanish to IPA
fa-fa_FONIPAPersian to IPA
hy-hy_FONIPAArmenian to IPA
hy_AREVMDA-hy_AREVMDA_FONIPAWestern Armenian to IPA
ia-ia_FONIPAInterlingua to IPA
kk-kk_FONIPAKazakh to IPA
ky-ky_FONIPAKyrgyz to IPA
la-la_FONIPALatin to IPA
my-my_FONIPAMyanmar to IPA
nv-nv_FONIPANavajo to IPA
pl-pl_FONIPAPolish to IPA
ro-ro_FONIPARomanian to IPA
sat_Olck-sat_FONIPASantali (Ol Chiki) to IPA
si-si_FONIPASinhala to IPA
sk-sk_FONIPASlovak to IPA
ta-ta_FONIPATamil to IPA
tlh-tlh_FONIPAKlingon to IPA
ug-ug_FONIPAUyghur to IPA
vec-vec_FONIPAVenetian to IPA
xh-xh_FONIPAXhosa to IPA
zu-zu_FONIPAZulu to IPA

IPA-based cross-language transforms

These use IPA as a pivot to approximate transliteration between languages.

Transform IDDescription
cs_FONIPA-jaCzech IPA to Japanese
cs_FONIPA-koCzech IPA to Korean
es_FONIPA-amSpanish IPA to Amharic
es_FONIPA-es_419_FONIPASpanish IPA to Latin American Spanish IPA
es_FONIPA-jaSpanish IPA to Japanese
es_FONIPA-zhSpanish IPA to Chinese
pl_FONIPA-jaPolish IPA to Japanese
ro_FONIPA-jaRomanian IPA to Japanese
sk_FONIPA-jaSlovak IPA to Japanese
und_FONIPA-arIPA to Arabic
und_FONIPA-chrIPA to Cherokee
und_FONIPA-faIPA to Persian

Cross-language transliteration transforms

These transform between specific language pairs, often using phonetic approximation.

Transform IDDescription
am-arAmharic to Arabic
am-chrAmharic to Cherokee
am-faAmharic to Persian
ch-amChamorro to Amharic
ch-arChamorro to Arabic
ch-chrChamorro to Cherokee
ch-faChamorro to Persian
cs-amCzech to Amharic
cs-arCzech to Arabic
cs-chrCzech to Cherokee
cs-faCzech to Persian
cs-jaCzech to Japanese
cs-koCzech to Korean
eo-amEsperanto to Amharic
eo-arEsperanto to Arabic
eo-chrEsperanto to Cherokee
eo-faEsperanto to Persian
es-amSpanish to Amharic
es-arSpanish to Arabic
es-chrSpanish to Cherokee
es-faSpanish to Persian
es-jaSpanish to Japanese
es-zhSpanish to Chinese
es_419-amLatin American Spanish to Amharic
es_419-arLatin American Spanish to Arabic
es_419-chrLatin American Spanish to Cherokee
es_419-faLatin American Spanish to Persian
es_419-jaLatin American Spanish to Japanese
es_419-zhLatin American Spanish to Chinese
hy-amArmenian to Amharic
hy-arArmenian to Arabic
hy-chrArmenian to Cherokee
hy-faArmenian to Persian
hy_AREVMDA-amWestern Armenian to Amharic
hy_AREVMDA-arWestern Armenian to Arabic
hy_AREVMDA-chrWestern Armenian to Cherokee
hy_AREVMDA-faWestern Armenian to Persian
ia-amInterlingua to Amharic
ia-arInterlingua to Arabic
ia-chrInterlingua to Cherokee
ia-faInterlingua to Persian
it-amItalian to Amharic
it-jaItalian to Japanese
ja_Latn-koRomanized Japanese to Korean
ja_Latn-ruRomanized Japanese to Russian
kk-amKazakh to Amharic
kk-arKazakh to Arabic
kk-chrKazakh to Cherokee
kk-faKazakh to Persian
ky-amKyrgyz to Amharic
ky-arKyrgyz to Arabic
ky-chrKyrgyz to Cherokee
ky-faKyrgyz to Persian
my-amMyanmar to Amharic
my-arMyanmar to Arabic
my-chrMyanmar to Cherokee
my-faMyanmar to Persian
pl-amPolish to Amharic
pl-arPolish to Arabic
pl-chrPolish to Cherokee
pl-faPolish to Persian
pl-jaPolish to Japanese
rm_SURSILV-amRomansh (Sursilvan) to Amharic
rm_SURSILV-arRomansh (Sursilvan) to Arabic
rm_SURSILV-chrRomansh (Sursilvan) to Cherokee
rm_SURSILV-faRomansh (Sursilvan) to Persian
rm_SURSILV-rm_FONIPA_SURSILVRomansh (Sursilvan) to IPA
ro-amRomanian to Amharic
ro-arRomanian to Arabic
ro-chrRomanian to Cherokee
ro-faRomanian to Persian
ro-jaRomanian to Japanese
ru-jaRussian to Japanese
ru-zhRussian to Chinese
sat-amSantali to Amharic
sat-arSantali to Arabic
sat-chrSantali to Cherokee
sat-faSantali to Persian
si-amSinhala to Amharic
si-arSinhala to Arabic
si-chrSinhala to Cherokee
si-faSinhala to Persian
sk-amSlovak to Amharic
sk-arSlovak to Arabic
sk-chrSlovak to Cherokee
sk-faSlovak to Persian
sk-jaSlovak to Japanese
tlh-amKlingon to Amharic
tlh-arKlingon to Arabic
tlh-chrKlingon to Cherokee
tlh-faKlingon to Persian
xh-amXhosa to Amharic
xh-arXhosa to Arabic
xh-chrXhosa to Cherokee
xh-faXhosa to Persian
zu-amZulu to Amharic
zu-arZulu to Arabic
zu-chrZulu to Cherokee
zu-faZulu to Persian

Specialized transforms

Transform IDDescription
Any-AccentsAdd accents to Latin text
Any-PublishingTypographic improvements (smart quotes, dashes)
Jamo-LatinKorean Jamo to Latin
Latin-ConjoiningJamoLatin to Conjoining Jamo (bidirectional)
Latin-NumericPinyinLatin pinyin to numeric tone pinyin
Pinyin-NumericPinyinPinyin with tone marks to numeric tones
Jpan-LatnJapanese (mixed scripts) to Latin
ug-LatinUyghur to Latin
si-si_LatnSinhala to Sinhala Latin

Other transforms

Myanmar/Zawgyi

Transform IDDescription
my-t-my-d0-zawgyiMyanmar Unicode to Zawgyi encoding
my-t-my-s0-zawgyiZawgyi encoding to Myanmar Unicode

Script variant transforms

Transform IDDescription
Simplified-TraditionalSimplified Chinese to Traditional Chinese
uz_Cyrl-uz_LatnUzbek Cyrillic to Uzbek Latin
ru_Latn-ru-BGNRomanized Russian back to Russian Cyrillic
ha-ha_NEHausa to Hausa (Niger variant)
yo-yo_BJYoruba to Yoruba (Benin variant)
mn-mn_Latn-MNSMongolian to Mongolian Latin (MNS)
zh_Latn_PINYIN-ruPinyin to Russian