Ten moduł jest klasyfikowany jako gotowy do użytku ogólnego. Osiągnął „dojrzałą” formę, jest uważany za wolny od błędów i gotowy do użycia wszędzie tam, gdzie to właściwe. Jest gotowy do omówienia na stronach pomocy i w innych zasobach Wikibooks jako nowa opcja do nauki dla nowych użytkowników. Aby zmniejszyć obciążenie serwera i uniknąć nieprawidłowych wyników wyjściowych, testy powinny być przeprowadzane brudnopisach, zamiast edycji metodą prób i błędów.
Moduł techniczny do obsługi kodów językowych.
istnieje
Funkcja sprawdzająca czy dla podanego kodu języka istnieje wpis w module danych z danymi opisowymi. Jeśli dane istnieją, to wynikiem jest rozpoznany kod języka, w przeciwnym razie funkcja zwraca pusty tekst.
Funkcja zwracająca wikikod kursywy ('') jeśli język o podanym kodzie zapisywany jest łacińskim alfabetem. Wspiera ona działanie szablonu {{w języku}} oraz funkcji {{#invoke:Wikidane|P}} dla cech, których typ to Tekst jednojęzyczny.
locallang={}localfunctionlangData(code)ifnotcodeor(#code==0)then-- brak kodu języka--mw.log("Pusty kod języka: "..code);returnendlocaldata=mw.loadData('Module:lang/data')-- bezbłędny kodlocallang=data[code]iflangthenreturnlang,codeend-- może kod jest podany dużymi literami lub ma spacje przed i polocallcode=mw.text.trim(string.lower(code))-- dobre kody języka są tylko w ASCIIlang=data[lcode]iflangthen--mw.log('kod "'..code..'" został zamieniony na "'..lcode..'"')returnlang,lcodeend-- może kod jest podany z variantemlocalscode,vcode=string.match(code,"%s*([a-zA-Z]+)%-([^%s]+)%s*$")ifnotscodethenscode,vcode=string.match(code,"%s*([a-zA-Z]+)_([^%s]+)%s*$")endifscodethen--mw.log('kod "'..code..'" został rozdzielony na "'..scode..'" i wariant "'..vcode..'"')lang=data[scode]ifnotlangthen--mw.log('kod "'..scode..'" został zamieniony na "'..string.lower(scode)..'"')scode=string.lower(scode)lang=data[scode]endiflangthen-- test variantiflang.wariantythenlocallvcode=string.lower(vcode)fork,vinpairs(lang.warianty)doif(type(k)=="number")and(type(v)=="string")and(lvcode==string.lower(v))then--mw.log('kod "'..code..'" w formie kanonicznej "'..scode..'-'..v..'"')returnlang,scode,scode.."-"..velseif(type(k)=="string")and(type(v)=="table")and(lvcode==string.lower(k))then--mw.log('zindywizualizowany kod "'..code..'" w formie kanonicznej "'..scode..'-'..k..'"')localfields={"hasło","mianownik","dopełniacz","miejscownik","skrót"}localvlang={}for_,finipairs(fields)dovlang[f]=v[f]orlang[f]endreturnvlang,scode,scode.."-"..kendendend--mw.log('kod "'..code..'" z nieznanym wariantem')returnlang,scodeendend-- poddaje się--mw.log('Nieznany kod języka: "'..code..'"');returnfalse,codeendfunctionlang.istnieje(frame)locallanguageData,code,_=langData(frame.args[1])returnlanguageDataandcodeornilendfunctionlang.kursywa(frame)locallangCode=frame.args[1]locallanguageData,code,_=langData(langCode)iflangCodeand(langCode~=code)andstring.match(langCode,"^%a+%-[Ll][Aa][Tt][Nn]$")orstring.match(langCode,"^%a+%-[Ll][Aa][Tt][Nn]%-")then-- Latn scriptreturn"''"endreturn(languageDataand(languageData.kursywa~=false))and"''"or""endlang["hasło"]=function(frame)locallanguageData,_,_=langData(frame.args[1])returnlanguageData['hasło']endlang["skrót"]=function(frame)locallanguageData,_,_=langData(frame.args[1])returnlanguageData['skrót']orlanguageData['mianownik']endfunctionlang.mianownik(frame)locallanguageData,_,_=langData(frame.args[1])returnlanguageData['mianownik']endlang["dopełniacz"]=function(frame)locallanguageData,_,_=langData(frame.args[1])returnlanguageData['dopełniacz']endlang["dopełniacz?"]=function(frame)locallanguageData,_,_=langData(frame.args[1])returnlanguageDataandlanguageData['dopełniacz']ornilendfunctionlang.miejscownik(frame)locallanguageData,_,_=langData(frame.args[1])returnlanguageData['miejscownik']endlang["miejscownik?"]=function(frame)locallanguageData,_,_=langData(frame.args[1])returnlanguageDataandlanguageData['miejscownik']ornilendfunctionlist(frame,multi,showPL)-- konwersja kodów języków na kod wiki text opisujący kodylocalitems={}-- tabela na skonwertowane kody-- flagi informujące, że na liście znajdują się podejrzane kodylocalinvalid=false-- nieznany kod językalocalwarning=false-- język z listy częstych błędówlocalhiddenpl=false-- ukryty język polskilocalmodified=false-- kod języka z automatyczną korektąlocalduplicated=false-- wielokrotnie podany (prawie) taki sam kod językalocalargs=frame.args;ifnotargs[1]then-- brak argumentów sugeruje wywołanie z szablonulocalparent=frame.getParentandframe:getParent()ornilifparentthenargs=parent.argsendendifnotargs[1]thenreturn"<span style=\"color:red\">'''Błąd! Brak kodu języka.'''</span>"end-- języki wpadające do [[Kategoria:Częste błędy kodu w szablonie lang]]localwarnings={ee=true,am=true,an=true,ang=true,ng=true,kr=true,se=true,si=true}localformatLanguageItem=function(langCode,languageData,alt)localclass=altand"lang-link-warning"or""if#class>0thenclass='class="'..class..'"'endlocalskrot=languageData['skrót']orlanguageData['mianownik']localnativeName=mw.language.fetchLanguageName(langCode)ifnativeNameand#nativeName>0andlangCode~="pl"thenreturnstring.format("<abbr %s title=\"Treść w języku %s (%s)\">%s</abbr>",class,languageData['miejscownik'],nativeName,skrot)elsereturnstring.format("<abbr %s title=\"Treść w języku %s\">%s</abbr>",class,languageData['miejscownik'],skrot)endendlocalparsedLanguages={}localcountGood=0localformatItem=function(languageCode)locallanguageData,langCode,langTag=langData(languageCode)localaltFormat=falseiflangCodeand(languageCode~=langCode)thenaltFormat=languageCode~=langTagmodified=modifiedoraltFormatendiflanguageDatathenifwarnings[langCode]thenwarning=trueendlocalitem=formatLanguageItem(langCode,languageData,altFormat)ifparsedLanguages[langCode]thenduplicated=true--mw.log("Powtórne przywołanie języka ("..languageCode..")")elseparsedLanguages[langCode]=item;if(langCode=="pl")andnotshowPLthen-- pomiń język polskihiddenpl=true--mw.log("Ukrywam język polski")elsetable.insert(items,item)countGood=countGood+1endendelseifnotlangCodeor#langCode==0thenif#items==0then-- pierwszy kod nie może być pusty, reszta może, bo jest przekazywana jako pusta w szablonach cytowaniainvalid=truetable.insert(items,"<span style=\"color:red\">'''Błąd! Brak kodu języka.'''</span>")endelseinvalid=truelocalitem=string.format("<span style=\"color:red\">'''Błąd! Nieznany kod języka: %s. Sprawdź [[w:Pomoc:Interwiki|listę kodów]].'''</span>",languageCode)ifparsedLanguages[languageCode]thenduplicated=true--mw.log("Powtórne przywołanie języka ("..languageCode..")")elseparsedLanguages[languageCode]=item;table.insert(items,item)endendendifargs[2]ormultithen-- wiele argumentów sugeruje przekazywnie każdego kodu języka w oddzielnych argumentachfori,vinipairs(args)doif#v>0thenformatItem(v)endendelse-- jeden argument pozwala także wysłać wszystkie kody oddzielone spacjąforlanguageCodeinstring.gmatch(args[1],"%S+")doformatItem(languageCode)endendif#items==0thenifhiddenplthen-- podano tylko język polski, który jest ukrytyelse-- pusta lista kodówinvalid=truetable.insert(items,"<span style=\"color:red\">'''Błąd! Brak kodu języka.'''</span>")endend-- ostateczne formatowanie wynikulocalresult={}if#items>0thenif(countGood>0)andhiddenplthen-- przywracam język polski jeśli lista zawiera więcej niż jeden język table.insert(items,1,parsedLanguages.pl)hiddenpl=falseendtable.insert(result,'<span class="lang-list')if(#items==1)andparsedLanguages.plthentable.insert(result," tylko-pl")endtable.insert(result,'">(')table.insert(result,table.concat(items," • "))table.insert(result,")</span>")endlocalframe_modolu=mw.getCurrentFrame();localparametry_modul=require("Module:Parametry");localp=parametry_modul.PobierzFrameEwentualnieParent(frame_modolu);if(notparametry_modul.CzyTak(frame.args["bez kategorii"]orframe_modolu.args["bez kategorii"]orp.args["bez kategorii"])and(warningorinvalidorhiddenplor(modifiedorduplicated)))thenlocaltypes;localframe2=p:newChild{args={["obsługiwane jednostki jako nieopisowe strony"]="tak"}}localtyp_jednostki=require("Module:Pudełko")["Typ jednostki 2"](frame2)if(typ_jednostki=="artykuł")thentypes="(artykuły)"elseif(typ_jednostki=="artykuł dla dzieci")thentypes="(artykuły dla dzieci)"elseif(typ_jednostki=="strona użytkownika")thentypes="(strony użytkowników)"elseif(typ_jednostki=="strona brudnopisu projektu")thentypes="(strony brudnopisu projektu)"elsetypes="(strony niepodręcznikowe)"end;ifwarningthentable.insert(result,"[[Kategoria:Częste błędy kodu "..types.." w szablonie lang]]")endifinvalidthentable.insert(result,"[[Kategoria:Nierozpoznany kod języka "..types.." w szablonie lang]]")endifhiddenplthentable.insert(result,"[[Kategoria:Szablon lang "..types.." z ukrytym językiem polskim]]")endifmodifiedorduplicatedthentable.insert(result,"[[Kategoria:Szablon lang "..types.." z kodem języka wymagającym poprawki]]")endendreturntable.concat(result,"")endfunctionlang.lang(frame)returnlist(frame,true,true)endlang["język"]=function(frame)returnlist(frame,false,true)endreturnlang