Модуль:Citation/CS1/Generate language table
< Модуль:Citation | CS1
Документація модуля[перегляд] [редагувати] [історія] [очистити кеш]
Цей модуль позначений як К:бета-модуль (24), і готовий до широкого вжитку. Він і досі новий і його слід використовувати з певною обережністю, щоб гарантувати, передбачувані результати. |
Цей модуль використовується для автоматичного генерування мовної таблиці із даних 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 in_array = require("Модуль:Citation/CS1/Utilities").in_array --підключаємо модуль, щоб завантажити функцію in_array
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 була змінною, а не таблицею чи класом
local 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 unknown_parameter (lang_param, is_sandbox)
local supported_langauge_codes = is_sandbox and require("Модуль:Citation/CS1/Language List").supported_langauge_codes or cfg.supported_langauge_codes
if #lang_param>=2 and #lang_param<=8 and in_array(lang_param, supported_langauge_codes[#lang_param]) then -- перевіряємо чи вказано мовний код і чи підтримується він модулем
return '' --якщо код мови, що підтримується, то нічого не повертаємо
else
return lang_param --якщо не код мови або код мови, що не підтримується, то повертаємо код мови
end
end
local function generate_table(frame)
local lang_table = mw.language.fetchLanguageNames (cfg.this_wiki_code, 'all'); --отримуємо таблицю всіх мов і їхніх кодів з MediaWiki з локолізацію під поточну вікі
local format_lang_table = "" --зміна, що міститиме відформатовану таблицю
local only_unknown_code = frame.args[1]
local is_sandbox = frame.args[2]
for k, v in pairs(lang_table) do --ітеруємо (проходимо) через кожен елемент таблиці, де k - код мови, а v - назва мови
local code = only_unknown_code and unknown_parameter (k, is_sandbox) or k
if code ~= '' then
format_lang_table = format_lang_table .. get_params(v, code, false) ..",<br/>" --формує всю таблицю, додавши значення з попередньої ітерації, сформовний рядок таблиці з get_params() та завершальну частину з комою і переходом на новий рядок
end
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
local function get_unknown_parameters (frame)
local lang_table = mw.language.fetchLanguageNames (cfg.this_wiki_code, 'all');
local format_lang_table = ""
local is_sandbox = frame.args[1]
for k, v in pairs(lang_table) do --ітеруємо (проходимо) через кожен елемент таблиці, де k - код мови, а v - назва мови
format_lang_table = format_lang_table .. unknown_parameter(k, is_sandbox) ..", " --формує всю таблицю, додавши значення з попередньої ітерації, сформовний рядок таблиці з unknown_parameter() та завершальну частину з комою
end
return format_lang_table
end
return {
generate_table = generate_table,
generate_row = generate_row,
get_unknown_parameters = get_unknown_parameters
};