Модуль:Languages

Для документации этого модуля может быть создана страница Модуль:Languages/doc

-- Модуль для работы с языками ISO 639-- загрузка модуля данных с таблицей языковlocal languages = mw.loadData('Module:Languages/data')local p = {}-- Проверяет, пустой ли дан параметрlocal function isEmpty(s)return s == nil or s == ''end-- вспомогательная функция, удаляет пробелы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 "", ""    endendfunction p.getRefHtmlFrame( frame )return p.getRefHtml( trimstr( frame.args[1] ) )endfunction p.getRefHtml( wikidataItemId )local codeByItemId = mw.loadData( "Module:Wikidata/Language-codes" )local code = codeByItemId[ wikidataItemId ];if code == nil thenmw.log( 'Language code not found for ' .. wikidataItemId )return ""else    local l = languages[code];if l == nil thenmw.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>'    endendend-- принимает zh, возвращает аббревиатуруfunction p.abbr(frame)local code = trimstr( frame.args[1] )if not isEmpty(code) thenreturn (languages[code] and languages[code][1] or '')endend-- принимает zh|我|tt|мин, возвращает название статьи из Module:Languages/datafunction p.name(frame)local code = trimstr( frame.args[1] )if code ~= nil and code ~= '' thenreturn (languages[code] and languages[code][2] or '')endend-- принимает zh|我|tt|мин, возвращает список через запятуюfunction p.list(frame)    local curr_lang = nil    local result = nil    for n, v in frame:argumentPairs() dolocal trimmed = trimstr(v)if curr_lang == nil thenif trimmed ~= '' then-- если язык пропущен, оставим прошлыйcurr_lang = trimstr(v)endelseif trimmed ~= '' thenlocal link, lang_code = get_lang_data(curr_lang)local list_itemif lang_code ~= '' thenlist_item = link .. "&nbsp;<span dir='auto' lang='" .. lang_code .. "'>" .. trimmed .. "</span>"elselist_item = link .. " <span class='unknown-foreign-lang'>" .. trimmed .. "</span>".."[[Category:Википедия:Статьи с нераспознанным языком]]"endif result == nil thenresult = list_itemelseresult = result .. ", " .. list_itemendelse-- Пустой текст — значит, текущий язык совпадает с следующимlocal link, lang_code = get_lang_data(curr_lang)if result == nil thenresult = linkelseresult = result .. ", " .. linkendendcurr_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 resultend-- принимает zh|tt, возвращает ref-zh, ref-ttfunction p.list_ref(frame)    local result = ''    local v = frame.args['в'] or nillocal ref = nilif v thenref = '&nbsp;<span class="ref-info" style="cursor:help;" title="на %2%">&#091;%1%&#093;</span>'elseref = '&nbsp;<span class="ref-info" style="cursor:help;" title="на %2%">(%1%)</span>'end    for x, lg in pairs( frame.args ) dolocal code = trimstr(lg)if code ~= '' and code ~= 'в' thenlocal l = languages[code]if l and l ~= nil thenresult = result .. mw.ustring.gsub(mw.ustring.gsub(ref, '%%2%%', p._transform_lang(code)), '%%1%%', l[1])elseresult = result .. frame:expandTemplate{ title = 'ref-' .. code } .. '[[Category:Википедия:Статьи с нераспознанным языком (ref)]]'endend    end    return resultend-- Выводит название языка в предложном падежеfunction p._transform_lang(code)if isEmpty(languages[code]) then return '&lt;неизвестный код ' .. code .. '&gt;' end    if languages[code][3] then return languages[code][3] end    local ln = mw.ustring.lower(        languages[code] and languages[code][2]        or mw.language.fetchLanguageName(code,'ru')     ):gsub('%s+язык%s+',  ' '):gsub('%s*%(?язык%)?%s*',  '')    if not ln then return 'языке с ISO-кодом '..code..' (?)' end    if ln:match('.*лингва$') then return ln:gsub('а$','е') end    if mw.ustring.match(ln,'[сц]кий$') or ln:match('ный$') or mw.ustring.match(ln,'[сц]кий%s%b()$') or ln:match('ный%s%b()$')    then        ln = mw.ustring.gsub(            mw.ustring.gsub(ln, 'н([ыи])й(%A)', function(y,s) return (y=='ы' and 'ном' or 'нем')..s end)                :gsub('ный$', 'ном'),            '([сц]к)ий(%A)', '%1ом%2'        ):gsub('ский$', 'ском'):gsub('цкий$', 'цком');        if ln:match('%)$') and not (ln:match('ом%)$') or ln:match('нем%)$')) -- «языке» перед уточнением, если оно не склоняется        then             local r,s=ln:gsub('(%s)(%b())$','%1языке%1%2');            if s==1 then return r end        end        return ln..' языке'    else        return 'языке '..ln    endendfunction p.transform_lang(frame)return p._transform_lang(trimstr(frame.args[1]))endreturn p
🔥 Top keywords: Тӧс бӱкВикипедия:ЈартамалыВикипедия:Ӧмӧликтиҥ порталыРоссияВикипедия:КурултайМоскваАлтай тилЧаган айдыҥ 15 кӱниАҥылу:Свежие правкиТайваньХристиан јаҥАлтыгы НовгородВикипедия:Талдама бичимелдерКичӱ изӱ айдыҥ 1 кӱниМСК+4:00Склодовская-Кюри, МарияЧаган айдыҥ 20 кӱниТулаан айдыҥ 22 кӱниСыгын айдыҥ 9 кӱниЈопонКочкор айдыҥ 10 кӱниКатегория:БастыраКичӱ изӱ айдыҥ 18 кӱниЈаҥар айдыҥ 21 кӱниИталияМаатаи, ВангариКӱӱк айдыҥ 25 кӱниДостоевский, Фёдор МихайловичКандык айдыҥ 5 кӱниАда-Тӧрӧл учун Улу јууЈаҥар айдыҥ 14 кӱниПутин, Владимир ВладимировичСыгын айдыҥ 8 кӱниЧелябинскТулаан айдыҥ 21 кӱниЈаан изӱ айКандык айдыҥ 14 кӱниСанкт-ПетербургКандык айдыҥ 19 кӱниӰлӱрген айКичӱ изӱ айдыҥ 20 кӱниКатегория:БилимӰлекер:Тӧс бӱк/helpЈаҥар айдыҥ 5 кӱниКатегория:Чыккан кÿндери аайынча кижилерКазахстанКудайКӱчӱрген айдыҥ 2 кӱниКочкор айКӱӱк айдыҥ 30 кӱниКазанӰлекер:NobrСыгын айдыҥ 11 кӱниКандык айдыҥ 25 кӱниТепуков, Кӱлер ЭзендиковичАҥылу:ПоискКичӱ изӱ айдыҥ 19 кӱниАҥылу:Моё обсуждениеАзимов, АйзекАҥылу:Мой вкладӰлекер:SmallКатегория:Россияныҥ географиязыЧаган айдыҥ 9 кӱниКӱчӱрген айдыҥ 24 кӱниФайл:Outline Map of Altai Republic.svgКичӱ изӱ айдыҥ 15 кӱниМюллер, ГертаКӱчӱрген айдыҥ 15 кӱниТуружаачыны шӱӱжери:BakpayКуран айдыҥ 11 кӱниГабриела МистральКӱчӱрген айдыҥ 13 кӱниКӱӱк айдыҥ 10 кӱниЈаҥар айдыҥ 26 кӱниФайл:Flag of Russia.svgЈаҥар айдыҥ 23 кӱниФайл:Wanderheuschrecke-01.jpgКичӱ изӱ айдыҥ 13 кӱниЧаган айдыҥ 8 кӱниДондо РостовСыгын айдыҥ 16 кӱниКочкор айдыҥ 13 кӱниФайл:Italy on the globe (Europe centered).svgКаспаЈаан изӱ айдыҥ 15 кӱниӰлекер:Potd/2023-03Кӱӱк айдыҥ 31 кӱниАтГонконгФайл:004 2018 05 14 Extremes Wetter.jpgЈаан изӱ айдыҥ 10 кӱниКӱчӱрген айдыҥ 9 кӱниШабалинЧаган айдыҥ 11 кӱниӰлӱрген айдыҥ 8 кӱниКурмач-БайголУкачин, Борис УкачиновичТулаан айдыҥ 1 кӱниМодуль:Arguments