Modul:Languages
Qiyofa
Bu modul uchun Modul:Languages/doc nomli hujjat sahifasini yaratishingiz mumkin
-- Tillar bilan ishlash uchun modul
local languages = mw.loadData('Module:Languages/data')
local p = {}
p.codes = {
ab = 'abx.',
av = 'avar.',
ady = 'adig.',
az = 'ozar.',
sq = 'alb.',
am = 'amx.',
en = 'ingl.',
ar = 'arab.',
arc = 'aram.',
hy = 'arm.',
as = 'assam.',
aa = 'afar.',
af = 'afrik.',
ace = 'аch.',
eu = 'bask.',
ba = 'boshq.',
be = 'belor.',
bn = 'beng.',
my = 'birm.',
bg = 'bulgʻ.',
bs = 'bosn.',
br = 'bret.',
bug = 'bug.',
cy = 'vall.',
war = 'var.',
hu = 'moj.',
vo = 'vol.',
wo = 'volof',
vi = 'vyet.',
haw = 'hav.',
gl = 'galis.',
nl = 'niderl.',
el = 'yun.',
ka = 'gurji',
gu = 'guj.',
da = 'dan.',
grc = 'qad. yun.',
dng = 'dung.',
zu = 'zulu',
he = 'ivr.',
yi = 'idish',
inh = 'ingush.',
id = 'indon.',
ia = 'interl.',
ik = 'inuit',
ga = 'irl.',
is = 'isl.',
es = 'isp.',
it = 'ital.',
yo = 'yoruba',
kk = 'qoz.',
xal = 'qalm.',
kn = 'kann.',
kaa = 'qoraqalp.',
krl = 'karel',
ca = 'kat.',
ks = 'kashm.',
qu = 'kechua',
ky = 'qirgʻ.',
zh = 'xit.',
kv = 'komi',
kg = 'kongo',
cop = 'kopt.',
ko = 'kor.',
crh = 'qrim-tat.',
ku = 'kurd',
km = 'khmer',
lo = 'laos',
la = 'lot.',
lv = 'latish',
lez = 'lezg.',
lt = 'lit.',
mk = 'maked.',
mg = 'malag.',
ms = 'malay',
ml = 'malayalam',
mt = 'malta',
mi = 'maori',
mr = 'marathi',
mo = 'mold.',
mn = 'moʻgʻ.',
nv = 'navaxo',
de = 'olm.',
yrk = 'nen.',
ne = 'nepal',
nog = 'noʻgʻ.',
no = 'norv.',
oc = 'oks.',
fa = 'fors',
pl = 'pol.',
pt = 'port.',
ps = 'pushtu',
ro = 'rum.',
ru = 'rus.',
sa = 'sanskr.',
ceb = 'seb.',
so = 'somal.',
sr = 'serb.',
sk = 'slovak',
sl = 'sloven',
sog = 'soʻgʻd.',
sw = 'suahili',
tg = 'toj.',
th = 'tay',
tt = 'tat.',
te = 'telugu',
tyv = 'tuv.',
tr = 'tur.',
udm = 'udm.',
uz = 'oʻzb.',
ug = 'uygʻ.',
uk = 'ukr.',
ur = 'urdu',
fi = 'fin',
fr = 'fr.',
hi = 'hindi',
chg = 'chagʻat.',
ce = 'chech.',
cs = 'chex',
cv = 'chuvash',
sv = 'shved',
evn = 'evenk',
eo = 'esper.',
et = 'est.',
sah = 'yoqut',
ja = 'yap.'
}
p.articles = {
ab = 'Abxaz tili',
av = 'Avar tili',
ady = 'Adigey tili',
az = 'Ozarbayjon tili',
sq = 'Alban tili',
am = 'Amxar tili',
en = 'Ingliz tili',
ar = 'Arab tili',
arc = 'Aramey tili',
hy = 'Arman tili',
as = 'Assam tili',
aa = 'Afar tili',
af = 'Afrikaans',
ace = 'Achex tili',
ban = 'Bali tili',
eu = 'Bask tili',
ba = 'Boshqir tili',
be = 'Belorus tili',
bn = 'Bengal tili',
my = 'Birma tili',
bg = 'Bulgʻor tili',
bs = 'Bosniya tili',
br = 'Breton tili',
bug = 'Bug tili',
bua = 'Buryat tili',
cy = 'Vallon tili',
war = 'Varay',
hu = 'Mojar tili',
vep = 'Veps tili',
vo = 'Volapuk',
wo = 'Volof tili',
vi = 'Vyetnam tili',
haw = 'Havayi tili',
gag = 'Gagauz tili',
gl = 'Galis tili',
nl = 'Golland tili',
el = 'Yunon tili',
ka = 'Gurji tili',
gu = 'Gujarati',
da = 'Daniya tili',
grc = 'Qadimgi yunon tili',
dng = 'Dungan tili',
zu = 'Zulu',
he = 'Ivrit',
yi = 'Idish tili',
inh = 'Ingush tili',
id = 'Indoneziya tili',
ia = 'Interlingva',
ik = 'Inupiak',
ga = 'Irland tili',
is = 'Island tili',
es = 'Ispan tili',
it = 'Italyan tili',
yo = 'Yoruba',
kk = 'Qozoq tili',
xal = 'Qalmiq tili',
kn = 'Kannada',
kaa = 'Qoraqalpoq tili',
krl = 'Karel tili',
ca = 'Katalan tili',
ks = 'Kashmiri',
qu = 'Kechua (tili)',
ky = 'Qirgʻiz tili',
zh = 'Xitoy tili',
kg = 'Kongo (til)',
cop = 'Kopt tili',
ko = 'Koreys tili',
co = 'Korsika tili',
crh = 'Qrim-tatar tili',
ku = 'Kurd tili',
km = 'Khmer tili',
lo = 'Laos tili',
la = 'Lotin tili',
lv = 'Latish tili',
lez = 'Lezgi tili',
ln = 'Lingala',
lt = 'Litva tili',
mk = 'Makedon tili',
mg = 'Malagasi tili',
ms = 'Malay tili',
ml = 'Malayalam',
dv = 'Maldiv tili',
mt = 'Malta tili',
mi = 'Maori (til)',
mr = 'Marathi (til)',
mo = 'Moldav tili',
mn = 'Moʻgʻul tili',
nv = 'Navaxo (til)',
na = 'Nauru tili',
de = 'Olmon tili',
yrk = 'Nenets tili',
ne = 'Nepal tili',
nog = 'Noʻgʻoy tili',
no = 'Norveg tili',
oc = 'Oksitan tili',
fa = 'Fors tili',
pal = 'Pahlaviy tili',
pl = 'Polyak tili',
pol = 'Polyak tili',
pt = 'Portugal tili',
ps = 'Pushtu',
rw = 'Ruanda (til)',
ro = 'Rumin tili',
ru = 'Rus tili',
sm = 'Samoa tili',
sa = 'Sanskrit',
ceb = 'Sebuano',
sr = 'Serb tili',
sk = 'Slovak tili',
sl = 'Sloven tili',
sog = 'Soʻgʻd tili',
sw = 'Suahili',
su = 'Sundan tili',
tl = 'Tagal tili',
tg = 'Tojik tili',
ty = 'Taiti tili',
tah = 'Taiti tili',
th = 'Tay tili',
tly = 'Talish tili',
ta = 'Tamil tili',
tt = 'Tatar tili',
tw = 'Chvi',
te = 'Telugu (til)',
to = 'Tonga tili',
tyv = 'Tuva tili',
tr = 'Turk tili',
udm = 'Udmurt tili',
uz = 'Oʻzbek tili',
ug = 'Uygʻur tili',
uk = 'Ukrain tili',
ur = 'Urdu',
fo = 'Farer tili',
fj = 'Fiji (til)',
fi = 'Fin tili',
fr = 'Fransuz tili',
fy = 'Friz tili',
kjh = 'Xakas tili',
kca = 'Xanti tili',
hi = 'Hindi',
chg = 'Chagʻatoy tili',
chr = 'Cheroki (til)',
ce = 'Chechen tili',
cs = 'Chex tili',
cv = 'Chuvash tili',
chv = 'Chuvash tili',
ckt = 'Chukotka tili',
sv = 'Shved tili',
sn = 'Shona (til)',
sco = 'Shotland tili',
gd = 'Kelt tili',
sux = 'Shumer tili',
evn = 'Evenk tili',
myv = 'Erzan tili',
eo = 'Esperanto',
et = 'Eston tili',
jv = 'Yava tili',
sah = 'Yoqut tili',
ja = 'Yapon tili'
}
-- boʻsh joy oʻchirish uchun
function p.trimstr(s)
return (s:gsub("^%s*(.-)%s*$", "%1"))
end
-- til kodini oladi, ishorat qaytaradi
function p.getlink(code)
if p.articles[code] ~= nil and p.codes[code] ~= nil then
return "[[" .. p.articles[code] .. "|" .. p.codes[code] .. "]]"
elseif p.codes[code] ~= nil then
return p.codes[code]
else
return ""
end
end
-- argument qabul qiladi, vergul bilan qaytaradi
function p.list(frame)
local curr_lang = nil
local result = nil
for n, v in frame:argumentPairs() do
local trimmed = p.trimstr(v)
if curr_lang == nil then
if trimmed ~= '' then
-- til boʻlmasa, eskisini qoldiradi
curr_lang = p.trimstr(v)
end
else
if trimmed ~= '' then
local list_item = p.getlink(curr_lang) .. " <span lang='" .. curr_lang .. "'>" .. trimmed .. "</span>"
if result == nil then
result = list_item
else
result = result .. ", " .. list_item
end
else
-- Boʻsh matn - demak, joriy til eski tilga mos
if result == nil then
result = p.getlink(curr_lang)
else
result = result .. ", " .. p.getlink(curr_lang)
end
end
curr_lang = nil
end
end
-- shunchaki #invoke:Languages|list|yue matnsiz ishorat qaytaradi
if curr_lang ~= nil then
if result ~= nil then
result = result .. ", " .. p.getlink(curr_lang)
else
result = p.getlink(curr_lang)
end
end
return result
end
-- Проверяет, пустой ли дан параметр
local function isEmpty(s)
return s == nil or s == ''
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 then return ln 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
-- Проверяет существование страницы и является ли она перенаправлением
local function getTitle(page)
local success, result = pcall(function()
local title = mw.title.new(page)
return { title.exists, title.isRedirect }
end)
return success and result or nil
end
-- Вспомогательная функция для {{Не переведено 5}}: выводит шаблон
function p._newIW(title, text, lang, page, state, nocat)
local mwlang = mw.getContentLanguage()
local origPage = page
-- Изображения для старой функции показа статуса
local states = {
['ИС'] = {'Википедия:Избранные статьи','Избранная статья','Small Skew Star SVG.svg'},
['ХС'] = {'Википедия:Хорошие статьи','Хорошая статья','Blue star unboxed.svg'},
['ИСП'] = {'Википедия:Избранные списки и порталы','Избранный список','Purple star unboxed.svg'}
}
-- Категории для шаблона
local categoryErrors = '[[Категория:Википедия:Статьи с некорректно заполненным шаблоном Не переведено]]'
local categoryExists = '[[Turkum:Vikipediya:Tarjima qilinmagan andozasi keraksiz maqolalar]]'
local categoryRedirect = '[[Категория:Википедия:Запросы на замену перенаправлений переводами]]'
-- Проверяет существование параметров и заменяет их на альтернативные
if isEmpty(text) then
text = title
end
if isEmpty(lang) then
lang = "en"
end
if isEmpty(page) then
page = title
end
-- Создаёт шаблон
if title ~= '{{{1}}}' then
local this = mw.title.getCurrentTitle()
local titleObj = getTitle(title)
local ifExists, ifRedirect
local type = ''
local s = ''
local langName = ''
if lang ~= 'd' then
if isEmpty(languages[lang]) then
if this.namespace == 0 and isEmpty(nocat) then
s = s .. categoryErrors
end
else
langName = ' data-lang-name="' .. (languages[lang][1] and languages[lang][1] or '???') .. '"'
end
end
-- Проверяет, не ограничен ли лимит вызовов функции
if titleObj ~= nil then
ifExists = titleObj[1]
ifRedirect = titleObj[2]
end
-- Показывает ссылку на редирект или красную ссылку
local class = (ifExists and (ifRedirect and ' iw--redirect' or ' iw--exists') or '')
s = s .. string.format('<span class="iw%s plainlinks" data-title="%s" data-lang="%s"' .. langName .. '>', class, mwlang:ucfirst(title), lang)
if ifRedirect then
if this.namespace == 0 and isEmpty(nocat) then
s = s .. categoryRedirect
end
s = s .. string.format('[%s %s]', tostring(mw.uri.fullUrl(title,'redirect=no')), text)
else
s = s .. string.format('[[%s|%s]]', title, text)
end
-- Показывает ссылку на иноязычную статью или предложение убрать шаблон
if ifExists and not ifRedirect then
s = s .. '<sup class="iw__notice noprint">[[Шаблон:Не переведено 5#Если существует статья|'
.. '<span style="color:red; font-style:normal; font-weight:bold;" title="Уберите шаблон «Не переведено 5» из статьи '
.. 'и замените его простой вики-ссылкой">?!</span>]]</sup>'
if this.namespace == 0 and isEmpty(nocat) then
s = s .. categoryExists
end
else
-- Создаёт всплывающую подсказку
local t = ''
if lang == 'd' then
t = string.format('Страница статьи «%s» в Викиданных', mwlang:ucfirst(title))
page = page .. '#sitelinks-wikipedia'
else
if not isEmpty(origPage) then
t = string.format('%s — maqolasi', page)
else
t = 'Maqola'
end
t = string.format(' «%s» maqolasining %sdagi versiyasi', mwlang:ucfirst(title), p._transform_lang(lang))
end
-- Создаёт примечание о перенаправлении
local aster = ''
if ifRedirect then
aster = '<sup class="iw__notice noprint" style="font-style:normal; font-weight:normal; margin:0 0 0 1px;">'
.. '[[Andoza:Tarjima qilinmagan 5#Agar yoʻnaltirish mavjud boʻlsa|'
.. '<span title="Qayta yoʻnaltirishni maqola bilan almashtiring yoki „Tarjima qilinmagan 5“ andozasini olib tashlang">*</span>]]'
.. '</sup>'
end
-- Выводит ссылку на иноязычную страницу
s = s .. '<sup class="iw__note noprint" style="font-style:normal; font-weight:normal;">' ..
string.format('[[:%s:%s|<span class="iw__tooltip" title="%s">[%s]</span>]]</sup>', lang, page, t, lang) ..
aster
-- Выводит статус иноязычной страницы
if not isEmpty(state) and not isEmpty(states[state]) then
s = s .. string.format('<sup class="iw__status noprint" style="margin:0 0 0 1px;">[[Файл:%s|8px|link=%s|%s]]</sup>',
states[state][3], states[state][1], states[state][2])
end
end
return s .. '</span>'
else
-- Если нет обязательного параметра, выводит красный текст
local htmlerror = require('Module:Error').error
return htmlerror{'Укажите название страницы.'}
end
end
-- Вспомогательная функция для {{Не переведено 5}}: выводит подстановку шаблона
function p._substIW(title, text)
local s = '[[' .. title
if not isEmpty(text) and title ~= text then
s = s .. '|' .. text
end
return s .. ']]'
end
-- Выводит {{Не переведено 5}}
function p.getIW(frame)
local mwlang = mw.getContentLanguage()
local f = frame.args
local title = f.title
local text = f.text
local lang = mwlang:lc(f.lang)
local page = f.page
local state = f.state
local nocat = f.nocat
if not mw.isSubsting() then
return p._newIW(title, text, lang, page, state, nocat)
end
return p._substIW(title, text)
end
return p