Modul:Geburtsort

Version vom 4. Oktober 2025, 09:25 Uhr von Bunnyfreak (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „-- Modul:Geburtsort -- Verarbeitet ein Feld "Stadt, Land" zu: -- Anzeige: Stadt[, Land] (beides automatisch verlinkt, falls Seite existiert) -- Kategorien: [[Kategorie:Geboren in <Stadt>]] + [[Kategorie:Geboren in <Land (gebeugt)>]] -- Benutzung in Vorlage: {{#invoke:Geburtsort|render|value={{{Geburtsort|}}}}} local p = {} local trim = mw.text.trim local lc = mw.ustring.lower -- Helper: Link, wenn Seite existiert, sonst Plaintext local function linkI…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Die Dokumentation für dieses Modul kann unter Modul:Geburtsort/Doku erstellt werden

-- Modul:Geburtsort
-- Verarbeitet ein Feld "Stadt, Land" zu:
-- Anzeige: Stadt[, Land] (beides automatisch verlinkt, falls Seite existiert)
-- Kategorien: [[Kategorie:Geboren in <Stadt>]] + [[Kategorie:Geboren in <Land (gebeugt)>]]
-- Benutzung in Vorlage: {{#invoke:Geburtsort|render|value={{{Geburtsort|}}}}}

local p = {}

local trim = mw.text.trim
local lc   = mw.ustring.lower

-- Helper: Link, wenn Seite existiert, sonst Plaintext
local function linkIfExists(titleText)
	if not titleText or titleText == "" then return "" end
	local title = mw.title.new(titleText)
	if title and title.exists then
		return string.format("[[%s]]", titleText)
	end
	return titleText
end

-- Normalisierung von Ländernamen (Eingabe → kanonischer Name)
local countryNormalize = (function()
	local t = {}
	local function add(canonical, variants)
		for _, v in ipairs(variants) do t[lc(v)] = canonical end
	end
	add("Deutschland", {"Deutschland","BRD","deutschland"})
	add("USA", {"USA","Vereinigte Staaten","United States","US","Amerika","US-Amerika","vereinigte staaten"})
	add("Großbritannien", {"Großbritannien","Grossbritannien","Vereinigtes Königreich","United Kingdom","UK","England","gb"})
	add("Österreich", {"Österreich","Oesterreich","österreich","oesterreich"})
	add("Schweiz", {"Schweiz"})
	add("Frankreich", {"Frankreich"})
	add("Italien", {"Italien"})
	add("Spanien", {"Spanien"})
	add("Niederlande", {"Niederlande","Holland"})
	add("Kanada", {"Kanada"})
	add("Belgien", {"Belgien"})
	add("Dänemark", {"Dänemark","Daenemark"})
	add("Schweden", {"Schweden"})
	add("Norwegen", {"Norwegen"})
	return t
end)()

-- Länderkategorie-Text nach kanonischem Namen (mit korrekter Beugung)
-- Wert ist der komplette sichtbare Text NACH "Geboren in "
local countryCatSuffix = {
	["Deutschland"]    = "Deutschland",
	["USA"]            = "den USA",
	["Großbritannien"] = "Großbritannien",
	["Österreich"]     = "Österreich",
	["Schweiz"]        = "der Schweiz",
	["Frankreich"]     = "Frankreich",
	["Italien"]        = "Italien",
	["Spanien"]        = "Spanien",
	["Niederlande"]    = "den Niederlanden",
	["Kanada"]         = "Kanada",
	["Belgien"]        = "Belgien",
	["Dänemark"]       = "Dänemark",
	["Schweden"]       = "Schweden",
	["Norwegen"]       = "Norwegen",
}

-- Split "Stadt, Land" (erstes Komma trennt)
local function splitCityCountry(s)
	local parts = mw.text.split(s, ",", true)
	local city = trim(parts[1] or "")
	local country = ""
	if #parts >= 2 then
		-- alles nach dem ersten Komma wieder zusammenfügen (falls jemand mehr Kommas nutzt)
		local rest = {}
		for i = 2, #parts do rest[#rest+1] = parts[i] end
		country = trim(table.concat(rest, ","))
	end
	return city, country
end

function p.render(frame)
	local value = frame.args.value or frame:getParent() and frame:getParent().args.value
	value = value and trim(value) or ""
	if value == "" then
		return "" -- Nichts anzeigen, wenn leer
	end

	-- Stadt/Land parsen
	local city, countryRaw = splitCityCountry(value)

	-- Anzeige-Strings (mit Autolink)
	local cityView = linkIfExists(city)

	-- Land normalisieren + verlinkte Anzeige
	local countryNorm = nil
	if countryRaw ~= "" then
		countryNorm = countryNormalize[lc(countryRaw)] or countryRaw
	end
	local countryView = countryNorm and linkIfExists(countryNorm) or ""

	-- Anzeige zusammensetzen
	local out = {}
	out[#out+1] = cityView
	if countryView ~= "" then
		out[#out+1] = ", " .. countryView
	end

	-- Kategorien
	-- Stadt immer (ohne Linkklammern)
	if city ~= "" then
		out[#out+1] = string.format("\n[[Kategorie:Geboren in %s]]", city)
	end

	-- Land, wenn vorhanden
	if countryNorm and countryNorm ~= "" then
		local suffix = countryCatSuffix[countryNorm] or countryNorm
		out[#out+1] = string.format("\n[[Kategorie:Geboren in %s]]", suffix)
	end

	return table.concat(out)
end

return p