Модуль:Citation/CS1/Generate language table
< Модуль:Citation | CS1
Документація модуля[перегляд] [редагувати] [історія] [очистити кеш]
Цей модуль позначений як К:бета-модуль (23), і готовий до широкого вжитку. Він і досі новий і його слід використовувати з певною обережністю, щоб гарантувати, передбачувані результати. |
Цей модуль використовується для автоматичного генерування мовної таблиці із даних MediaWiki, які після внесення певних змін можна додавати в Модуль:Citation/CS1/Configuration.
Використання ред.
- Для формування всієї таблиці:
{{#invoke:Citation/CS1/Generate language table|generate_table}}
- Для формування рядка таблиці:
{{#invoke:Citation/CS1/Generate language table|generate_row|код_мови}}
Документація вище включена з Модуль:Citation/CS1/Generate language table/документація. (ред. | історія) Дописувачі можуть експериментувати на підсторінках пісочниця (створити | дзеркало) та тести (створити) цього шаблону. Будь ласка, додавайте категорії до підсторінки /CS1/Generate language table/документація. Підсторінки цієї сторінки. |
--require ("strict");
local cfg = require("Module:Citation/CS1/Configuration") --підключаємо модуль, що отримати різні конфігураці з основного модуль (в основному для отримання коду цієї мови)
local is_set = require("Модуль:Citation/CS1/Utilities").is_set --підключаємо модуль, що завантажити функцію is_set
local function get_params (lang, tag, is_one_element)
local nominative, instrumental, is_noun, maybe_article_name --оголошуємо зміні
if mw.ustring.match(lang, "ка$") then --перевіряємо чи назва закінчується ка, якщо закінчення на ка, то цей ймовірно є прикметником, а тому може відмінюватися
nominative = lang --передаємо назву мови, що йтак є в називному відмінку
instrumental = lang:gsub('а$', 'ою') --формуюємо орудний відмінок, замінивши а на ою
maybe_article_name = nominative .. " мова" --формуємо потенційну назву статті, додавши закінчення мова
else --якщо іменник, то
nominative = lang --передаємо назву мови, що йтак є в називному відмінку
is_noun = true --встановлюємо значення, що це є іменник
maybe_article_name = nominative .. " (мова)" --формуємо потенційну назву статті, додавши закінчення (мова)
end
local article_name
if is_one_element then -- якщо формується лише один елемнт таблиці, то здійснюємо перевірку на наявність статті
maybe_article_name = mw.title.new(maybe_article_name) --перетворюємо потенційну навзу статті на клас назви статті; робимо це тут, що при формуванні всієї таблиці maybe_article_name була змінною, а не таблицею чи класом
maybe_simple_article_name = mw.title.new(nominative) --потенційна назва статті без приставки (мова)
if maybe_article_name.exists then --якщо стаття існує, то
article_name = maybe_article_name.fullText -- передаємо потенційну назву статті у змінну
elseif is_noun and maybe_simple_article_name.exists then --якщо це іменник і відсутня назва з приставкою (мова), то перевіряємо, чи існу стаття без цієї приставки
article_name = maybe_simple_article_name.fullText --якщо стаття існує, то передаємо потенційну назву статті у змінну
end
else -- якщо формується вся таблиця, то (так як перевірка наявності статті з таким ім'я для цілого списку є затратним процесом)
article_name = maybe_article_name -- то просто передаємо назву мови напряму
end
local instrumental_text = is_set(instrumental) and ", instrumental = \"" .. instrumental .. "\"" or '' --формує частину тексту з оруднум відмінком, якщо значення змінної не пусте; якщо пусте, то передаємо пустий рядок
local link_text = is_set(article_name) and ", link = \"" .. article_name .. "\"" or '' --формує частину тексту з назвою статті, якщо значення змінної не пусте; якщо пусте, то передаємо пустий рядок
local is_noun_text = is_noun and ", is_noun = true" or '' --формує частину тексту з булевим параметри чи є назва мови іменником, якщо значення змінної є true; якщо false, то передаємо пустий рядок
local lang_table = "['" .. tag .."'] = { nominative = \"" .. nominative .. "\"" .. instrumental_text .. ", short = \"\"" .. link_text .. is_noun_text .."}" --формує повний рядок таблиці з кодом мови, навзи мови в називному і орудному відмінку, назви статті мови та чи є мова іменником
return lang_table --повертаємо сформовану таблицю
end
local function generate_table()
local lang_table = mw.language.fetchLanguageNames (cfg.this_wiki_code, 'all'); --отримуємо таблицю всіх мов і їхніх кодів з MediaWiki з локолізацію під поточну вікі
local format_lang_table = "" --зміна, що міститиме відформатовану таблицю
for k, v in pairs(lang_table) do --ітеруємо (проходимо) через кожен елемент таблиці, де k - код мови, а v - назва мови
format_lang_table = format_lang_table .. get_params(v, k, false) ..",<br/>" --формує всю таблицю, додавши значення з попередньої ітерації, сформовний рядок таблиці з get_params() та завершальну частину з комою і переходом на новий рядок
end
return format_lang_table:gsub(",<br/>$", "") --повертаємо сформовану таблицю, прибравши з останього рядка кому та перехід на новий рядок
end
local function generate_row(frame)
local code = frame.args[1] --передаємо код мови, який ввів користувач, у змінну
local lang = mw.language.fetchLanguageNames (cfg.this_wiki_code, code); --отримуємо значення для мови за вибраним кодом мови з MediaWiki з локолізацію під поточну вікі
return get_params(lang[code], code, true) --повертаємо сформований рядок фкнкцією get_params()
end
return {
generate_table = generate_table,
generate_row = generate_row
};