<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Modul%3AMultilingual%2Fmaintain</id>
	<title>Modul:Multilingual/maintain - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Modul%3AMultilingual%2Fmaintain"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Modul:Multilingual/maintain&amp;action=history"/>
	<updated>2026-05-31T07:59:13Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Modul:Multilingual/maintain&amp;diff=2919635&amp;oldid=prev</id>
		<title>imported&gt;PerfektesChaos: 2025-03-04</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Modul:Multilingual/maintain&amp;diff=2919635&amp;oldid=prev"/>
		<updated>2025-03-06T12:15:35Z</updated>

		<summary type="html">&lt;p&gt;2025-03-04&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local Multilingual = { suite  = &amp;quot;Multilingual&amp;quot;,&lt;br /&gt;
                       sub    = &amp;quot;maintain&amp;quot;,&lt;br /&gt;
                       serial = &amp;quot;2025-03-04&amp;quot;,&lt;br /&gt;
                       item   = 0 }&lt;br /&gt;
--[=[&lt;br /&gt;
Multilingual data source maintainenance issues&lt;br /&gt;
]=]&lt;br /&gt;
local Failsafe = Multilingual&lt;br /&gt;
&lt;br /&gt;
Multilingual.support = &amp;quot;Module:Multilingual/articles.json&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local fill = function ( assembly, access, assign, adjust )&lt;br /&gt;
    -- Attach submodule&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     assembly  -- table&lt;br /&gt;
    --     access    -- submodule title&lt;br /&gt;
    --     assign    -- component name&lt;br /&gt;
    --     adjust    -- language code, or false&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns  table with additional components&lt;br /&gt;
    --     Throws error, if not available&lt;br /&gt;
    local lucky, got = pcall( require,&lt;br /&gt;
                              &amp;quot;Module:Multilingual/&amp;quot; .. access )&lt;br /&gt;
    local r = assembly&lt;br /&gt;
    local elem, part&lt;br /&gt;
    if type( got ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        for series, collection in pairs( got ) do&lt;br /&gt;
            if adjust  and  series ~= adjust then&lt;br /&gt;
            elseif type( series ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                if type( collection ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                    series = series:lower()&lt;br /&gt;
                    part = r[ series ]&lt;br /&gt;
                    if type( part ) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
                         r[ series ] = { }&lt;br /&gt;
                         part        = r[ series ]&lt;br /&gt;
                    end&lt;br /&gt;
                    for k, v in pairs( collection ) do&lt;br /&gt;
                        k = k:lower()&lt;br /&gt;
                        elem = part[ k ]&lt;br /&gt;
                        if type( elem ) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
                            part[ k ] = { }&lt;br /&gt;
                            elem      = part[ k ]&lt;br /&gt;
                        end&lt;br /&gt;
                        elem[ assign ] = v&lt;br /&gt;
                    end -- for k, v&lt;br /&gt;
                elseif series:sub( 1, 1 ) ~= &amp;quot;#&amp;quot; then&lt;br /&gt;
                    got = string.format( &amp;quot;Multilingual/%s invalid at %s&amp;quot;,&lt;br /&gt;
                                         access, series )&lt;br /&gt;
                    error( got, 0 )&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                got = string.format( &amp;quot;Multilingual/%s bad key type %s&amp;quot;,&lt;br /&gt;
                                     access, type( series ) )&lt;br /&gt;
                error( got, 0 )&lt;br /&gt;
            end&lt;br /&gt;
        end -- for in, collection&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- fill()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local first = function ( a1, a2 )&lt;br /&gt;
    -- Sort obeying hyphen&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     a1  -- first string&lt;br /&gt;
    --     a2  -- second string&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns true when a1 is less than a2&lt;br /&gt;
    local n1 = a1:find( &amp;quot;-&amp;quot;, 1, true )&lt;br /&gt;
    local n2 = a2:find( &amp;quot;-&amp;quot;, 1, true )&lt;br /&gt;
    local r&lt;br /&gt;
    if n1 then&lt;br /&gt;
        if n2 then&lt;br /&gt;
            local s1 = a1:sub( 1, n1 )&lt;br /&gt;
            local s2 = a2:sub( 1, n2 )&lt;br /&gt;
            if s1 == s2 then&lt;br /&gt;
                r = ( a1:sub( n1 )  &amp;lt;  a2:sub( n2 ) )&lt;br /&gt;
            else&lt;br /&gt;
                r = ( s1 &amp;lt; s2 )&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            r = ( a1:sub( 1, n1 )  &amp;lt;  a2 )&lt;br /&gt;
        end&lt;br /&gt;
    elseif n2 then&lt;br /&gt;
        r = ( a1  &amp;lt;  a2:sub( 1, n2 ) )&lt;br /&gt;
    else&lt;br /&gt;
        r = ( a1 &amp;lt; a2 )&lt;br /&gt;
    end&lt;br /&gt;
    return  r&lt;br /&gt;
end -- first()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multilingual.fetchArticles = function ()&lt;br /&gt;
    -- Make wikitable of local article names by language code&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns wikitext string, or false&lt;br /&gt;
    local lucky, json&lt;br /&gt;
    local r&lt;br /&gt;
    lucky, json = pcall( mw.loadJsonData, Multilingual.support )&lt;br /&gt;
    if type( json ) == &amp;quot;table&amp;quot;  and&lt;br /&gt;
       type( json.pages ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        local order = { }&lt;br /&gt;
        for k, v in pairs( json.pages ) do&lt;br /&gt;
            table.insert( order, k )&lt;br /&gt;
        end -- for k, v&lt;br /&gt;
        if #order &amp;gt; 0 then&lt;br /&gt;
            local tbl = mw.html.create( &amp;quot;table&amp;quot; )&lt;br /&gt;
            local div = mw.html.create( &amp;quot;div&amp;quot; )&lt;br /&gt;
            local s, td1, td2, tr&lt;br /&gt;
            r = mw.html.create( &amp;quot;div&amp;quot; )&lt;br /&gt;
            if #order &amp;gt; 1 then&lt;br /&gt;
                table.sort( order )&lt;br /&gt;
            end&lt;br /&gt;
            if #order &amp;gt; 1 then&lt;br /&gt;
                tbl:addClass( &amp;quot;sortable&amp;quot; )&lt;br /&gt;
            end&lt;br /&gt;
            for i = 1, #order do&lt;br /&gt;
                s = order[ i ]&lt;br /&gt;
                tr  = mw.html.create( &amp;quot;tr&amp;quot; )&lt;br /&gt;
                td1 = mw.html.create( &amp;quot;td&amp;quot; )&lt;br /&gt;
                td1:css( &amp;quot;font-family&amp;quot;,  &amp;quot;monospace&amp;quot; )&lt;br /&gt;
                   :css( &amp;quot;white-space&amp;quot;, &amp;quot;nowrap&amp;quot; )&lt;br /&gt;
                   :wikitext( s )&lt;br /&gt;
                td2 = mw.html.create( &amp;quot;td&amp;quot; )&lt;br /&gt;
                td2:wikitext( string.format( &amp;quot;[[%s]]&amp;quot;,&lt;br /&gt;
                                             json.pages[ s ] ) )&lt;br /&gt;
                tr:node( td1 )&lt;br /&gt;
                tr:node( td2 )&lt;br /&gt;
                tbl:newline()&lt;br /&gt;
                   :node( tr )&lt;br /&gt;
            end -- for i&lt;br /&gt;
            s = string.format( &amp;quot;%d items&amp;quot;, #order )&lt;br /&gt;
            div:wikitext( s )&lt;br /&gt;
            r:newline()&lt;br /&gt;
             :node( tbl )&lt;br /&gt;
             :newline()&lt;br /&gt;
             :node( div )&lt;br /&gt;
            r = tostring( r )&lt;br /&gt;
        else&lt;br /&gt;
            r = &amp;quot;0 articles&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        r = &amp;quot;ERROR * bad page &amp;quot; .. Multilingual.support&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Multilingual.fetchArticles()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multilingual.fetchLanguageNames = function ( ask, amount )&lt;br /&gt;
    -- Make wikitable of language names in a certain language&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask     -- code of requested language&lt;br /&gt;
    --                -- nil, &amp;quot;native&amp;quot;, &amp;quot;*&amp;quot;, string&lt;br /&gt;
    --     amount  -- kind of extension&lt;br /&gt;
    --                -- nil, &amp;quot;all&amp;quot;, &amp;quot;*&amp;quot;, &amp;quot;mw&amp;quot;, &amp;quot;mw&amp;quot;, &amp;quot;#&amp;quot;&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns wikitext string, or number&lt;br /&gt;
    local codes = { }&lt;br /&gt;
    local collection, n, r, scope, slang&lt;br /&gt;
    if not ask  or  ask == &amp;quot;*&amp;quot; then&lt;br /&gt;
        slang = &amp;quot;native&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        slang = ask&lt;br /&gt;
    end&lt;br /&gt;
    if not amount  or  amount == &amp;quot;mw&amp;quot; then&lt;br /&gt;
        scope = &amp;quot;mw&amp;quot;&lt;br /&gt;
    elseif amount == &amp;quot;mwfile&amp;quot; then&lt;br /&gt;
        scope = &amp;quot;mwfile&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        scope = &amp;quot;all&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    collection = mw.language.fetchLanguageNames( slang, scope )&lt;br /&gt;
    for k, v in pairs( collection ) do&lt;br /&gt;
        table.insert( codes, k )&lt;br /&gt;
    end -- for k, v&lt;br /&gt;
    n = #codes&lt;br /&gt;
    if amount == &amp;quot;#&amp;quot; then&lt;br /&gt;
       r = n&lt;br /&gt;
    else&lt;br /&gt;
       local mwdef, s&lt;br /&gt;
       table.sort( codes, first )&lt;br /&gt;
       if scope == &amp;quot;all&amp;quot; then&lt;br /&gt;
           local mwfile = mw.language.fetchLanguageNames( slang,&lt;br /&gt;
                                                          &amp;quot;mwfile&amp;quot; )&lt;br /&gt;
           mwdef = mw.language.fetchLanguageNames( slang, &amp;quot;mw&amp;quot; )&lt;br /&gt;
           for k, v in pairs( mwdef ) do&lt;br /&gt;
               if mwfile[ k ] then&lt;br /&gt;
                   s = &amp;quot;mw file&amp;quot;&lt;br /&gt;
               else&lt;br /&gt;
                   s = &amp;quot;mw&amp;quot;&lt;br /&gt;
               end&lt;br /&gt;
               mwdef[ k ] = s&lt;br /&gt;
           end -- for k, v&lt;br /&gt;
       end&lt;br /&gt;
       r = &amp;quot;{| class=&amp;#039;wikitable sortable&amp;#039;\n&amp;quot; ..&lt;br /&gt;
           string.format( &amp;quot;|+ &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; (%s)\n&amp;quot;,&lt;br /&gt;
                          slang, scope ) ..&lt;br /&gt;
           &amp;quot;|-\n&amp;quot; ..&lt;br /&gt;
           &amp;quot;! Code !! Name\n&amp;quot;&lt;br /&gt;
           if mwdef then&lt;br /&gt;
               r = r .. &amp;quot;! Scope\n&amp;quot;&lt;br /&gt;
           end&lt;br /&gt;
       for i = 1, n do&lt;br /&gt;
           s = codes[ i ]&lt;br /&gt;
           r = string.format( &amp;quot;%s|-\n|&amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt;||%s\n&amp;quot;,&lt;br /&gt;
                              r, s, collection[ s ] )&lt;br /&gt;
           if mwdef then&lt;br /&gt;
               s = mwdef[ s ]&lt;br /&gt;
               if s then&lt;br /&gt;
                   r = string.format( &amp;quot;%s| %s\n&amp;quot;, r, s )&lt;br /&gt;
               end&lt;br /&gt;
           end&lt;br /&gt;
       end -- for i&lt;br /&gt;
       r = string.format( &amp;quot;%s|}\n%d items\n\n&amp;quot;,&lt;br /&gt;
                          r, n )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Multilingual.fetchLanguageNames()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multilingual.forward = function ( args )&lt;br /&gt;
    -- Make wikitable of maintainenance issues&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --    args   -- table of options&lt;br /&gt;
    --              lack    -- show missing CLDR definitions&lt;br /&gt;
    --              leap    -- show open issues only&lt;br /&gt;
    --              learnt  -- show superfluous local entries only&lt;br /&gt;
    --              slang   -- limit to particular language&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns wikitext string&lt;br /&gt;
    local codes  = { }&lt;br /&gt;
    local pars   = args or { }&lt;br /&gt;
    local leap   = ( pars.leap    and  pars.leap   ~= &amp;quot;0&amp;quot; )&lt;br /&gt;
    local learnt = ( pars.learnt  and  pars.learnt ~= &amp;quot;0&amp;quot; )&lt;br /&gt;
    local slang  = ( pars.slang   and  pars.slang ~= &amp;quot;&amp;quot; )&lt;br /&gt;
    local slice  = &amp;quot;%s|-\n&amp;quot; ..&lt;br /&gt;
                   &amp;quot;|&amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt;||&amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt;||%s||%s||%s||%s\n&amp;quot;&lt;br /&gt;
    local r      = &amp;quot;{| class=&amp;#039;wikitable sortable&amp;#039;\n&amp;quot; ..&lt;br /&gt;
                   &amp;quot;|-\n&amp;quot; ..&lt;br /&gt;
                   &amp;quot;! In !! For !! Suggested !! @MW !! @CLDR !! ToDo\n&amp;quot;&lt;br /&gt;
    local data = fill( { }, &amp;quot;names&amp;quot;, &amp;quot;shift&amp;quot;, slang )&lt;br /&gt;
    local elem, series, server, shift, single, state, super, tupel&lt;br /&gt;
    data = fill( data, &amp;quot;cldr&amp;quot;, &amp;quot;super&amp;quot;, slang )&lt;br /&gt;
    for series, collection in pairs( data ) do&lt;br /&gt;
        part = data[ series ]&lt;br /&gt;
        for k, v in pairs( collection ) do&lt;br /&gt;
            table.insert( codes,&lt;br /&gt;
                          string.format( &amp;quot;%s %s&amp;quot;, series, k ) )&lt;br /&gt;
            v.server = mw.language.fetchLanguageName( k, series )&lt;br /&gt;
        end -- for k, v&lt;br /&gt;
    end -- for in, collection&lt;br /&gt;
    table.sort( codes, first )&lt;br /&gt;
    for i = 1, #codes do&lt;br /&gt;
        tupel  = mw.text.split( codes[ i ], &amp;quot; &amp;quot;, true )&lt;br /&gt;
        series = tupel[ 1 ]&lt;br /&gt;
        single = tupel[ 2 ]&lt;br /&gt;
        elem   = data[ series ][ single ]&lt;br /&gt;
        shift  = elem.shift  or &amp;quot;&amp;quot;&lt;br /&gt;
        server = elem.server or &amp;quot;&amp;quot;&lt;br /&gt;
        super  = elem.super  or &amp;quot;&amp;quot;&lt;br /&gt;
        if not elem.super then&lt;br /&gt;
            if shift == server then&lt;br /&gt;
                state = &amp;quot;Upstream&amp;quot;&lt;br /&gt;
            else&lt;br /&gt;
                state = &amp;quot;Learn&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        elseif server ~= super then&lt;br /&gt;
            if shift == super then&lt;br /&gt;
                state = &amp;quot;CLDR&amp;quot;&lt;br /&gt;
            elseif elem.shift then&lt;br /&gt;
                state = &amp;quot;Proposal&amp;quot;&lt;br /&gt;
            elseif series == &amp;quot;en&amp;quot; then&lt;br /&gt;
                state = &amp;quot;Conflict&amp;quot;&lt;br /&gt;
            else&lt;br /&gt;
                state = mw.language.fetchLanguageName( single, &amp;quot;en&amp;quot; )&lt;br /&gt;
                if server == state then&lt;br /&gt;
                    state = false&lt;br /&gt;
                else&lt;br /&gt;
                    state = &amp;quot;Conflict&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        elseif elem.shift then&lt;br /&gt;
            if shift == server then&lt;br /&gt;
                state = &amp;quot;Discard&amp;quot;&lt;br /&gt;
            else&lt;br /&gt;
                state = &amp;quot;Proposal&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            state = false&lt;br /&gt;
        end&lt;br /&gt;
        if state then&lt;br /&gt;
            r = string.format( slice,&lt;br /&gt;
                               r,&lt;br /&gt;
                               series, single, shift, server, super,&lt;br /&gt;
                               state )&lt;br /&gt;
        end&lt;br /&gt;
    end -- for i&lt;br /&gt;
    r = r .. &amp;quot;|}\n\n&amp;quot;&lt;br /&gt;
    return r&lt;br /&gt;
end -- Multilingual.forward()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Failsafe.failsafe = function ( atleast )&lt;br /&gt;
    -- Retrieve versioning and check for compliance&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     atleast  -- string, with required version&lt;br /&gt;
    --                         or wikidata|item|~|@ or false&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns  string  -- with queried version/item, also if problem&lt;br /&gt;
    --              false   -- if appropriate&lt;br /&gt;
    -- 2024-03-01&lt;br /&gt;
    local since  = atleast&lt;br /&gt;
    local last   = ( since == &amp;quot;~&amp;quot; )&lt;br /&gt;
    local linked = ( since == &amp;quot;@&amp;quot; )&lt;br /&gt;
    local link   = ( since == &amp;quot;item&amp;quot; )&lt;br /&gt;
    local r&lt;br /&gt;
    if last  or  link  or  linked  or  since == &amp;quot;wikidata&amp;quot; then&lt;br /&gt;
        local item = Failsafe.item&lt;br /&gt;
        since = false&lt;br /&gt;
        if type( item ) == &amp;quot;number&amp;quot;  and  item &amp;gt; 0 then&lt;br /&gt;
            local suited = string.format( &amp;quot;Q%d&amp;quot;, item )&lt;br /&gt;
            if link then&lt;br /&gt;
                r = suited&lt;br /&gt;
            else&lt;br /&gt;
                local entity = mw.wikibase.getEntity( suited )&lt;br /&gt;
                if type( entity ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                    local seek = Failsafe.serialProperty or &amp;quot;P348&amp;quot;&lt;br /&gt;
                    local vsn  = entity:formatPropertyValues( seek )&lt;br /&gt;
                    if type( vsn ) == &amp;quot;table&amp;quot;  and&lt;br /&gt;
                       type( vsn.value ) == &amp;quot;string&amp;quot;  and&lt;br /&gt;
                       vsn.value ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                        if last  and  vsn.value == Failsafe.serial then&lt;br /&gt;
                            r = false&lt;br /&gt;
                        elseif linked then&lt;br /&gt;
                            if mw.title.getCurrentTitle().prefixedText&lt;br /&gt;
                               ==  mw.wikibase.getSitelink( suited ) then&lt;br /&gt;
                                r = false&lt;br /&gt;
                            else&lt;br /&gt;
                                r = suited&lt;br /&gt;
                            end&lt;br /&gt;
                        else&lt;br /&gt;
                            r = vsn.value&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        elseif link then&lt;br /&gt;
            r = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if type( r ) == &amp;quot;nil&amp;quot; then&lt;br /&gt;
        if not since  or  since &amp;lt;= Failsafe.serial then&lt;br /&gt;
            r = Failsafe.serial&lt;br /&gt;
        else&lt;br /&gt;
            r = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Failsafe.failsafe()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Export&lt;br /&gt;
local p = { }&lt;br /&gt;
&lt;br /&gt;
p.fetchArticles = function ( frame )&lt;br /&gt;
    -- Make wikitable of local article names by language code&lt;br /&gt;
    return Multilingual.fetchArticles()&lt;br /&gt;
end -- p.fetchArticles&lt;br /&gt;
&lt;br /&gt;
p.fetchLanguageNames = function ( frame )&lt;br /&gt;
    -- Make wikitable of language names in a certain language&lt;br /&gt;
    --     1  -- code of requested language&lt;br /&gt;
    --     2  -- kind of extension&lt;br /&gt;
    return Multilingual.fetchLanguageNames( frame.args[ 1 ],&lt;br /&gt;
                                            frame.args[ 2 ] )&lt;br /&gt;
end -- p.fetchLanguageNames&lt;br /&gt;
&lt;br /&gt;
p.fetchUnicodeScriptLua = function ( frame )&lt;br /&gt;
    return &amp;quot;fetchUnicodeScriptLua&amp;quot;&lt;br /&gt;
end -- p.fetchUnicodeScriptLua&lt;br /&gt;
&lt;br /&gt;
p.forward = function ( frame )&lt;br /&gt;
    -- Make wikitable of maintainenance issues&lt;br /&gt;
    --    leap    -- show open issues only&lt;br /&gt;
    --    learnt  -- show superfluous local entries only&lt;br /&gt;
    --    slang   -- limit to particular language&lt;br /&gt;
    return Multilingual.forward( frame.args )&lt;br /&gt;
end -- p.forward&lt;br /&gt;
&lt;br /&gt;
p.failsafe = function ( frame )&lt;br /&gt;
    -- Versioning interface&lt;br /&gt;
    local s = type( frame )&lt;br /&gt;
    local since&lt;br /&gt;
    if s == &amp;quot;table&amp;quot; then&lt;br /&gt;
        since = frame.args[ 1 ]&lt;br /&gt;
    elseif s == &amp;quot;string&amp;quot; then&lt;br /&gt;
        since = frame&lt;br /&gt;
    end&lt;br /&gt;
    if since then&lt;br /&gt;
        since = mw.text.trim( since )&lt;br /&gt;
        if since == &amp;quot;&amp;quot; then&lt;br /&gt;
            since = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return Failsafe.failsafe( since )  or  &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.failsafe()&lt;br /&gt;
&lt;br /&gt;
p.MLM = function ()&lt;br /&gt;
    return Failsafe&lt;br /&gt;
end -- p.MLM&lt;br /&gt;
&lt;br /&gt;
setmetatable( p,  { __call = function ( func, ... )&lt;br /&gt;
                                 setmetatable( p, nil )&lt;br /&gt;
                                 return Failsafe&lt;br /&gt;
                             end } )&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;PerfektesChaos</name></author>
	</entry>
</feed>