Модуль:Languages: различия между версиями
Перейти к навигации
Перейти к поиску
(проверка того, не сломали ли модуль в части «показать по умолчанию английский» последние правки) |
|||
Строка 4: | Строка 4: | ||
-- загрузка модуля данных с таблицей языков | -- загрузка модуля данных с таблицей языков | ||
− | local languages = mw.loadData("Module: | + | local languages = mw.loadData("Module:languages/data") |
local p = {} | local p = {} | ||
Строка 22: | Строка 22: | ||
return "", "" | return "", "" | ||
end | end | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
Версия от 12:31, 11 июня 2014
Для документации этого модуля может быть создана страница Модуль:Languages/doc
--[[ Модуль для работы с языками ISO 639
Наверное его надо целиком переписать, это только proof of concept
]]
-- загрузка модуля данных с таблицей языков
local languages = mw.loadData("Module:languages/data")
local p = {}
-- вспомогательная функция, удаляет пробелы
local function trimstr(s)
return (s:gsub("^%s*(.-)%s*$", "%1"))
end
-- получает код языка, возвращает ссылку и нормализованный код языка (или пустые строки)
local function get_lang_data(code)
local l = languages[code];
if l ~= nil then
return "[[" .. l[2] .. "|" .. l[1] .. "]]", code
elseif code ~= "" then
return code, ""
else
return "", ""
end
end
-- принимает zh|我|tt|мин, возвращает список через запятую
function p.list(frame)
local curr_lang = nil
local result = nil
for n, v in frame:argumentPairs() do
local trimmed = trimstr(v)
if curr_lang == nil then
if trimmed ~= '' then
-- если язык пропущен, оставим прошлый
curr_lang = trimstr(v)
end
else
if trimmed ~= '' then
local link, lang_code = get_lang_data(curr_lang)
local list_item
if lang_code ~= '' then
list_item = link .. " <span lang='" .. lang_code .. "'>" .. trimmed .. "</span>"
else
list_item = link .. " <span class='unknown-foreign-lang'>" .. trimmed .. "</span>"
end
if result == nil then
result = list_item
else
result = result .. ", " .. list_item
end
else
-- Пустой текст — значит, текущий язык совпадает с следующим
local link, lang_code = get_lang_data(curr_lang)
if result == nil then
result = link
else
result = result .. ", " .. link
end
end
curr_lang = nil
end
end
-- просто #invoke:Languages|list|yue должно возвращать всё же ссылку без текста
if curr_lang ~= nil then
local link, lang_code = get_lang_data(curr_lang)
if result ~= nil then
result = result .. ", " .. link
else
result = link
end
end
return result
end
return p