Modul:lang

Definition från Wiktionary, den fria ordlistan.
Hoppa till navigering Hoppa till sök

Dokumentation för denna modul finns på /dok (redigera), /test


Syfte[redigera]

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.

Användning[redigera]

Den här modulen bör bara användas av andra moduler, inte direkt från mallar.
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.hasLanguage("svenska")
local is_sv_a_language_code = lang.hasLanguage("sv")

Specifikation[redigera]

getCode
1= Språkkod eller språknamn, inte skiftlägeskänsligt
Returnerar språkkoden.
Default-värde: "xx".
getLanguage
1= Språkkod eller språknamn, inte skiftlägeskänsligt
Returnerar språknamnet, alla gemener.
Default-värde: "okänt språk".
getLanguageUCFirst
1= Språkkod eller språknamn, inte skiftlägeskänsligt
Returnerar språknamnet, versaliserad första bokstav, resterande gemener.
Default-värde: "Okänt språk".
getSortRules
1= Språkkod eller språknamn, inte skiftlägeskänsligt
Returnerar sorteringsreglerna språket, se nedan.
Default-värde: {}.
getScriptCode data saknas för närvarande, så funktionen kommer alltid att returnera defaultvärdet.
1= Språkkod eller språknamn, inte skiftlägeskänsligt
Returnerar skriften för språket.
Default-värde: "".
getEntryName
1= Språkkod eller språknamn, inte skiftlägeskänsligt
2= Ordet med (eller utan) diakriter
Returnerar ordet utan diakriter (lämpligt som sidnamn och vanliga länkar, med diakriter på fetstilsrad, i översättningar och i grammatiktabeller)
hasLanguage
1= Språkkod eller språknamn, inte skiftlägeskänsligt
Returnerar ett booleskt värde för om språkobjektet kan hittas för språket.
Default-värde: false.

Sorteringsregler[redigera]

Normalt sorteras sidor i kategorierna efter den ordning som Unicode bestämmer En mer exakt beskrivning hade varit önskad här.. Det innebär exempelvis att "ä och ö" sorteras före "å", vilket inte är rätt för svenska uppslag. För andra språk gäller angra regler. Sorteringsreglerna för respektive språk anges i en lista bestående av element på formen "enstaka tecken eller en sekvens av tecken att sortera som något annat>hur tecknet eller tecknen ska sorteras istället". För att ange hur tecken ska sorteras relativt andra tecken, används tecknena ~, ¡, °, ² och ³
  • a~ betyder "sortera efter a"
  • a¡ betyder "sortera efter a~"
  • a° betyder "sortera efter a¡"
  • a² betyder "sortera efter a°"
  • a³ betyder "sortera efter a²"
Så här ser t.ex. sorteringsreglerna ut för svenska: {"å>z~", "ä>z¡", "ö>z°", "ü>y", "æ>z¡", "ø>z°"}.
Ibland kan det vara två eller till och med tre tecken som sorteras ihop som ett tecken, t.ex. i ungerska: {"cs>c~", "dz>d~", "dzs>d¡", "gy>g~", "ly>l~", "ny>n~", "ö>o~", "sz>s~", "ty>t~", "ü>u~", "zs>z~", "ő>o~", "ű>u~"}.

Skrifter[redigera]

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.

Tester[redigera]

1 test failed. (refresh)

Text Expected Actual
test01_get_code:
Passed mut.getCode("sv") sv sv
Passed mut.getCode("svenska") sv sv
Passed mut.getCode("Svenska") sv sv
Passed mut.getCode("Älvdalska") ovd ovd
Text Expected Actual
test02_get_language:
Passed mut.getLanguage("sv") svenska svenska
Passed mut.getLanguage("svenska") svenska svenska
Passed mut.getLanguage("Svenska") svenska svenska
Passed mut.getLanguage("ovd") älvdalska älvdalska
Passed mut.getLanguageUCFirst("ovd") Älvdalska Älvdalska
Text Expected Actual
test03_get_script:
Failed mut.getScriptCode("ar") arab
Passed mut.getScriptCode("xx")
Passed mut.getScriptCode("notfound")
Text Expected Actual
test04_get_sort_rules:
Passed mut.getSortRules("sv") {"å>z~", "ä>z¡", "ö>z°", "ü>y", "æ>z¡", "ø>z°"} {"å>z~", "ä>z¡", "ö>z°", "ü>y", "æ>z¡", "ø>z°"}
Passed mut.getSortRules("xx") {} {}
Passed mut.getSortRules("notfound") {} {}
Text Expected Actual
test05_has_language:
Passed mut.hasLanguage("sv") true true
Passed mut.hasLanguage("xx") false false
Passed mut.hasLanguage("xyz") false false
Text Expected Actual
test06_get_entry_name:
Passed mut.getEntryName("ab", "а-бҳәа́") а-бҳәа а-бҳәа
Passed mut.getEntryName("la", "abdērītānus") abderitanus abderitanus
Passed mut.getEntryName("lt", "abãtė") abatė abatė
Passed mut.getEntryName("lt", "abažū̃ras") abažūras abažūras
Passed mut.getEntryName("se", "boaš'šu") boaššu boaššu
Passed mut.getEntryName("ru", "автомотри́са") автомотриса автомотриса
Passed mut.getEntryName("sr", "ја̏се̄н") јасен јасен
Passed mut.getEntryName("zu", "dlâla") dlala dlala
Passed mut.getEntryName("zu", "ī́sele") isele isele
Text Expected Actual
test07_get_entry_name_rtl:
Passed mut.getEntryName("ur", "آدرنیہ,") آدرنیہ آدرنیہ
Passed mut.getEntryName("ur", "آزمودہ,") آزمودہ آزمودہ
Passed mut.getEntryName("ur", "آشچریہ,") آشچریہ آشچریہ
Passed mut.getEntryName("he", "אֵין") אין אין
Passed mut.getEntryName("he", "אֵינְסוֹף") אינסוף אינסוף
Passed mut.getEntryName("he", "יֵשׁ") יש יש
Passed mut.getEntryName("he", "עֶצֶם") עצם עצם
Passed mut.getEntryName("he", "אִם וְרַק אִם") אם ורק אם אם ורק אם
Passed mut.getEntryName("ar", "أَرِسْطُو") أرسطو أرسطو
Passed mut.getEntryName("ar", "إِبِيقُورِيّ") إبيقوري إبيقوري
Passed mut.getEntryName("ar", "اِخْتِيَار") اختيار اختيار
Passed mut.getEntryName("ar", "تَعَدُّدُ الْقُدَماءِ") تعدد القدماء تعدد القدماء
Passed mut.getEntryName("ar", "تَنْوِير") تنوير تنوير


local export = {}
local lang_objects = mw.loadData("Modul:lang/data")

local function ucFirst(str)
	return mw.ustring.gsub(str, "^%l", mw.ustring.upper)
end

function export.getCode(code_or_name)
	local lowercase_code_or_name = mw.ustring.lower(code_or_name)
	local lang_obj = lang_objects[lowercase_code_or_name] or {code = "xx"}
	return lang_obj.code
end

function export.getLanguage(code_or_name)
	local lowercase_code_or_name = mw.ustring.lower(code_or_name)
	local lang_obj = lang_objects[lowercase_code_or_name] or {name = "okänt språk"}
	local name = lang_obj.name
	return name
end

function export.getLanguageUCFirst(code_or_name)
	return ucFirst(export.getLanguage(code_or_name))
end

function export.getSortRules(code_or_name)
	local lowercase_code_or_name = mw.ustring.lower(code_or_name)
	local lang_obj = lang_objects[lowercase_code_or_name] or {sort_rules = {}}
	local sort_rules = lang_obj.sort_rules or {}
	return sort_rules
end

--temp function for {{kategorilistenavigering}} until it has its own module
function export.getSortRulesAsString(frame)
	local code_or_name = frame.args[1]
	local sort_rules = {}
	for k,v in ipairs(export.getSortRules(code_or_name)) do
		sort_rules[#sort_rules + 1] = v
	end
	return table.concat(sort_rules, ",")
end

function export.getScriptCode(code_or_name)
	local lowercase_code_or_name = mw.ustring.lower(code_or_name)
	local lang_obj = lang_objects[lowercase_code_or_name] or {script = ""}
	local script = lang_obj.script or ""
	return script
end

function export.hasLanguage(code_or_name)
	local lowercase_code_or_name = mw.ustring.lower(code_or_name)
	local lang_obj = lang_objects[lowercase_code_or_name] or {code = "xx"}
	local has_language = (lang_obj.code ~= "xx")
	return has_language
end

function export.getEntryName(lang_code_or_name, text)
	local lowercase_code_or_name = mw.ustring.lower(lang_code_or_name)
	local lang_obj = lang_objects[lowercase_code_or_name] or {code = "xx"}
	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[i] or ""
		text = mw.ustring.gsub(text, from, to)
	end

	return text	
end

return export