Строка 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
| |