본문으로 이동

모듈:category tree/grammatical classes

위키낱말사전, 말과 글의 누리

이 모듈에 대한 설명문서는 모듈:category tree/grammatical classes/설명문서에서 만들 수 있습니다

local labels = {}
local raw_categories = {}
local handlers = {}



-----------------------------------------------------------------------------
--                                                                         --
--                                  레이블                                 --
--                                                                         --
-----------------------------------------------------------------------------


labels["terms by grammatical category"] = {
	description = "문법 범주별로 분류된 {{{langname}}} 낱말.",
	umbrella_parents = "기본",
	parents = {{name = "{{{langcat}}}", raw = true}},
}

labels["indeclinable terms"] = {
	description = "품사별로 분류된 {{{langname}}} 불변화사.",
	umbrella_parents = "언어별 불변화사 하위 분류",
	parents = {{name = "terms by grammatical category"}},
}

labels["suppletive terms"] = {
	description = "품사별로 분류된 {{{langname}}} 보충법적 낱말.",
	umbrella_parents = "언어별 보충법 하위 분류",
	parents = {{name = "terms by grammatical category"}},
}

------- 성 -------

for _, pos_ko in ipairs { "명사", "대명사", "고유 명사", "접미사" } do
	local pos_en
	if pos_ko == "명사" then pos_en = "nouns"
	elseif pos_ko == "대명사" then pos_en = "pronouns"
	elseif pos_ko == "고유 명사" then pos_en = "proper nouns"
	elseif pos_ko == "접미사" then pos_en = "suffixes"
	end

	labels[pos_en .. " by gender"] = {
		description = "소속된 성(gender)에 따라 정리된 {{{langname}}} " .. pos_ko .. ".",
		breadcrumb = "성별",
		parents = {{name = pos_en, sort = "성"}},
	}
	
	labels[pos_en .. " with irregular gender"] = {
		description = "어미가 해당 성의 " .. pos_ko .. "에 일반적이지 않은 {{{langname}}} " .. pos_ko .. ".",
		breadcrumb = "불규칙 성",
		parents = {{name = "irregular " .. pos_en, sort = "불규칙 성"}},
	}
	
	labels[pos_en .. " with multiple genders"] = {
		description = "하나 이상의 성에 속하는 {{{langname}}} " .. pos_ko .. ".",
		breadcrumb = "다중 성",
		parents = {{name = pos_en .. " by gender", sort = "다중 성"}},
	}
	
	labels["common-gender " .. pos_en] = {
		description = "{{용어|통성}}의 {{{langname}}} " .. pos_ko .. ". 즉, {{용어|남성}}과 {{용어|여성}}의 기능을 결합하고 {{용어|중성}} 성과 대립하는 성 범주에 속합니다.",
		breadcrumb = "통성",
		parents = {pos_en .. " by gender"},
	}
	
	labels["feminine " .. pos_en] = {
		description = "{{용어|여성}} 성의 {{{langname}}} " .. pos_ko .. ". 즉, (다른 것들 중에서) 여성 존재를 포함하는 성 범주에 속합니다.",
		breadcrumb = "여성",
		parents = {pos_en .. " by gender"},
	}
	
	labels["masculine " .. pos_en] = {
		description = "{{용어|남성}} 성의 {{{langname}}} " .. pos_ko .. ". 즉, (다른 것들 중에서) 남성 존재를 포함하는 성 범주에 속합니다.",
		breadcrumb = "남성",
		parents = {pos_en .. " by gender"},
	}
	
	labels["masculine and feminine " .. pos_en .. " by sense"] = {
		description = "남성 또는 여성 존재를 가리키는지에 따라 {{용어|남성}} 또는 {{용어|여성}}이 될 수 있는 {{{langname}}} " .. pos_ko .. ".",
		breadcrumb = "의미에 따른 남성 및 여성",
		parents = {pos_en .. " by gender"},
	}
	
	labels["neuter " .. pos_en] = {
		description = "{{용어|중성}} 성의 {{{langname}}} " .. pos_ko .. ". 즉, 보통 남성 또는 여성 존재를 포함하지 않는 성 범주에 속합니다.",
		breadcrumb = "중성",
		parents = {pos_en .. " by gender"},
	}
	
	labels["gender-neutral " .. pos_en] = {
		description = "성별에 관계없이 모든 사람에게 적용할 수 있는 {{{langname}}} " .. pos_ko .. ".",
		breadcrumb = "성 중립",
		parents = {pos_en .. " by gender", "gender-neutral terms"},
	}
end

for _, pos_ko in ipairs({"형용사", "수사", "분사", "접미사"}) do
	local pos_en
	if pos_ko == "형용사" then pos_en = "adjectives"
	elseif pos_ko == "수사" then pos_en = "numerals"
	elseif pos_ko == "분사" then pos_en = "participles"
	elseif pos_ko == "접미사" then pos_en = "suffixes"
	end

	labels["epicene " .. pos_en] = {
		description = "일반적으로 성을 구별하는 언어에서, {{용어|남성}}과 {{용어|여성}} 모두에 대해 형태가 동일한 {{{langname}}} " .. pos_ko .. ".",
		breadcrumb = "통성",
		parents = {pos_en .. " by inflection type"},
	}
end

------- 명사 클래스 -------

labels["nouns by class"] = {
	description = "소속된 클래스에 따라 정리된 {{{langname}}} 명사.",
	breadcrumb = "클래스별",
	parents = {{name = "nouns", sort = "클래스"}},
}

labels["alienable nouns"] = {
	description = "[[w:ko:양도성|양도 가능]] 소유 표현이 쓰이는 {{{langname}}} 명사.",
	breadcrumb = "양도 가능",
	parents = {"nouns"},
}

labels["inalienable nouns"] = {
	description = "[[w:ko:양도성|양도 불가능]] 소유 표현이 쓰이는 {{{langname}}} 명사.",
	breadcrumb = "양도 불가능",
	parents = {"nouns"},
}


------- 유정성 -------

for _, pos_ko in ipairs({"명사", "접미사", "동사"}) do
	local pos_en
	if pos_ko == "명사" then pos_en = "nouns"
	elseif pos_ko == "접미사" then pos_en = "suffixes"
	elseif pos_ko == "동사" then pos_en = "verbs"
	end
	
	labels["animate " .. pos_en] = {
		description = "사람이나 동물을 가리키는 {{{langname}}} " .. pos_ko .. " (유정 명사).",
		breadcrumb = "유정",
		parents = {pos_en},
	}
	
	labels["inanimate " .. pos_en] = {
		description = "무생물(사람이나 동물이 아님)을 가리키는 {{{langname}}} " .. pos_ko .. " (무정 명사).",
		breadcrumb = "무정",
		parents = {pos_en},
	}
	
	labels[pos_en .. " with multiple animacies"] = {
		description = "하나 이상의 유정성에 속하는 {{{langname}}} " .. pos_ko .. ".",
		breadcrumb = "다중 유정성",
		parents = {{name = pos_en, sort = "다중 유정성"}},
	}
end

for _, pos_ko in ipairs({"명사", "접미사"}) do
	local pos_en
	if pos_ko == "명사" then pos_en = "nouns"
	elseif pos_ko == "접미사" then pos_en = "suffixes"
	end
	
	-- 이 분류는 우크라이나어와 같이 동물과 관련된 문법적 구별이 있는 언어에서 특히 사용되어야 합니다.
	labels["animal " .. pos_en] = {
		description = "동물을 가리키는 {{{langname}}} " .. pos_ko .. ".",
		breadcrumb = "동물",
		parents = {"animate " .. pos_en},
	}
	
	-- 이 분류는 폴란드어와 같이 남성과 관련된 문법적 구별이 있는 언어에서 특히 사용되어야 합니다.
	labels["nonvirile " .. pos_en] = {
		description = "남성 인물을 포함하지 않는 그룹을 가리키는 {{{langname}}} 복수 " .. pos_ko .. " (비남성인격).",
		breadcrumb = "비남성인격",
		parents = {pos_en, "pluralia tantum"},
	}
	
	labels["personal " .. pos_en] = {
		description = "사람을 가리키는 {{{langname}}} " .. pos_ko .. " (인칭).",
		breadcrumb = "인칭",
		parents = {"animate " .. pos_en},
	}
	
	-- 이 분류는 폴란드어와 같이 남성과 관련된 문법적 구별이 있는 언어에서 특히 사용되어야 합니다.
	labels["virile " .. pos_en] = {
		description = "적어도 한 명의 남성 인물을 포함하는 그룹을 가리키는 {{{langname}}} 복수 " .. pos_ko .. " (남성인격).",
		breadcrumb = "남성인격",
		parents = {pos_en, "pluralia tantum"},
	}
end

------- 굴절 품사 -------

-- 굴절 가능성이 있는 품사에 대해 "굴절 유형별 품사", "불규칙 품사", "성조별 품사" 분류를 추가합니다.
local inflected_poses = {
	"형용사",
	"부사",
	"한정사",
	"명사",
	"수사",
	"분사",
	"대명사",
	"고유 명사",
	"접미사",
	"동사",
}

local inflected_poses_en = {
	"adjectives",
	"adverbs",
	"determiners",
	"nouns",
	"numerals",
	"participles",
	"pronouns",
	"proper nouns",
	"suffixes",
	"verbs",
}

for i, pos_ko in ipairs(inflected_poses) do
	local pos_en = inflected_poses_en[i]
	
	labels[pos_en .. " by inflection type"] = {
		description = "따르는 굴절의 유형에 따라 정리된 {{{langname}}} " .. pos_ko .. ".",
		breadcrumb = "굴절 유형별",
		parents = {{name = pos_en, sort = "굴절"}},
	}
	
	labels["irregular " .. pos_en] = {
		description = "비표준적인 굴절 패턴을 따르는 {{{langname}}} " .. pos_ko .. " (불규칙).",
		breadcrumb = "불규칙",
		parents = {pos_en .. " by inflection type"},
	}
	
	labels["defective " .. pos_en] = {
		description = "굴절형 중 하나 이상의 형태가 누락된 {{{langname}}} " .. pos_ko .. " (불완전).",
		breadcrumb = "불완전",
		parents = {pos_en, "irregular " .. pos_en},
	}
	
	labels["suppletive " .. pos_en] = {
		description = "다른 어근에서 온 굴절형을 가지는 {{{langname}}} " .. pos_ko .. " (보충법).",
		breadcrumb = "보충법",
		umbrella_parents = "언어별 보충법 하위 분류",
		parents = {
			"irregular " .. pos_en,
			"suppletive terms",
		},
	}
		
	if pos_en ~= "verbs" and pos_en ~= "adverbs" then
		labels["indeclinable " .. pos_en] = {
			description = "곡 변화를 통해 추가적인 문법적 관계를 표시하지 않는 {{{langname}}} " .. pos_ko .. " (불변화사).",
			breadcrumb = "불변화",
			umbrella_parents = "언어별 불변화사 하위 분류",
			parents = {
				pos_en .. " by inflection type",
				"indeclinable terms",
			},
		}
		
		labels[pos_en .. " with multiple declensions"] = {
			description = "하나 이상의 굴절 유형을 따르는 {{{langname}}} " .. pos_ko .. ".",
			breadcrumb = "다중 격변화",
			parents = {{name = pos_en .. " by inflection type", sort = "다중 격변화"}},
		}
		
		labels[pos_en .. " with multiple plurals"] = {
			description = "하나 이상의 가능한 복수형(때로는 다른 의미로)을 가지는 {{{langname}}} " .. pos_ko .. ".",
			breadcrumb = "다중 복수형",
			parents = {{name = pos_en .. " by inflection type", sort = "다중 복수형"}},
		}
	end

	labels[pos_en .. " by tone"] = {
		description = "따르는 성조에 따라 정리된 {{{langname}}} " .. pos_ko .. ".",
		breadcrumb = "성조별",
		parents = {{name = pos_en .. " by inflection type", sort = "성조"}},
	}
	
	labels[pos_en .. " by vowel harmony"] = {
		description = "따르는 모음 조화에 따라 정리된 {{{langname}}} " .. pos_ko .. ".",
		breadcrumb = "모음 조화별",
		parents = {{name = pos_en .. " by inflection type", sort = "모음 조화"}},
	}
end


-- FIXME: 현재 아랍어에만 사용됨; 일반 분류에서 제거해야 할 수도 있음.
labels["irregular elative adjectives"] = {
	description = "비표준적인 굴절 패턴을 따르는 {{{langname}}} 최상급 형용사.",
	parents = {"adjectives by inflection type"},
}

for _, pos_en in ipairs { "nouns", "proper nouns", "pronouns" } do
	local pos_ko = (pos_en == "nouns" and "명사" or (pos_en == "proper nouns" and "고유 명사" or "대명사"))
	labels[pos_en .. " with unattested plurals"] = {
		description = "문증되지 않은 복수형을 가진 {{{langname}}} " .. pos_ko .. ".",
		breadcrumb = "문증되지 않은 복수형",
		parents = {{name = pos_en, sort = "문증되지 않은 복수형"}},
	}
	labels["definite " .. pos_en] = {
		description = "본질적으로 한정적이며 한정 일치를 보이는 {{{langname}}} " .. pos_ko .. ".",
		breadcrumb = "한정",
		parents = {pos_en .. " by inflection type"},
	}
end


------- 게르만어파 동사 클래스 -------

-- FIXME: Not clear this belongs among the general categories.

labels["strong verbs"] = {
	description = "규칙 활용형에서 일반적으로 다른 어간 모음을 나타내는 {{{langname}}} 동사 (강변화 동사).",
	breadcrumb = "강변화",
	parents = {"verbs by inflection type"},
}

labels["weak verbs"] = {
	description = "과거 시제 활용형에서 치음 접미사를 표시하는 {{{langname}}} 동사 (약변화 동사).",
	breadcrumb = "약변화",
	parents = {"verbs by inflection type"},
}

labels["preterite-present verbs"] = {
	description = "현재 시제에서 강변화 동사의 과거 시제처럼 굴절하는 {{{langname}}} 동사 (과거-현재 동사).",
	breadcrumb = "과거-현재",
	parents = {"verbs by inflection type"},
}

labels["class 1 strong verbs"] = {
	description = "원시 인도유럽어에서 [[모음 교체]] 모음 뒤에 ''-y-''가 왔던 동사.",
	breadcrumb = "1류",
	parents = {{name = "strong verbs", sort = "1"}},
}

labels["class 1 weak verbs"] = {
	description = "1류 약변화 동사.",
	breadcrumb = "1류",
	parents = {{name = "weak verbs", sort = "1"}},
}

labels["class 2 strong verbs"] = {
	description = "Verbs where the [[ablaut]] vowel was followed by ''-w-'' in 중세 인도어·유럽어.",
	breadcrumb = "class 2",
	parents = {{name = "strong verbs", sort = "2"}},
}

labels["class 2a strong verbs"] = {
	description = "Verbs where the [[ablaut]] vowel was *eu in Proto-Germanic.",
	breadcrumb = "class 2a",
	parents = {{name = "class 2 strong verbs", sort = "1"}},
}

labels["class 2b strong verbs"] = {
	description = "Verbs where the [[ablaut]] vowel was *ū in Proto-Germanic.",
	breadcrumb = "class 2b",
	parents = {{name = "class 2 strong verbs", sort = "2"}},
}

labels["class 2 weak verbs"] = {
	description = "Weak verbs of the second class.",
	breadcrumb = "class 2",
	parents = {{name = "weak verbs", sort = "2"}},
}

labels["class 3 weak verbs"] = {
	description = "Weak verbs of the third class.",
	breadcrumb = "class 3",
	parents = {{name = "weak verbs", sort = "3"}},
}

labels["class 3 strong verbs"] = {
	description = "Verbs where the [[ablaut]] vowel was followed by a [[consonant cluster]] in 중세 인도어·유럽어.",
	breadcrumb = "class 3",
	parents = {{name = "strong verbs", sort = "3"}},
}

labels["class 3a strong verbs"] = {
	description = "Verbs where the [[consonant cluster]] begins with a nasal consonant.",
	breadcrumb = "class 3a",
	parents = {{name = "class 3 strong verbs", sort = "1"}},
}

labels["class 3b strong verbs"] = {
	description = "Verbs where the [[consonant cluster]] begins with a lateral consonant or velar fricative.",
	breadcrumb = "class 3b",
	parents = {{name = "class 3 strong verbs", sort = "2"}},
}

labels["class 3c strong verbs"] = {
	description = "Verbs where the [[consonant cluster]] begins with a rhotic consonant.",
	breadcrumb = "class 3c",
	parents = {{name = "class 3 strong verbs", sort = "3"}},
}

labels["class 4 strong verbs"] = {
	description = "Verbs where the [[ablaut]] vowel was followed by a [[sonorant]] (''m'', ''n'', ''l'', ''r'') but no other consonant in 중세 인도어·유럽어.",
	breadcrumb = "class 4",
	parents = {{name = "strong verbs", sort = "4"}},
}

labels["class 4 weak verbs"] = {
	description = "Weak verbs of the fourth class.",
	breadcrumb = "class 4",
	parents = {{name = "weak verbs", sort = "4"}},
}

labels["class 5 strong verbs"] = {
	description = "Verbs where the [[ablaut]] vowel was followed by [[consonant]] other than a [[sonorant]] in 중세 인도어·유럽어.",
	breadcrumb = "class 5",
	parents = {{name = "strong verbs", sort = "5"}},
}

labels["class 6 strong verbs"] = {
	description = "The 중세 인도어·유럽어 origin of this class is not securely known. It contains verbs with the stem vowel ''-a-'', except those where it is followed by a sonorant and another consonant (this combination was considered a diphthong in PIE and therefore belonged to class 7).",
	breadcrumb = "class 6",
	parents = {{name = "strong verbs", sort = "6"}},
}

labels["class 7 strong verbs"] = {
	description = "Verbs that retained their reduplication in the past tense in Proto-Germanic.",
	breadcrumb = "class 7",
	parents = {{name = "strong verbs", sort = "7"}},
}

labels["class 7a strong verbs"] = {
	description = "Class 7 strong verbs where the root vowel was ''*ai'' in Proto-Germanic, analogous to class 1.",
	breadcrumb = "class 7a",
	parents = {{name = "class 7 strong verbs", sort = "a"}},
}

labels["class 7b strong verbs"] = {
	description = "Class 7 strong verbs where the root vowel was ''*au'' in Proto-Germanic, analogous to class 2.",
	breadcrumb = "class 7b",
	parents = {{name = "class 7 strong verbs", sort = "b"}},
}

labels["class 7c strong verbs"] = {
	description = "Class 7 strong verbs where the root vowel was ''*a'' followed by a [[consonant cluster]] in Proto-Germanic, analogous to class 3.",
	breadcrumb = "class 7c",
	parents = {{name = "class 7 strong verbs", sort = "c"}},
}

labels["class 7d strong verbs"] = {
	description = "Class 7 strong verbs where the root vowel was ''*ē'' in Proto-Germanic.",
	breadcrumb = "class 7d",
	parents = {{name = "class 7 strong verbs", sort = "d"}},
}

labels["class 7e strong verbs"] = {
	description = "Class 7 strong verbs where the root vowel was ''*ō'' in Proto-Germanic.",
	breadcrumb = "class 7e",
	parents = {{name = "class 7 strong verbs", sort = "e"}},
}

------- 투피어족 표제어 클래스 -------

-- FIXME: 고대 투피어, 녜엥가투어, 과라니어 등 일부 투피어족 언어에만 존재. 일반 분류에 속하는지 불분명.

labels["pluriform adjectives"] = {
	description = "어간에 관계 접두사가 추가된 {{{langname}}} 형용사.",
	breadcrumb = "다형태",
	parents = {"adjectives by inflection type"},
}

labels["pluriform nouns"] = {
	description = "어간에 관계 접두사가 추가된 {{{langname}}} 명사.",
	breadcrumb = "다형태",
	parents = {"nouns by inflection type"},
}

labels["pluriform postpositions"] = {
	description = "어간에 관계 접두사가 추가된 {{{langname}}} 후치사.",
	breadcrumb = "다형태",
	parents = {"postpositions by inflection type"},
}

labels["pluriform verbs"] = {
	description = "어간에 관계 접두사가 추가된 {{{langname}}} 동사.",
	breadcrumb = "다형태",
	parents = {"verbs by inflection type"},
}

local labels2 = {}

-- 'umbrella_parents' 키가 없는 경우 추가.
for key, data in pairs(labels) do
	labels2[key] = data
	if not data.umbrella_parents then
		data.umbrella_parents = "언어별 문법 범주 하위 분류"
	end
end



-----------------------------------------------------------------------------
--                                                                         --
--                              원시(RAW) 분류                             --
--                                                                         --
-----------------------------------------------------------------------------


raw_categories["언어별 문법 범주 하위 분류"] = {
	description = "성, 유정성, 명사 및 동사 클래스와 같은 문법 범주 관련 주제를 다루는 포괄 분류.",
	additional = "{{{umbrella_meta_msg}}}",
	parents = {
		"포괄 메타분류",
		{name = "terms by grammatical category", is_label = true, sort = " "},
	},
}

raw_categories["언어별 불변화사 하위 분류"] = {
	description = "특정 품사 범주의 불변화사를 다루는 포괄 분류.",
	additional = "{{{umbrella_meta_msg}}}",
	parents = {
		"포괄 메타분류",
		"언어별 문법 범주 하위 분류",
	},
}

raw_categories["언어별 보충법 하위 분류"] = {
	description = "특정 품사 범주의 보충법적 낱말을 다루는 포괄 분류.",
	additional = "{{{umbrella_meta_msg}}}",
	parents = {
		"포괄 메타분류",
		"언어별 문법 범주 하위 분류",
	},
}


-----------------------------------------------------------------------------
--                                                                         --
--                                  핸들러                                 --
--                                                                         --
-----------------------------------------------------------------------------


table.insert(handlers, function(data)
	local class = data.label:match("^클래스 (.+) 명사$")
	if class then
		local classnum, suffix = class:match("^(%d+)(.*)$")
		return {
			description = "클래스 " .. class .. "에 속하는 {{{langname}}} 명사.",
			breadcrumb = {name = class, nocap = true},
			umbrella = false,
			parents = {{
				name = "nouns by class",
				sort = classnum and ("#%03d"):format(classnum) .. suffix or class,
			}},
		}
	end
end)

table.insert(handlers, function(data)
	local pos, tone = data.label:match("^성조 ([^ ]+)인 (.+)$")
	if pos then
		return {
			description = "성조 " .. tone .. "을(를) 가진 {{{langname}}} " .. pos .. ".",
			breadcrumb = tone,
			umbrella = false,
			parents = {{
				name = pos .. " by tone",
				sort = "" .. tone:len() .. tone,
			}},
		}
	end
end)

table.insert(handlers, function(data)
	local vh, pos = data.label:match("^(.+)-조화 ([^ ]+)$")
	if pos then
		return {
			description = vh .. " 모음 조화를 따르는 {{{langname}}} " .. pos .. ".",
			breadcrumb = vh,
			umbrella = false,
			parents = {{
				name = pos .. " by vowel harmony",
				sort = "" .. vh:len() .. vh,
			}},
		}
	end
end)

table.insert(handlers, function(data)
	local pos, classifier = data.label:match("^(명사) 분류사 (.+)$")
	if pos then
		local linktext
		if data.lang then
			if data.lang:getCode() == "zh" then
				classifier = classifier:gsub("/", "//")
			end
			linktext = require("Module:also/link").full_link({ term = classifier, lang = data.lang }, "term")
		else
			linktext = classifier
		end
		return {
			description = linktext .. "을(를) 분류사로 사용하는 {{{langname}}} " .. pos .. ".",
			breadcrumb = classifier,
			umbrella = false,
			parents = {{
				name = pos .. " by classifier",
				sort = (data.lang:makeSortKey(classifier)),
			}},
		}
	end
end)


return {LABELS = labels2, RAW_CATEGORIES = raw_categories, HANDLERS = handlers}