Модуль:Languages: различия между версиями

Содержимое удалено Содержимое добавлено
Отмена правки 75289, сделанной Soul Train (обсуждение)
Тег: отмена
Нет описания правки
ЦӀар 112:
function p._transform_lang(code)
if isEmpty(languages[code]) then return '<неизвестный код ' .. code .. '>' end
if languages[code][3] then return languages[code][3] end
return (languages[code] and languages[code][2] or mw.language.fetchLanguageName(code, 'lez')) .. 'ал'
local ln = mw.ustring.lower(
languages[code] and languages[code][2]
or mw.language.fetchLanguageName(code,'lez')
):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