http://wiki.maoism.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Languages&feed=atom&action=historyМодуль:Languages - История изменений2024-03-29T07:23:35ZИстория изменений этой страницы в викиMediaWiki 1.37.1http://wiki.maoism.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Languages&diff=1255&oldid=prevMaoism archivist: 1 версия импортирована2020-10-15T08:07:11Z<p>1 версия импортирована</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<tr class="diff-title" lang="ru">
<td colspan="1" style="background-color: #fff; color: #202122; text-align: center;">← Предыдущая</td>
<td colspan="1" style="background-color: #fff; color: #202122; text-align: center;">Версия 11:07, 15 октября 2020</td>
</tr><tr><td colspan="2" class="diff-notice" lang="ru"><div class="mw-diff-empty">(нет различий)</div>
</td></tr></table>Maoism archivisthttp://wiki.maoism.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Languages&diff=1254&oldid=prevwiki>Wikisaurus: убрал устаревший функционал, который вычистили из документации и навшаблонов ещё после [[Википедия:Опросы/Унификация шаблонов «Не перев…2020-10-10T17:15:36Z<p>убрал устаревший функционал, который вычистили из документации и навшаблонов ещё после [[Википедия:Опросы/Унификация шаблонов «Не перев…</p>
<p><b>Новая страница</b></p><div>-- Модуль для работы с языками ISO 639<br />
<br />
-- загрузка модуля данных с таблицей языков<br />
local languages = mw.loadData('Module:Languages/data')<br />
local p = {}<br />
<br />
-- Проверяет, пустой ли дан параметр<br />
local function isEmpty(s)<br />
return s == nil or s == ''<br />
end<br />
<br />
-- вспомогательная функция, удаляет пробелы<br />
local function trimstr(s)<br />
return (s:gsub("^%s*(.-)%s*$", "%1"))<br />
end<br />
<br />
-- получает код языка, возвращает ссылку и нормализованный код языка (или пустые строки)<br />
local function get_lang_data(code)<br />
local l = languages[code];<br />
if l ~= nil then<br />
return "[[" .. l[2] .. "|" .. l[1] .. "]]", code<br />
elseif code ~= "" then<br />
return code, ""<br />
else<br />
return "", ""<br />
end<br />
end<br />
<br />
function p.getRefHtmlFrame( frame )<br />
return p.getRefHtml( trimstr( frame.args[1] ) )<br />
end<br />
<br />
function p.getRefHtml( wikidataItemId )<br />
local codeByItemId = mw.loadData( "Module:Wikidata/Language-codes" )<br />
local code = codeByItemId[ wikidataItemId ];<br />
if code == nil then<br />
mw.log( 'Language code not found for ' .. wikidataItemId )<br />
return ""<br />
else<br />
local l = languages[code];<br />
if l == nil then<br />
mw.log( 'Language description for code ' .. code .. ' not found' )<br />
return ""<br />
else<br />
return '<span class="ref-info" title="' .. l[ 2 ] .. '" style="font-size:85%; cursor:help; color:#888;">(' .. l[ 1 ] .. ')</span>'<br />
end<br />
end<br />
end<br />
<br />
-- принимает zh, возвращает аббревиатуру<br />
function p.abbr(frame)<br />
local code = trimstr( frame.args[1] )<br />
if not isEmpty(code) then<br />
return (languages[code] and languages[code][1] or '')<br />
end<br />
end<br />
<br />
-- принимает zh|我|tt|мин, возвращает название статьи из Module:Languages/data<br />
function p.name(frame)<br />
local code = trimstr( frame.args[1] )<br />
if code ~= nil and code ~= '' then<br />
return (languages[code] and languages[code][2] or '')<br />
end<br />
end<br />
<br />
-- принимает zh|我|tt|мин, возвращает список через запятую<br />
function p.list(frame)<br />
local curr_lang = nil<br />
local result = nil<br />
<br />
for n, v in frame:argumentPairs() do<br />
local trimmed = trimstr(v)<br />
if curr_lang == nil then<br />
if trimmed ~= '' then<br />
-- если язык пропущен, оставим прошлый<br />
curr_lang = trimstr(v)<br />
end<br />
else<br />
if trimmed ~= '' then<br />
local link, lang_code = get_lang_data(curr_lang)<br />
local list_item<br />
if lang_code ~= '' then<br />
list_item = link .. "&nbsp;<span dir='auto' lang='" .. lang_code .. "'>" .. trimmed .. "</span>"<br />
else<br />
list_item = link .. " <span class='unknown-foreign-lang'>" .. trimmed .. "</span>".."[[Category:Википедия:Статьи с нераспознанным языком]]"<br />
end<br />
<br />
if result == nil then<br />
result = list_item<br />
else<br />
result = result .. ", " .. list_item<br />
end<br />
else<br />
-- Пустой текст — значит, текущий язык совпадает с следующим<br />
local link, lang_code = get_lang_data(curr_lang)<br />
if result == nil then<br />
result = link<br />
else<br />
result = result .. ", " .. link<br />
end<br />
end<br />
<br />
curr_lang = nil<br />
end<br />
end<br />
<br />
-- просто #invoke:Languages|list|yue должно возвращать всё же ссылку без текста<br />
if curr_lang ~= nil then<br />
local link, lang_code = get_lang_data(curr_lang)<br />
if result ~= nil then<br />
result = result .. ", " .. link<br />
else<br />
result = link<br />
end<br />
end<br />
return result<br />
end<br />
<br />
-- принимает zh|tt, возвращает ref-zh, ref-tt<br />
function p.list_ref(frame)<br />
local result = ''<br />
local v = frame.args['в'] or nil<br />
local ref = nil<br />
<br />
if v then<br />
ref = '&nbsp;<span class="ref-info" style="cursor:help;" title="на %2%">&#091;%1%&#093;</span>'<br />
else<br />
ref = '&nbsp;<span class="ref-info" style="cursor:help;" title="на %2%">(%1%)</span>'<br />
end<br />
<br />
for x, lg in pairs( frame.args ) do<br />
local code = trimstr(lg)<br />
if code ~= '' and code ~= 'в' then<br />
local l = languages[code]<br />
if l and l ~= nil then<br />
result = result .. mw.ustring.gsub(mw.ustring.gsub(ref, '%%2%%', p._transform_lang(code)), '%%1%%', l[1])<br />
else<br />
result = result .. frame:expandTemplate{ title = 'ref-' .. code } .. '[[Category:Википедия:Статьи с нераспознанным языком (ref)]]'<br />
end<br />
end<br />
end<br />
<br />
return result<br />
end<br />
<br />
-- Выводит название языка в предложном падеже<br />
function p._transform_lang(code)<br />
if isEmpty(languages[code]) then return '&lt;неизвестный код ' .. code .. '&gt;' end<br />
if languages[code][3] then return languages[code][3] end<br />
local ln = mw.ustring.lower(<br />
languages[code] and languages[code][2]<br />
or mw.language.fetchLanguageName(code,'ru')<br />
):gsub('%s+язык%s+', ' '):gsub('%s*%(?язык%)?%s*', '')<br />
if not ln then return 'языке с ISO-кодом '..code..' (?)' end<br />
if ln:match('.*лингва$') then return ln:gsub('а$','е') end<br />
if mw.ustring.match(ln,'[сц]кий$') or ln:match('ный$') or mw.ustring.match(ln,'[сц]кий%s%b()$') or ln:match('ный%s%b()$')<br />
then<br />
ln = mw.ustring.gsub(<br />
mw.ustring.gsub(ln, 'н([ыи])й(%A)', function(y,s) return (y=='ы' and 'ном' or 'нем')..s end)<br />
:gsub('ный$', 'ном'),<br />
'([сц]к)ий(%A)', '%1ом%2'<br />
):gsub('ский$', 'ском'):gsub('цкий$', 'цком');<br />
if ln:match('%)$') and not (ln:match('ом%)$') or ln:match('нем%)$')) -- «языке» перед уточнением, если оно не склоняется<br />
then <br />
local r,s=ln:gsub('(%s)(%b())$','%1языке%1%2');<br />
if s==1 then return r end<br />
end<br />
return ln..' языке'<br />
else<br />
return 'языке '..ln<br />
end<br />
end<br />
<br />
function p.transform_lang(frame)<br />
return p._transform_lang(trimstr(frame.args[1]))<br />
end<br />
<br />
-- Проверяет существование страницы и является ли она перенаправлением<br />
local function getTitle(page)<br />
local success, result = pcall(function()<br />
local title = mw.title.new(page)<br />
return { title.exists, title.isRedirect }<br />
end)<br />
return success and result or nil<br />
end<br />
<br />
-- Вспомогательная функция для {{Не переведено 5}}: выводит шаблон<br />
function p._newIW(title, text, lang, page, nocat)<br />
local mwlang = mw.getContentLanguage()<br />
local origPage = page<br />
<br />
-- Категории для шаблона<br />
local categoryErrors = '[[Категория:Википедия:Статьи с некорректно заполненным шаблоном Не переведено]]'<br />
local categoryExists = '[[Категория:Википедия:Статьи с неактуальным шаблоном Не переведено]]'<br />
local categoryRedirect = '[[Категория:Википедия:Запросы на замену перенаправлений переводами]]'<br />
<br />
-- Проверяет существование параметров и заменяет их на альтернативные<br />
local append = '' -- временно<br />
if isEmpty(text) then<br />
text = title<br />
if mw.ustring.find(title, ' %([^()]*%)$') then -- временно<br />
append = '[[Категория:Википедия:Статьи с уточнением для сокращения в шаблоне Не переведено 5]]'<br />
end<br />
end<br />
if isEmpty(lang) then<br />
lang = "en"<br />
end<br />
if isEmpty(page) then<br />
page = title<br />
end<br />
<br />
-- Создаёт шаблон<br />
if title ~= '{{{1}}}' then<br />
local this = mw.title.getCurrentTitle()<br />
local titleObj = getTitle(title)<br />
local ifExists, ifRedirect<br />
local type = ''<br />
local s = ''<br />
<br />
local langName = ''<br />
if lang ~= 'd' then<br />
if isEmpty(languages[lang]) then<br />
if this.namespace == 0 and isEmpty(nocat) then<br />
s = s .. categoryErrors<br />
end<br />
else<br />
langName = ' data-lang-name="' .. (languages[lang][1] and languages[lang][1] or '???') .. '"'<br />
end<br />
end<br />
<br />
-- Проверяет, не ограничен ли лимит вызовов функции<br />
if titleObj ~= nil then<br />
ifExists = titleObj[1]<br />
ifRedirect = titleObj[2]<br />
end<br />
<br />
-- Показывает ссылку на редирект или красную ссылку<br />
local class = (ifExists and (ifRedirect and ' iw--redirect' or ' iw--exists') or '')<br />
s = s .. string.format('<span class="iw%s plainlinks" data-title="%s" data-lang="%s"' .. langName .. '>', class, mwlang:ucfirst(title), lang)<br />
<br />
if ifRedirect then<br />
if this.namespace == 0 and isEmpty(nocat) then<br />
s = s .. categoryRedirect<br />
end<br />
s = s .. string.format('[%s %s]', tostring(mw.uri.fullUrl(title,'redirect=no')), text)<br />
else<br />
s = s .. string.format('[[%s|%s]]', title, text)<br />
end<br />
<br />
-- Показывает ссылку на иноязычную статью или предложение убрать шаблон<br />
if ifExists and not ifRedirect then<br />
s = s .. '<sup class="iw__notice noprint">[[Шаблон:Не переведено 5#Если существует статья|'<br />
.. '<span style="color:red; font-style:normal; font-weight:bold;" title="Уберите шаблон «Не переведено 5» из статьи '<br />
.. 'и замените его простой вики-ссылкой">?!</span>]]</sup>'<br />
if this.namespace == 0 and isEmpty(nocat) then<br />
s = s .. categoryExists<br />
end<br />
else<br />
-- Создаёт всплывающую подсказку<br />
local t = ''<br />
if lang == 'd' then<br />
t = string.format('Страница статьи «%s» в Викиданных', mwlang:ucfirst(title))<br />
page = page .. '#sitelinks-wikipedia'<br />
else<br />
if not isEmpty(origPage) then<br />
t = string.format('%s — версия статьи', page)<br />
else<br />
t = 'Версия статьи'<br />
end<br />
t = t .. string.format(' «%s» на %s', mwlang:ucfirst(title), p._transform_lang(lang))<br />
end<br />
<br />
-- Создаёт примечание о перенаправлении<br />
local aster = ''<br />
if ifRedirect then<br />
aster = '<sup class="iw__notice noprint" style="font-style:normal; font-weight:normal; margin:0 0 0 1px;">'<br />
.. '[[Шаблон:Не переведено 5#Если существует перенаправление|'<br />
.. '<span style="color:red; font-weight:bold;" title="Замените название перенаправления на название статьи либо уберите шаблон «Не переведено 5»">*</span>]]'<br />
.. '</sup>'<br />
end<br />
<br />
-- Выводит ссылку на иноязычную страницу<br />
s = s .. '<sup class="iw__note noprint" style="font-style:normal; font-weight:normal;">' ..<br />
string.format('[[:%s:%s|<span class="iw__tooltip" title="%s">[%s]</span>]]</sup>', lang, page, t, lang) ..<br />
aster<br />
end<br />
<br />
return s .. '</span>' .. append<br />
else<br />
-- Если нет обязательного параметра, выводит красный текст<br />
local htmlerror = require('Module:Error').error<br />
return htmlerror{'Укажите название страницы.'}<br />
end<br />
end<br />
<br />
-- Вспомогательная функция для {{Не переведено 5}}: выводит подстановку шаблона<br />
function p._substIW(title, text)<br />
local s = '[[' .. title<br />
if not isEmpty(text) and title ~= text then<br />
s = s .. '|' .. text<br />
end<br />
<br />
return s .. ']]'<br />
end<br />
<br />
-- Выводит {{Не переведено 5}}<br />
function p.getIW(frame)<br />
local mwlang = mw.getContentLanguage()<br />
<br />
local f = frame.args<br />
local title = f.title<br />
local text = f.text<br />
local lang = mwlang:lc(f.lang)<br />
local page = f.page<br />
local nocat = f.nocat<br />
<br />
if not mw.isSubsting() then<br />
return p._newIW(title, text, lang, page, nocat)<br />
end<br />
<br />
return p._substIW(title, text)<br />
end<br />
<br />
return p</div>wiki>Wikisaurus