Модуль:language
Шаблон застосувує Module:language (скрипт, написанний на Lua). |
Призначення
ред.Шаблон для отримання універсальної інформації про мови
Параметри
ред.get
— основна функція отримання даних, приймає два параметри:lang
— код мови (наприклад,ru
,orv
тощо.)param
— тип одержуваної інформації (ввід та вивід регістрочутливі)name
,title
,ім
,наз
,назва
,ім’я
— повертається назва мовиcat
,category
,кат
,категорія
— повертається категорія для мовиcat2
— повертається друга категорія для мови (якщо вказана)from
,від
,gen
,genitive
,род
,його
— повертається назва у родовому відмінкуon
,на
,pre
,місц
— повертається назва у місцевому відмінкуpl
,мн
,plural
,вони
— повертається назва у множиніadj
,прикм
,прикметник
— повертається форма прикметникаshort
,скор
,скорочення
— повертається скорочення
print_table
— функція для роздруківки поточних даних модуля language/data у гарній, зрозумілій формі (використовується на сторінці документації модуля language/data)
Застосовані модулі
ред.Мовні дані зберігаються у модулі language/data
Див. також
ред.- {{language}}
-- загрузка модуля данных с таблицей языков
local languages = mw.loadData("Module:language/data");
local p = {};
-- вспомогательная функция, удаляет пробелы
function string.trim(value)
return (value:gsub("^%s*(.-)%s*$", "%1"));
end
local function get_param(param)
local param = mw.ustring.lower(param)
if param == '' or param == 'наз' or param == 'назва' or param == 'ім’я' or param == 'title' or param == 'ім' then
param = 'name'
end
if param == 'category' or param == 'кат' or param == 'категорія' then
param = 'cat'
end
if param == 'gen' or param == 'genitive' or param == 'від' or param == 'род' or param == 'його' then
param = 'from'
end
if param == 'pre' or param == 'на' or param == 'місц' then
param = 'on'
end
if param == 'прикм' or param == 'прикметник' then
param = 'adj'
end
if param == 'скор' or param == 'скорочення' then
param = 'short'
end
if param == 'мн' or param == 'plural' or param == 'вони' then
param = 'pl'
end
return param
end
local function nom_case(value)
local result = value:gsub("%{%}", '')
result = result:gsub("%{а%}", 'а')
result = result:gsub("%{і%}", 'і')
result = result:gsub("%{ий%}", 'ий')
result = result:gsub("%{а%}", 'а')
return result
end
local function gen_case(value)
local result = value:gsub("%{%}", 'а')
result = result:gsub("%{а%}", 'ої')
result = result:gsub("%{і%}", 'их')
result = result:gsub("%{а%}", 'ої')
return result
end
local function pre_case(value)
local result = value:gsub("%{%}", 'е')
result = result:gsub("%{а%}", 'ом')
result = result:gsub("%{і%}", 'их')
result = result:gsub("%{ый%}", 'ом')
return result
end
local function plural(value)
local result = value:gsub("%{%}", 'і')
result = result:gsub("%{а%}", 'і')
result = result:gsub("%{ие%}", 'і')
result = result:gsub("%{а%}", 'і')
return result
end
local function get_name(value)
local result = value
result = result:gsub("'([^']+)'", '%1')
result = result:gsub("(%[мова%])", '')
result = result:gsub("(%[мови%])", '')
result = result:gsub("(%[діалект%])", '')
result = result:gsub(" ", ' ')
return result
end
local function get_category(value)
local result = value
result = result:gsub("'([^']+)'", '')
result = result:gsub("(%[мова%])", 'мова{}')
result = result:gsub("(%[мови%])", 'мови')
result = result:gsub("(%[діалект%])", 'діалект{}')
result = result:gsub(" ", ' ')
return result
end
function p.get(frame)
local code = frame.args['lang']
local param = frame.args['param']
local is_lower = (param ~= '' and mw.ustring.lower(param) == param)
param = get_param(param)
local result = param
local data
if languages[code] then
data = languages[code]
else
data = languages["-"]
end
local name_tpl = data["name"]
local name = get_name(name_tpl)
if param == 'name' then
result = nom_case(name)
elseif param == 'cat' then
result = nom_case(get_category(name_tpl))
elseif param == 'cat2' then
if data['cat2'] then
result = nom_case(data['cat2'])
else
result = ''
end
elseif param == 'adj' then
if data["adj"] then
adj = data["adj"]
if adj == '=' then
adj = name
end
result = nom_case(adj)
else
result = "(нет значения)"
end
elseif param == 'adj-gen' then
if data["adj"] then
adj = data["adj"]
if adj == '=' then
adj = name
end
result = gen_case(adj)
else
result = "(нет значения)"
end
elseif param == 'from' then
result = gen_case(name)
elseif param == 'on' then
result = pre_case(name)
elseif param == 'pl' then
result = plural(name)
elseif param == 'short' then
if data["short"] then
result = data["short"]
else
result = "(нет значения)"
end
else
result = "(помилка параметра)"
end
if is_lower and param ~= 'cat' then
result = mw.ustring.lower(result)
end
return string.trim(result)
end
local function colorize(value)
local result = value:gsub("(%{[^}]*%})", '<span style="color: darkblue">%1</span>')
result = result:gsub("('[^']+')", '<span style="color: green">%1</span>')
result = result:gsub("(%[мова%])", '<span style="color: maroon">%1</span>')
result = result:gsub("(%[мови%])", '<span style="color: maroon">%1</span>')
result = result:gsub("(%[діалект%])", '<span style="color: maroon">%1</span>')
return result
end
function p.print_table(frame)
local result = ""
local codes = {}
result = result .. '{| class="sortable prettytable" style="text-align: center;" cellpadding="0" cellspacing="0"\n'
result = result .. '! Код || Код || Назва || Дод. категорія || Прикметник || Скорочення || Інші назви\n'
for code, data in pairs(languages) do
table.insert(codes, code)
end
table.sort(codes)
for i, code in ipairs(codes) do
result = result .. '|-'
if languages[code]["redirect"] then
result = result .. "style='background-color: #eeeeee; color: gray;'"
end
result = result .. '\n'
result = result .. '| ' .. code .. ' || '
if languages[code]["code"] then
result = result .. languages[code]["code"]
end
result = result .. ' || '
result = result .. colorize(languages[code]["name"])
result = result .. ' || '
if languages[code]["cat2"] then
result = result .. colorize(languages[code]["cat2"])
end
result = result .. ' || '
if languages[code]["adj"] then
result = result .. colorize(languages[code]["adj"])
end
result = result .. ' || '
if languages[code]["short"] then
result = result .. languages[code]["short"]
end
result = result .. ' || style="text-align: left;" | '
if languages[code]["other"] then
result = result .. colorize(languages[code]["other"])
end
result = result .. '\n'
end
result = result .. '|}'
return result
end
return p