Modul:Не перекладено
Documentation for this module may be created at Modul:Не перекладено/doc
-- Модуль покликаний замінити, а згодом розширити новим функціоналом вікікод
-- однойменного шаблону.
-- TODO Докоментувати код
-- TODO Створити документацію до модуля
-- TODO Імплементувати фічі роботи з ВД запропоновані Атою на СО шаблону
local p = {}
-- Щоб порожні використання параметрів вважались нілевими. Нілеві значення, на
-- відміну від порожніх рядків, дають булеву хибу для умовних операторів.
-- Кращий спосіб робити цю валідацію вітається.
local function init(vari)
if vari == "" then
return nil
else
return vari;
end
end
-- має замінити [[Шаблон:Не перекладено/lang]]
local function conjugatedLanguagePhrase(language, nocat, currentTitleText)
-- TODO відсортувати за абеткою (будь-якою)
-- TODO замінити на якусь дуже розумну функцію з витягуванням назв мов з
-- рушія, або ж на використання функції з іншого модуля
local phrase = "";
local cat = "";
-- TODO зробити кращий вивід категорій-індикаторів помилок
local languagePairs = {
["d"] = "Вікіданих",
["simple"] = "англійською",
["en"] = "англійською",
["et"] = "естонською",
["ru"] = "російською",
["de"] = "німецькою",
["fr"] = "французькою",
["la"] = "латиною",
["es"] = "іспанською",
["uk"] = "українською",
["it"] = "італійською",
["pt"] = "португальською",
["pl"] = "польською",
["ba"] = "башкирською",
["el"] = "грецькою",
["bg"] = "болгарською",
["ja"] = "японською",
["nl"] = "нідерландською",
["he"] = "на івриті",
["be"] = "білоруською",
["be-tarask"] = "білоруською",
["be-x-old"] = "білоруською",
["sv"] = "шведською",
["fi"] = "фінською",
["am"] = "вірменською",
["lv"] = "латиською",
["ar"] = "арабською",
["zh"] = "китайською",
["az"] = "азербайджанською",
["tr"] = "турецькою",
["lt"] = "литовською",
["hu"] = "угорською",
["no"] = "норвезькою (букмол)",
["nn"] = "норвезькою (нюношк)",
["sr"] = "сербською",
["cs"] = "чеською",
["cz"] = "чеською",
["ga"] = "ірландською",
["ro"] = "румунською",
["crh"] = "кримськотатарською",
["da"] = "данською",
["ca"] = "каталонською",
["hr"] = "хорватською",
["fa"] = "на фарсі",
["sa"] = "санскриті",
["sk"] = "словацькою",
["id"] = "індонезійською",
["ko"] = "корейською",
["os"] = "осетинською",
["is"] = "ісландською",
["mn"] = "монгольською",
["hi"] = "на хінді",
["tt"] = "татарською",
["eu"] = "баскською",
["cy"] = "валлійською",
["mk"] = "македонською",
["uz"] = "узбецькою",
["sl"] = "словенською",
["kk"] = "казахською",
["sq"] = "албанською",
["gd"] = "гаельською",
["eo"] = "есперанто",
["fy"] = "західнофризькою",
["hy"] = "вірменською",
["ka"] = "грузинською",
["mdf"] = "мокшанською",
["nb"] = "норвезькою (букмол)",
["rue"] = "русинською",
["sah"] = "якутською",
["sh"] = "сербохорватською",
["tl"] = "тагальською",
["vi"] = "в'єтнамською",
["yi"] = "на їдиші",
["ms"] = "малайською",
["tg"] = "таджицькою",
["bs"] = "боснійською",
["si"] = "сингальською",
["ur"] = "мовою урду",
["ps"] = "мовою пушту",
["km"] = "кхмерською",
["th"] = "тайською",
["to"] = "тонганською",
["lo"] = "лаоською",
["dv"] = "мальдівською",
["br"] = "бретонською",
["aa"] = "афарською",
["ab"] = "абхазькою",
["af"] = "мовою африкаанс",
["ak"] = "мовою акан",
["am"] = "амхарською",
["an"] = "арагонською",
["as"] = "ассамською",
["av"] = "аварською",
["ay"] = "мовою аймара",
["pap"] = "мовою пап’яменто",
["lb"] = "люксембурзькою",
["ku"] = "курдською",
["so"] = "сомалійською",
["mt"] = "мальтійською",
["na"] = "науруанською",
["ne"] = "непальською",
["gl"] = "галісійською",
["sc"] = "сардинською",
["scn"] = "сицилійською",
["ky"] = "киргизькою",
["wa"] = "валлонською",
["kl"] = "ґренландською",
["fo"] = "фарерською",
["ast"] = "астурійською",
["kv"] = "мовою комі",
["tyv"] = "тувинською",
["ce"] = "чеченською",
["cv"] = "чуваською",
["rw"] = "руандійською",
["haw"] = "гавайською",
["ch"] = "мовою чаморро",
["co"] = "корсиканською",
["als"] = "алеманським діалектом німецької мови",
["ceb"] = "себуанською",
["frp"] = "франко-провансальською",
["bn"] = "бенгальською",
["myv"] = "ерзянською",
["sw"] = "мовою суахілі",
["oc"] = "окситанською",
["arz"] = "єгипетською арабською",
["avk"] = "мовою котава",
["kw"] = "корнською",
["vec"] = "венеційською",
["ta"] = "тамільською",
["szl"] = "сілезькою",
["sco"] = "шотландською рівниною",
["rup"] = "арумунською",
["mr"] = "мовою маратхі",
["ht"] = "гаїтянською креольською",
["hsb"] = "верхньолужицькою"
}
conjugatedLanguageName = languagePairs[language];
if conjugatedLanguageName then
phrase = phrase .. conjugatedLanguageName;
else
phrase = phrase .. "(помилка: непідтримувана мова)";
if not nocat then
cat = cat .. "[[Категорія:Вікіпедія:Статті з непідтримуваною мовою в шаблоні Не перекладено|" .. language .. "]]";
end
end
local unconjugatable = {
["d"] = true,
["eo"] = true,
["he"] = true,
["sa"] = true,
["hi"] = true,
["fa"] = true,
["la"] = true,
["yi"] = true,
["ur"] = true,
["ps"] = true,
["af"] = true,
["ak"] = true,
["ay"] = true,
["pap"] = true,
["kv"] = true,
["ch"] = true,
["als"] = true,
["sw"] = true,
["avk"] = true,
["mr"] = true
}
if not unconjugatable[language] then
phrase = phrase .. " мовою";
end
return {phrase, cat};
end
-- Головна функція
function p.main(frame)
-- Витягуємо параметри батьківського шаблону
local parent = frame:getParent();
local args = parent.args;
-- Перетягування батьківських параметрів у змінні
local needed = init(args["треба"]) or init(args[1]);
local text = init(args["текст"]) or init(args[2]);
local language = init(args["мова"]) or init(args[3]) or "en";
local exist = init(args["є"]) or init(args[4]) or init(args[1]);
-- відрізати прогалини
language = string.gsub(language, "(%s+)", "");
-- Створюємо таблицю поточної сторінки щоб перевірити її пн, щоб разом з
-- параметром nocat вирішити чи треба її категоризувати
local currentTitle = mw.title.getCurrentTitle();
-- Назва поточної сторінки. Використовуватиметься для ключів сортування
local currentTitleText = currentTitle.text;
-- Витягуємо параметр nocat
local nocat = init(args["nocat"]);
-- та перевіряємо простір назв поточної сторінки
-- не порожнє значення nocat та нульовий простір назв означають що сторінку
-- можна категоризувати.
-- інші простори ще й як треба категоризувати, особливо категорією "неактуальний шаблон".
-- інакше обхід категорії Вікіпедія:Статті з неактуальним шаблоном Не перекладено
-- не виправляє наприклад включення в шаблонах, а це потрібно, бо інакше статті з цим шаблоном
-- в цю категорію потрапляють, але шаблону не містять, його треба прибрати з якогось включення
local ns = currentTitle.namespace;
if ns == 1 or ns == 2 or ns == 3 then nocat = 1; end
-- Головна змінна побудови рядка виводу
local wrt = "";
-- Таблиця назви яка "треба"
if needed == nil then
error("Параметр з назвою сторінки яку треба створити обов'язковий (перший параметр, або параметр треба)")
end
local neededTitle = mw.title.new(needed, "");
-- Булева змінна, яка показує чи існує стаття, яка "треба"
local neededExists = neededTitle.exists;
-- Створюмо внутрішнє посилання на статтю, що "треба"
local linkToNeeded = "";
linkToNeeded = linkToNeeded .. "[[";
linkToNeeded = linkToNeeded .. needed;
if text then
linkToNeeded = linkToNeeded .. "|" .. text;
end
linkToNeeded = linkToNeeded .. "]]";
-- Не залежно від того чи стаття, що "треба" існує ми робимо на неї
-- посилання. Що змінюється — лише колір — і це за нас обробляє рушій
wrt = wrt .. linkToNeeded;
if neededExists then
-- Дії, що здійснюється якщо стаття, яка "треба" існує
local alert = mw.html.create("span");
alert:addClass("noprint visible-to-contributors");
alert:attr("title","Шаблон «не перекладено» не замінено");
alert:css({["color"]="red"});
alert:wikitext("●");
wrt = wrt .. tostring(alert);
if not nocat then
-- Дії, які здійснюються якщо цю сторінку можна категоризувати
wrt = wrt .. "[[Категорія:Вікіпедія:Статті з неактуальним шаблоном Не перекладено|" .. currentTitleText .. "]]"
end
else
-- Дії, які здійснюються якщо стаття, яка "треба" не існує
-- Створюємо HTML-елемент тексту у верхньому індексі
local sup = mw.html.create("sup");
-- Додаємо до нього клас "noprint"
sup:addClass("noprint");
local linkToExist = "";
linkToExist = linkToExist .. "[[";
linkToExist = linkToExist .. ":" .. language .. ":" .. exist;
if language == "d" then
linkToExist = linkToExist .. "#sitelinks-wikipedia";
end
linkToExist = linkToExist .. "|";
local span = mw.html.create("span");
local spanCSS = {
["font-size"] = "normal",
["font-style"] = "normal",
["font-weight"] = "normal"
}
span:css(spanCSS);
spanTitle = "";
-- містить текст, що буде додано до тегів <span></span>
-- цей текст спливає при наведені курсура на значок «[en]»
-- я (Base) не маю жодного уявлення що б це мало бути, але це порівняння
-- з "d" походить з оригінального коду. Потребує дослідження, оскільки
-- фічу не документовано.
-- Це ж значною мірою стосується й решти умовних операторів, що
-- стосуються атрибуту title
-- "d" - робить посилання на Вікідані
-- Я (Repakr) трохи доповним документацію
--Перевіряємо чи вказано посилання на вікіданих чи ні
--Для цього перевіряється чи змінна language містить значення d
--Якщо так, то в змінну spanTitle додаємо текст "Сторінка статті (назва_потрібної_статті) на"
if language == "d" then
spanTitle = spanTitle .. "Сторінка статті ".. needed .. " на";
else
--Якщо ні, то тоді перевіряється чи містить змінна exist значення
--Якщо так, в змінну spanTitle додаємо текст "(наявна_назва_статті_іншою_мовою) — в"
if exist then
spanTitle = spanTitle .. exist .. " — в";
else
--Якщо ні, в змінну spanTitle додаємо текст «В»
spanTitle = spanTitle .. "В";
end
--Тепер об'єднуємо значення змінної spanTitle з текстом "ерсія статті «(назва_потрібної_статті)»"
spanTitle = spanTitle .. "ерсія статті «".. needed .."»";
end
conjugatedLanguagePhraseAndCat = conjugatedLanguagePhrase(language, nocat, currentTitleText);
spanTitle = spanTitle .. " " .. conjugatedLanguagePhraseAndCat[1];
span:attr("title", spanTitle);
span:wikitext("[" .. language .. "]");
linkToExist = linkToExist .. tostring(span);
linkToExist = linkToExist .. "]]";
linkToExist = linkToExist .. conjugatedLanguagePhraseAndCat[2];
sup:wikitext(linkToExist);
wrt = wrt .. tostring(sup);
end
return wrt;
end
return p;