Языковая политика
Личные блоги => cetsalcoatle => Topic started by: cetsalcoatle on 31 December 2025, 01:01:40
-
function translitUA(text) {
const vowels = "аеєиіїоуюяАЕЄИІЇОУЮЯ";
const isVowel = ch => vowels.includes(ch);
const baseMap = {
"а":"a","б":"b","в":"v","г":"h","ґ":"g","д":"d",
"е":"e","ж":"ž","з":"z","и":"y","і":"i","й":"j",
"к":"k","л":"l","м":"m","н":"n","о":"o","п":"p",
"р":"r","с":"s","т":"t","у":"u","ф":"f","х":"x",
"ц":"c","ч":"č","ш":"š","щ":"ś",
"А":"A","Б":"B","В":"V","Г":"H","Ґ":"G","Д":"D",
"Е":"E","Ж":"Ž","З":"Z","И":"Y","І":"I","Й":"J",
"К":"K","Л":"L","М":"M","Н":"N","О":"O","П":"P",
"Р":"R","С":"S","Т":"T","У":"U","Ф":"F","Х":"X",
"Ц":"C","Ч":"Č","Ш":"Š","Щ":"Ś"
};
let result = "";
let prevChar = "";
for (let i = 0; i < text.length; i++) {
const ch = text[i];
const lower = ch.toLowerCase();
// Ї — всегда ji
if (lower === "ї") {
result += (ch === "Ї") ? "Ji" : "ji";
}
// Я
else if (lower === "я") {
const out = (!prevChar || isVowel(prevChar)) ? "ja" : "ǎ";
result += (ch === "Я") ? out.toUpperCase() : out;
}
// Є
else if (lower === "є") {
const out = (!prevChar || isVowel(prevChar)) ? "je" : "ě";
result += (ch === "Є") ? out.toUpperCase() : out;
}
// Ю
else if (lower === "ю") {
const out = (!prevChar || isVowel(prevChar)) ? "ju" : "ǔ";
result += (ch === "Ю") ? out.toUpperCase() : out;
}
// Йо / ьо
else if (
(lower === "о") &&
(prevChar === "й" || prevChar === "ь" || prevChar === "Й" || prevChar === "Ь")
) {
// уже обработали й / ь, заменяем o
result += (!prevChar || isVowel(prevChar)) ? "o" : "ǒ";
}
// Мягкий знак
else if (lower === "ь") {
result += "í";
}
// Обычные буквы
else if (baseMap[ch]) {
result += baseMap[ch];
}
// Всё остальное
else {
result += ch;
}
prevChar = ch;
}
return result;
}
Интересно, оно работает? :what? У меня просто под рукой редактора кода нет. :dunno:
-
А что непонятно? Вроде даже прокомментировано адекватно.
-
А что непонятно? Вроде даже прокомментировано адекватно.
Да вроде всё понятно, просто это код сгенерированный GPT (и на мой непрофессиональный взгляд довольно классно), вопрос в том, можно ли его проверить без редактора кода?
-
Это же JavaScript, открываете консоль браузера и проверяете.
-
Оригинал:
Сучасні USB на ноутбуках стали більш енергоощадливі, через що бувають казуси, як-от проблема зі зовнішнім CD-приводом у мене. Вирішення дійсно одне: додаткове живлення, якщо конструкція передбачує.
Результат:
Sučasni USB na noutbukax staly bilíš enerhoośadlyvi, čerez śo buvajutí kazusy, ǎk-ot problema zi zovnišnim CD-pryvodom u mene. Vyrišennǎ dijsno odne: dodatkove žyvlennǎ, ǎkśo konstrukcija peredbačuje.
-
Оригинал:
Результат:
Спасибо! :up:
Чёт он косячит, должно было быть jak-ot и jakśo.
И в потоке í и i сливаются, возможно стоит "ь" обставить без изменений, но в целом мне нравится.
-
(и на мой непрофессиональный взгляд довольно классно)
Я бы сказал - совсем не классно, по-джуниорски. :) Много бизнес-логики засунуто в самую низкоуровневую часть реализации (цепочка else if-ов внутри цикла с какими-то мутабельными переменными); много копипасты. Поэтому трудно понять, что делает алгоритм, и проблематично его поддерживать.
Технический момент: создавать строку с помощью += есть антипаттерн. Каждый промежуточный результат уходит в мусор, что означает квадратичный мусор. Когда строку создают из большого числа частей, их собирают в массив и применяют join.