Modul:Pg: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
StadtbahnBI>AFBorchert K (Protected "Module:Pg": Excessive vandalism ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite))) |
Tt (Diskussion | Beiträge) K (1 Version importiert) |
||
(2 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 6: | Zeile 6: | ||
-- at read time if that exists, or English otherwise | -- at read time if that exists, or English otherwise | ||
local function getMyLanguage(title) | local function getMyLanguage(title) | ||
return mw.title.new('Special:MyLanguage/' .. title.fullText) | -- interwiki prefixes for wikis with translate extension | ||
-- created from https://phabricator.wikimedia.org/source/mediawiki-config/browse/master/wmf-config/InitialiseSettings.php$19151 | |||
-- and https://commons.wikimedia.org/wiki/Special:Interwiki | |||
-- frwiktionary is excluded because there are multiple wiktionaries | |||
local multilang = { | |||
wmam = true, | |||
wmbe = true, | |||
betawikiversity = true, | |||
wmbr = true, | |||
wmbd = true, | |||
wmca = true, | |||
wmge = true, | |||
wmid = true, | |||
wmhi = true, | |||
incubator = true, | |||
m = true, | |||
meta = true, | |||
metawiki = true, | |||
metawikimedia = true, | |||
metawikipedia = true, | |||
wmno = true, | |||
otrswiki = true, | |||
vrtwiki = true, | |||
outreach = true, | |||
outreachwiki = true, | |||
wmpl = true, | |||
wmru = true, | |||
wmpunjabi = true, | |||
oldwikisource = true, | |||
species = true, | |||
wikispecies = true, | |||
wmse = true, | |||
testwiki = true, | |||
wmua = true, | |||
d = true, | |||
wikidata = true, | |||
wmania = true, | |||
wikimania = true, | |||
} | |||
if title.isExternal then | |||
if multilang[title.interwiki] then | |||
-- mw.title.interwiki only seperates the first interwiki or interlanguage | |||
-- prefix. that means this wouldn't work with a link that has both, | |||
-- eg 'wikt:fr:foo' -> 'wikt:Special:MyLanguage/fr:foo' which breaks. | |||
-- if the wiki supports translation, the link probably doesn't have an | |||
-- interlanguage prefix and Special:MyLanguage might be useful | |||
return mw.title.new(title.interwiki .. ':Special:MyLanguage/' .. title.nsText .. title.text) | |||
else | |||
-- wiki doesn't support translation, so don't try to add Special:MyLanguage | |||
return title | |||
end | |||
else | |||
return mw.title.new('Special:MyLanguage/' .. title.fullText) | |||
end | |||
end | end | ||
Aktuelle Version vom 9. Oktober 2021, 15:25 Uhr
Die Dokumentation für dieses Modul kann unter Modul:Pg/Doku erstellt werden
require 'Module:No globals' local p = {} -- Return a title using [[Special:MyLanguage]], which resolves to user language -- at read time if that exists, or English otherwise local function getMyLanguage(title) -- interwiki prefixes for wikis with translate extension -- created from https://phabricator.wikimedia.org/source/mediawiki-config/browse/master/wmf-config/InitialiseSettings.php$19151 -- and https://commons.wikimedia.org/wiki/Special:Interwiki -- frwiktionary is excluded because there are multiple wiktionaries local multilang = { wmam = true, wmbe = true, betawikiversity = true, wmbr = true, wmbd = true, wmca = true, wmge = true, wmid = true, wmhi = true, incubator = true, m = true, meta = true, metawiki = true, metawikimedia = true, metawikipedia = true, wmno = true, otrswiki = true, vrtwiki = true, outreach = true, outreachwiki = true, wmpl = true, wmru = true, wmpunjabi = true, oldwikisource = true, species = true, wikispecies = true, wmse = true, testwiki = true, wmua = true, d = true, wikidata = true, wmania = true, wikimania = true, } if title.isExternal then if multilang[title.interwiki] then -- mw.title.interwiki only seperates the first interwiki or interlanguage -- prefix. that means this wouldn't work with a link that has both, -- eg 'wikt:fr:foo' -> 'wikt:Special:MyLanguage/fr:foo' which breaks. -- if the wiki supports translation, the link probably doesn't have an -- interlanguage prefix and Special:MyLanguage might be useful return mw.title.new(title.interwiki .. ':Special:MyLanguage/' .. title.nsText .. title.text) else -- wiki doesn't support translation, so don't try to add Special:MyLanguage return title end else return mw.title.new('Special:MyLanguage/' .. title.fullText) end end -- Get display title for pages translated using the Translate extension local function getDisplayTitle(title, lang) local titlepage = mw.title.makeTitle('Translations', title.prefixedText .. '/Page display title/' .. lang) if titlepage.exists then local display = mw.getCurrentFrame():expandTemplate{ title = titlepage } if title.fragment ~= '' then display = display .. '#' .. title.fragment end return display else return nil end end function p.getLink(page, display, anchor, lang, useMyLanguage) -- Sort out things like nil, object etc. It is likely to be invalid title, -- but c’est la vie. local title = mw.title.new(tostring(page or '')) if not title then return '[[' .. page .. ']]' end if anchor then title.fragment = anchor end if title.isRedirect then local fragment = title.fragment title = title.redirectTarget if fragment ~= '' then title.fragment = fragment end end if useMyLanguage then if not display then display = getDisplayTitle(title, lang) or title.fullText end title = getMyLanguage(title) else if lang ~= 'en' then local subpage = title:subPageTitle(lang) if subpage.exists then -- version of target page exists in current page language, return that version subpage.fragment = title.fragment if not display then -- try to use translated page title display = getDisplayTitle(title, lang) end title = subpage else -- prepend Special:MyLanguage/ to return the target page in -- user’s preferred language if available if not display then display = title.fullText end title = getMyLanguage(title) end end end return '[[' .. title.fullText .. (display and '|' .. display or '') .. ']]' end function p.main(frame) local args = require('Module:Arguments').getArgs(frame, {frameOnly = true}) local lang = args.lang or mw.getCurrentFrame():preprocess('{{PAGELANGUAGE}}') return p.getLink(args.page, args.display, args.anchor, lang, false) end function p.pg2(frame) local args = require('Module:Arguments').getArgs(frame, {frameOnly = true}) local lang = args.lang or mw.getCurrentFrame():preprocess('{{int:lang}}') return p.getLink(args[1], args[2], args.anchor, lang, true) end return p