Как транслитерировать текст обратно с английского на русский. JS
Я попробовал так, но он не работает так, как я хочу, например текст ch он должен переводить ч, но переводит ц х. Вот код:
var answer = '';
function translit(word) {
var converter = {
'a': 'а', 'b': 'б', 'v': 'в', 'g': 'г', 'd': 'д',
'e': 'е', 'yo': 'ё', 'zh': 'ж', 'z': 'з', 'и': 'i',
'y': 'й', 'k': 'к', 'l': 'л', 'm': 'м', 'n': 'н',
'o': 'о', 'p': 'п', 'r': 'р', 's': 'с', 't': 'т',
'u': 'у', 'f': 'ф', 'h': 'х', 'c': 'ц', 'ch': 'ч',
'sh': 'ш', 'sch': 'щ', 'y': 'ы', 'yu': 'ю', 'ya': 'я',
};
for (var i = 0; i < word.length; i++) {
if (converter[word[i]] == undefined) {
answer += word[i];
else {
answer += converter[word[i]];
}
}
}
translit(event.target.value);
Ответы (1 шт):
Автор решения: vsemozhebuty
→ Ссылка
Вам нужно сначала целиком заменять сочетания большей длины, а потом меньшей.
В последних версиях JS гарантирован порядок перебора ключей объектов в порядке создания (если все ключи являются нецифровыми строками), так что, например, такой вариант должен работать (или можно вместо объекта использовать Map):
function translit(word) {
const converter = {
'sch': 'щ',
'yo': 'ё', 'zh': 'ж', 'ch': 'ч', 'sh': 'ш', 'yu': 'ю', 'ya': 'я',
'a': 'а', 'b': 'б', 'v': 'в', 'g': 'г', 'd': 'д',
'e': 'е', 'z': 'з', 'и': 'i', 'y': 'й', 'k': 'к',
'l': 'л', 'm': 'м', 'n': 'н', 'o': 'о', 'p': 'п',
'r': 'р', 's': 'с', 't': 'т', 'u': 'у', 'f': 'ф',
'h': 'х', 'c': 'ц', 'y': 'ы',
};
for (const [key, value] of Object.entries(converter)) {
word = word.replaceAll(key, value);
}
return word;
}
console.log(translit('schuka'));
console.log(translit('yozh'));