Skip to content

Instantly share code, notes, and snippets.

@croisillon
Last active April 27, 2024 10:28
Show Gist options
  • Save croisillon/d2d50686cb5a472f5696 to your computer and use it in GitHub Desktop.
Save croisillon/d2d50686cb5a472f5696 to your computer and use it in GitHub Desktop.
JavaScript translater russian to translit
function rus_to_latin ( str ) {
var ru = {
'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd',
'е': 'e', 'ё': 'e', 'ж': 'j', 'з': 'z', 'и': 'i',
'к': 'k', 'л': 'l', 'м': 'm', 'н': 'n', 'о': 'o',
'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u',
'ф': 'f', 'х': 'h', 'ц': 'c', 'ч': 'ch', 'ш': 'sh',
'щ': 'shch', 'ы': 'y', 'э': 'e', 'ю': 'u', 'я': 'ya'
}, n_str = [];
str = str.replace(/[ъь]+/g, '').replace(/й/g, 'i');
for ( var i = 0; i < str.length; ++i ) {
n_str.push(
ru[ str[i] ]
|| ru[ str[i].toLowerCase() ] == undefined && str[i]
|| ru[ str[i].toLowerCase() ].toUpperCase()
);
}
return n_str.join('');
}
/*
rus_to_latin( 'Иван Алексеев, известный под сценической кличкой Noize MC записал альбом с показательным названием «Неразбериха». Получилась питательная и где-то даже успокоительная смесь из хип-хопа, гранжа, регги и брейк-бита' );
> Ivan Alekseev, izvestnyi pod scenicheskoi klichkoi Noize MC zapisal albom s pokazatelnym nazvaniem «Nerazberiha». Poluchilas pitatelnaya i gde-to daje uspokoitelnaya smes iz hip-hopa, granja, reggi i breik-bita
*/
@OrangeBox33
Copy link

СПАСИБО!

@monkekode
Copy link

monkekode commented Nov 15, 2021

В последней версии не работает й. Вот рабочая версия на TS, с поддержкой украинских букв. Результат совпадает с текстом в стартовом посте:

const ruKeys: Record<string, string> = {
    'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ё': 'e', 'ж': 'j', 'з': 'z', 'и': 'i',
    'к': 'k', 'л': 'l', 'м': 'm', 'н': 'n', 'о': 'o', 'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u',
    'ф': 'f', 'х': 'h', 'ц': 'c', 'ч': 'ch', 'ш': 'sh', 'щ': 'shch', 'ы': 'y', 'э': 'e', 'ю': 'u', 'я': 'ya',
    'й': 'i', 'ъ': '', 'ь': '', 'і': 'i', 'ї': 'yi', 'є': 'ye'
};

function transliterate(word: string) {
    return word.split("").map((letter) => {
        const lowLetter = letter.toLowerCase();
        const en = ruKeys[lowLetter] ?? letter;
        return lowLetter === letter ? en : (en.slice(0,1).toUpperCase() + en.slice(1);
    }).join("");
}

const test = 'і є ї Щваньъ Алексеев, известный под сценической кличкой Noize MC записал альбом с показательным названием «Неразбериха». Получилась питательная и где-то даже успокоительная смесь из хип-хопа, гранжа, регги и брейк-бита';
const expected = 'i ye yi Shchvan Alekseev, izvestnyi pod scenicheskoi klichkoi Noize MC zapisal albom s pokazatelnym nazvaniem «Nerazberiha». Poluchilas pitatelnaya i gde-to daje uspokoitelnaya smes iz hip-hopa, granja, reggi i breik-bita';

console.log(transliterate(test) == expected);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment