Изменения
Перейти к навигации
Перейти к поиску
Строка 1:
Строка 1:
− --[[ Модуль для работы с языками 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
−
− function p.getRefHtmlFrame( frame )
− return p.getRefHtml( trimstr( frame.args[1] ) )
− end
−
− function p.getRefHtml( wikidataItemId )
− local codeByItemId = mw.loadData( "Module:Wikidata/Language-codes" )
− local code = codeByItemId[ wikidataItemId ];
− if code == nil then
− mw.log( 'Language code not found for ' .. wikidataItemId )
− return ""
− else
− local l = languages[code];
− if l == nil then
− mw.log( 'Language description for code ' .. code .. ' not found' )
− return ""
− else
− return '<span class="ref-info" title="' .. l[ 2 ] .. '" style="font-size:85%; cursor:help; color:#888;">(' .. l[ 1 ] .. ')</span>'
− end
− 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
← Полностью удалено содержимое страницы