Module:Pg

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) return mw.title.new('Special:MyLanguage/' .. title.fullText) 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  .. display or ) .. '' end

function p.main(frame) local args = require('Module:Arguments').getArgs(frame, {frameOnly = true}) local lang = args.lang or mw.getCurrentFrame:preprocess('') 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('') return p.getLink(args[1], args[2], args.anchor, lang, true) end

return p