Модуль:Language
Внешний вид
Назначение
Получение универсальной информации о языках
Описание функций и параметров
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