<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ar">
	<id>https://3rabica.org/index.php?action=history&amp;feed=atom&amp;title=%D9%88%D8%AD%D8%AF%D8%A9%3ALanguages</id>
	<title>وحدة:Languages - تاريخ المراجعة</title>
	<link rel="self" type="application/atom+xml" href="https://3rabica.org/index.php?action=history&amp;feed=atom&amp;title=%D9%88%D8%AD%D8%AF%D8%A9%3ALanguages"/>
	<link rel="alternate" type="text/html" href="https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Languages&amp;action=history"/>
	<updated>2026-06-05T15:58:04Z</updated>
	<subtitle>تاريخ التعديل لهذه الصفحة في الويكي</subtitle>
	<generator>MediaWiki 1.43.7</generator>
	<entry>
		<id>https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Languages&amp;diff=326&amp;oldid=prev</id>
		<title>عبد العزيز: أنشأ الصفحة ب&#039;local language = {} local getArgs = require(&#039;Module:Arguments&#039;).getArgs  -- File di configurazione contenente due tabelle: -- lg.alias: per normalizzare gli alias a un c...&#039;</title>
		<link rel="alternate" type="text/html" href="https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Languages&amp;diff=326&amp;oldid=prev"/>
		<updated>2016-03-18T01:24:11Z</updated>

		<summary type="html">&lt;p&gt;أنشأ الصفحة ب&amp;#039;local language = {} local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs  -- File di configurazione contenente due tabelle: -- lg.alias: per normalizzare gli alias a un c...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;صفحة جديدة&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local language = {}&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
&lt;br /&gt;
-- File di configurazione contenente due tabelle:&lt;br /&gt;
-- lg.alias: per normalizzare gli alias a un codice unico&lt;br /&gt;
-- lg.codici: che dato un codice restituisce un array contente&lt;br /&gt;
-- nome della lingua e collegamento all&amp;#039;articolo su it.wiki dedicato alla lingua&lt;br /&gt;
local lg = mw.loadData( &amp;#039;وحدة:Languages/Configuration&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
-- ritorna il nome della voce corrispondente a &amp;quot;code&amp;quot;. Se &amp;quot;code&amp;quot; non corrisponde a nessuna&lt;br /&gt;
-- lingua inserita in tabella ritorna una stringa nulla&lt;br /&gt;
function language.get_voce(code)&lt;br /&gt;
    if code == nil then return &amp;#039;&amp;#039; end&lt;br /&gt;
    local code = mw.ustring.lower(code)&lt;br /&gt;
    if lg.alias[code] then code = lg.alias[code] end&lt;br /&gt;
    lingua = lg.codici[code]&lt;br /&gt;
    if lingua then&lt;br /&gt;
        return lingua[2]&lt;br /&gt;
    end&lt;br /&gt;
    return &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ritorna vero se &amp;quot;code&amp;quot; corrisponde a un linguaggio, falso altrimenti&lt;br /&gt;
function language.esiste(code)&lt;br /&gt;
    if code == nil or code==&amp;#039;&amp;#039; then return false end&lt;br /&gt;
    if lg.alias[code] then code= lg.alias[code] end&lt;br /&gt;
    if lg.codici[code] then return true end&lt;br /&gt;
    return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ritorna il nome standard della lingua corrispondente a &amp;quot;code&amp;quot;  e il codice normalizzato&lt;br /&gt;
--  a quella della tabella codici&lt;br /&gt;
-- Se &amp;quot;code&amp;quot; non corrisponde a nessuna lingua inserita in tabella ritorna la coppia valore di default&lt;br /&gt;
-- o stringa nulla se questo non è indicato e il codice richiesto. Se maiuscolo è vero il&lt;br /&gt;
-- nome viene ritornato con la prima lettera maiuscola&lt;br /&gt;
function language.get_nome(code, maiuscolo, default)&lt;br /&gt;
    local nome = default or &amp;#039;&amp;#039;&lt;br /&gt;
    if code ~= nil and code ~= &amp;#039;&amp;#039; then&lt;br /&gt;
        code = mw.ustring.lower(code)&lt;br /&gt;
        if lg.alias[code] then code = lg.alias[code] end&lt;br /&gt;
        local lingua = lg.codici[code]&lt;br /&gt;
        if lingua then nome = lingua[1] end&lt;br /&gt;
    end&lt;br /&gt;
    if maiuscolo then&lt;br /&gt;
        nome = mw.ustring.gsub(nome, &amp;#039;^%l&amp;#039;, mw.ustring.upper)&lt;br /&gt;
    end&lt;br /&gt;
    return nome, code&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- funzione di interfaccia per template:Nomelingua/voce&lt;br /&gt;
function language.voce(frame)&lt;br /&gt;
    local code = frame.args[1]&lt;br /&gt;
    if code == nil or code == &amp;#039;&amp;#039; then&lt;br /&gt;
        return &amp;#039;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
    return language.get_voce(code)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- funzione di interfaccia per template:Nomelingua/nome&lt;br /&gt;
function language.nome(frame)&lt;br /&gt;
    local maiuscolo = false&lt;br /&gt;
    local code = frame.args[1] or &amp;#039;&amp;#039;&lt;br /&gt;
    local default = (frame.args[2] == &amp;#039;v&amp;#039; and &amp;#039;&amp;#039;) or code&lt;br /&gt;
    if frame.args[&amp;#039;M&amp;#039;]~=nil and frame.args[&amp;#039;M&amp;#039;]~=&amp;#039;&amp;#039; then&lt;br /&gt;
        maiuscolo = true&lt;br /&gt;
    end&lt;br /&gt;
    return language.get_nome(code, maiuscolo, default), _&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--funzione di interfaccia per template:Nomelingua&lt;br /&gt;
function language.nomecompleto(frame)&lt;br /&gt;
    local code = frame.args[1]&lt;br /&gt;
    if code == nil or code == &amp;#039;&amp;#039; then&lt;br /&gt;
        return &amp;#039;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
    local maiuscolo = false&lt;br /&gt;
    if frame.args[&amp;#039;M&amp;#039;]~=nil and frame.args[&amp;#039;M&amp;#039;]~=&amp;#039;&amp;#039; then&lt;br /&gt;
        maiuscolo = true&lt;br /&gt;
    end&lt;br /&gt;
    local voce = language.get_voce(code)&lt;br /&gt;
    local nome = language.get_nome(code, maiuscolo, code)&lt;br /&gt;
    if nome == &amp;quot;&amp;quot; and voce ~=&amp;quot;&amp;quot; then&lt;br /&gt;
        if maiuscolo then&lt;br /&gt;
            nome = mw.ustring.gsub(voce, &amp;#039;^%l&amp;#039;, mw.ustring.upper)&lt;br /&gt;
        else&lt;br /&gt;
            nome = voce&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if voce == &amp;quot;&amp;quot; then&lt;br /&gt;
        return nome&lt;br /&gt;
    else&lt;br /&gt;
        return table.concat({&amp;#039;[[&amp;#039;, voce, &amp;quot;|&amp;quot;, nome, &amp;quot;]]&amp;quot;})&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--funzione di interfaccia per template:Lingue, se viene passato anche il parametro&lt;br /&gt;
--usa_codice (qualunque sia il suo valore), allora il testo mostrato tra parentesi&lt;br /&gt;
--viene normalizzato a quello standard della lingua, piuttosto che essere quello&lt;br /&gt;
--passato&lt;br /&gt;
--In aggiunta può ricevere se il parametro return_error è vero ritorna in caso di&lt;br /&gt;
--codici lingua non ritrovati in tabella una tabella aggiuntiva con i codici errati&lt;br /&gt;
--return_error viene controllato solo se la funzione è richiamata da un modulo Lua&lt;br /&gt;
--se è richiamata da un template è sempre falsa&lt;br /&gt;
function language.lingue(frame)&lt;br /&gt;
    local lingue_list = { }&lt;br /&gt;
    -- Se chiamata mediante  #invoke, usa gli argomenti passati al template invocante.&lt;br /&gt;
    -- Altrimenti a scopo di test assume che gli argomenti siano passati direttamente&lt;br /&gt;
    local args&lt;br /&gt;
    local return_error = false&lt;br /&gt;
    local error_list = {}&lt;br /&gt;
    if frame == mw.getCurrentFrame() then&lt;br /&gt;
        args = frame:getParent().args&lt;br /&gt;
    else&lt;br /&gt;
        args = frame&lt;br /&gt;
        return_error = args[&amp;#039;return_error&amp;#039;] or false&lt;br /&gt;
    end&lt;br /&gt;
    local usa_codice = false&lt;br /&gt;
    local lingua, codice_normalizzato, code_to_show&lt;br /&gt;
    local usa_codice = (args[&amp;#039;usacodice&amp;#039;] ~= nil)&lt;br /&gt;
&lt;br /&gt;
    for _,code in ipairs(args) do&lt;br /&gt;
        lingua, codice_normalizzato = language.get_nome(code)&lt;br /&gt;
        code_to_show = mw.ustring.upper((usa_codice and codice_normalizzato) or code)&lt;br /&gt;
        if lingua ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            lingue_list[#lingue_list+1] = &amp;#039;&amp;lt;abbr title=&amp;quot;&amp;#039; .. lingua .. &amp;#039;&amp;quot;&amp;gt;&amp;#039; ..code_to_show .. &amp;quot;&amp;lt;/abbr&amp;gt;&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
            lingue_list[#lingue_list+1] = code&lt;br /&gt;
            if return_error then error_list[#error_list+1] = code end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local reply&lt;br /&gt;
    if #lingue_list &amp;gt; 0 then&lt;br /&gt;
        reply = &amp;#039;(&amp;lt;span style=&amp;quot;font-weight:bolder; font-size:80%&amp;quot;&amp;gt;&amp;#039; .. table.concat(lingue_list, &amp;quot;,&amp;amp;nbsp;&amp;quot;) .. &amp;quot;&amp;lt;/span&amp;gt;)&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        reply = &amp;#039;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
    reply = reply&lt;br /&gt;
    if #error_list&amp;gt;0 then&lt;br /&gt;
        return reply, error_list&lt;br /&gt;
    else&lt;br /&gt;
        return reply&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ========================================================&lt;br /&gt;
-- Ritorna la stringa txt inserita in un tag &amp;lt;span&amp;gt; con indicato&lt;br /&gt;
-- il codice linguaggio del testo (language_code) e il senso&lt;br /&gt;
-- di lettura (sinistro o destro).&lt;br /&gt;
-- Il parametro &amp;quot;corsivo&amp;quot; permette di indicare se il testo&lt;br /&gt;
-- deve essere messo in corsivo, ha tre valori:&lt;br /&gt;
-- -- d: consulta le tabelle di configurazione per il linguaggio&lt;br /&gt;
-- -- s: forza corsivo attivo&lt;br /&gt;
-- -- n: forza corsivo disattivo (è il valore di default)&lt;br /&gt;
-- ========================================================&lt;br /&gt;
function language._lang_testo(args)&lt;br /&gt;
    local txt = args.txt or args[2]&lt;br /&gt;
    if not txt then return &amp;#039;&amp;#039; end&lt;br /&gt;
    local language_code = args.lang or args[1]&lt;br /&gt;
    local direction = &amp;quot;ltr&amp;quot;&lt;br /&gt;
    if language_code then&lt;br /&gt;
        language_code = mw.ustring.lower(language_code)&lt;br /&gt;
        language_code = lg.alias[language_code] or language_code&lt;br /&gt;
        local writing = lg.scrittura[language_code]&lt;br /&gt;
        if writing then&lt;br /&gt;
            direction = writing[1]&lt;br /&gt;
            if #writing &amp;gt; 1 then language_code = writing[2] end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local set_italic = args.corsivo or &amp;quot;n&amp;quot;&lt;br /&gt;
    if set_italic ~= &amp;quot;n&amp;quot; then&lt;br /&gt;
        local italic = false&lt;br /&gt;
        if set_italic:lower() == &amp;#039;s&amp;#039; then&lt;br /&gt;
            italic = true&lt;br /&gt;
        elseif language_code and lg.codici[language_code] then&lt;br /&gt;
            italic = not lg.codici[language_code][3]&lt;br /&gt;
        else&lt;br /&gt;
            italic = true&lt;br /&gt;
        end      &lt;br /&gt;
        if italic then&lt;br /&gt;
            if txt[1]==&amp;quot;&amp;#039;&amp;quot; then txt = &amp;quot;&amp;lt;nowiki /&amp;gt;&amp;quot; .. txt end&lt;br /&gt;
            if txt[#txt] ==&amp;quot;&amp;#039;&amp;quot; then txt = txt .. &amp;quot;&amp;lt;nowiwiki /&amp;gt;&amp;quot; end&lt;br /&gt;
            txt = mw.ustring.format(&amp;quot;&amp;#039;&amp;#039;%s&amp;#039;&amp;#039;&amp;quot;, txt)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local span = mw.html.create(&amp;#039;span&amp;#039;):wikitext(txt):addClass(args.class)&lt;br /&gt;
    if lg.codici[language_code] then&lt;br /&gt;
        span&lt;br /&gt;
            :attr(&amp;#039;dir&amp;#039;, direction)&lt;br /&gt;
            :attr(&amp;#039;lang&amp;#039;, language_code)&lt;br /&gt;
            :attr(&amp;#039;xml:lang&amp;#039;, language_code)&lt;br /&gt;
    end            &lt;br /&gt;
    return tostring(span)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ========================================================&lt;br /&gt;
-- Funzione di interfaccia per _lang_testo&lt;br /&gt;
-- richiamabile nei template&lt;br /&gt;
-- ========================================================&lt;br /&gt;
function language.lang_testo(frame)&lt;br /&gt;
    local args = getArgs(frame)&lt;br /&gt;
    return language._lang_testo(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce una tabella con tutti i codici riconosciuti dal modulo&lt;br /&gt;
function language.tabella(frame)&lt;br /&gt;
&lt;br /&gt;
    -- genera una tabella codici -&amp;gt; lista alias e una di codici per ordinarla&lt;br /&gt;
    local alias_table = {}&lt;br /&gt;
    local codici_sorted = {}&lt;br /&gt;
    for code, _ in pairs(lg.codici) do&lt;br /&gt;
        alias_table[code] = {&amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. code .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot;}&lt;br /&gt;
        codici_sorted[#codici_sorted+1] = code&lt;br /&gt;
    end&lt;br /&gt;
    for alias, code in pairs(lg.alias) do&lt;br /&gt;
        if alias_table[code] then table.insert(alias_table[code], alias) end&lt;br /&gt;
    end&lt;br /&gt;
    table.sort(codici_sorted)&lt;br /&gt;
&lt;br /&gt;
    local root = mw.html.create(&amp;#039;table&amp;#039;)&lt;br /&gt;
    root&lt;br /&gt;
        :addClass(&amp;#039;wikitable sortable&amp;#039;)&lt;br /&gt;
        :tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
            :tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Codici&amp;#039;):done()&lt;br /&gt;
            :tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;[[template:Nomelingua/nome]]&amp;#039;):done()&lt;br /&gt;
            :tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;[[template:Nomelingua/voce]]&amp;#039;):done()&lt;br /&gt;
            :tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;[[template:Lingue]]&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    for _,code in ipairs(codici_sorted) do&lt;br /&gt;
        local code_string = table.concat(alias_table[code], &amp;quot;, &amp;quot;)&lt;br /&gt;
        local nome, voce = language.get_nome(code), language.get_voce(code)&lt;br /&gt;
        if voce ~= &amp;#039;&amp;#039; then voce = &amp;#039;[[&amp;#039; .. voce .. &amp;#039;]]&amp;#039; end&lt;br /&gt;
        root&lt;br /&gt;
            :tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
                :tag(&amp;#039;td&amp;#039;):wikitext(code_string):done()&lt;br /&gt;
                :tag(&amp;#039;td&amp;#039;):wikitext(nome):done()&lt;br /&gt;
                :tag(&amp;#039;td&amp;#039;):wikitext(voce):done()&lt;br /&gt;
                :tag(&amp;#039;td&amp;#039;):css(&amp;#039;text-align&amp;#039;, &amp;#039;center&amp;#039;):wikitext(language.lingue({code}))&lt;br /&gt;
    end&lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce una tabella degli alias in formato alias;codice&lt;br /&gt;
function language.tabella_alias(frame)&lt;br /&gt;
&lt;br /&gt;
    local root = mw.html.create(&amp;#039;table&amp;#039;)&lt;br /&gt;
    root&lt;br /&gt;
        :addClass(&amp;#039;wikitable sortable&amp;#039;)&lt;br /&gt;
        :tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
            :tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Alias&amp;#039;):done()&lt;br /&gt;
            :tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;codice&amp;#039;):done()&lt;br /&gt;
    for alias, code in pairs(lg.alias) do&lt;br /&gt;
        root&lt;br /&gt;
            :tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
                :tag(&amp;#039;td&amp;#039;):wikitext(alias):done()&lt;br /&gt;
                :tag(&amp;#039;td&amp;#039;):wikitext(code)&lt;br /&gt;
    end&lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce una tabella dei codici in formato codice;nome;voce&lt;br /&gt;
function language.tabella_codici(frame)&lt;br /&gt;
&lt;br /&gt;
    local root = mw.html.create(&amp;#039;table&amp;#039;)&lt;br /&gt;
    root&lt;br /&gt;
        :addClass(&amp;#039;wikitable sortable&amp;#039;)&lt;br /&gt;
        :tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
            :tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Codice&amp;#039;):done()&lt;br /&gt;
            :tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Nome&amp;#039;):done()&lt;br /&gt;
            :tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Voce&amp;#039;):done()&lt;br /&gt;
    for code, valore in pairs(lg.codici) do&lt;br /&gt;
        root&lt;br /&gt;
            :tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
                :tag(&amp;#039;td&amp;#039;):wikitext(code):done()&lt;br /&gt;
                :tag(&amp;#039;td&amp;#039;):wikitext(valore[1]):done()&lt;br /&gt;
                :tag(&amp;#039;td&amp;#039;):wikitext(valore[2])&lt;br /&gt;
    end&lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ritorna una whitelist di tutti i codici riconosciuti ad uso bot in python&lt;br /&gt;
function language.whitelist(frame)&lt;br /&gt;
    local rows = { &amp;#039;WHITELIST_LINGUE = set( [&amp;#039; }&lt;br /&gt;
    -- genera una tabella codici -&amp;gt; lista alias e una di codici per ordinarla&lt;br /&gt;
    local codici = {}&lt;br /&gt;
    for code, _ in pairs(lg.codici) do&lt;br /&gt;
        codici[#codici+1] = code&lt;br /&gt;
    end&lt;br /&gt;
    for alias, _ in pairs(lg.alias) do&lt;br /&gt;
        codici[#alias+1] = alias&lt;br /&gt;
    end&lt;br /&gt;
    table.sort(codici)&lt;br /&gt;
    for _, codice in ipairs(codici) do&lt;br /&gt;
        rows[#rows+1] = &amp;quot;    &amp;#039;&amp;quot; .. codice ..&amp;quot;&amp;#039;,&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    rows[#rows+1] = &amp;quot;])&amp;quot;&lt;br /&gt;
    return table.concat(rows, &amp;#039;\n&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return language&lt;/div&gt;</summary>
		<author><name>عبد العزيز</name></author>
	</entry>
</feed>