Dokumentation för denna modul finns på /dok (redigera), /test
Modulens syfte är att bistå andra moduler med språkinformation. Att konvertera mellan språk och språkkod, ge information om sorteringsregler för olika språk och ge information om vilket skript språket använder.
Den här modulen används av alla uppslagssidor. Efter varje redigering här eller på Modul:lang/data måste åtminstone 3 test genomföras (samtyck till "Rensa denna sidas cache?
"):
Den här modulen innehåller flera undersidor: Special:PrefixIndex/Modul:lang/
Den här modulen används av andra moduler (till exempel Modul:tagg). Det går inte att anropa den direkt från mallar eftersom den förväntar sig "nakna" värden (oftast sträng), medan mallar "förpackar" alla parametrar i en tabell. Det finns en liten hjälpmodul Modul:langfortemplate som kan anropas från mallar och ger åtkomst till funktioner "getCode", "getLanguage" och "getLanguageUCFirst".
local lang = require("Modul:lang") local swedish_language_code = lang.getCode("Svenska") local finnish_language_name = lang.getLanguage("fi") local finnish_language_name_first_letter_capitalized = lang.getLanguageUCFirst("fi") local swedish_sort_rules_table = lang.getSortRules("sv") local is_svenska_a_language_name = (lang.getCode("svenska")~="xx") local is_sv_a_language_code = lang.hasLanguage("sv") local is_h_smi_a_language_including_etymology_code = lang.hasLanguage("h_smi","alsoetym")
Extra parameter styr hantering av dessa koder:
Påverkade funktioner är "hasLanguage", "getCode", "getLanguage", "getLanguageUCFirst" och "exportList".
okänd språkkod "svenska"
till förmån för uppenbarligen ogiltig språkkod "svenska"
Denna funktion avser exempelvis funktionalitet som för närvarande finns i {{ö}}
och {{ö+}}
genom sin skrift=-parameter som i sin tur anropar skriftmallarna (som inleds med ett plustecken i Kategori:Wiktionary:Grafiska mallar). Modul:lang/data är inte försedd med den här informationen ännu.
All tests passed. (refresh)
Text | Expected | Actual | |
---|---|---|---|
mut.hasLanguage("sv") | true | true | |
mut.hasLanguage("xx") | false | false | |
mut.hasLanguage("xyz") | false | false |
Text | Expected | Actual | |
---|---|---|---|
mut.getCode("sv") | xx | xx | |
mut.getCode("sV") | xx | xx | |
mut.getCode("svenska") | sv | sv | |
mut.getCode("Svenska") | sv | sv | |
mut.getCode("Älvdalska") | ovd | ovd | |
mut.getCode("ESPERANTO") | eo | eo | |
mut.getCode("norska") | xx | xx | |
mut.getCode("norska","alsoetym") | h-nor | h-nor | |
mut.getCode("samiska","onlyetym") | h-smi | h-smi | |
mut.getCode("engelska","onlyetym") | xx | xx |
Text | Expected | Actual | |
---|---|---|---|
mut.getLanguage("sv") | svenska | svenska | |
mut.getLanguage("sV") | okänt språk | okänt språk | |
mut.getLanguage("svenska") | okänt språk | okänt språk | |
mut.getLanguage("Svenska") | okänt språk | okänt språk | |
mut.getLanguage("ovd") | älvdalska | älvdalska | |
mut.getLanguageUCFirst("ovd") | Älvdalska | Älvdalska | |
mut.getLanguage("nn") | nynorska | nynorska | |
mut.getLanguage("h-nor") | okänt språk | okänt språk | |
mut.getLanguage("h-nor","alsoetym") | norska | norska |
Text | Expected | Actual |
---|
Text | Expected | Actual | |
---|---|---|---|
mut.getSortRules("sv") | {"å>z~", "ä>z¡", "ö>z°", "ü>y", "æ>z¡", "ø>z°"} | {"å>z~", "ä>z¡", "ö>z°", "ü>y", "æ>z¡", "ø>z°"} | |
mut.getSortRules("xx") | {} | {} | |
mut.getSortRules("notfound") | {} | {} |
Text | Expected | Actual | |
---|---|---|---|
mut.isObviouslyInvalid("sv") | false | false | |
mut.isObviouslyInvalid("Sv") | true | true | |
mut.isObviouslyInvalid("jav") | false | false | |
mut.isObviouslyInvalid("ido") | true | true | |
mut.isObviouslyInvalid("xx") | true | true | |
mut.isObviouslyInvalid("--") | false | false | |
mut.isObviouslyInvalid("a") | true | true | |
mut.isObviouslyInvalid("zh-min-nan") | false | false | |
mut.isObviouslyInvalid("zh-min+nan") | true | true | |
mut.isObviouslyInvalid("zh-min-n-n") | true | true | |
mut.isObviouslyInvalid("zuh-min-nan") | true | true | |
mut.isObviouslyInvalid("h-smi") | false | false | |
mut.isObviouslyInvalid("lak") | false | false | |
mut.isObviouslyInvalid("spanska") | true | true | |
mut.isObviouslyInvalid("indonesiska") | true | true |
Text | Expected | Actual | |
---|---|---|---|
mut.getEntryName("ab", "а-бҳәа́") | а-бҳәа | а-бҳәа | |
mut.getEntryName("la", "abdērītānus") | abderitanus | abderitanus | |
mut.getEntryName("lt", "abãtė") | abatė | abatė | |
mut.getEntryName("lt", "abažū̃ras") | abažūras | abažūras | |
mut.getEntryName("se", "boaš'šu") | boaššu | boaššu | |
mut.getEntryName("ru", "автомотри́са") | автомотриса | автомотриса | |
mut.getEntryName("sr", "ја̏се̄н") | јасен | јасен | |
mut.getEntryName("zu", "dlâla") | dlala | dlala | |
mut.getEntryName("zu", "ī́sele") | isele | isele |
Text | Expected | Actual | |
---|---|---|---|
mut.getEntryName("ur", "آدرنیہ,") | آدرنیہ | آدرنیہ | |
mut.getEntryName("ur", "آزمودہ,") | آزمودہ | آزمودہ | |
mut.getEntryName("ur", "آشچریہ,") | آشچریہ | آشچریہ | |
mut.getEntryName("he", "אֵין") | אין | אין | |
mut.getEntryName("he", "אֵינְסוֹף") | אינסוף | אינסוף | |
mut.getEntryName("he", "יֵשׁ") | יש | יש | |
mut.getEntryName("he", "עֶצֶם") | עצם | עצם | |
mut.getEntryName("he", "אִם וְרַק אִם") | אם ורק אם | אם ורק אם | |
mut.getEntryName("ar", "أَرِسْطُو") | أرسطو | أرسطو | |
mut.getEntryName("ar", "إِبِيقُورِيّ") | إبيقوري | إبيقوري | |
mut.getEntryName("ar", "اِخْتِيَار") | اختيار | اختيار | |
mut.getEntryName("ar", "تَعَدُّدُ الْقُدَماءِ") | تعدد القدماء | تعدد القدماء | |
mut.getEntryName("ar", "تَنْوِير") | تنوير | تنوير |
local export = {}
local lang_both = mw.loadData("Modul:lang/data")
lang_objects = lang_both
lang_reversed = lang_both
local function ucFirst(str)
return mw.ustring.gsub(str, "^%l", mw.ustring.upper)
end
function export.hasLanguage(lng_code, scope_string)
local lang_obj = lang_objects or {} -- risk of type "nil"
local code_is_valid = (type(lang_obj.name)=="string") -- preliminary verdict
local is_etym_only_code = not (not lang_obj.nolemma) -- make sure to get boolean
local take_etym_code = (scope_string=="alsoetym") or (scope_string=="onlyetym")
local take_lemma_code = not (scope_string=="onlyetym")
if (is_etym_only_code and (not take_etym_code)) or ((not is_etym_only_code) and (not take_lemma_code)) then
code_is_valid = false
end
return code_is_valid
end
function export.getCode(lng_name, scope_string)
local lowercase_lng_name = mw.ustring.lower(lng_name)
local found_code = lang_reversed or "xx" -- preliminary verdict
if not export.hasLanguage(found_code, scope_string) then
found_code = "xx"
end
return found_code
end
function export.getLanguage(lng_code, scope_string)
local lang_obj = {}
local lang_name = ''
if export.hasLanguage(lng_code, scope_string) then
lang_obj = lang_objects or {} -- risk of type "nil"
lang_name = lang_obj.name or "okänt språk" -- risk of type "nil"
else
lang_name = "okänt språk"
end
return lang_name
end
function export.getLanguageUCFirst(lng_code, scope_string)
return ucFirst(export.getLanguage(lng_code, scope_string))
end
function export.getSortRules(lng_code)
local lang_obj = lang_objects or {sort_rules = {}}
local sort_rules = lang_obj.sort_rules or {}
return sort_rules
end
--intended temp function for {{kategorilistenavigering}} until it has its own module but never used
function export.getSortRulesAsString(frame)
local lng_code = frame.args
local sort_rules = {}
for k,v in ipairs(export.getSortRules(lng_code)) do
sort_rules = v
end
return table.concat(sort_rules, ",")
end
function export.getScriptCode(lng_code)
local lang_obj = lang_objects or {script = ""}
local script = lang_obj.script or ""
return script
end
local const_is_banned = {}
const_is_banned = {'by','dc','sh','ll','jp','xx','art','cmn','deu','eng','epo','fra','gem','ger','gmq-bot','ido','lat','por','rus','spa','swe','tup','zxx'}
-- "en.wiktionary.orghttps://dictious.com/sv/Wiktionary:Language_treatment" excluded languages
-- "en.wikipedia.orghttps://dictious.com/sv/Spurious_languages"
-- "iso639-3.sil.org/code/art" only valid in ISO 639-2
-- "iso639-3.sil.org/code/zxx" "No linguistic content"
function export.isObviouslyInvalid (incoming_code)
local var_temp = 0
local code_is_bad = false -- pre-assume good
local numchiiar = 0
local code_length = 0
local found_dashes = 0
local consecutive_chars = 0
local numindeex = 0
incoming_code = incoming_code or ""
while (true) do -- fake outer loop
code_length = string.len (incoming_code)
if ((code_length<2) or (code_length>10)) then
code_is_bad = true -- here "spanska" will pass whereas "indonesiska" gets caught
break -- invalid length
end--if
while (true) do
if (numindeex==code_length) then
break
end--if
numchiiar = string.byte (incoming_code,(numindeex+1),(numindeex+1))
if (numchiiar==45) then -- dash "-"
consecutive_chars = 0
found_dashes = found_dashes + 1
if (found_dashes==3) then
code_is_bad = true
break -- more than 2 dashes
end--if
else
if ((numchiiar<97) or (numchiiar>122)) then
code_is_bad = true
break -- not lowercase ASCII letter
end--if
consecutive_chars = consecutive_chars + 1
if (consecutive_chars==4) then
code_is_bad = true
break -- here even "spanska" gets caught but "lak" and "ido" still pass
end--if
end--if -- (numchiiar==45) else branch
numindeex = numindeex + 1 -- ZERO-based
end--while
if (code_is_bad) then
break
end--if
numindeex = 0
while (true) do
var_temp = const_is_banned
if (type(var_temp)~="string") then
break -- end of table
end--if
if (incoming_code==var_temp) then
code_is_bad = true -- here "ido" gets caught
break -- banned code
end--if
numindeex = numindeex + 1 -- ZERO-based
end--while
break
end--while
return code_is_bad
end
function export.getEntryName(lng_code, text)
local lang_obj = lang_objects or {} -- risk of nil
local entry_name_rules = lang_obj.entry_name or {from = {}, to = {}}
for i, from in ipairs(entry_name_rules.from) do
local to = entry_name_rules.to or ""
text = mw.ustring.gsub(text, from, to)
end
return text
end
function export.exportList(scope_string)
local list_of_codes = {}
for lng_code, unused_var in pairs(lang_objects) do
if export.hasLanguage(lng_code, scope_string) then
list_of_codes = lng_code
end
end
return list_of_codes
end
return export