Module:TNTFallback

-- This module implements a wrapper for Module:TNT that allows returning -- a fallback message; used by. -- -- @module TNTFallback -- @alias p -- @author User:ExE Boss -- @require Module:No globals -- @require Module:TNT

require("strict"); local TNT = require("Module:TNT");

local p = {};

-- Based on Module:TNT's `msg` function, -- but takes an optional `fallback` parameter.

function p.msg(frame) local dataset, key; local params = { n = 0 }; local lang = nil; local fallback = nil;

for k, v in pairs(frame.args) do		if (k == 1) then dataset = v;		elseif (k == 2) then key = v;		elseif (type(k) == "number" and k > 2) then local i = k - 2; params[i] = v;			params.n = math.max(params.n, i); elseif ((k == "lang") and (v ~= "_")) then lang = v;		elseif ((k == "fallback") and (v ~= "")) then fallback = v;		end end

local result; if (lang) then result = TNT.formatInLanguage(lang, dataset, key, unpack(params, 1, params.n)); else result = TNT.format(dataset, key, unpack(params, 1, params.n)); end

if (fallback and ( -- not translated (result and result == TNT.formatInLanguage("en", dataset, key, unpack(params, 1, params.n))) -- no message or (not result) )) then if (not lang) then if (frame:callParserFunction("int:lang") ~= "en") then return mw.message.newRawMessage(fallback, unpack(params, 1, params.n)):plain; end elseif (lang ~= "en") then return mw.message.newRawMessage(fallback, unpack(params, 1, params.n)):plain; end end

return result; end

return p;