Перейти к содержанию
Главное меню
Главное меню
переместить в боковую панель
скрыть
Навигация
Заглавная страница
Указатели
Свежие правки
Случайная страница
Справка по MediaWiki
Народные Сказки
Поиск
Найти
Создать учётную запись
Войти
Персональные инструменты
Создать учётную запись
Войти
Страницы для неавторизованных редакторов
узнать больше
Вклад
Обсуждение
Редактирование:
Модуль:Languages
Модуль
Обсуждение
English
Читать
Править код
История
Инструменты
Инструменты
переместить в боковую панель
скрыть
Действия
Читать
Править код
История
Общие
Ссылки сюда
Связанные правки
Служебные страницы
Сведения о странице
Внимание:
Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы
войдёте
или
создадите учётную запись
, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.
Анти-спам проверка.
Не
заполняйте это!
-- Модуль для работы с языками 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 "", "" end end function p.getRefHtmlFrame( frame ) return p.getRefHtml( trimstr( frame.args[1] ) ) end function p.getRefHtml( code ) 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="cursor:help">(' .. l[ 1 ] .. ')</span>' end end function p.getWikidataRefHtmlFrame( frame ) return p.getWikidataRefHtml( trimstr( frame.args[1] ) ) end function p.getWikidataRefHtml( 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 "" end return p.getRefHtml( code ) end -- принимает zh, возвращает аббревиатуру function p.abbr(frame) local code = trimstr( frame.args[1] ) if not isEmpty(code) then return (languages[code] and languages[code][1] or '') end end -- принимает zh|我|tt|мин, возвращает название статьи из Module:Languages/data function p.name(frame) local code = trimstr( frame.args[1] ) if code ~= nil and code ~= '' then return (languages[code] and languages[code][2] or '') 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 dir='auto' lang='" .. lang_code .. "'>" .. trimmed .. "</span>" else list_item = link .. " <span class='unknown-foreign-lang'>" .. trimmed .. "</span>".."[[Category:Википедия:Статьи с нераспознанным языком]]" 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 -- принимает zh|tt, возвращает ref-zh, ref-tt function p.list_ref(frame) local result = '' local v = frame.args['в'] or nil local ref = nil if v then ref = ' <span class="ref-info" style="cursor:help;" title="на %2%">[%1%]</span>' else ref = ' <span class="ref-info" style="cursor:help;" title="на %2%">(%1%)</span>' end for x, lg in pairs( frame.args ) do local code = mw.ustring.lower(trimstr(lg)) if code ~= '' and code ~= 'в' then local l = languages[code] if l and l ~= nil then result = result .. mw.ustring.gsub(mw.ustring.gsub(ref, '%%2%%', p._transform_lang(code)), '%%1%%', l[1]) else if mw.title.new('ref-' .. code, 10).exists == false then code = 'und' end result = result .. frame:expandTemplate{ title = 'ref-' .. code } .. '[[Category:Википедия:Статьи с нераспознанным языком (ref)]]' end end end return result end -- Выводит название языка в предложном падеже 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 end end function p.transform_lang(frame) return p._transform_lang(trimstr(frame.args[1])) end return p
Описание изменений:
Пожалуйста, учтите, что любой ваш вклад в проект «Народные Сказки» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см.
РуСказки:Авторские права
).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!
Отменить
Справка по редактированию
(в новом окне)
Отобразить/Скрыть ограниченную ширину содержимого