Модуль: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 .. " <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 = ' <span class="ref-info" style="cursor:help;" title="на %2%">[%1%]</span>'elseref = ' <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 '<неизвестный код ' .. code .. '>' 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