Викиавтор:Wadorgurt/latinisator.js
Валэктон: Воштэтъёсты адӟон понна, гожтостэс шараям бере, тӥледлы браузердылэсь кешсэ дугдытоно луоз, дыр.
- Firefox/Safari: возе Shift, зӥбыса Выльдоно, яке зӥбе Ctrl-F5 яке Ctrl -R (Mac-ын ⌘-R)
- Google Chrome: зӥбе Ctrl-Shift-R (Mac-ын ⌘-Shift-R).
- Internet Explorer/Edge: возе Ctrl, зӥбыса Выльдоно, яке зӥбе Ctrl-F5.
- Opera: зӥбе Ctrl-F5.
/****************************************************************************************
Скрипт добавляет в верхнюю панель инструментов кнопку, позволяющую просмотреть содержимое
страницы Википедии на удмуртском языке в латинской графике.
Ввиду того, что официально утверждённых правил перевода удмуртского языка с кириллицы на
латиницу не существует, данные правила были придуманы автором самостоятельно.
*****************************************************************************************/
// Следующая функция осуществляет латинизацию переданного ей кириллического текста и
// возвращает текст на латинице. Используются 3 буквы с диакритикой - ö, ś, ź.
function latinisation_udm1(text)
{
// Объявление 2 массивов, которые будут хранить символы для поиска и замены соответственно
var mcyr = new Array();
var mlat = new Array();
// Записываем в массивы сами правила замены символов на языке регулярных выражений
// В левой колонке - буквы, которые ищем; в правой - буквы, на которые заменяем
mcyr.push(/с([ЕеЁёИиЬьЮюЯя])/g); mlat.push("ś$1");
mcyr.push(/С([ЕеЁёИиЬьЮюЯя])/g); mlat.push("Ś$1");
mcyr.push(/з([ЕеЁёИиЬьЮюЯя])/g); mlat.push("ź$1");
mcyr.push(/З([ЕеЁёИиЬьЮюЯя])/g); mlat.push("Ź$1");
mcyr.push(/([ДдЛлНнТтФфХх])е/g); mlat.push("$1ie");
mcyr.push(/([eАаЕеЁёИиӤӥОоӦӧУуЪъЫыЬьЭэЮюЯя,;—"'>\:\.\?\!\-\(\)\s])е/g); mlat.push("$1je");
mcyr.push(/[еэ]/g); mlat.push("e");
mcyr.push(/([ДдЛлНнТтФфХх])Е/g); mlat.push("$1IE");
mcyr.push(/([EeАаЕЁёИиӤӥОоӦӧУуЪъЫыЬьЭЮюЯя,;—"'>\:\.\?\!\-\(\)\s])Е/g); mlat.push("$1Je");
mcyr.push(/[ЕЭ]/g); mlat.push("E");
mcyr.push(/([БбВвГгДдКкЛлМмНнПпРрТтФфХх])ё/g); mlat.push("$1ʼo");
mcyr.push(/([EeoАаЁёИиӤӥОоӦӧУуЪъЫыЬьЮюЯя,;—"'>\:\.\?\!\-\(\)\s])ё/g); mlat.push("$1jo");
mcyr.push(/[ёо]/g); mlat.push("o");
mcyr.push(/([БбВвГгДдКкЛлМмНнПпРрТтФфХх])Ё/g); mlat.push("$1ʼO");
mcyr.push(/([EeOoАаЁИиӤӥОӦӧУуЪъЫыЬьЮюЯя,;—"'>\:\.\?\!\-\(\)\s])Ё/g); mlat.push("$1Jo");
mcyr.push(/[ЁО]/g); mlat.push("O");
mcyr.push(/([БбВвГгДдКкЛлМмНнПпРрТтФфХх])ю/g); mlat.push("$1iu");
mcyr.push(/([EeOouАаИиӤӥӦӧУуЪъЫыЬьЮюЯя,;—"'>\:\.\?\!\-\(\)\s])ю/g); mlat.push("$1ju");
mcyr.push(/[ую]/g); mlat.push("u");
mcyr.push(/([БбВвГгДдКкЛлМмНнПпРрТтФфХх])Ю/g); mlat.push("$1IU");
mcyr.push(/([EeOoUuАаИиӤӥӦӧУЪъЫыЬьЮЯя,;—"'>\:\.\?\!\-\(\)\s])Ю/g); mlat.push("$1Ju");
mcyr.push(/[УЮ]/g); mlat.push("U");
mcyr.push(/([БбВвГгДдКкЛлМмНнПпРрТтФфХх])я/g); mlat.push("$1ia");
mcyr.push(/([aEeOoUuАаИиӤӥӦӧЪъЫыЬьЯя,;—"'>\:\.\?\!\-\(\)\s])я/g); mlat.push("$1ja");
mcyr.push(/[ая]/g); mlat.push("a");
mcyr.push(/([БбВвГгДдКкЛлМмНнПпРрТтФфХх])Я/g); mlat.push("$1IA");
mcyr.push(/([AaEeOoUuАИиӤӥӦӧЪъЫыЬьЯ,;—"'>\:\.\?\!\-\(\)\s])Я/g); mlat.push("$1Ja");
mcyr.push(/[АЯ]/g); mlat.push("A");
mcyr.push(/([ДдЛлНнТт])и/g); mlat.push("$1ii");
mcyr.push(/([ДдЛлНнТт])И/g); mlat.push("$1II");
mcyr.push(/([Цц])и/g); mlat.push("$1y");
mcyr.push(/([Цц])И/g); mlat.push("$1Y");
mcyr.push(/[иӥ]/g); mlat.push("i");
mcyr.push(/[ИӤ]/g); mlat.push("I");
mcyr.push(/ӧ/g); mlat.push("ö");
mcyr.push(/Ӧ/g); mlat.push("Ö");
mcyr.push(/ы/g); mlat.push("y");
mcyr.push(/Ы/g); mlat.push("Y");
mcyr.push(/б/g); mlat.push("b");
mcyr.push(/Б/g); mlat.push("B");
mcyr.push(/в/g); mlat.push("v");
mcyr.push(/В/g); mlat.push("V");
mcyr.push(/г/g); mlat.push("g");
mcyr.push(/Г/g); mlat.push("G");
mcyr.push(/д/g); mlat.push("d");
mcyr.push(/Д/g); mlat.push("D");
mcyr.push(/ж/g); mlat.push("zh");
mcyr.push(/Ж/g); mlat.push("Zh");
mcyr.push(/ӝ/g); mlat.push("dzh");
mcyr.push(/Ӝ/g); mlat.push("Dzh");
mcyr.push(/з/g); mlat.push("z");
mcyr.push(/З/g); mlat.push("Z");
mcyr.push(/ӟ/g); mlat.push("dź");
mcyr.push(/Ӟ/g); mlat.push("Dź");
mcyr.push(/й/g); mlat.push("j");
mcyr.push(/Й/g); mlat.push("J");
mcyr.push(/к/g); mlat.push("k");
mcyr.push(/К/g); mlat.push("K");
mcyr.push(/л/g); mlat.push("l");
mcyr.push(/Л/g); mlat.push("L");
mcyr.push(/м/g); mlat.push("m");
mcyr.push(/М/g); mlat.push("M");
mcyr.push(/н/g); mlat.push("n");
mcyr.push(/Н/g); mlat.push("N");
mcyr.push(/п/g); mlat.push("p");
mcyr.push(/П/g); mlat.push("P");
mcyr.push(/р/g); mlat.push("r");
mcyr.push(/Р/g); mlat.push("R");
mcyr.push(/с/g); mlat.push("s");
mcyr.push(/С/g); mlat.push("S");
mcyr.push(/т/g); mlat.push("t");
mcyr.push(/Т/g); mlat.push("T");
mcyr.push(/ф/g); mlat.push("f");
mcyr.push(/Ф/g); mlat.push("F");
mcyr.push(/х/g); mlat.push("x");
mcyr.push(/Х/g); mlat.push("X");
mcyr.push(/ц/g); mlat.push("ts");
mcyr.push(/Ц/g); mlat.push("Ts");
mcyr.push(/ч/g); mlat.push("ch");
mcyr.push(/Ч/g); mlat.push("Ch");
mcyr.push(/ӵ/g); mlat.push("c");
mcyr.push(/Ӵ/g); mlat.push("C");
mcyr.push(/ш/g); mlat.push("sh");
mcyr.push(/Ш/g); mlat.push("Sh");
mcyr.push(/щ/g); mlat.push("shch");
mcyr.push(/Щ/g); mlat.push("Shch");
mcyr.push(/[Ьь]/g); mlat.push("ʼ");
mcyr.push(/([ŚśŹź])ʼ/g); mlat.push("$1");
mcyr.push(/[Ъъ]/g); mlat.push("");
// Далее запускается сам процесс замены символов: двигаемся по колонкам сверху вниз, последовательно
// применяя одно правило за другим
for (var i = 0; i < mcyr.length; i++)
text = text.replace(mcyr[i], mlat[i]);
return text;
}
// Ещё один вариант латинизации, используются 6 букв с диакритикой - ö, ś, ź, š, ž, č.
function latinisation_udm2(text)
{
var mcyr = new Array();
var mlat = new Array();
mcyr.push(/с([ЕеЁёИиЬьЮюЯя])/g); mlat.push("ś$1");
mcyr.push(/С([ЕеЁёИиЬьЮюЯя])/g); mlat.push("Ś$1");
mcyr.push(/з([ЕеЁёИиЬьЮюЯя])/g); mlat.push("ź$1");
mcyr.push(/З([ЕеЁёИиЬьЮюЯя])/g); mlat.push("Ź$1");
mcyr.push(/([ДдЛлНнТтФфХх])е/g); mlat.push("$1ie");
mcyr.push(/([eАаЕеЁёИиӤӥОоӦӧУуЪъЫыЬьЭэЮюЯя,;—"'>\:\.\?\!\-\(\)\s])е/g); mlat.push("$1je");
mcyr.push(/[еэ]/g); mlat.push("e");
mcyr.push(/([ДдЛлНнТтФфХх])Е/g); mlat.push("$1IE");
mcyr.push(/([EeАаЕЁёИиӤӥОоӦӧУуЪъЫыЬьЭЮюЯя,;—"'>\:\.\?\!\-\(\)\s])Е/g); mlat.push("$1Je");
mcyr.push(/[ЕЭ]/g); mlat.push("E");
mcyr.push(/([БбВвГгДдКкЛлМмНнПпРрТтФфХх])ё/g); mlat.push("$1ʼo");
mcyr.push(/([EeoАаЁёИиӤӥОоӦӧУуЪъЫыЬьЮюЯя,;—"'>\:\.\?\!\-\(\)\s])ё/g); mlat.push("$1jo");
mcyr.push(/[ёо]/g); mlat.push("o");
mcyr.push(/([БбВвГгДдКкЛлМмНнПпРрТтФфХх])Ё/g); mlat.push("$1ʼO");
mcyr.push(/([EeOoАаЁИиӤӥОӦӧУуЪъЫыЬьЮюЯя,;—"'>\:\.\?\!\-\(\)\s])Ё/g); mlat.push("$1Jo");
mcyr.push(/[ЁО]/g); mlat.push("O");
mcyr.push(/([БбВвГгДдКкЛлМмНнПпРрТтФфХх])ю/g); mlat.push("$1iu");
mcyr.push(/([EeOouАаИиӤӥӦӧУуЪъЫыЬьЮюЯя,;—"'>\:\.\?\!\-\(\)\s])ю/g); mlat.push("$1ju");
mcyr.push(/[ую]/g); mlat.push("u");
mcyr.push(/([БбВвГгДдКкЛлМмНнПпРрТтФфХх])Ю/g); mlat.push("$1IU");
mcyr.push(/([EeOoUuАаИиӤӥӦӧУЪъЫыЬьЮЯя,;—"'>\:\.\?\!\-\(\)\s])Ю/g); mlat.push("$1Ju");
mcyr.push(/[УЮ]/g); mlat.push("U");
mcyr.push(/([БбВвГгДдКкЛлМмНнПпРрТтФфХх])я/g); mlat.push("$1ia");
mcyr.push(/([aEeOoUuАаИиӤӥӦӧЪъЫыЬьЯя,;—"'>\:\.\?\!\-\(\)\s])я/g); mlat.push("$1ja");
mcyr.push(/[ая]/g); mlat.push("a");
mcyr.push(/([БбВвГгДдКкЛлМмНнПпРрТтФфХх])Я/g); mlat.push("$1IA");
mcyr.push(/([AaEeOoUuАИиӤӥӦӧЪъЫыЬьЯ,;—"'>\:\.\?\!\-\(\)\s])Я/g); mlat.push("$1Ja");
mcyr.push(/[АЯ]/g); mlat.push("A");
// mcyr.push(/([ДдЛлНнТт])и/g); mlat.push("$1ii");
// mcyr.push(/([ДдЛлНнТт])И/g); mlat.push("$1II");
mcyr.push(/([Цц])и/g); mlat.push("$1y");
mcyr.push(/([Цц])И/g); mlat.push("$1Y");
mcyr.push(/[иӥ]/g); mlat.push("i");
mcyr.push(/[ИӤ]/g); mlat.push("I");
mcyr.push(/ӧ/g); mlat.push("ö");
mcyr.push(/Ӧ/g); mlat.push("Ö");
mcyr.push(/ы/g); mlat.push("y");
mcyr.push(/Ы/g); mlat.push("Y");
mcyr.push(/б/g); mlat.push("b");
mcyr.push(/Б/g); mlat.push("B");
mcyr.push(/в/g); mlat.push("v");
mcyr.push(/В/g); mlat.push("V");
mcyr.push(/г/g); mlat.push("g");
mcyr.push(/Г/g); mlat.push("G");
mcyr.push(/д/g); mlat.push("d");
mcyr.push(/Д/g); mlat.push("D");
mcyr.push(/ж/g); mlat.push("ž");
mcyr.push(/Ж/g); mlat.push("Ž");
mcyr.push(/ӝ/g); mlat.push("dž");
mcyr.push(/Ӝ/g); mlat.push("Dž");
mcyr.push(/з/g); mlat.push("z");
mcyr.push(/З/g); mlat.push("Z");
mcyr.push(/ӟ/g); mlat.push("dź");
mcyr.push(/Ӟ/g); mlat.push("Dź");
mcyr.push(/й/g); mlat.push("j");
mcyr.push(/Й/g); mlat.push("J");
mcyr.push(/к/g); mlat.push("k");
mcyr.push(/К/g); mlat.push("K");
mcyr.push(/л/g); mlat.push("l");
mcyr.push(/Л/g); mlat.push("L");
mcyr.push(/м/g); mlat.push("m");
mcyr.push(/М/g); mlat.push("M");
mcyr.push(/н/g); mlat.push("n");
mcyr.push(/Н/g); mlat.push("N");
mcyr.push(/п/g); mlat.push("p");
mcyr.push(/П/g); mlat.push("P");
mcyr.push(/р/g); mlat.push("r");
mcyr.push(/Р/g); mlat.push("R");
mcyr.push(/с/g); mlat.push("s");
mcyr.push(/С/g); mlat.push("S");
mcyr.push(/т/g); mlat.push("t");
mcyr.push(/Т/g); mlat.push("T");
mcyr.push(/ф/g); mlat.push("f");
mcyr.push(/Ф/g); mlat.push("F");
mcyr.push(/х/g); mlat.push("h");
mcyr.push(/Х/g); mlat.push("H");
mcyr.push(/ц/g); mlat.push("ts");
mcyr.push(/Ц/g); mlat.push("Ts");
mcyr.push(/ч/g); mlat.push("č");
mcyr.push(/Ч/g); mlat.push("Č");
mcyr.push(/ӵ/g); mlat.push("c");
mcyr.push(/Ӵ/g); mlat.push("C");
mcyr.push(/ш/g); mlat.push("š");
mcyr.push(/Ш/g); mlat.push("Š");
mcyr.push(/щ/g); mlat.push("šč");
mcyr.push(/Щ/g); mlat.push("Šč");
mcyr.push(/[Ьь]/g); mlat.push("ʼ");
mcyr.push(/([ŚśŹź])ʼ/g); mlat.push("$1");
mcyr.push(/[Ъъ]/g); mlat.push("");
for (var i = 0; i < mcyr.length; i++)
text = text.replace(mcyr[i], mlat[i]);
return text;
}
// Следующая функция запускается при нажатии на кнопку латинизации. Её задача проста: взять текст с
// вики-страницы, передать его на обработку функции latinisation_udm и вывести результат на страницу
function LatinizeIt(variant)
{
var str;
if (variant == 1)
str = latinisation_udm1( $( '#content' ).html() );
else
str = latinisation_udm2( $( '#content' ).html() );
$( '#content' ).html(str);
}
// Следующая функция добавляет кнопку латинизации на панель инструментов вверху страницы
function AddLatinisationButton()
{
mw.util.addPortletLink('p-variants', 'javascript:LatinizeIt(1);', 'Латинкаен учкон (1-тӥ вариант)', 'ca-varlang-0');
mw.util.addPortletLink('p-variants', 'javascript:LatinizeIt(2);', 'Латинкаен учкон (2-тӥ вариант)', 'ca-varlang-1');
}
if (mw.config.get('wgAction') == "view" && mw.config.get('wgNamespaceNumber') >= 0)
mw.hook( 'wikipage.content' ).add( AddLatinisationButton );