Module:Localization

local ugsub = mw.ustring.gsub local usub = mw.ustring.sub

-- return { -- replace all tokens in source string with replacement replace = function(frame) local str = frame.args['str'] -- iterate over parameters for token, replace in pairs(frame:getParent.args) do			local isReplacementArg = usub(token, 1, 1) == '$' -- parameter name starts with the "$" character if frame.args['calledFromModule'] ~= nil and frame.args['calledFromModule'] ~= '' then -- if was called from a module, then it is impossible to include the "$" character in a parameter name -- therefore, replacement arguments are not in the format of "$arg$", but "__arg" there isReplacementArg = usub(token, 1, 2) == '__' token = '$' .. usub(token, 3) .. '$' -- reformat "__arg" to "$arg$" end if isReplacementArg then -- escape, to perform plain text replacement. see Module:String str = ugsub(str, (ugsub(token, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1")), (ugsub(replace, "%%", "%%%%" ))) -- to force return only 1 value. end end return str end,

}