Wiktionary thwiktionary https://th.wiktionary.org/wiki/%E0%B8%A7%E0%B8%B4%E0%B8%81%E0%B8%B4%E0%B8%9E%E0%B8%88%E0%B8%99%E0%B8%B2%E0%B8%99%E0%B8%B8%E0%B8%81%E0%B8%A3%E0%B8%A1:%E0%B8%AB%E0%B8%99%E0%B9%89%E0%B8%B2%E0%B8%AB%E0%B8%A5%E0%B8%B1%E0%B8%81 MediaWiki 1.47.0-wmf.24 case-sensitive สื่อ พิเศษ พูดคุย ผู้ใช้ คุยกับผู้ใช้ วิกิพจนานุกรม คุยเรื่องวิกิพจนานุกรม ไฟล์ คุยเรื่องไฟล์ มีเดียวิกิ คุยเรื่องมีเดียวิกิ แม่แบบ คุยเรื่องแม่แบบ วิธีใช้ คุยเรื่องวิธีใช้ หมวดหมู่ คุยเรื่องหมวดหมู่ ภาคผนวก คุยเรื่องภาคผนวก ดัชนี คุยเรื่องดัชนี สัมผัส คุยเรื่องสัมผัส อรรถาภิธาน คุยเรื่องอรรถาภิธาน TimedText TimedText talk มอดูล คุยเรื่องมอดูล Event Event talk ก 0 8933 5775727 2695205 2026-10-20T11:12:53Z Ai Ku Karng 17824 /* รูปแบบอื่น */ เขียนตามรูปแบบอักขระวิธีศิลาจารึกหลักที่1 5775727 wikitext text/x-wiki {{character info}} {{also/auto}} == ภาษาร่วม == === การออกเสียง === * (''พยัญชนะต้น'') {{IPA|mul|/k-/}} * (''พยัญชนะสะกด'') {{IPA|mul|/-k̚/}} === ตัวอักษร === {{mul-letter}} # พยัญชนะในอักษรไทย ใช้แทนเสียง /k/ หรือเสียงที่ใกล้เคียงเช่น /ɡ/, /q/, /ɢ/, /ɠ/ == ภาษาไทย == {{wp}} === รูปแบบอื่น === * {{q|ลายสือไท}} [[ไฟล์:ก laisuethai.png|x24px|text-bottom|class=skin-invert-image|alt=ก]] * {{alt|th|--.||รหัสมอร์ส}} * {{q|อักษรเบรลล์}} {{l|mul|⠛}} * {{q|ภาษามือ}} {{l|tsq|𝡀𝪜}} === การออกเสียง === {{th-pron|กอ|กอ-ไก่}} === ตัวอักษร === {{th-letter}} # [[พยัญชนะ]][[ตัว]][[ที่]] 1 [[เรียก]][[ว่า]] ก [[ไก่]] [[เป็น]][[อักษรกลาง]] [[ใช้]][[เป็น]][[พยัญชนะต้น]] [[และ]][[เป็น]][[ตัวสะกด]][[ใน]][[มาตรากก]][[หรือ]][[แม่กก]] [[เช่น]] [[กก]] [[ปาก]] [[สัก]] ==== คำเกี่ยวข้อง ==== {{col2|th|ก กา|ก ข|ก ข ไม่กระดิกหู|ก หัน|ก.}} == ภาษาบาลี == === ปัจจัย === {{head|pi|ปัจจัย|head=-ก}} # [[ผู้]], [[ผู้]][[กระทำ]] (ใช้ประกอบท้ายคำบางคำ) #: {{uxi|pi|[[โฆสก]]|[[โฆษก]], ผู้ป่าวร้อง, ผู้โฆษณา}} #: {{uxi|pi|[[ฑาหก]]|ผู้เผา หมายถึง [[ไฟ]]}} #: {{uxi|pi|[[วาจก]]|ผู้กล่าว, ผู้บอก, ผู้พูด}} #: {{uxi|pi|[[อุปตฺถมฺภก]]|[[อุปถัมภก]], ผู้ค้ำจุน, ผู้ค้ำชู, ผู้สนับสนุน, ผู้เลี้ยงดู}} # ก [[สกรรถ]] # [[สังขยา]][[ตัทธิต]] หรือ [[ปริมาณ]]ตัทธิต {{suffixsee|pi}} 20didra0gvth7oiy9ef67rlx0f2be3r ข 0 8935 5775728 2695206 2026-10-20T11:13:56Z Ai Ku Karng 17824 /* รูปแบบอื่น */ เขียนตามรูปแบบอักขระวิธีศิลาจารึกหลักที่1 5775728 wikitext text/x-wiki {{character info}} {{also/auto}} == ภาษาร่วม == === การออกเสียง === * (''พยัญชนะต้น'') {{IPA|mul|/kʰ-/}} * (''พยัญชนะสะกด'') {{IPA|mul|/-k̚/}} === ตัวอักษร === {{mul-letter}} # พยัญชนะในอักษรไทย ใช้แทนเสียง /kʰ/ หรือเสียงที่ใกล้เคียงเช่น /q/ == ภาษาไทย == {{wp}} === รูปแบบอื่น === * {{q|ลายสือไท}} [[ไฟล์:ข laisuethai.png|x24px|text-bottom|class=skin-invert-image|alt=ข]] * {{alt|th|-.-.||รหัสมอร์ส}} * {{q|อักษรเบรลล์}} {{l|mul|⠅}} * {{q|ภาษามือ}} {{l|tsq|𝡀𝪜/𝠀𝪜}} === การออกเสียง === {{th-pron|ขอ|ขอ-ไข่}} === ตัวอักษร === {{th-letter}} # [[พยัญชนะ]][[ตัว]][[ที่]] 2 [[เรียก]][[ว่า]] ข [[ไข่]] [[เป็น]][[อักษรสูง]] [[ใช้]][[เป็น]][[พยัญชนะต้น]] [[และ]][[เป็น]][[ตัวสะกด]][[ใน]][[มาตรากก]][[หรือ]][[แม่กก]] [[เช่น]] [[มุข]] [[เลข]] eo1h13isefdn4wnbgiy38alzstthvpz ฃ 0 8936 5775729 2695207 2026-10-20T11:16:06Z Ai Ku Karng 17824 /* รูปแบบอื่น */ เขียนตามรูปแบบอักขระวิธีศิลาจารึกหลักที่1 5775729 wikitext text/x-wiki {{character info}} == ภาษาร่วม == === การออกเสียง === * (''พยัญชนะต้น'') {{IPA|mul|/kʰ-/|[x-]|qual2=โบราณ}} * (''พยัญชนะสะกด'') {{IPA|mul|[-k̚]|qual1=ตามทฤษฎี}} === ตัวอักษร === {{mul-letter}} # พยัญชนะในอักษรไทย ใช้แทนเสียง /kʰ/ หรือเสียงที่ใกล้เคียงเช่น /x/ == ภาษาไทย == {{wp}} === รูปแบบอื่น === * {{q|ลายสือไท}} [[ไฟล์:ฃ laisuethai.png|x24px|text-bottom|class=skin-invert-image|alt=ฃ]] * {{alt|th|-.-.||รหัสมอร์ส}} * {{q|อักษรเบรลล์}} {{l|mul|⠴⠅}} === การออกเสียง === {{th-pron|ขอ|ขอ-ขวด}} === ตัวอักษร === {{th-letter}} # {{lb|th|obsolete}} [[พยัญชนะ]][[ตัว]][[ที่]] 3 [[เรียก]][[ว่า]] ฃ [[ขวด]] [[เป็น]][[อักษรสูง]] [[ปัจจุบัน]][[เลิก]][[ใช้]][[แล้ว]] m8s7ckwtsh6dzup8t8bafqebznkbray ไอ้หื่น 0 35073 5775712 1899445 2026-10-20T03:15:42Z ~2026-56296-28 19725 หน่วยคำเติมหน้า ไอ้‐ ไม่มีใช้เดี่ยว ๆ 5775712 wikitext text/x-wiki == ภาษาไทย == === รากศัพท์ === {{prefix|th|ไอ้|หื่น}} === การออกเสียง === {{th-pron|ไอ้-หื่น}} === คำนาม === {{th-noun}} # {{lb|th|ปาก}} [[ผู้ชาย]][[บ้ากาม]][[ที่]][[แสดง]][[ความต้องการ]][[ทาง]][[เพศ]][[อย่าง]][[แรงกล้า]] [[มัก]][[ใช้]][[กำลัง]][[ข่มขืน]][[ผู้หญิง]] (ใช้[[พาดหัวข่าว]]) epfbgigwzkgk79smp2b9b7zs3twbgrq แจ๊ด 0 35996 5775731 1645239 2026-10-20T11:25:50Z Ai Ku Karng 17824 5775731 wikitext text/x-wiki == ภาษาไทย == === รากศัพท์ === แผลงมาจาก {{m|th|จัด}} === การออกเสียง === {{th-pron|แจ๊ด|แจ็๊ด}} === คำกริยาวิเศษณ์ === {{th-adv|-}} # {{lb|th|ปาก}} [[จัด]], [[ยิ่ง]], [[ใน]][[คำ]][[ว่า]] [[แดง]]แจ๊ด == ภาษาแสก == === รากศัพท์ === {{inh+|skb|tai-pro|*cetᴰ}}, จาก{{der|skb|ltc|-}} {{ltc-l|七}}; ร่วมเชื้อสายกับ{{cog|th|เจ็ด}}, {{cog|lo|ເຈັດ}}, {{cog|khb|ᦵᦈᧆ}}, {{cog|blt|ꪹꪊꪸꪒ}}, {{cog|shn|ၸဵတ်း}}, {{cog|tdd|ᥓᥥᥖᥱ}}, {{cog|aho|𑜋𑜢𑜄𑜫}}, {{cog|pcc|xadt}}, {{cog|za|caet}}, {{cog|zhn|jiat}} === การออกเสียง === * {{IPA|skb|/tɕɛt̚⁴/|[tɕɛt̚˦˥˦]|a=บ้านบะหว้า}} === เลข === {{skb-num}} # [[เจ็ด]] r5n2crulzqh5s83xwk7w383ux99g5qm มอดูล:category tree/รูปผัน 828 51422 5775722 5723277 2026-10-20T09:42:56Z Octahedron80 267 5775722 Scribunto text/plain local labels = {} local raw_categories = {} local en_utilities_module = "Module:en-utilities" local th_utilities_module = "Module:th-utilities" --th local insert = table.insert local pluralize = require(en_utilities_module).pluralize local th_pos_to_form = require(th_utilities_module).th_pos_to_form --th local unpack = unpack or table.unpack -- Lua 5.2 compatibility ----------------------------------------------------------------------------- -- -- -- LABELS -- -- -- ----------------------------------------------------------------------------- local degrees = { ["ขั้นกว่า"] = "that express a higher degree of an attribute when comparing one thing to another, or serve to set that thing apart from another", ["ขั้นสุด"] = "that express the highest possible degree of an attribute", ["ขั้นยกระดับ"] = "that, depending on the context, express either the comparative degree (a higher degree of an attribute when comparing one thing to another) or the superlative degree (the highest possible degree of an attribute)", ["ขั้นเกินจริง"] = "that express the highest possible degree of an attribute (like the superlative degree), but with an additional level of emphasis", ["ขั้นเกิน"] = "that express an excessive degree of some attribute", ["ขั้นเท่า"] = "that express the same or a similar degree of an attribute when comparing one thing to another", } local degree_pos = { "คำคุณศัพท์", "คำกริยาวิเศษณ์", "ตัวกำหนด", "คำสรรพนาม" } for _, pos in ipairs(degree_pos) do local plpos = --[[pluralize(pos)]] pos for degree, desc in pairs(degrees) do labels[plpos .. degree] = { --th breadcrumb = degree, description = "{{{langname}}} " .. plpos .. " " .. desc .. ".", parents = {th_pos_to_form(degree_pos)}, --th } end end labels["รูปผัน"] = { description = "{{{langname}}} inflected forms of other [[Wiktionary:Lemmas|lemmas]], categorized by their part of speech.", umbrella_parents = "มูลฐาน", parents = {{name = "{{{langcat}}}", raw = true}}, } labels["non-lemma forms"] = labels["รูปผัน"] -- Handle specific types of non-lemma forms. Each spec is of the form {POS, PARENT_POS} where POS is the singular form -- of a part of speech for which non-lemma forms exist (e.g. 'determiner' is listed because 'determiner forms' exist), -- and PARENT_POS is the singular form of the parent category to add the category to. For example, the spec -- {"circumfix", "morpheme"} means that 'circumfix forms' categories have the corresponding 'morpheme forms' categories -- as their first parent. The second parent is the POS itself; e.g. 'morpheme forms' has 'morphemes' as its second -- parent, with a sort key that places 'morpheme forms' at the beginning of the child categories. If PARENT_POS is -- 'false', only the second parent appears as the parent. If a spec is a single string POS, the PARENT_POS defaults to -- "non-lemma"; e.g. if the spec is "adjective", then 'adjective forms' categories have the corresponding -- 'non-lemma forms' category as their first parent. local specs = { "คำคุณศัพท์", "คำกริยาวิเศษณ์", {"คำกำกับนาม", "ตัวกำหนด"}, {"หน่วยคำเติมคร่อม", "หน่วยคำเติม"}, "คำลักษณนาม", "รูปติด", "คำสันธาน", "ตัวกำหนด", {"รูปกริยากลาง", false}, "คำอุทาน", "หน่วยคำเติม", "คำนาม", "เลข", "รูปกริยาขยาย", "คำอนุภาค", {"รูปกริยาขยายอดีตกาล", "รูปกริยาขยาย"}, "predicative", {"อุปสรรค", "หน่วยคำเติม"}, "คำวิสามานยนาม", "คำปัจฉบท", "คำบุพบท", "คำสรรพนาม", {"ปัจจัย", "หน่วยคำเติม"}, "คำกริยา", } for degree in pairs(degrees) do for _, pos in ipairs(degree_pos) do insert(specs, {pos .. degree, false}) --th end end for _, spec in ipairs(specs) do local pos, parent_pos if type(spec) == "table" then pos, parent_pos = unpack(spec) else pos = spec end if parent_pos == nil then parent_pos = "รูปผัน" end local plpos, parents, breadcrumb = --[[pluralize(pos)]] pos, {} if parent_pos == false then -- parent is the POS ([POS] » Forms) breadcrumb = "รูป" else insert(parents, th_pos_to_form(parent_pos)) --th end insert(parents, {name = plpos, sort = "**"}) local pos_form = th_pos_to_form(pos) --th labels[pos_form] = { --th breadcrumb = breadcrumb, description = ("{{{langname}}} %s that are inflected to display grammatical relations other than the main form."):format(plpos), parents = parents, } if parent_pos == "รูปผัน" or pos == "คำกำกับนาม" then -- 'noun suffix forms' etc. It doesn't make sense to have 'suffix suffix forms', 'circumfix suffix forms', etc. nor -- 'past participle suffix forms' (for the latter, we should be using 'participle suffix forms'). labels["รูปปัจจัย" .. pos] = { breadcrumb = pos, description = ("{{{langname}}} forms of %s suffixes; alternatively, suffixes that form %s forms when added to %s."):format(pos, pos, plpos), parents = {"รูปปัจจัย"}, } end end labels["รูปกริยาขยายกรรตุวาจก"] = { description = "{{{langname}}} participles that express an agent actively performing an action.", parents = {"รูปกริยาขยาย"}, } labels["active participles"] = labels["รูปกริยาขยายกรรตุวาจก"] labels["รูปกริยาขยายเชิงคุณศัพท์กรรตุวาจก"] = { description = "{{{langname}}} participles that function as adjectives and express an agent actively performing an action.", parents = {"รูปกริยาขยาย", "คำคุณศัพท์"}, } labels["active adjectival participles"] = labels["รูปกริยาขยายเชิงคุณศัพท์กรรตุวาจก"] labels["รูปกริยาขยายเชิงคุณศัพท์"] = { description = "{{{langname}}} participles that function as adjectives.", parents = {"รูปกริยาขยาย", "คำคุณศัพท์"}, } labels["adjectival participles"] = labels["รูปกริยาขยายเชิงคุณศัพท์"] labels["รูปคุณศัพท์เพศหญิง"] = { description = "{{{langname}}} adjectives that are inflected to give attributes to nouns associated to female beings.", parents = {{name = "รูปคุณศัพท์", sort = "หญิง"}}, } labels["adjective feminine forms"] = labels["รูปคุณศัพท์เพศหญิง"] labels["รูปกริยาขยายเชิงกริยาวิเศษณ์"] = { description = "{{{langname}}} participles that function as adverbs.", parents = {"รูปกริยาขยาย", "คำกริยาวิเศษณ์"}, } labels["adverbial participles"] = labels["รูปกริยาขยายเชิงกริยาวิเศษณ์"] labels["agent participles"] = { description = "{{{langname}}} participles that express an agent by who something is done.", parents = {"รูปกริยาขยาย"}, } labels["anterior adverbial participles"] = { description = "{{{langname}}} participles that function as adverbs and express an action completed before the one expressed by the primary verb.", parents = {"รูปกริยาขยาย", "คำกริยาวิเศษณ์"}, } labels["รูปลักษณนามเอกพจน์"] = { description = "{{{langname}}} classifiers that are inflected for singular number.", parents = {"รูปลักษณนาม"}, } labels["classifier singular forms"] = labels["รูปลักษณนามเอกพจน์"] labels["collective plurals"] = { description = "{{{langname}}} nominal plural forms with specifically collective semantics.", parents = {"รูปนาม"}, } labels["contemporary adverbial participles"] = { description = "{{{langname}}} participles that function as adverbs and express an action occuring simultaneously with the one expressed by the primary verb.", parents = {"รูปกริยาขยาย", "คำกริยาวิเศษณ์"}, } labels["converbs"] = { description = "{{{langname}}} verb forms that build clauses which function as adverbials.", parents = {"รูปกริยา"}, } labels["รูปกริยาเป็นนามบอกความเล็ก"] = { description = "{{{langname}}} diminutives of gerunds.", parents = {"รูปกริยา"}, } labels["diminutive gerunds"] = labels["รูปกริยาเป็นนามบอกความเล็ก"] labels["รูปกริยาขยายกรรตุวาจกอนาคตกาล"] = { description = "{{{langname}}} participles that express an agent actively performing an action in future time.", parents = {"รูปกริยาขยาย"}, } labels["future active participles"] = labels["รูปกริยาขยายกรรตุวาจกอนาคตกาล"] labels["รูปกริยาขยายอนาคตกาล"] = { description = "{{{langname}}} participles that indicate future events.", parents = {"รูปกริยาขยาย"}, } labels["future participles"] = labels["รูปกริยาขยายอนาคตกาล"] labels["รูปกริยาขยายกรรมวาจกอนาคตกาล"] = { description = "{{{langname}}} participles that express a patient having an action performed on it in future time.", parents = {"รูปกริยาขยาย"}, } labels["future passive participles"] = labels["รูปกริยาขยายกรรมวาจกอนาคตกาล"] local function gerund_description(data) local default_text = "{{{langname}}} verbs that are conjugated to indicate ongoing events at unspecified moments." if not data.lang then -- This happens e.g. in [[:Category:Gerunds by language]]. return default_text else local langcode = data.lang:getCode() if langcode == "sq" or langcode == "kmr" or langcode == "liv" or data.lang:inFamily("gem", "itc") then return "{{{langname}}} forms that generally act as an action noun for the verb that they are formed from." elseif langcode == "sa" or langcode == "pi" then return "{{{langname}}} verb forms used in a clause to indicate a prior action by the subject of the sentence." else return default_text end end end labels["รูปกริยาเป็นนาม"] = { description = gerund_description, additional = "{{small|[Edit function gerund_description() in [[Module:category tree/non-lemma forms]] to change this description.]}}", parents = {"รูปกริยา"}, } labels["gerunds"] = labels["รูปกริยาเป็นนาม"] labels["imperfect participles"] = { description = "{{{langname}}} participles that express an ongoing or continuous action.", parents = {"รูปกริยาขยาย"}, } labels["รูปกริยากลาง"] = { description = "{{{langname}}} non-finite verb forms of various kinds.", parents = {"รูปกริยา"}, } labels["infinitives"] = labels["รูปกริยากลาง"] labels["intensive adjectives"] = { description = "{{{langname}}} adjectives that are derived from a base word to express a stronger concept than the base word.", parents = {"รูปคุณศัพท์"}, } labels["manuscript forms"] = { description = "{{{langname}}} words as they appear in original manuscripts.", parents = {"รูปผัน"}, } labels["รูปกลาย"] = { description = "{{{langname}}} terms whose initial consonant is mutated due to the effect of the preceding word.", parents = {"รูปผัน"}, } labels["mutated forms"] = labels["รูปกลาย"] local inflected_pos_for_mutation = { "คำคุณศัพท์", "คำกริยาวิเศษณ์", "ตัวกำหนด", "คำอุทาน", "คำนาม", "เลข", "รูปกริยาขยาย", "คำอนุภาค", "คำอุปสรรค", "คำบุพบท", "คำสรรพนาม", "คำวิสามานยนาม", "คำกริยา", } for _, pos in ipairs(inflected_pos_for_mutation) do local plpos = --[[pluralize(pos)]] pos local pos_form = th_pos_to_form(plpos) --th labels[pos_form .. "กลาย"] = { description = "{{{langname}}} " .. plpos .. " whose initial consonant is mutated due to the effect of the preceding word.", parents = {pos_form, {name = "รูปกลาย", sort = pos}}, } end local mutation_types = { -- FIXME, we should add these terms to [[Appendix:Glossary]] and link to them. ["eclipsed"] = "[[Appendix:Irish mutations#Eclipsis|eclipsis]]", ["lenited"] = "[[Appendix:Irish mutations#Lenition|lenition]]", ["h-prothesized"] = "[[h-prothesis]]", ["t-prothesized"] = "[[t-prothesis]]", ["aspirate-mutation"] = "[[aspirate mutation]]", ["hard-mutation"] = "[[hard mutation]]", ["mixed-mutation"] = "[[mixed mutation]]", ["nasal-mutation"] = "[[nasal mutation]]", ["soft-mutation"] = "[[soft mutation]]", } for muttype, desc in pairs(mutation_types) do labels["รูปกลาย" .. muttype] = { description = "{{{langname}}} terms whose initial consonant is mutated through " .. desc .. ", due to the effect of the preceding word.", parents = {"รูปกลาย"}, } end labels["negative participles"] = { description = "{{{langname}}} participles that express lack of an action being performed.", parents = {"รูปกริยาขยาย"}, } labels["รูปกริยาขยายเชิงนาม"] = { description = "{{{langname}}} participles that function as nouns.", parents = {"รูปกริยาขยาย", "คำนาม"}, } labels["nominal participles"] = labels["รูปกริยาขยายเชิงนาม"] labels["รูปกริยาขยาย"] = { description = "{{{langname}}} verbal forms that behave syntactically like adjectives (or sometimes adverbs), and in some languages are often used in compound conjugations and/or reduced relative clauses.", parents = {"รูปกริยา"}, } labels["participles"] = labels["รูปกริยาขยาย"] labels["รูปกริยาขยายกรรมวาจก"] = { description = "{{{langname}}} participles that express a patient having an action performed on it.", parents = {"รูปกริยาขยาย"}, } labels["passive participles"] = labels["รูปกริยาขยายกรรมวาจก"] labels["รูปกริยาขยายเชิงคุณศัพท์กรรมวาจก"] = { description = "{{{langname}}} participles that function as adjectives and express a patient having an action performed on it.", parents = {"รูปกริยาขยาย", "คำคุณศัพท์"}, } labels["passive adjectival participles"] = labels["รูปกริยาขยายเชิงคุณศัพท์กรรมวาจก"] labels["past active aorist participles"] = { description = "{{{langname}}} participles that express completed events in past time.", parents = {"รูปกริยาขยาย"}, } labels["past active imperfect participles"] = { description = "{{{langname}}} participles that express ongoing events in past time.", parents = {"รูปกริยาขยาย"}, } labels["รูปกริยาขยายกรรตุวาจกอดีตกาล"] = { description = "{{{langname}}} participles that express an agent actively performing an action in past time.", parents = {"รูปกริยาขยาย"}, } labels["past active participles"] = labels["รูปกริยาขยายกรรตุวาจกอดีตกาล"] labels["รูปกริยาขยายเชิงกริยาวิเศษณ์อดีตกาล"] = { description = "{{{langname}}} participles that function as adverbs and express actions in past time.", parents = {"รูปกริยาขยายเชิงกริยาวิเศษณ์", "คำกริยาวิเศษณ์"}, } labels["past adverbial participles"] = labels["รูปกริยาขยายเชิงกริยาวิเศษณ์อดีตกาล"] labels["รูปกริยาขยายอดีตกาล"] = { description = "{{{langname}}} participles that express actions in past time.", parents = {"รูปกริยาขยาย"}, } labels["past participles"] = labels["รูปกริยาขยายอดีตกาล"] labels["รูปกริยาขยายกรรมวาจกอดีตกาล"] = { description = "{{{langname}}} participles that express a patient having an action performed on it in past time.", parents = {"รูปกริยาขยาย"}, } labels["past passive participles"] = labels["รูปกริยาขยายกรรมวาจกอดีตกาล"] labels["perfect participles"] = { description = "{{{langname}}} participles that express having completed or undergone an action.", parents = {"รูปกริยาขยาย"}, } labels["perfect active participles"] = { description = "{{{langname}}} participles that express an agent having completed an action.", parents = {"รูปกริยาขยาย"}, } labels["ปัจจัยพหูพจน์"] = { description = "{{{langname}}} suffixes that form noun plurals.", parents = {"ปัจจัยผันคำนาม"}, } labels["plural suffixes"] = labels["ปัจจัยพหูพจน์"] labels["prepositional pronouns"] = { description = "{{{langname}}} pronouns that are combined with a preposition.", umbrella_parents = "Lemmas subcategories by language", parents = {"รูปสรรพนาม", {name = "คำบุพบท", sort = "คำสรรพนาม"}}, } labels["รูปกริยาขยายกรรตุวาจกปัจจุบันกาล"] = { description = "{{{langname}}} participles that express an agent actively performing an action in present time.", parents = {"รูปกริยาขยาย"}, } labels["present active participles"] = labels["รูปกริยาขยายกรรตุวาจกปัจจุบันกาล"] labels["รูปกริยาขยายเชิงกริยาวิเศษณ์ปัจจุบันกาล"] = { description = "{{{langname}}} participles that function as adverbs and express actions in present time.", parents = {"รูปกริยาขยายเชิงกริยาวิเศษณ์", "คำกริยาวิเศษณ์"}, } labels["present adverbial participles"] = labels["รูปกริยาขยายเชิงกริยาวิเศษณ์ปัจจุบันกาล"] labels["present middle participles"] = { description = "{{{langname}}} participles that express an agent performing an action in present time in middle voice.", parents = {"รูปกริยาขยาย"}, } labels["รูปกริยาขยายปัจจุบันกาล"] = { description = "{{{langname}}} participles that express actions occurring in the present time.", parents = {"รูปกริยาขยาย"}, } labels["present participles"] = labels["รูปกริยาขยายปัจจุบันกาล"] labels["รูปกริยาขยายกรรมวาจกปัจจุบันกาล"] = { description = "{{{langname}}} participles that express a patient having an action performed on it in present time.", parents = {"รูปกริยาขยาย"}, } labels["present passive participles"] = labels["รูปกริยาขยายกรรมวาจกปัจจุบันกาล"] labels["pronunciation variants"] = { description = "{{{langname}}} words that have alternative pronunciation-based spellings.", parents = {"รูปผัน"}, } labels["singulatives"] = { description = "{{{langname}}} plural nouns that are inflected for singular number.", parents = {"รูปนาม"}, } for _, postype in ipairs { "คำหลัก", "รูปผัน"} do local umbrella_parent = "หมวดหมู่ย่อยของ" .. mw.getContentLanguage():ucfirst(postype) .. "แบ่งตามภาษา" local lemmas_link = "[[วิกิพจนานุกรม:คำหลัก|คำหลัก]]" local postype_link = postype == "คำหลัก" and "รูปแปรของ" .. lemmas_link or "รูปแปรของรูปผันของ" .. lemmas_link .. "อื่น" labels[postype .. "แปร"] = { description = "{{{langname}}} " .. postype_link .. ", i.e. secondary forms or spellings that are attested but typically not in common use.", additional = ("Such terms may be uncommon spelling variants; dialectal forms; historical, archaic or obsolete " .. "spellings; spellings in less-used scripts; or the like. They are kept out of the %s category to avoid " .. "cluttering it. To add a term to this category, specify {{para|var|1}} in the call to {{tl|head}}, or set " .. "{{cd|=var = true}} in the call to [[Module:headword]]. Commonly used variants should not be placed in " .. "this category, but should be treated as normal %s."):format(postype, postype), umbrella_parents = umbrella_parent, breadcrumb = "รูปแปร", parents = {postype}, } end labels["verb negative forms"] = { description = "{{{langname}}} verbs that are conjugated to express negation.", parents = {{name = "รูปกริยา", sort = "negative"}}, } -- Add breadcrumb by chopping off the parent (or the parent's parent, etc.) from the end of the label, if possible. require("Module:category tree/utilities").add_partial_breadcrumbs_to_labels(labels) -- Add 'umbrella_parents' key if not already present. for key, data in pairs(labels) do if not data.umbrella_parents then data.umbrella_parents = "หมวดหมู่ย่อยของรูปผันแบ่งตามภาษา" end end ----------------------------------------------------------------------------- -- -- -- RAW CATEGORIES -- -- -- ----------------------------------------------------------------------------- raw_categories["หมวดหมู่ย่อยของรูปผันแบ่งตามภาษา"] = { description = "Umbrella categories covering topics related to non-lemma forms.", additional = "{{{umbrella_meta_msg}}}", parents = { "หมวดหมู่ใหญ่รวมหัวข้อ", {name = "รูปผัน", is_label = true, sort = " "}, }, } return {LABELS = labels, RAW_CATEGORIES = raw_categories} 29oa2m60q4nrs30u5jbohh96ybzoafw 5775723 5775722 2026-10-20T09:43:50Z Octahedron80 267 5775723 Scribunto text/plain local labels = {} local raw_categories = {} local en_utilities_module = "Module:en-utilities" local th_utilities_module = "Module:th-utilities" --th local insert = table.insert local pluralize = require(en_utilities_module).pluralize local th_pos_to_form = require(th_utilities_module).th_pos_to_form --th local unpack = unpack or table.unpack -- Lua 5.2 compatibility ----------------------------------------------------------------------------- -- -- -- LABELS -- -- -- ----------------------------------------------------------------------------- local degrees = { ["ขั้นกว่า"] = "that express a higher degree of an attribute when comparing one thing to another, or serve to set that thing apart from another", ["ขั้นสุด"] = "that express the highest possible degree of an attribute", ["ขั้นยกระดับ"] = "that, depending on the context, express either the comparative degree (a higher degree of an attribute when comparing one thing to another) or the superlative degree (the highest possible degree of an attribute)", ["ขั้นเกินจริง"] = "that express the highest possible degree of an attribute (like the superlative degree), but with an additional level of emphasis", ["ขั้นเกิน"] = "that express an excessive degree of some attribute", ["ขั้นเท่า"] = "that express the same or a similar degree of an attribute when comparing one thing to another", } local degree_pos = { "คำคุณศัพท์", "คำกริยาวิเศษณ์", "ตัวกำหนด", "คำสรรพนาม" } for _, pos in ipairs(degree_pos) do local plpos = --[[pluralize(pos)]] pos for degree, desc in pairs(degrees) do labels[plpos .. degree] = { --th breadcrumb = degree, description = "{{{langname}}} " .. plpos .. " " .. desc .. ".", parents = {th_pos_to_form(pos)}, --th } end end labels["รูปผัน"] = { description = "{{{langname}}} inflected forms of other [[Wiktionary:Lemmas|lemmas]], categorized by their part of speech.", umbrella_parents = "มูลฐาน", parents = {{name = "{{{langcat}}}", raw = true}}, } labels["non-lemma forms"] = labels["รูปผัน"] -- Handle specific types of non-lemma forms. Each spec is of the form {POS, PARENT_POS} where POS is the singular form -- of a part of speech for which non-lemma forms exist (e.g. 'determiner' is listed because 'determiner forms' exist), -- and PARENT_POS is the singular form of the parent category to add the category to. For example, the spec -- {"circumfix", "morpheme"} means that 'circumfix forms' categories have the corresponding 'morpheme forms' categories -- as their first parent. The second parent is the POS itself; e.g. 'morpheme forms' has 'morphemes' as its second -- parent, with a sort key that places 'morpheme forms' at the beginning of the child categories. If PARENT_POS is -- 'false', only the second parent appears as the parent. If a spec is a single string POS, the PARENT_POS defaults to -- "non-lemma"; e.g. if the spec is "adjective", then 'adjective forms' categories have the corresponding -- 'non-lemma forms' category as their first parent. local specs = { "คำคุณศัพท์", "คำกริยาวิเศษณ์", {"คำกำกับนาม", "ตัวกำหนด"}, {"หน่วยคำเติมคร่อม", "หน่วยคำเติม"}, "คำลักษณนาม", "รูปติด", "คำสันธาน", "ตัวกำหนด", {"รูปกริยากลาง", false}, "คำอุทาน", "หน่วยคำเติม", "คำนาม", "เลข", "รูปกริยาขยาย", "คำอนุภาค", {"รูปกริยาขยายอดีตกาล", "รูปกริยาขยาย"}, "predicative", {"อุปสรรค", "หน่วยคำเติม"}, "คำวิสามานยนาม", "คำปัจฉบท", "คำบุพบท", "คำสรรพนาม", {"ปัจจัย", "หน่วยคำเติม"}, "คำกริยา", } for degree in pairs(degrees) do for _, pos in ipairs(degree_pos) do insert(specs, {pos .. degree, false}) --th end end for _, spec in ipairs(specs) do local pos, parent_pos if type(spec) == "table" then pos, parent_pos = unpack(spec) else pos = spec end if parent_pos == nil then parent_pos = "รูปผัน" end local plpos, parents, breadcrumb = --[[pluralize(pos)]] pos, {} if parent_pos == false then -- parent is the POS ([POS] » Forms) breadcrumb = "รูป" else insert(parents, th_pos_to_form(parent_pos)) --th end insert(parents, {name = plpos, sort = "**"}) local pos_form = th_pos_to_form(pos) --th labels[pos_form] = { --th breadcrumb = breadcrumb, description = ("{{{langname}}} %s that are inflected to display grammatical relations other than the main form."):format(plpos), parents = parents, } if parent_pos == "รูปผัน" or pos == "คำกำกับนาม" then -- 'noun suffix forms' etc. It doesn't make sense to have 'suffix suffix forms', 'circumfix suffix forms', etc. nor -- 'past participle suffix forms' (for the latter, we should be using 'participle suffix forms'). labels["รูปปัจจัย" .. pos] = { breadcrumb = pos, description = ("{{{langname}}} forms of %s suffixes; alternatively, suffixes that form %s forms when added to %s."):format(pos, pos, plpos), parents = {"รูปปัจจัย"}, } end end labels["รูปกริยาขยายกรรตุวาจก"] = { description = "{{{langname}}} participles that express an agent actively performing an action.", parents = {"รูปกริยาขยาย"}, } labels["active participles"] = labels["รูปกริยาขยายกรรตุวาจก"] labels["รูปกริยาขยายเชิงคุณศัพท์กรรตุวาจก"] = { description = "{{{langname}}} participles that function as adjectives and express an agent actively performing an action.", parents = {"รูปกริยาขยาย", "คำคุณศัพท์"}, } labels["active adjectival participles"] = labels["รูปกริยาขยายเชิงคุณศัพท์กรรตุวาจก"] labels["รูปกริยาขยายเชิงคุณศัพท์"] = { description = "{{{langname}}} participles that function as adjectives.", parents = {"รูปกริยาขยาย", "คำคุณศัพท์"}, } labels["adjectival participles"] = labels["รูปกริยาขยายเชิงคุณศัพท์"] labels["รูปคุณศัพท์เพศหญิง"] = { description = "{{{langname}}} adjectives that are inflected to give attributes to nouns associated to female beings.", parents = {{name = "รูปคุณศัพท์", sort = "หญิง"}}, } labels["adjective feminine forms"] = labels["รูปคุณศัพท์เพศหญิง"] labels["รูปกริยาขยายเชิงกริยาวิเศษณ์"] = { description = "{{{langname}}} participles that function as adverbs.", parents = {"รูปกริยาขยาย", "คำกริยาวิเศษณ์"}, } labels["adverbial participles"] = labels["รูปกริยาขยายเชิงกริยาวิเศษณ์"] labels["agent participles"] = { description = "{{{langname}}} participles that express an agent by who something is done.", parents = {"รูปกริยาขยาย"}, } labels["anterior adverbial participles"] = { description = "{{{langname}}} participles that function as adverbs and express an action completed before the one expressed by the primary verb.", parents = {"รูปกริยาขยาย", "คำกริยาวิเศษณ์"}, } labels["รูปลักษณนามเอกพจน์"] = { description = "{{{langname}}} classifiers that are inflected for singular number.", parents = {"รูปลักษณนาม"}, } labels["classifier singular forms"] = labels["รูปลักษณนามเอกพจน์"] labels["collective plurals"] = { description = "{{{langname}}} nominal plural forms with specifically collective semantics.", parents = {"รูปนาม"}, } labels["contemporary adverbial participles"] = { description = "{{{langname}}} participles that function as adverbs and express an action occuring simultaneously with the one expressed by the primary verb.", parents = {"รูปกริยาขยาย", "คำกริยาวิเศษณ์"}, } labels["converbs"] = { description = "{{{langname}}} verb forms that build clauses which function as adverbials.", parents = {"รูปกริยา"}, } labels["รูปกริยาเป็นนามบอกความเล็ก"] = { description = "{{{langname}}} diminutives of gerunds.", parents = {"รูปกริยา"}, } labels["diminutive gerunds"] = labels["รูปกริยาเป็นนามบอกความเล็ก"] labels["รูปกริยาขยายกรรตุวาจกอนาคตกาล"] = { description = "{{{langname}}} participles that express an agent actively performing an action in future time.", parents = {"รูปกริยาขยาย"}, } labels["future active participles"] = labels["รูปกริยาขยายกรรตุวาจกอนาคตกาล"] labels["รูปกริยาขยายอนาคตกาล"] = { description = "{{{langname}}} participles that indicate future events.", parents = {"รูปกริยาขยาย"}, } labels["future participles"] = labels["รูปกริยาขยายอนาคตกาล"] labels["รูปกริยาขยายกรรมวาจกอนาคตกาล"] = { description = "{{{langname}}} participles that express a patient having an action performed on it in future time.", parents = {"รูปกริยาขยาย"}, } labels["future passive participles"] = labels["รูปกริยาขยายกรรมวาจกอนาคตกาล"] local function gerund_description(data) local default_text = "{{{langname}}} verbs that are conjugated to indicate ongoing events at unspecified moments." if not data.lang then -- This happens e.g. in [[:Category:Gerunds by language]]. return default_text else local langcode = data.lang:getCode() if langcode == "sq" or langcode == "kmr" or langcode == "liv" or data.lang:inFamily("gem", "itc") then return "{{{langname}}} forms that generally act as an action noun for the verb that they are formed from." elseif langcode == "sa" or langcode == "pi" then return "{{{langname}}} verb forms used in a clause to indicate a prior action by the subject of the sentence." else return default_text end end end labels["รูปกริยาเป็นนาม"] = { description = gerund_description, additional = "{{small|[Edit function gerund_description() in [[Module:category tree/non-lemma forms]] to change this description.]}}", parents = {"รูปกริยา"}, } labels["gerunds"] = labels["รูปกริยาเป็นนาม"] labels["imperfect participles"] = { description = "{{{langname}}} participles that express an ongoing or continuous action.", parents = {"รูปกริยาขยาย"}, } labels["รูปกริยากลาง"] = { description = "{{{langname}}} non-finite verb forms of various kinds.", parents = {"รูปกริยา"}, } labels["infinitives"] = labels["รูปกริยากลาง"] labels["intensive adjectives"] = { description = "{{{langname}}} adjectives that are derived from a base word to express a stronger concept than the base word.", parents = {"รูปคุณศัพท์"}, } labels["manuscript forms"] = { description = "{{{langname}}} words as they appear in original manuscripts.", parents = {"รูปผัน"}, } labels["รูปกลาย"] = { description = "{{{langname}}} terms whose initial consonant is mutated due to the effect of the preceding word.", parents = {"รูปผัน"}, } labels["mutated forms"] = labels["รูปกลาย"] local inflected_pos_for_mutation = { "คำคุณศัพท์", "คำกริยาวิเศษณ์", "ตัวกำหนด", "คำอุทาน", "คำนาม", "เลข", "รูปกริยาขยาย", "คำอนุภาค", "คำอุปสรรค", "คำบุพบท", "คำสรรพนาม", "คำวิสามานยนาม", "คำกริยา", } for _, pos in ipairs(inflected_pos_for_mutation) do local plpos = --[[pluralize(pos)]] pos local pos_form = th_pos_to_form(plpos) --th labels[pos_form .. "กลาย"] = { description = "{{{langname}}} " .. plpos .. " whose initial consonant is mutated due to the effect of the preceding word.", parents = {pos_form, {name = "รูปกลาย", sort = pos}}, } end local mutation_types = { -- FIXME, we should add these terms to [[Appendix:Glossary]] and link to them. ["eclipsed"] = "[[Appendix:Irish mutations#Eclipsis|eclipsis]]", ["lenited"] = "[[Appendix:Irish mutations#Lenition|lenition]]", ["h-prothesized"] = "[[h-prothesis]]", ["t-prothesized"] = "[[t-prothesis]]", ["aspirate-mutation"] = "[[aspirate mutation]]", ["hard-mutation"] = "[[hard mutation]]", ["mixed-mutation"] = "[[mixed mutation]]", ["nasal-mutation"] = "[[nasal mutation]]", ["soft-mutation"] = "[[soft mutation]]", } for muttype, desc in pairs(mutation_types) do labels["รูปกลาย" .. muttype] = { description = "{{{langname}}} terms whose initial consonant is mutated through " .. desc .. ", due to the effect of the preceding word.", parents = {"รูปกลาย"}, } end labels["negative participles"] = { description = "{{{langname}}} participles that express lack of an action being performed.", parents = {"รูปกริยาขยาย"}, } labels["รูปกริยาขยายเชิงนาม"] = { description = "{{{langname}}} participles that function as nouns.", parents = {"รูปกริยาขยาย", "คำนาม"}, } labels["nominal participles"] = labels["รูปกริยาขยายเชิงนาม"] labels["รูปกริยาขยาย"] = { description = "{{{langname}}} verbal forms that behave syntactically like adjectives (or sometimes adverbs), and in some languages are often used in compound conjugations and/or reduced relative clauses.", parents = {"รูปกริยา"}, } labels["participles"] = labels["รูปกริยาขยาย"] labels["รูปกริยาขยายกรรมวาจก"] = { description = "{{{langname}}} participles that express a patient having an action performed on it.", parents = {"รูปกริยาขยาย"}, } labels["passive participles"] = labels["รูปกริยาขยายกรรมวาจก"] labels["รูปกริยาขยายเชิงคุณศัพท์กรรมวาจก"] = { description = "{{{langname}}} participles that function as adjectives and express a patient having an action performed on it.", parents = {"รูปกริยาขยาย", "คำคุณศัพท์"}, } labels["passive adjectival participles"] = labels["รูปกริยาขยายเชิงคุณศัพท์กรรมวาจก"] labels["past active aorist participles"] = { description = "{{{langname}}} participles that express completed events in past time.", parents = {"รูปกริยาขยาย"}, } labels["past active imperfect participles"] = { description = "{{{langname}}} participles that express ongoing events in past time.", parents = {"รูปกริยาขยาย"}, } labels["รูปกริยาขยายกรรตุวาจกอดีตกาล"] = { description = "{{{langname}}} participles that express an agent actively performing an action in past time.", parents = {"รูปกริยาขยาย"}, } labels["past active participles"] = labels["รูปกริยาขยายกรรตุวาจกอดีตกาล"] labels["รูปกริยาขยายเชิงกริยาวิเศษณ์อดีตกาล"] = { description = "{{{langname}}} participles that function as adverbs and express actions in past time.", parents = {"รูปกริยาขยายเชิงกริยาวิเศษณ์", "คำกริยาวิเศษณ์"}, } labels["past adverbial participles"] = labels["รูปกริยาขยายเชิงกริยาวิเศษณ์อดีตกาล"] labels["รูปกริยาขยายอดีตกาล"] = { description = "{{{langname}}} participles that express actions in past time.", parents = {"รูปกริยาขยาย"}, } labels["past participles"] = labels["รูปกริยาขยายอดีตกาล"] labels["รูปกริยาขยายกรรมวาจกอดีตกาล"] = { description = "{{{langname}}} participles that express a patient having an action performed on it in past time.", parents = {"รูปกริยาขยาย"}, } labels["past passive participles"] = labels["รูปกริยาขยายกรรมวาจกอดีตกาล"] labels["perfect participles"] = { description = "{{{langname}}} participles that express having completed or undergone an action.", parents = {"รูปกริยาขยาย"}, } labels["perfect active participles"] = { description = "{{{langname}}} participles that express an agent having completed an action.", parents = {"รูปกริยาขยาย"}, } labels["ปัจจัยพหูพจน์"] = { description = "{{{langname}}} suffixes that form noun plurals.", parents = {"ปัจจัยผันคำนาม"}, } labels["plural suffixes"] = labels["ปัจจัยพหูพจน์"] labels["prepositional pronouns"] = { description = "{{{langname}}} pronouns that are combined with a preposition.", umbrella_parents = "Lemmas subcategories by language", parents = {"รูปสรรพนาม", {name = "คำบุพบท", sort = "คำสรรพนาม"}}, } labels["รูปกริยาขยายกรรตุวาจกปัจจุบันกาล"] = { description = "{{{langname}}} participles that express an agent actively performing an action in present time.", parents = {"รูปกริยาขยาย"}, } labels["present active participles"] = labels["รูปกริยาขยายกรรตุวาจกปัจจุบันกาล"] labels["รูปกริยาขยายเชิงกริยาวิเศษณ์ปัจจุบันกาล"] = { description = "{{{langname}}} participles that function as adverbs and express actions in present time.", parents = {"รูปกริยาขยายเชิงกริยาวิเศษณ์", "คำกริยาวิเศษณ์"}, } labels["present adverbial participles"] = labels["รูปกริยาขยายเชิงกริยาวิเศษณ์ปัจจุบันกาล"] labels["present middle participles"] = { description = "{{{langname}}} participles that express an agent performing an action in present time in middle voice.", parents = {"รูปกริยาขยาย"}, } labels["รูปกริยาขยายปัจจุบันกาล"] = { description = "{{{langname}}} participles that express actions occurring in the present time.", parents = {"รูปกริยาขยาย"}, } labels["present participles"] = labels["รูปกริยาขยายปัจจุบันกาล"] labels["รูปกริยาขยายกรรมวาจกปัจจุบันกาล"] = { description = "{{{langname}}} participles that express a patient having an action performed on it in present time.", parents = {"รูปกริยาขยาย"}, } labels["present passive participles"] = labels["รูปกริยาขยายกรรมวาจกปัจจุบันกาล"] labels["pronunciation variants"] = { description = "{{{langname}}} words that have alternative pronunciation-based spellings.", parents = {"รูปผัน"}, } labels["singulatives"] = { description = "{{{langname}}} plural nouns that are inflected for singular number.", parents = {"รูปนาม"}, } for _, postype in ipairs { "คำหลัก", "รูปผัน"} do local umbrella_parent = "หมวดหมู่ย่อยของ" .. mw.getContentLanguage():ucfirst(postype) .. "แบ่งตามภาษา" local lemmas_link = "[[วิกิพจนานุกรม:คำหลัก|คำหลัก]]" local postype_link = postype == "คำหลัก" and "รูปแปรของ" .. lemmas_link or "รูปแปรของรูปผันของ" .. lemmas_link .. "อื่น" labels[postype .. "แปร"] = { description = "{{{langname}}} " .. postype_link .. ", i.e. secondary forms or spellings that are attested but typically not in common use.", additional = ("Such terms may be uncommon spelling variants; dialectal forms; historical, archaic or obsolete " .. "spellings; spellings in less-used scripts; or the like. They are kept out of the %s category to avoid " .. "cluttering it. To add a term to this category, specify {{para|var|1}} in the call to {{tl|head}}, or set " .. "{{cd|=var = true}} in the call to [[Module:headword]]. Commonly used variants should not be placed in " .. "this category, but should be treated as normal %s."):format(postype, postype), umbrella_parents = umbrella_parent, breadcrumb = "รูปแปร", parents = {postype}, } end labels["verb negative forms"] = { description = "{{{langname}}} verbs that are conjugated to express negation.", parents = {{name = "รูปกริยา", sort = "negative"}}, } -- Add breadcrumb by chopping off the parent (or the parent's parent, etc.) from the end of the label, if possible. require("Module:category tree/utilities").add_partial_breadcrumbs_to_labels(labels) -- Add 'umbrella_parents' key if not already present. for key, data in pairs(labels) do if not data.umbrella_parents then data.umbrella_parents = "หมวดหมู่ย่อยของรูปผันแบ่งตามภาษา" end end ----------------------------------------------------------------------------- -- -- -- RAW CATEGORIES -- -- -- ----------------------------------------------------------------------------- raw_categories["หมวดหมู่ย่อยของรูปผันแบ่งตามภาษา"] = { description = "Umbrella categories covering topics related to non-lemma forms.", additional = "{{{umbrella_meta_msg}}}", parents = { "หมวดหมู่ใหญ่รวมหัวข้อ", {name = "รูปผัน", is_label = true, sort = " "}, }, } return {LABELS = labels, RAW_CATEGORIES = raw_categories} 5db6xfy0mpze0rg35crfnav4x0gxr5c แด๊ก 0 170428 5775730 1885579 2026-10-20T11:24:42Z Ai Ku Karng 17824 /* ภาษาแสก */ 5775730 wikitext text/x-wiki {{also/auto}} == ภาษาแสก == === รากศัพท์ === {{inh+|skb|tai-pro|*ɗekᴰ}}; ร่วมเชื้อสายกับ{{cog|th|เด็ก}}, {{cog|nod|ᨯᩮᩢ᩠ᨠ}}, {{cog|lo|ເດັກ}} === การออกเสียง === * {{IPA|skb|/dɛk̚⁴/|[dɛk̚˦˥˦]|a=บ้านบะหว้า}} === คำนาม === {{skb-noun}} # [[เด็ก]] 9k1myg3ueq0kx2npbpz8gy20gtcrb18 มอดูล:languages/data/2/extra 828 312282 5775707 5771173 2026-10-19T14:09:06Z Octahedron80 267 5775707 Scribunto text/plain local m = {} m["aa"] = { aliases = {"กาฟาร์", "Afar", "Qafar"}, } m["ab"] = { aliases = {"อับคัซ", "อับฮัซ", "Abkhaz", "Abkhazian", "Abxazo"}, } m["ae"] = { aliases = {"เซนด์", "แบกเตรียเก่า", "Avestan", "Zend", "Old Bactrian"}, } m["af"] = { aliases = {"แอฟริคานส์", "Afrikaans"}, } m["ak"] = { aliases = {"Akan"}, varieties = {"Twi-Fante", "Twi", {"Fante", "Fanti"}, "Asante", "Akuapem", "Abron", "Brong", "Wasa"}, } m["am"] = { aliases = {"Amharic"}, } m["an"] = { aliases = {"Aragonese"}, } m["ar"] = { -- FIXME, some of the following are varieties but it's not clear which ones aliases = {"อาหรับมาตรฐาน", "อาหรับวรรณกรรม", "Arabic", "Standard Arabic", "Literary Arabic", "High Arabic"}, varieties = { {"อาหรับมาตรฐานใหม่", "Modern Standard Arabic"}, {"อาหรับคลาสสิก", "Classical Arabic"}, {"อาหรับแบบยิว", "Judeo-Arabic"} }, } m["as"] = { aliases = {"Assamese", "Asamiya"}, } m["av"] = { aliases = {"Avar", "Avaric"}, } m["ay"] = { aliases = {"Aymara"}, varieties = { {"ไอย์มาราใต้", "Southern Aymara"}, {"ไอย์มาราตอนกลาง", "Central Aymara"} }, } m["az"] = { aliases = {"อาเซอรี", "อาซารี", "เติร์กแบบอาเซอรี", "เติร์กแบบอาเซอร์ไบจาน", "Azerbaijani", "Azeri", "Azari", "Azeri Turkic", "Azerbaijani Turkic"}, varieties = { {"อาเซอร์ไบจานเหนือ", "North Azerbaijani"}, {"อาเซอร์ไบจานใต้", "South Azerbaijani"}, {"Afshar", "Afshari", "Afshar Azerbaijani", "Afchar"}, {"Qashqa'i", "Qashqai", "Kashkay"}, "Sonqor" }, } m["ba"] = { aliases = {"บัชคีร์", "บัชคอร์", "Bashkir"}, } m["be"] = { aliases = {"รัสเซียขาว", "Belarusian", "Belorussian", "Belarusan", "Bielorussian", "Byelorussian", "Belarussian", "White Russian"}, } m["bg"] = { aliases = {"Bulgarian"}, } m["bh"] = { aliases = {"พิหารี", "Bihari"}, } m["bi"] = { aliases = {"Bislama"}, } m["bm"] = { aliases = {"Bambara", "Bamanankan"}, } m["bn"] = { aliases = {"เบงกาลี", "บังลา", "Bengali", "Bangla"}, } m["bo"] = { aliases = {"Tibetan"}, varieties = { {"Amdo Tibetan", "Amdo"}, "Dolpo", {"Khams", "Khams Tibetan"}, "Khamba", "Gola", "Humla", "Limi", {"Lhasa", "Lhasa Tibetan"}, "Lhomi", "Loke", "Lowa", "Mugom", "Mugu", "Mustang", "Nubri", "Panang", "Shing Saapa", "Thudam", "Tichurong", "Tseku", {"Ü", "Dbus"}, "Walungge"}, -- and "Gyalsumdo", "Lower Manang"? "Kyirong"? } m["br"] = { aliases = {"Breton"}, varieties = {{"Gwenedeg", "Vannetais"}, {"Kerneveg", "Cornouaillais"}, {"Leoneg", "Léonard"}, {"Tregerieg", "Trégorrois"}}, } m["ca"] = { aliases = {"คาตาลัน", "Catalan"}, -- don't list varieties here that are in [[Module:etymology languages/data]] } m["ce"] = { aliases = {"Chechen"}, } m["ch"] = { aliases = {"Chamorro", "Chamoru"}, } m["co"] = { aliases = {"Corsican", "Corsu"}, } m["cr"] = { aliases = {"Cree"}, } m["cs"] = { aliases = {"Czech"}, } m["cu"] = { aliases = {"สลาวิกคริสตจักรเก่า", "Old Church Slavonic", "Old Church Slavic"}, } m["cv"] = { aliases = {"Chuvash"}, } m["cy"] = { aliases = {"Welsh"}, varieties = {"Cofi Welsh", {"Dyfedeg", "Dyfed Welsh", "Demetian"}, {"Gwenhwyseg", "Gwent Welsh", "Gwentian"}, {"Gwyndodeg", "Gwynedd Welsh", "Venedotian"}, {"Powyseg", "Powys Welsh", "Powysian"}, "Patagonian Welsh"}, } m["da"] = { aliases = {"เดนิช", "Danish"}, } m["de"] = { aliases = {"เยอรมันสูง", "เยอรมันสูงใหม่", "ด็อยทช์", "German", "High German", "New High German", "Deutsch"}, varieties = {"Alsatian German", "American German", "Bavarian German", "Belgian German", "Central German", "DDR German", "East African German", "German German", "Hessian German", "Indiana German", "Liechtenstein German", "Lorraine German", "Luxembourgish German", "Namibian German", "Northern German", "Prussian German", "Silesia German", "South African German", "Southern German", "South Tyrolean German", "Switzerland German", "Texan German"}, } m["dv"] = { aliases = {"ดิเวฮิ", "Dhivehi", "Divehi", "Maldivian"}, varieties = {{"มาห์ล", "Mahal", "Mahl"}}, } m["dz"] = { aliases = {"Dzongkha"}, } m["ee"] = { aliases = {"Ewe"}, } m["el"] = { aliases = {"กรีกใหม่", "Greek", "Modern Greek", "Neo-Hellenic"}, } m["en"] = { aliases = {"อังกฤษใหม่", "English", "Modern English", "New English"}, varieties = {"Polari", "Yinglish"}, } m["eo"] = { aliases = {"Esperanto"}, } m["es"] = { aliases = {"คาสตีล", "Spanish", "Castilian"}, varieties = {{"Amazonian Spanish", "Amazonic Spanish"}, "Loreto-Ucayali Spanish"}, } m["et"] = { aliases = {"Estonian"}, } m["eu"] = { aliases = {"Basque", "Euskara"}, } m["fa"] = { aliases = {"ฟาร์ซี", "เปอร์เซียใหม่", "Persian", "Farsi", "New Persian", "Modern Persian"}, varieties = {{"Western Persian", "Iranian Persian"}, {"Eastern Persian", "Dari"}, {"Aimaq", "Aimak", "Aymaq", "Eimak"}}, } m["ff"] = { aliases = {"Fula", "Fulani"}, varieties = {"Adamawa Fulfulde", "Bagirmi Fulfulde", "Borgu Fulfulde", "Central-Eastern Niger Fulfulde", "Fulfulde", "Maasina Fulfulde", "Nigerian Fulfulde", "Pular", "Pulaar", "Western Niger Fulfulde"}, -- Maasina, etc are dialects, subsumed into this code; Pular and Pulaar are distinct } m["fi"] = { aliases = {"ฟินนิช", "ซูโอมี", "Finnish", "Suomi"}, } m["fj"] = { aliases = {"ฟิจิ", "Fijian"}, } m["fo"] = { aliases = {"Faroese", "Faeroese"}, } m["fr"] = { aliases = {"ฝรั่งเศสใหม่", "French", "Modern French"}, varieties = {"African French", "Algerian French", "Alsatian French", "Antilles French", "Atlantic Canadian French", "Belgian French", "Congolese French", "European French", "French French", "Haitian French", "Ivorian French", "Lorraine French", "Louisiana French", "Luxembourgish French", "Malian French", "Marseille French", "Missourian French", "Moroccan French", "Newfoundland French", "North American French", "Picard French", "Provençal French", "Quebec French", "Réunion French", "Rwandan French", "Tunisian French", "West African French"}, } m["fy"] = { aliases = {"ฟรีเชีย", "West Frisian", "Western Frisian", "Frisian"}, } m["ga"] = { aliases = {"ไอร์แลนด์", "แกลิกแบบไอร์แลนด์", "Irish", "Irish Gaelic", "Gaelic"}, -- calling it simply "Gaelic" is rare in Ireland, but relatively common in the Irish diaspora varieties = {{"Cois Fharraige Irish", "Cois Fhairrge Irish"}, {"Connacht Irish", "Connaught Irish"}, "Cork Irish", "Donegal Irish", "Galway Irish", "Kerry Irish", "Mayo Irish", "Munster Irish", "Ulster Irish", "Waterford Irish", "West Muskerry Irish"}, } m["gd"] = { aliases = {"Scottish Gaelic", "Gaelic", "Gàidhlig", "Scots Gaelic", "Scottish"}, varieties = {"Argyll Gaelic", "Arran Scottish Gaelic", {"Canadian Gaelic", "Canadian Scottish Gaelic", "Cape Breton Gaelic"}, "East Sutherland Gaelic", {"Galwegian Gaelic", "Gallovidian Gaelic", "Gallowegian Gaelic", "Galloway Gaelic"}, "Hebridean Gaelic", "Highland Gaelic"}, } m["gl"] = { aliases = {"Galician"}, } m["gu"] = { aliases = {"Gujarati"}, } m["gv"] = { aliases = {"แกลิกแบบเกาะแมน", "Manx", "Manx Gaelic"}, varieties = {"Northern Manx", "Southern Manx"}, } m["ha"] = { aliases = {"Hausa"}, } m["he"] = { aliases = {"อิฟริท", "Hebrew", "Ivrit"}, pseudo_families = "qfa-jew", } m["hi"] = { aliases = {"ฮินดู", "Hindi"}, other_names = {"Hindavi"}, } m["ho"] = { aliases = {"Hiri Motu", "Pidgin Motu", "Police Motu"}, } m["ht"] = { aliases = {"ครีโอลไฮติ", "ไฮติครีโอล", "เฮติครีโอล", "ครีโอล", "Haitian Creole", "Creole", "Haitian", "Kreyòl"}, } m["hu"] = { aliases = {"มอยอร์", "Hungarian", "Magyar"}, } m["hy"] = { aliases = {"อาร์มีเนียใหม่", "Armenian", "Modern Armenian"}, varieties = {{"อาร์มีเนียตะวันออก", "Eastern Armenian"}, {"อาร์มีเนียตะวันตก", "Western Armenian"}}, } m["hz"] = { aliases = {"Herero"}, } m["ia"] = { aliases = {"Interlingua"}, } m["id"] = { aliases = {"มลายูแบบอินโดนีเซีย", "Indonesian"}, } m["ie"] = { aliases = {"ออกซิเดนทาล", "Interlingue", "Occidental"}, } m["ig"] = { aliases = {"Igbo"}, } m["ii"] = { aliases = {"อี๋แบบเสฉวน", "อี๋เหนือ", "อี๋แบบเหลียงซาน", "Sichuan Yi", "Nuosu", "Nosu", "Northern Yi", "Liangshan Yi"}, } m["ik"] = { aliases = {"Inupiak", "Iñupiaq", "Inupiatun"}, } m["io"] = { aliases = {"Ido"}, } m["is"] = { aliases = {"Icelandic"}, } m["it"] = { aliases = {"อิตาเลียน", "Italian"}, } m["iu"] = { aliases = {"Inuktitut"}, varieties = { "Aivilimmiut", {"Eastern Canadian Inuktitut", "Eastern Canadian Inuit"}, {"Inuinnaq", "Inuinnaqtun"}, {"Inuvialuktun", "Inuvialuk", "Western Canadian Inuktitut", "Western Canadian Inuit", "Western Canadian Inuktun"}, "Kivallirmiut", "Natsilingmiut", "Nunavimmiutit", "Nunatsiavummiut", {"Siglitun", "Siglit"}}, } m["ja"] = { aliases = {"ญี่ปุ่นใหม่", "Japanese", "Modern Japanese", "Nipponese", "Nihongo"}, } m["jv"] = { aliases = {"Javanese"}, } m["ka"] = { aliases = {"Georgian"}, varieties = {{"จอร์เจียแบบยิว", "Judeo-Georgian", "Kivruli", "Gruzinic"}}, } m["kg"] = { aliases = {"Kongo", "Kikongo"}, varieties = {"Koongo", "Laari", "San Salvador Kongo", "Yombe"}, } m["ki"] = { aliases = {"กีกูยู", "Kikuyu", "Gikuyu", "Gĩkũyũ"}, } m["kj"] = { aliases = {"Kuanyama", "Oshikwanyama"}, } m["kk"] = { aliases = {"คาซัคสถาน", "Kazakh"}, } m["kl"] = { aliases = {"กะลาลลิซุต", "Greenlandic", "Kalaallisut"}, } m["km"] = { aliases = {"กัมพูชา", "เขมรตอนกลาง", "เขมรใหม่", "Khmer", "Cambodian", "Central Khmer", "Modern Khmer"}, } m["kn"] = { aliases = {"กันนาดา", "Kannada"}, } m["ko"] = { aliases = {"เกาหลีใหม่", "Korean", "Modern Korean"}, } m["kr"] = { aliases = {"กานัวรี", "Kanuri"}, varieties = {"Kanembu", "Bilma Kanuri", "Central Kanuri", "Manga Kanuri", "Tumari Kanuri"}, } m["ks"] = { aliases = {"กัศมีร์", "Kashmiri", "Koshur"}, } -- "kv" is treated as "koi", "kpv", see [[WT:LT]] m["kw"] = { aliases = {"คอร์นิช", "Cornish"}, } m["ky"] = { aliases = {"คีร์กีซสถาน", "Kyrgyz", "Kirghiz", "Kirgiz"}, } m["la"] = { aliases = {"ลาติน", "Latin"}, } m["lb"] = { aliases = {"Luxembourgish"}, } m["lg"] = { aliases = {"Luganda", "Ganda", "Oluganda"}, } m["li"] = { aliases = {"Limburgish", "Limburgan", "Limburgian", "Limburgic"}, } m["ln"] = { aliases = {"กาลา", "Lingala", "Ngala"}, } m["lo"] = { aliases = {"Lao", "Laotian"}, } m["lt"] = { aliases = {"Lithuanian"}, } m["lu"] = { } m["lv"] = { aliases = {"Latvian", "Lettish", "Lett"}, } m["mg"] = { aliases = {"Malagasy"}, varieties = { {"Antankarana", "Antankarana Malagasy"}, {"Bara Malagasy", "Bara"}, {"Betsimisaraka Malagasy", "Betsimisaraka"}, {"Northern Betsimisaraka Malagasy", "Northern Betsimisaraka"}, {"Southern Betsimisaraka Malagasy", "Southern Betsimisaraka"}, {"Bushi", "Shibushi", "Kibushi"}, {"Masikoro Malagasy", "Masikoro"}, "Plateau Malagasy", "Sakalava", {"Tandroy Malagasy", "Tandroy"}, {"Tanosy", "Tanosy Malagasy"}, "Tesaka", {"Tsimihety", "Tsimihety Malagasy"}}, } m["mh"] = { aliases = {"Marshallese"}, } m["mi"] = { aliases = {"เมารี", "Maori", "Māori"}, } m["mk"] = { aliases = {"Macedonian"}, } m["ml"] = { aliases = {"มลยาลัม", "มาลายาลัม", "Malayalam"}, } m["mn"] = { aliases = {"Mongolian"}, varieties = {"Khalkha Mongolian"}, } -- "mo" is treated as "ro", see [[WT:LT]] m["mr"] = { aliases = {"Marathi"}, } m["ms"] = { aliases = {"มาเลย์", "มลายู", "มลายูมาตรฐาน", "มลายูแบบมาเลเซีย", "Malay", "Malaysian", "Standard Malay"}, } m["mt"] = { aliases = {"Maltese"}, } m["my"] = { aliases = {"เมียนมา", "Burmese", "Myanmar"}, varieties = {"Mandalay Burmese", "Myeik Burmese", "Palaw Burmese", {"Rangoon Burmese", "Yangon Burmese"}, "Yaw Burmese"}, } m["na"] = { aliases = {"Nauruan", "Nauru"}, } m["nb"] = { aliases = {"บุ๊กมอล", "Norwegian Bokmål", "Bokmål"}, } m["nd"] = { aliases = {"North Ndebele"}, } m["ne"] = { aliases = {"เนปาลี", "Nepali", "Nepalese"}, varieties = {"Palpa"}, -- 3832956, former "plp", retired by ISO as spurious } m["ng"] = { } m["nl"] = { aliases = {"Dutch"}, varieties = {{"เนเธอร์แลนด์", "Netherlandic"}, {"เฟลมิช", "Flemish"}}, -- FIXME, check this } m["nn"] = { aliases = {"นอร์เวย์ใหม่", "นือนอสก์", "Norwegian Nynorsk", "New Norwegian", "Nynorsk"}, } m["no"] = { aliases = {"Norwegian"}, } m["nr"] = { aliases = {"South Ndebele"}, } m["nv"] = { aliases = {"Navajo", "Navaho", "Diné bizaad"}, } m["ny"] = { aliases = {"จีเจวา", "เชวา", "ชีเชวา", "Chichewa", "Chicheŵa", "Chinyanja", "Nyanja", "Chewa", "Cicewa", "Cewa", "Cinyanja"}, } m["oc"] = { aliases = {"อ็อกซิตัน", "Occitan"}, -- don't list varieties here that are in [[Module:etymology languages/data]] } m["oj"] = { aliases = {"Ojibwe", "Ojibway", "Ojibwa"}, varieties = {{"Chippewa", "Ojibwemowin", "Southwestern Ojibwa"}}, } m["om"] = { aliases = {"Oromo"}, varieties = {"Orma", "Borana-Arsi-Guji Oromo", "West Central Oromo"}, } m["or"] = { aliases = {"โอเดีย", "Oriya", "Odia", "Oorya"}, } m["os"] = { aliases = {"Ossetian", "Ossete", "Ossetic"}, varieties = {"Digor", "Iron"}, } m["pa"] = { aliases = {"ปัญจาบี", "Punjabi", "Panjabi"}, } m["pi"] = { aliases = {"บาฬี", "ปาลิ", "ปาลี", "ปาฬิ", "ปาฬี", "Pali"}, } m["pl"] = { aliases = {"โปลิช", "Polish"}, } m["ps"] = { aliases = {"ปัชโต", "ปัชตุน", "ปุชโต", "ปัชตู", "อัฟกัน", "Pashto", "Pashtun", "Pushto", "Pashtu", "Afghani"}, varieties = { {"ปาทานตอนกลาง", "ปัชโตตอนกลาง", "Central Pashto"}, {"ปาทานเหนือ", "ปัชโตเหนือ", "Northern Pashto"}, {"ปาทานใต้", "ปัชโตใต้", "Southern Pashto"}, {"Pukhto", "Pakhto", "Pakkhto"} }, } m["pt"] = { aliases = {"โปรตุเกสใหม่", "Portuguese", "Modern Portuguese"}, } m["qu"] = { aliases = {"Quechua"}, } m["rm"] = { aliases = {"โรแมนช์", "โรมานช์", "โรมอนช์", "รูแมนช์", "รูเมานช์", "รูเมินช์", "Romansch", "Romansh", "Rumantsch", "Romanche"}, -- don't list varieties here that are in [[Module:etymology languages/data]] varieties = {"Sursilvan-Oberland"}, -- extra variety in Glottolog; main varieties have their own etym codes } m["ro"] = { aliases = {"รูมาเนีย", "Romanian", "Daco-Romanian", "Roumanian", "Rumanian"}, } m["ru"] = { aliases = {"Russian"}, } m["rw"] = { -- don't list varieties here that are in [[Module:etymology languages/data]] aliases = {"Rwanda-Rundi"}, varieties = {{"Ha", "Giha"}, "Hangaza", "Vinza", "Shubi"}, -- Deleted "Subi", which normally refers to a different language } m["sa"] = { aliases = {"Sanskrit"}, } m["sc"] = { aliases = {"Sardinian"}, -- don't list varieties here that are in [[Module:etymology languages/data]] } m["sd"] = { aliases = {"สินธี", "Sindhi"}, } m["se"] = { aliases = {"Northern Sami", "North Sami", "Northern Saami", "North Saami"}, } m["sg"] = { aliases = {"Sango"}, } m["sh"] = { aliases = {"Serbo-Croatian", "BCS", "Croato-Serbian", "Serbocroatian"}, -- don't list varieties here that are in [[Module:etymology languages/data]] varieties = { {"บอสเนีย", "Bosnian"}, {"โครเอเชีย", "Croatian"}, {"มอนเตเนโกร", "Montenegrin"}, {"เซอร์เบีย", "Serbian"}, "Shtokavian" }, } m["si"] = { aliases = {"Sinhalese", "Singhalese", "Sinhala"}, } m["sk"] = { aliases = {"Slovak"}, } m["sl"] = { aliases = {"สโลเวเนีย", "สโลวีน", "Slovene", "Slovenian"}, } m["sm"] = { aliases = {"Samoan"}, } m["sn"] = { aliases = {"Shona"}, } m["so"] = { aliases = {"Somali"}, } m["sq"] = { aliases = {"Albanian"}, -- don't list varieties here that are in [[Module:etymology languages/data]] } m["ss"] = { aliases = {"สวาตี", "Swazi", "Swati"}, } m["st"] = { aliases = {"โซโท", "Sotho", "Sesotho", "Southern Sesotho", "Southern Sotho"}, } m["su"] = { aliases = {"Sundanese"}, } m["sv"] = { aliases = {"สวีดิช", "Swedish"}, } m["sw"] = { aliases = {"Swahili"}, varieties = {{"Settler Swahili", "KiSetla", "KiSettla", "Setla", "Settla", "Kitchen Swahili"}, {"Kihindi", "Indian Swahili"}, {"KiShamba", "Kishamba", "Field Swahili"}, {"Kibabu", "Asian Swahili"}, {"Kimanga", "Arab Swahili"}, {"Kitvita", "Army Swahili"}}, } m["ta"] = { aliases = {"Tamil"}, } m["te"] = { aliases = {"Telugu"}, } m["tg"] = { aliases = {"ทาจิกิสถาน", "เปอร์เซียแบบทาจิก", "Tajik", "Eastern Persian", "Tadjik", "Tadzhik", "Tajiki", "Tajik Persian", "Tajiki Persian"}, } m["th"] = { aliases = {"สยาม", "ไทยตอนกลาง", "Thai", "Siamese", "Central Thai"}, } m["ti"] = { aliases = {"ทิกรินยา", "Tigrinya"}, } m["tk"] = { aliases = {"เติร์กเมนิสถาน", "Turkmen"}, } m["tl"] = { aliases = {"Tagalog"}, } m["tn"] = { aliases = {"Tswana", "Setswana"}, } m["to"] = { aliases = {"ตองกา", "Tongan"}, } m["tr"] = { aliases = {"เติร์ก", "Turkish"}, } m["ts"] = { aliases = {"Xitsonga"}, } m["tt"] = { aliases = {"Tatar"}, } -- "tw" is treated as "ak", see [[WT:LT]] m["ty"] = { aliases = {"Tahitian"}, } m["ug"] = { aliases = {"Uyghur", "Uigur", "Uighur", "Uygur"}, } m["uk"] = { aliases = {"Ukrainian"}, } m["ur"] = { aliases = {"Urdu"}, } m["uz"] = { aliases = {"อุซเบกิสถาน", "Uzbek"}, varieties = { {"อุซเบกเหนือ", "Norther Uzbek"}, {"อุซเบกใต้","Southern Uzbek"} }, } m["ve"] = { aliases = {"Venda"}, } m["vi"] = { aliases = {"ญวน", "อันนัม", "อนัม", "อนำ", "อานำ", "อานัม", "Vietnamese", "Annamese", "Annamite"}, } m["vo"] = { aliases = {"Volapük"}, } m["wa"] = { aliases = {"Walloon"}, varieties = {"Liégeois", "Namurois", "Wallo-Picard", "Wallo-Lorrain"}, } m["wo"] = { aliases = {"Wolof"}, varieties = {"Gambian Wolof"}, -- the subsumed dialect 'wof' } m["xh"] = { aliases = {"Xhosa"}, } m["yi"] = { aliases = {"อิดดิช", "Yiddish"}, varieties = {"American Yiddish", "Daytshmerish Yiddish", "Mideastern Yiddish", "Galitzish", {"Northeastern Yiddish", "Litvish", "Lithuanian Yiddish"}, {"Northwestern Yiddish", "Netherlandic Yiddish"}, {"Polish Yiddish", "Poylish"}, "South African Yiddish", {"Southeastern Yiddish", "Ukrainian Yiddish", "Ukrainish"}, {"Southwestern Yiddish", "Judeo-Alsatian"}, "Udmurtish" }, pseudo_families = "qfa-jew", } m["yo"] = { aliases = {"Yoruba"}, } m["za"] = { aliases = {"Zhuang"}, -- FIXME, are all of the following distinct? varieties = { "Chongzuo Zhuang", "Guibei Zhuang", "Guibian Zhuang", "Central Hongshuihe Zhuang", "Eastern Hongshuihe Zhuang", "Lianshan Zhuang", "Liujiang Zhuang", "Liuqian Zhuang", {"Min Zhuang", "Minz Zhuang"}, "Nong Zhuang", -- see zhn "Qiubei Zhuang", "Shangsi Zhuang", {"Dai Zhuang", "Wenma", "Wenma Thu", "Wenma Zhuang"}, "Yang Zhuang", {"Yongbei Zhuang", "Wuming Zhuang", "Standard Zhuang"}, "Yongnan Zhuang", "Youjiang Zhuang", "Zuojiang Zhuang"}, } m["zh"] = { aliases = {"Chinese"}, } m["zu"] = { aliases = {"อีซีซูลู", "Zulu", "isiZulu"}, } return m k3b9c3v5lsyq239w2i49blrjtnpgq0e มอดูล:languages/data/3/g/extra 828 312319 5775700 5723238 2026-10-19T12:30:12Z Octahedron80 267 5775700 Scribunto text/plain local m = {} m["gaa"] = { } m["gab"] = { aliases = {"Southern Gabri"}, } m["gac"] = { other_names = {"Great Andamanese creole", "Great Andamanese"}, } m["gad"] = { -- not to be confused with gdk, gdg other_names = {"Cagayan"}, } m["gae"] = { aliases = {"Baniwa of Guainía", "Baniwa of Maroa", "Warekena", "Guarequena", "Arekena"}, varieties = {{"Baniwa of Guainia", "Baniwa of Guainía"}, {"Warekena of Xie", "Warekena of Xié"}}, } m["gaf"] = { other_names = {"Gendeka", "Gene"}, } m["gag"] = { aliases = {"กากาอูซียา", "Gagauz"}, } m["gah"] = { other_names = {"Gahuku"}, } m["gai"] = { varieties = {"Borewar", "Boroi", "Botbot"}, } m["gaj"] = { varieties = {"Nuclear Gadsup", "Oyana"}, } m["gak"] = { } m["gal"] = { other_names = {"Galolen", "Talur"}, } m["gam"] = { -- There is a sister language Narak, which Wikipedia implies is different from the Narake alias of Kandawo, -- but it may be confused. aliases = {"Narake"}, } m["gan"] = { aliases = {"จีนกั้น", "Gan"}, } m["gao"] = { other_names = {"Gaj"}, } m["gap"] = { } m["gaq"] = { } m["gar"] = { } m["gas"] = { } m["gat"] = { } m["gau"] = { other_names = {"Gadaba", "San Gadaba", "Gadba", "Sano", "Kondekar", "Kondkor", "Konḍekor Gadaba", "Mudhili Gadaba"}, } m["gaw"] = { aliases = {"Nobanob", "Nobnob", "Garuh"}, -- Garuh is an alias per Wikipedia varieties = {{"Ari", "Ari (Papua New Guinea)"}}, } m["gay"] = { } m["gbb"] = { } m["gbd"] = { aliases = {"Garadjari", "Karajarri"}, } m["gbe"] = { varieties = {"Gabiano", "Meiyari", "Setiali"}, } m["gbf"] = { } m["gbg"] = { other_names = {"Banziri", "Gbandere", "Gbanzili"}, } m["gbh"] = { } m["gbi"] = { varieties = {{"Kadai", "Kadai (Galela)"}, "Kadina", "Morotai", "Sopi"}, } m["gbj"] = { other_names = {"Gutob", "Gadaba", "Gadba", "Gutop", "Gudwa", "Godwa", "Gadwa", "Boi Gadaba"}, } m["gbk"] = { } m["gbl"] = { } m["gbm"] = { } m["gbn"] = { } m["gbo"] = { } m["gbp"] = { other_names = {"Bossangoa", "Gbaya of Bossangoa"}, } m["gbq"] = { other_names = {"Bozom", "Gbaya of Bozom", "Gbaya-Bozom"}, } m["gbr"] = { } m["gbs"] = { } m["gbu"] = { } m["gbv"] = { } m["gbw"] = { aliases = {"Gabi-Gabi", "Gabi Gabi", "Gubbi-Gubbi", "Gubbi Gubbi"}, -- contrast xby } m["gbx"] = { other_names = {"Houla", "Kpla", "Offra", "Ophra", "Phla", "Pla", "Popo", "Xwla"}, } m["gby"] = { } m["gcc"] = { } m["gcd"] = { } m["gce"] = { } m["gcf"] = { other_names = {"Antillean Creole French", "Guadeloupean Creole", "Guadeloupean Creole French", "Saint Lucian Creole", "Saint Lucian Creole French"}, } m["gcl"] = { } m["gcn"] = { varieties = {{"Bareji", "Bareji (Gaina)"}, "Nuclear Gaina"}, } m["gcr"] = { other_names = {"French Guianese Creole", "Guianese French Creole", "Guyanais", "Guyanese French Creole"}, } m["gct"] = { other_names = {"Alemán Coloniero"}, } m["gdb"] = { other_names = {"Pottangi Ollar Gadaba", "Ollar Gadaba", "Ollaro", "Hallari", "Allar", "Hollar Gadbas"}, } m["gdc"] = { } m["gdd"] = { } m["gde"] = { } m["gdf"] = { } m["gdg"] = { -- not to be confused with gad, gdk } m["gdh"] = { } m["gdi"] = { } m["gdj"] = { other_names = {"Gurdjar", "Kunggara"}, } m["gdk"] = { -- not to be confused with gad, gdg } m["gdl"] = { } m["gdm"] = { } m["gdn"] = { varieties = {"East Umanakaina", "Upper Ugu River"}, } m["gdo"] = { aliases = {"Ghodoberi"}, } m["gdq"] = { aliases = {"Mahri"}, } m["gdr"] = { -- per Glottolog: varieties = {"Abam", "Dorogori", "Gamaewe", "Guiam", "Iamega", "Kapal", "Kuru", "Peawa", "Podari", "Rual", {"Ume", "Ume (Papua New Guinea)"}, "Wipim", "Woigo", "Wonie", "Yuta"}, } m["gds"] = { } m["gdt"] = { } m["gdu"] = { } m["gdx"] = { } m["gea"] = { } m["geb"] = { } m["gec"] = { } m["ged"] = { } m["geg"] = { } m["geh"] = { aliases = {"Hutterite German", "Tirolean"}, } m["gei"] = { } m["gej"] = { } m["gek"] = { other_names = {"Yiwom"}, } m["gel"] = { other_names = {"Kag-Fer-Jiir-Koor-Ror-Us-Zuksun", "ut-Ma'in", "Fakai", "Kag", "Puku", "Fakanchi", "Et-Kag", "Jiir", "Gelanchi", "Et-Jiir", "Kur", "Kere", "Kar", "Keri-Ni", "Kelli-Ni", "Kelanchi", "Kelinci", "Zuksun", "Zussun", "Et-Zuksun", "Ror", "Et-Maror", "Tudanchi", "Er-Gwar", "Fer", "Fere", "Et-Fer", "Wipsi-Ni", "Kukum", "Us", "Et-Us", "Koor", "Kulu"}, } m["geq"] = { } m["ges"] = { } m["gev"] = { aliases = {"Eviya"}, } m["gew"] = { } m["gex"] = { } m["gey"] = { } m["gez"] = { aliases = {"เอธิโอเปีย", "Ge'ez", "Ethiopic", "Gi'iz", "Geez"}, } m["gfk"] = { } m["gft"] = { } m["gga"] = { } m["ggb"] = { } m["ggd"] = { } m["gge"] = { } m["ggg"] = { } m["ggk"] = { } m["ggl"] = { } m["ggt"] = { } m["ggu"] = { } m["ggw"] = { } m["gha"] = { aliases = {"Ghadamès"}, } m["ghc"] = { aliases = {"ไอริชใหม่ช่วงต้น", "แกลิกใหม่ช่วงต้น", "Classical Gaelic", "Early Modern Irish", "Early Modern Gaelic", "Hiberno-Scottish Gaelic"}, } m["ghe"] = { } m["ghh"] = { } m["ghk"] = { } m["ghl"] = { } m["ghn"] = { } m["gho"] = { } m["ghr"] = { } m["ghs"] = { varieties = {"Sekare"}, } m["ght"] = { } m["gia"] = { } m["gib"] = { } m["gid"] = { } m["gie"] = { aliases = {"Gabogbo", "Gaɓogbo"}, -- Gabogbo is Glottolog's name } m["gig"] = { } m["gih"] = { } m["gii"] = { aliases = {"Gariire"}, } m["gil"] = { aliases = {"คิริบาส", "Gilbertese", "Kiribati", "Kiribatese"}, } m["gim"] = { aliases = {"Gimi", "Gimi (Goroka)", "Papuan Gimi", "Labogai"}, varieties = {"East Gimi", "West Gimi"}, } m["gin"] = { aliases = {"Hinuq", "Hinux", "Ginukh", "Ginux"}, } m["gip"] = { aliases = {"Gimi", "Austronesian Gimi", "Loko"}, } m["giq"] = { other_names = {"Hagei", "Hakhi"}, } m["gir"] = { other_names = {"Vandu"}, } m["gis"] = { } m["git"] = { } m["giu"] = { } m["giw"] = { other_names = {"Telue", "Doulou", "Tolo"}, } m["gix"] = { } m["giy"] = { } m["giz"] = { } m["gji"] = { } m["gjk"] = { } m["gjm"] = { } m["gjn"] = { } m["gjr"] = { } m["gju"] = { aliases = {"Gojari", "Gujari", "Gujuri", "Gujjari", "Gujri", "Gurjari"}, } m["gka"] = { } m["gkd"] = { aliases = {"Magɨ"}, } m["gke"] = { } m["gkn"] = { } m["gko"] = { } m["gkp"] = { } m["glc"] = { } m["gld"] = { other_names = {"Goldi", "Hezhen"}, } m["glh"] = { } m["glj"] = { } m["glk"] = { } m["glo"] = { } m["glr"] = { } m["glu"] = { aliases = {"Sara Gula"}, } m["glw"] = { } m["gly"] = { } m["gma"] = { } m["gmb"] = { } m["gmd"] = { } m["gmg"] = { aliases = {"Magɨyi"}, } m["gmh"] = { aliases = {"Middle High German"}, } m["gml"] = { aliases = {"Middle Low German"}, } m["gmm"] = { } m["gmn"] = { } m["gmr"] = { aliases = {"Mirniny"}, } m["gmu"] = { } m["gmv"] = { aliases = {"เกมู", "Gamo", "Gemu"}, } m["gmx"] = { } m["gmy"] = { aliases = {"Mycenaean Greek"}, } m["gmz"] = { other_names = {"Mgbolizhia"}, } m["gna"] = { } m["gnb"] = { } m["gnc"] = { } m["gnd"] = { other_names = {"Zulgo", "Gemzek", "Mineo"}, } m["gne"] = { } m["gng"] = { } m["gnh"] = { } m["gni"] = { aliases = {"Guniyandi"}, } m["gnj"] = { aliases = {"Ngen"}, } m["gnk"] = { aliases = {"Gana", "Gǁana", "Gxana", "Dxana", "Xgana"}, } m["gnl"] = { } m["gnm"] = { } m["gnn"] = { } m["gnq"] = { } m["gnr"] = { } m["gnt"] = { aliases = {"Warta Thuntai"}, -- Glottolog's name; their code shows they formerly used Guntai varieties = {"Balamuk", "Bensbach", "Korombo 1", "Korombo 2", {"Wando", "Wando (Kan)"}}, } m["gnu"] = { } m["gnw"] = { other_names = {"Simba", "Simba Guarani"}, } m["gnz"] = { } m["goa"] = { } m["gob"] = { } m["goc"] = { } m["god"] = { } m["goe"] = { } m["gof"] = { aliases = {"โกฟฟา", "Gofa", "Goffa"}, } m["gog"] = { } m["goh"] = { aliases = {"เยอรมันสูงโบราณ", "Old High German"}, } m["goi"] = { aliases = {"Gobosi", "Gebusi", "Nomad"}, -- possibly Bibo and Nuclear Gobasi are the same varieties = {"Honibo", "Nuclear Gobasi", "Oiba", "Bibo"}, } m["goj"] = { } -- gok is a spurious language, see [[w:Spurious languages]] m["gol"] = { } m["gon"] = { aliases = {"Gondi"}, varieties = {"Southern Gondi", "Northern Gondi", "Aheri Gondi", "Adilabad Gondi", "Dorla Gondi", "Koya Gondi", "Maria Gondi", "Muria Gondi", "Raj Gondi"}, } m["goo"] = { } m["gop"] = { } m["goq"] = { } m["gor"] = { } m["got"] = { aliases = {"กอทิก", "กอทิค", "กอธิก", "กอธิค", "โกทิก", "โกทิค", "โกธิก", "โกธิค", "Gothic"}, } m["gou"] = { aliases = {"Gawar"}, } m["gov"] = { } m["gow"] = { aliases = {"Gorowa"}, } m["gox"] = { } m["goy"] = { } m["goz"] = { } m["gpa"] = { } m["gpn"] = { other_names = {"Tayap", "Gapun"}, pseudo_families = "paa", } m["gqa"] = { } m["gqi"] = { aliases = {"Guìqióng", "Guichong"}, } m["gqn"] = { -- a variety of 'ter' other_names = {"Guana", "Guaná", "Guana (Brazil)", "Arawakan Guana"}, } m["gqr"] = { } m["gqu"] = { other_names = {"Gao", "Aqao", "Qau Gelao"}, } m["gra"] = { } m["grc"] = { aliases = {"กรีกคลาสสิก", "Ancient Greek", "Classical Greek"}, varieties = {"Egyptian Ancient Greek"}, } m["grd"] = { } m["grg"] = { aliases = {"Madi (Papua New Guinea)", "Gira", "Girara", "Gorovu"}, } m["grh"] = { } m["gri"] = { other_names = {"Gari", "Tangarare", "Sughu", "West Guadalcanal"}, } m["grj"] = { } m["grm"] = { } m["gro"] = { } m["grq"] = { } m["grs"] = { } m["grt"] = { aliases = {"Garo", "Garrow", "Mandi", "Mande"}, } m["gru"] = { other_names = {"Soddo", "Aymälläl"}, } m["grv"] = { } m["grw"] = { } m["grx"] = { aliases = {"Muno"}, -- per Glottolog } m["gry"] = { } m["grz"] = { } m["gse"] = { } m["gsg"] = { aliases = {"Deutsche Gebärdensprache"}, } m["gsl"] = { } m["gsm"] = { } m["gsn"] = { } m["gso"] = { } m["gsp"] = { } m["gss"] = { } m["gsw"] = { aliases = {"เยอรมันแบบสวิส", "Alemannic German", "Swiss German"}, varieties = {"Walser German", "Walserdeutsch", "Walser", "Wallisertiitsch", "Italian Walser", "Pomattertitsch", "Formazza", "Kampel", "Remmaljertittschu", "Rimella", "Chalchoufe", "Titzschu", "Alagna", "Greschóneytitsch", "Greschóney", "Greschoney", "Gressoney", "Éischemtöitschu", "Issime"}, } m["gta"] = { pseudo_families = "sai", } m["gtu"] = { aliases = {"Aghu Tharnggala", "Aghu Tharnggalu", "Tharrnggala", "Gogo Mini", "Kuku Mini"}, } m["gua"] = { } m["gub"] = { } m["guc"] = { aliases = {"Guajiro", "Goajiro", "Uagiro"}, } m["gud"] = { } m["gue"] = { } m["guf"] = { } m["gug"] = { aliases = {"Paraguayan Guarani", "Jopará", "Yopará"}, } m["guh"] = { aliases = {"Sikuani"}, } m["gui"] = { other_names = {"Ava Guaraní", "Chiriguanos"}, } m["guk"] = { } m["gul"] = { other_names = {"Geechee", "Sea Island Creole English"}, } m["gum"] = { } m["gun"] = { other_names = {"Mbyá", "Mbya", "Mbyhá", "Mbiá", "Mbua", "Mbüá", "Mbü'a", "Mbü'a Guaraní", "Jeguaká Tenondé", "Bwihá", "Caiua", "Kaiwá", "Kayová", "Cahygua", "Caingua"}, } m["guo"] = { } m["gup"] = { other_names = {"Bininj Gunwok", "Bininj Gun-Wok", "Bininj Kunwok", "Bininj Kun-Wok", "Kunwinjkuan", "Kunwinjku", "Gunwinjgu", "Kuninjku", "Kundjeyhmi", "Gundjeihmi", "Manyallaluk Mayali", "Mayali", "Kundedjnjenghmi", "Kune Dulerayek", "Kune Narayek", "Kune"}, } m["guq"] = { other_names = {"Guayaki"}, } m["gur"] = { aliases = {"แฟร์แฟร์", "Frafra", "Farefare"}, other_names = {"Gurene", "Gurenɛ", "Gurenne", "Gudenne", "Gudeni", "Zuadeni", "Nankani", "Naani", "Nankanse", "Ninkare", "Booni"}, } m["gus"] = { } m["gut"] = { } m["guu"] = { aliases = {"Yãnomãmɨ", "Yãnomamɨ", "Yąnomamö", "Yanomami", "Yanomamï", "Yanomamỳ", "Occidental Yanomami", "Xamathari", "Xamatari", "Shamatari", "Xamatauteri", "Guaica", "Guajaribo", "Guaharibo"}, varieties = {"Cobari"}, } m["guv"] = { } m["guw"] = { other_names = {"Gun-Gbe", "Gungbe"}, } m["gux"] = { } m["guz"] = { } m["gva"] = { other_names = {"Guana", "Guaná", "Guana (Paraguay)", "Mascoian Guana"}, } m["gvc"] = { } m["gve"] = { } m["gvf"] = { varieties = {"Kia", "Marigl", "Nuclear Golin", "Yuri"}, } m["gvj"] = { other_names = {"Awá", "Ayaya", "Guaxare", "Wazaizara"}, varieties = {"Anambé of Ehrenreich", "Anambe of Ehrenreich"}, -- tentatively putting here, though it could also be given its own code } m["gvl"] = { } m["gvm"] = { } m["gvn"] = { } m["gvo"] = { other_names = {"Gavião of Jiparaná", "Digüt", "Ikolen", "Gavião do Rondônia", "Zoró"}, } m["gvp"] = { } m["gvr"] = { } m["gvs"] = { } m["gvy"] = { } m["gwa"] = { } m["gwb"] = { } m["gwc"] = { } m["gwd"] = { } m["gwe"] = { } m["gwf"] = { } m["gwg"] = { } m["gwi"] = { other_names = {"Gwich’in", "Kutchin", "Takudh", "Tukudh", "Loucheux"}, } m["gwj"] = { aliases = {"Gǀwi", "Gǀui", "ǀGwi", "Dcui", "Gcui", "Cgui"}, } m["gwm"] = { } m["gwn"] = { } m["gwr"] = { } m["gwt"] = { } m["gwu"] = { } m["gww"] = { } m["gwx"] = { } m["gxx"] = { } m["gya"] = { } m["gyb"] = { } m["gyd"] = { } m["gye"] = { } m["gyf"] = { } m["gyg"] = { } m["gyi"] = { } m["gyl"] = { } m["gym"] = { aliases = {"Guaymí", "Guayami", "Movere", "Chiriquí", "Valiente"}, } m["gyn"] = { aliases = {"Guyanese Creole", "Creolese", "Guyanese"}, } m["gyo"] = { } m["gyr"] = { aliases = {"Gwarayú"}, } m["gyy"] = { } m["gza"] = { } m["gzn"] = { aliases = {"Giman"}, } return m rzpms0l16hx8h4dpp0pk5d50mc2e5r2 มอดูล:languages/data/3/f/extra 828 312325 5775701 5684389 2026-10-19T12:31:30Z Octahedron80 267 5775701 Scribunto text/plain local m = {} m["faa"] = { other_names = {"Namumi", "Namome", "Namo Me", "Kaipu", "Kaibu", "Some"}, pseudo_families = "paa", } m["fab"] = { other_names = {"Fa d'Ambu"}, } m["fad"] = { aliases = {"Wagi (Papua New Guinea)"}, -- Glottolog } m["faf"] = { aliases = {"Faghani"}, } m["fag"] = { } m["fah"] = { aliases = {"Fali of Baissa"}, } m["fai"] = { varieties = {"Angkiyakmin", "Faiwolmin", "Wopkeimin"}, } m["faj"] = { aliases = {"Faita", "Kulsab"}, } m["fak"] = { aliases = {"Fang", "Fang (Cameroon)"}, } m["fal"] = { } m["fam"] = { } m["fan"] = { aliases = {"Pahouin", "Fang (Equatorial Guinea)", "Fang (Gabon)", "Fang"}, } m["fap"] = { other_names = {"Paloor", "Falor", "Palar", "Sili", "Sili-Sili", "Waro"}, } m["far"] = { } m["fau"] = { } m["fax"] = { aliases = {"Fala"}, other_names = {"Xalimego"}, } m["fay"] = { } m["faz"] = { } m["fbl"] = { aliases = {"West Albay Bikol"}, -- our former name, ISO's name } m["fcs"] = { } m["fer"] = { } m["ffi"] = { } m["fgr"] = { } m["fia"] = { } m["fie"] = { } m["fif"] = { aliases = {"Fayfi", "Fifi"}, } m["fip"] = { } m["fir"] = { } m["fit"] = { aliases = {"Tornedalen Finnish"}, } m["fiw"] = { } m["fkk"] = { aliases = {"Kirya-Konzəl"}, } m["fkv"] = { } m["fla"] = { other_names = {"Flathead", "Salish", "Séliš", "Kalispel-Pend d'oreille", "Kalispel"}, } m["flh"] = { aliases = {"Abawiri"}, -- per Glottolog } m["fli"] = { aliases = {"Fali of Mubi"}, } m["fll"] = { } m["fln"] = { other_names = {"Yalgawarra", "Wurima", "Mutumui"}, } m["flr"] = { } m["fly"] = { other_names = {"Flaaitaal"}, } m["fmp"] = { aliases = {"Feʼfeʼ"} } m["fmu"] = { } m["fng"] = { } m["fni"] = { } m["fod"] = { } m["foi"] = { varieties = {"Ifigi", {"Kafa", "Kafa (Papua New Guinea)"}, "Kutubu", {"Mubi", "Mubi (Foi)"}}, } m["fom"] = { } m["fon"] = { } m["for"] = { varieties = {"North Central Fore", "Pamusa"}, } m["fos"] = { } m["fpe"] = { } m["fqs"] = { aliases = {"Momu-Fas"}, -- Glottolog's name varieties = {"Eastern Fas", "Western Fas"}, } m["frd"] = { } m["frm"] = { aliases = {"ฝรั่งเศสยุคกลาง", "Middle French"}, } m["fro"] = { aliases = {"Old French"}, varieties = { {"Judeo-French", "Zarphatic"} }, } m["frp"] = { aliases = {"Franco-Provençal", "Arpetan", "Arpitan"}, } m["frq"] = { } m["frr"] = { aliases = {"North Frisian"}, } m["frt"] = { } m["fse"] = { } m["fsl"] = { } m["fss"] = { } m["fud"] = { aliases = {"Futunan", "Futunian", "Futuna"}, } m["fuj"] = { } m["fum"] = { } m["fun"] = { pseudo_families = "sai", } m["fur"] = { aliases = {"Friulian"}, } m["fut"] = { } m["fuu"] = { } m["fuy"] = { pseudo_families = "paa", } m["fvr"] = { } m["fwa"] = { } m["fwe"] = { } return m dzehh30v11tftg0vdotgql9nr7j5k7t มอดูล:languages/data/3/e/extra 828 312329 5775702 5684388 2026-10-19T12:57:59Z Octahedron80 267 5775702 Scribunto text/plain local m = {} m["ebg"] = { } m["ebk"] = { aliases = {"Eastern Bontok"}, } m["ebr"] = { } m["ebu"] = { } m["ecr"] = { } m["ecs"] = { } m["ecy"] = { } m["eee"] = { aliases = {"Ei", "Wuse", "Wusehua", "Kjang E"}, } m["efa"] = { } m["efe"] = { } m["efi"] = { } m["ega"] = { } m["egl"] = { aliases = {"Emilian", "Emiliano"}, } m["ego"] = { } m["egy"] = { aliases = {"อียิปต์โบราณ", "Egyptian", "Ancient Egyptian"}, } m["ehu"] = { } m["eip"] = { } m["eit"] = { } m["eiv"] = { aliases = {"Eivo"}, } m["eja"] = { } m["eka"] = { } m["eke"] = { } m["ekg"] = { varieties = {"Mapiya-Kegata", "Mee", "Simori", "Yabi"}, } m["eki"] = { } m["ekl"] = { -- FIXME, this should probably be called "Kol (Bangladesh)" as the -- canonical name, Kolhe is hardly used. aliases = {"Kol", "Kol (Bangladesh)"}, } m["ekm"] = { } m["eko"] = { varieties = {"Nathembo", "Sakati"}, -- Nathembo/Sakati, merged into eko by ISO, is 11030947 } m["ekp"] = { } m["ekr"] = { } m["eky"] = { aliases = {"Eastern Kayah"}, } m["ele"] = { } m["elh"] = { } m["eli"] = { } m["elk"] = { } m["elm"] = { } m["elo"] = { } m["elu"] = { } m["elx"] = { } m["ema"] = { -- FIXME, Emai is properly one of the dialects of Aoma other_names = {"Aoma", "Ora", "Emai-Iuleha-Ora"}, } m["emb"] = { other_names = {"Palin", "Pari", "Sangau", "Sanggau"}, aliases = {"Maloh", "Malo", "Matoh", "Mbaloh", "Memaloh"}, varieties = {"Kalis"}, } m["eme"] = { other_names = {"Emerilon", "Emerion", "Mereo", "Melejo", "Mereyo", "Teco"}, } m["emg"] = { } m["emi"] = { } m["emk"] = { } m["emm"] = { } m["emn"] = { } m["emp"] = { } m["ems"] = { aliases = {"Alutiiq"}, } m["emu"] = { } m["emw"] = { } m["emx"] = { } m["emy"] = { other_names = {"Classic Ch'olti'an", "Ch'olti'"}, } m["ena"] = { varieties = {"Aci", "Aki"}, } m["enb"] = { } m["enc"] = { } m["end"] = { } m["enf"] = { } m["enh"] = { } m["enl"] = { other_names = {"Lengua"}, } m["enm"] = { aliases = {"อังกฤษยุคกลาง", "Middle English", "Medieval English", "Mediaeval English"}, } m["enn"] = { } m["eno"] = { } m["enq"] = { -- Varieties per Glottolog varieties = {"Kaina", "Kandepe", "Kapona", "Laiagam", "Lapalama 1", "Lapalama 2", "Layapo", "Mae", "Maramuni", "Sari", "Sau", "Tayato", "Yandapo"}, } m["enr"] = { aliases = {"Emumu"}, -- Glottolog; also ISO 639-3, but Emem was a proposed new value in 2007 adopted as an -- alternative name. } m["enu"] = { aliases = {"Ximoluo"}, } m["env"] = { } m["enw"] = { aliases = {"Enwan"}, } m["enx"] = { other_names = {"Lengua"}, } m["eot"] = { other_names = {"Beti"}, } m["epi"] = { } m["era"] = { } m["erg"] = { } m["erh"] = { } m["eri"] = { other_names = {"Erima"}, } m["erk"] = { other_names = {"Efate", "Vate", "Vaté"}, } m["err"] = { pseudo_families = "aus", } m["ers"] = { other_names = {"Duoxu", "Erhsu"}, } m["ert"] = { } m["erw"] = { } m["ese"] = { other_names = {"Tiatinagua"}, } m["esh"] = { aliases = {"Eshtehardi"}, } m["esl"] = { } m["esm"] = { } m["esn"] = { } m["eso"] = { } m["esq"] = { pseudo_families = "nai", } m["ess"] = { aliases = {"Central Siberian Yup'ik", "St. Lawrence Yupik", "St. Lawrence Yup'ik", "St. Lawrence Eskimo", "Siberian Yupik", "Siberian Yup'ik", "Siberian Yupik Eskimo", "Siberian Yup'ik Eskimo", "St. Lawrence Island Eskimo", "St. Lawrence Island Yupik", "St. Lawrence Island Yup'ik"}, } m["esu"] = { aliases = {"ยูปิก", "Yup'ik", "Central Alaskan Yup'ik", "Central Yupik", "Yugtun"}, } m["esy"] = { } m["etb"] = { } m["etc"] = { } m["eth"] = { } m["etn"] = { aliases = {"Eton"}, } m["eto"] = { aliases = {"Eton"}, } m["etr"] = { aliases = {"Etoro"}, varieties = {"Eastern Edolo", "Western Edolo"}, } m["ets"] = { other_names = {"Afenmai", "Afemai", "Etsako"}, } m["ett"] = { aliases = {"อีทรัสกัน", "Etruscan"}, } m["etu"] = { } m["etx"] = { } m["etz"] = { } m["eve"] = { aliases = {"Even"}, } m["evh"] = { } m["evn"] = { aliases = {"Evenki", "Tungus"}, --Solon goes tuw-sol } m["ewo"] = { other_names = {"Kolo"}, } m["ext"] = { aliases = {"Extremaduran"}, } m["eya"] = { } m["eyo"] = { } m["eza"] = { aliases = {"Ezza", "Eza"}, } m["eze"] = { } return m 9ehbw7hlldmlfevtdl17y0355lf853k มอดูล:languages/data/3/d/extra 828 312385 5775703 5723627 2026-10-19T13:02:34Z Octahedron80 267 5775703 Scribunto text/plain local m = {} m["daa"] = { aliases = {"Dangaleat", "Dangla", "Danal", "Dangal"}, } m["dac"] = { } m["dad"] = { } m["dae"] = { } m["dag"] = { } m["dah"] = { varieties = {"Dahating", "Gohing", "Gora", "Gwahamere", "Nuclear Gwahatike"}, } m["dai"] = { } m["daj"] = { } m["dak"] = { aliases = {"Dakota"}, } m["dal"] = { } m["dam"] = { } m["dao"] = { } m["daq"] = { other_names = {"Bison-Horn Maria", "Madia", "Madiya", "Maria (India)", "Maria"}, -- the last four are also names of daq's sibling lect, mrr } m["dar"] = { aliases = {"Dargin"}, } m["das"] = { } m["dau"] = { } m["dav"] = { } m["daw"] = { } m["dax"] = { } m["daz"] = { } m["dba"] = { } m["dbb"] = { } m["dbd"] = { } m["dbe"] = { } m["dbf"] = { aliases = {"Elopi"}, } m["dbg"] = { aliases = {"Dogul Dom Dogon"}, } m["dbi"] = { } m["dbj"] = { aliases = {"อีดาฮัน", "Ida'an", "Idahan"}, } m["dbl"] = { } m["dbm"] = { } m["dbn"] = { } m["dbo"] = { } m["dbp"] = { } m["dbq"] = { } m["dbr"] = { } m["dbt"] = { aliases = {"Ben Tey Dogon"}, } m["dbu"] = { } m["dbv"] = { } m["dbw"] = { } m["dby"] = { -- alias Bainapi ? pseudo_families = "paa", } m["dcc"] = { aliases = {"Dakhani", "Dakhini", "Dakhni", "Dakkani", "Dakkini", "Dakkni", "Dakkhani", "Dakkhini", "Dakkhni", "Deccan", "Deccany", "Dekhani", "Dekhini", "Duccany", "Dukhani", "Dukhni"}, } m["dcr"] = { aliases = {"Negerhollands"}, } m["dda"] = { aliases = {"Dardi Dardi", "Tati Tati", "Dadi-Dadi", "Dardi-Dardi", "Tati-Tati"}, } m["ddd"] = { } m["dde"] = { } m["ddg"] = { } m["ddi"] = { } m["ddj"] = { } m["ddn"] = { other_names = {"Dandawa", "Dendi (West Africa)", "Dendi (Benin)"}, } m["ddo"] = { aliases = {"Tsezi", "Dido"}, } m["ddr"] = { other_names = {"Yaitmathang"}, } m["dds"] = { } m["ddw"] = { } m["dec"] = { } m["ded"] = { varieties = {"Dzeigoc", "Fanic"}, } m["dee"] = { } m["def"] = { aliases = {"Dezhfili", "Dizfuli"}, } m["deg"] = { } m["deh"] = { } m["dei"] = { } m["dem"] = { pseudo_families = "paa", } m["dep"] = { } m["der"] = { } m["des"] = { } m["dev"] = { } m["dez"] = { } m["dga"] = { } m["dgb"] = { aliases = {"Bunoge Dogon"}, } m["dgc"] = { } m["dgd"] = { } m["dge"] = { varieties = {"Degenang", "Sidbi"}, } m["dgg"] = { } m["dgh"] = { } m["dgi"] = { } m["dgk"] = { } m["dgn"] = { } m["dgr"] = { aliases = {"Tłicho", "Tlinchon"}, varieties = {"Tłı̨chǫ Yatıì", "Wıı̀lıı̀deh Yatıı̀"}, } m["dgs"] = { } m["dgt"] = { aliases = {"Ndra'ngith"}, } m["dgw"] = { aliases = {"Taungurong", "Dhagung-wurrung", "Thagungwurrung"}, } m["dgx"] = { } m["dgz"] = { } m["dhd"] = { aliases = {"Dhundari", "Jaipuri"}, } m["dhg"] = { } m["dhi"] = { } m["dhl"] = { } m["dhm"] = { other_names = {"Dhimba", "Dimba", "Oludhimba", "Oluthimba", "Otjidhimba", "Simba", "Tjimba"}, } m["dhn"] = { } m["dho"] = { } m["dhr"] = { aliases = {"Dhargari"}, } m["dhs"] = { } m["dhu"] = { } m["dhv"] = { } m["dhw"] = { other_names = {"Danwar", "Dhanwar", "Rai"}, } m["dhx"] = { } m["dia"] = { aliases = {"Alu-Sinagen"}, -- Glottolog's name } m["dib"] = { } m["dic"] = { } m["did"] = { } m["dif"] = { other_names = {"Diyari", "Dirari"}, } m["dig"] = { other_names = {"Chidigo"}, } m["dii"] = { } m["dij"] = { } m["dik"] = { } m["dil"] = { } m["dim"] = { } m["din"] = { } m["dio"] = { } m["dip"] = { } m["dir"] = { } m["dis"] = { } m["diu"] = { other_names = {"Rumanyo", "Dirico", "Dciriku", "Diriku", "Rugciriku"}, } m["diw"] = { } m["dix"] = { other_names = {"Aveteian"}, } m["diy"] = { } m["diz"] = { } m["dja"] = { aliases = {"Dja dja wurrung"}, } m["djb"] = { } m["djc"] = { } m["djd"] = { aliases = {"Djamindjung"}, } m["dje"] = { } m["djf"] = { } m["dji"] = { } m["djj"] = { aliases = {"Djeebbana"}, } m["djk"] = { other_names = {"Ndyuka"}, } m["djl"] = { } m["djm"] = { aliases = {"Jamsay Dogon", "Jamsai"}, } m["djn"] = { } m["djo"] = { } m["djr"] = { } m["dju"] = { varieties = {"Karambit", "Nuclear Kapriman"}, } m["djw"] = { } m["dka"] = { other_names = {"Dakpakha", "Takpa", "Tawang Monpa"}, } m["dkk"] = { } m["dkr"] = { } m["dks"] = { } m["dkx"] = { } m["dlg"] = { } m["dlk"] = { aliases = {"Dahlik"}, } m["dlm"] = { aliases = {"Dalmatian", "Dalmatic"}, } m["dln"] = { } m["dma"] = { } m["dmb"] = { } m["dmc"] = { other_names = {"Bosiken", "Boskien", "Dimir", "Dimer"}, -- last two are erroneous per Boyd } m["dmd"] = { aliases = {"Madhi-Madhi", "Madi Madi", "Madi-Madi", "Muthimuthi"}, } m["dme"] = { } m["dmf"] = { aliases = {"Medefidrin"}, } m["dmg"] = { aliases = {"Upper Kinabatangan"}, } m["dmk"] = { } m["dml"] = { } m["dmm"] = { } m["dmo"] = { } m["dmr"] = { } m["dms"] = { } m["dmu"] = { } m["dmv"] = { } m["dmw"] = { aliases = {"Mudbura"}, } m["dmx"] = { } m["dmy"] = { } m["dna"] = { } m["dnd"] = { } m["dne"] = { } m["dng"] = { aliases = {"Dungan"}, } m["dni"] = { varieties = {"Lower Bele", "Lower Grand Valley Hitigima", "Lower Kimbin", "Upper Bele", "Upper Pyramid"}, } m["dnj"] = { } m["dnk"] = { } m["dnn"] = { other_names = {"Dzùùn", "Dzuungoo", "Dzùùngoo"}, } m["dno"] = { aliases = {"Northern Lendu"}, } m["dnr"] = { } m["dnt"] = { } m["dnu"] = { } m["dnv"] = { } m["dnw"] = { } m["dny"] = { } m["doa"] = { varieties = {"Era", "Nuclear Dom"}, } m["dob"] = { } m["doc"] = { aliases = {"ก๊ำเหนือ", "Northern Kam", "Northern Gam", "Northern Dong"}, } m["doe"] = { } m["dof"] = { } m["doh"] = { } m["doi"] = { } m["dok"] = { } m["dol"] = { } m["don"] = { } m["doo"] = { } m["dop"] = { } m["doq"] = { } m["dor"] = { } m["dos"] = { } m["dot"] = { } m["dov"] = { other_names = {"Tokaleya", "Toka", "Leya", "Dombe"}, } m["dow"] = { } m["dox"] = { } m["doy"] = { } m["doz"] = { } m["dpp"] = { } m["drb"] = { } m["drc"] = { } m["drd"] = { } m["drg"] = { } m["dri"] = { other_names = {"C'lela", "C'Lela", "Chilela"}, } m["drl"] = { other_names = {"Darling", "Bandjigali"}, } m["drn"] = { } m["dro"] = { } m["drq"] = { } m["drs"] = { } m["dru"] = { } m["dry"] = { } m["dsb"] = { aliases = {"ซอร์บตอนล่าง", "Lower Sorbian", "Lower Lusatian", "Lower Wendish"}, } m["dse"] = { } m["dsh"] = { } m["dsi"] = { } m["dsl"] = { } m["dsn"] = { } m["dso"] = { } m["dsq"] = { } m["dta"] = { } m["dtb"] = { } m["dtd"] = { aliases = {"Diitidaht"}, } m["dth"] = { -- contrast 'rrt' } m["dti"] = { } m["dtk"] = { } m["dtm"] = { } m["dto"] = { aliases = {"Tommo So Dogon"}, } m["dtp"] = { aliases = {"กาดาซันดูซุน", "บุนดูลีวัน", "Central Dusun", "Kadazandusun", "Kadazan-Dusun", "Kadazan Dusun", "Kadazan", "Bunduliwan", "Boros Dusun"}, } m["dtr"] = { } m["dts"] = { } m["dtt"] = { } m["dtu"] = { } m["dty"] = { aliases = {"Dotyali"}, } m["dua"] = { } m["dub"] = { } m["duc"] = { pseudo_families = "paa", } m["due"] = { } m["duf"] = { aliases = {"Ndrumbea", "Ndumbea", "Dubea", "Drubea", "Païta"}, } m["dug"] = { } m["duh"] = { } m["dui"] = { } m["duk"] = { aliases = {"Duduela"}, -- old name, still used by Glottolog } m["dul"] = { } m["dum"] = { aliases = {"Middle Dutch"}, } m["dun"] = { } m["duo"] = { aliases = {"Dupaninan Agta", "Dupaningan", "Dupaninan"}, } m["dup"] = { } m["duq"] = { } m["dur"] = { } m["dus"] = { } m["duu"] = { other_names = {"Derung", "Dulong", "Trung"}, } m["duv"] = { varieties = {"Eastern Duvle", "Western Duvle"}, } m["duw"] = { } m["dux"] = { other_names = {"Duungooma"}, } m["duy"] = { } m["duz"] = { other_names = {"Duli-Gey", "Duli-Gewe"}, } m["dva"] = { } m["dwa"] = { } m["dwr"] = { aliases = {"ดาวูโร", "Dawro", "Dawuro"}, } m["dwu"] = { other_names = {"Gumatj", "Dual", "Duala", "Datiwuy", "Wulamba", "Liyagawumirr", "Marrangu", "Djampbarrpuyŋu", "Gupapuyngu", "Dhay'yi", "Dayi", "Dhalwangu"}, } m["dww"] = { } m["dwy"] = { } m["dwz"] = { other_names = {"Danuwar Rai", "Rai Danuwar"}, } m["dya"] = { } m["dyb"] = { } m["dyd"] = { } -- dyg deleted as extinct and unattested; see comment in [[Module:languages/data/3/d]] m["dyi"] = { other_names = {"Djimini Senoufo", "Jimini", "Jinmini"}, } m["dym"] = { other_names = {"Yanda", "Yanda Dom", "Yanda Dom Dogon"}, } m["dyn"] = { } m["dyo"] = { other_names = {"Diola-Fogny", "Jola", "Joola", "Diola", "Fogny"}, } m["dyu"] = { } m["dyy"] = { aliases = {"Djabugay", "Dyabugay", "Djabugai", "Tjapukai"}, varieties = {"Gulay (Dyaabugay)", "Njakali", "Nuclear Dyaabugay"}, } m["dza"] = { other_names = {"Duguza"}, } m["dzg"] = { other_names = {"Daza", "Dasaga"}, } m["dzl"] = { other_names = {"Dzalakha", "Dzalamat", "Yangtsebikha"}, } m["dzn"] = { } return m 7yco03p4h2m3b1yr50499x6g13jgypr มอดูล:languages/data/3/c/extra 828 312386 5775704 5771090 2026-10-19T13:38:55Z Octahedron80 267 5775704 Scribunto text/plain local m = {} m["caa"] = { aliases = {"Chorti", "Chʼortiʼ"}, } m["cab"] = { } m["cac"] = { } m["cad"] = { } m["cae"] = { } m["caf"] = { } m["cag"] = { } m["cah"] = { } m["caj"] = { } m["cak"] = { aliases = {"Cakchiquel", "Kakchiquel", "Cachiquel"}, } m["cal"] = { } m["cam"] = { aliases = {"Cemuhi", "Cemuhî"}, } m["can"] = { } m["cao"] = { } m["cap"] = { } m["caq"] = { aliases = {"Car Nicobarese", "Car"}, } m["car"] = { other_names = {"Carib", "Caribe", "Carina", "Cariña", "Cari'na", "Galibi", "Galibí", "Galibi Carib", "Kalihna", "Kalina", "Kali'na", "Kalinya", "Karìna", "Kari'nja", "Mainland Carib", "Maraworno", "Marworno"}, } m["cas"] = { other_names = {"Chimané", "Mosetén"}, pseudo_families = "sai", } m["cav"] = { aliases = {"Cavinena"}, } m["caw"] = { aliases = {"Callahuaya", "Callawalla", "Pohena"}, } m["cax"] = { pseudo_families = "sai", } m["cay"] = { } m["caz"] = { pseudo_families = "sai", } m["cbb"] = { } m["cbc"] = { } m["cbd"] = { other_names = {"Carihona", "Karijona", "Karihona", "Jianacoto", "Jianácoto", "Hianakoto", "Hianacoto", "Hianákoto", "Guaque", "Omagua", "Umaua", "Umawa"}, } m["cbg"] = { } m["cbi"] = { aliases = {"Cha'palaa", "Chapalaa", "Cha'palaachi", "Chapalaachi", "Cayapa"}, } m["cbj"] = { } m["cbk"] = { aliases = {"ชาวากาโน", "ชาวาคาโน", "Chavacano", "Zamboanga Chavacano"}, } m["cbl"] = { other_names = {"Bualkhaw"}, } m["cbn"] = { aliases = {"Nyah Kur", "Nyahkur"}, } m["cbo"] = { } m["cbq"] = { aliases = {"Cuba", "Shuba"}, } m["cbr"] = { aliases = {"Cashibo", "Cacataibo"}, varieties = {"Nocamán"}, } m["cbs"] = { } m["cbt"] = { } m["cbu"] = { pseudo_families = "sai", } m["cbv"] = { } m["cbw"] = { } m["cby"] = { other_names = {"Caraballo", "Yuri", "Aroje", "Yacumo", "Maku", "Macu", "Macusa"}, } m["ccc"] = { } m["ccd"] = { } m["cce"] = { } m["ccg"] = { other_names = {"Samba Daka", "Nakanyare"}, } m["cch"] = { aliases = {"Chawai"}, } m["ccj"] = { } m["ccl"] = { } m["ccm"] = { } m["cco"] = { } m["ccp"] = { aliases = {"Chakma", "Changmha"}, } m["ccr"] = { } m["cda"] = { } m["cde"] = { } m["cdf"] = { } m["cdh"] = { } m["cdi"] = { } m["cdj"] = { } m["cdm"] = { } m["cdn"] = { } m["cdo"] = { aliases = {"หมิ่นตง", "Min Dong", "Min Dong Chinese"}, } m["cdr"] = { } m["cds"] = { } m["cdy"] = { } m["cdz"] = { } m["cea"] = { } m["ceb"] = { aliases = {"เซบู", "Cebuano"}, } m["ceg"] = { } m["cen"] = { other_names = {"Cèn", "Chen"}, } m["cet"] = { aliases = {"Jalaa", "Cèntûm", "Cen Tuum"}, } m["cfa"] = { } m["cfd"] = { } m["cfg"] = { } m["cfm"] = { aliases = {"Falam"}, } m["cga"] = { } m["cgc"] = { } m["cgg"] = { } m["cgk"] = { } m["chb"] = { } m["chc"] = { } m["chd"] = { other_names = {"Oaxaca Chontal", "Oaxacan Chontal", "Chontal", "Tequistlatec", "Mountain Tequistlateco", "Highland Chontal", "Mountain Chontal"}, } m["chf"] = { aliases = {"Tabasco Chontal", "Yokot'an"}, } m["chg"] = { aliases = {"ชะกะไต", "จักกาไท", "Chagatai"}, } m["chh"] = { } m["chj"] = { } m["chk"] = { } m["chl"] = { } m["chn"] = { } m["cho"] = { } m["chp"] = { other_names = {"Dëne Sųłiné", "Dënesųłiné", "Dëne", "Dene Suline", "Denesuline", "Dene"}, } m["chq"] = { } m["chr"] = { aliases = {"Cherokee", "Tsalagi"}, varieties = {"Lower Cherokee", {"Middle Cherokee", "Kituwah", "Kituhwa", "Eastern Cherokee"}, {"Overhill Cherokee", "Otali", "Western Cherokee"}}, } m["cht"] = { } m["chw"] = { aliases = {"Chuwabu", "Cuwabo", "Cuwabu", "Cuabo", "Txuwabo", "Echuabo"}, } m["chx"] = { } m["chy"] = { aliases = {"Cheyenne"}, } m["chz"] = { } m["cia"] = { } m["cib"] = { } m["cic"] = { } m["cid"] = { pseudo_families = "nai", } m["cie"] = { } m["cih"] = { } m["cik"] = { } m["cim"] = { aliases = {"คิมเบรียน", "ซิมบรี", "ซิมเบรียน", "Cimbrian"}, varieties = {"Luserna Cimbrian", "Sette Comuni Cimbrian", "Thirteen Communities Cimbrian"}, } m["cin"] = { } m["cip"] = { } m["cir"] = { other_names = {"Tiri", "Ciri", "Tîrî", "Mea", "Méa", "Haméa"}, } m["ciy"] = { } m["cja"] = { aliases = {"Western Cham"}, } m["cje"] = { } m["cjh"] = { } m["cji"] = { } m["cjk"] = { } m["cjm"] = { aliases = {"Eastern Cham"}, } m["cjn"] = { } m["cjo"] = { aliases = {"Ashéninka Pajonal"}, } m["cjp"] = { } m["cjs"] = { aliases = {"Shor"}, } m["cjv"] = { -- Per Glottolog, Duom Kobu is a dialect group of Gomia, Kebai and Sua. varieties = {"Duom Kobu", "Gomia", "Kebai", "Sua", "Elimbari"}, } m["cjy"] = { aliases = {"จีนจิ้น", "ซานซี", "Jin", "Jinyu", "Jinhua", "Jinese", "Shanxinese", "Jin Chinese", "Jinyu Chinese"}, } m["ckb"] = { aliases = {"โซรานี", "Central Kurdish", "Sorani"}, } m["ckh"] = { aliases = {"Sak"}, } m["ckl"] = { aliases = {"Chibuk", "Chibok", "Chibbak", "Chibbuk", "Kyibaku", "Kibbaku", "Kibaku"}, } m["ckn"] = { aliases = {"Kaang"}, } m["cko"] = { aliases = {"Chakosi"}, } m["ckq"] = { } m["ckr"] = { } m["cks"] = { } m["ckt"] = { aliases = {"Chukchi"}, } m["cku"] = { } m["ckv"] = { aliases = {"กาวาลัน", "Kbalan", "Kebalan", "Kavalan"}, } m["ckx"] = { } m["cky"] = { } m["ckz"] = { aliases = {"Kaqchikel-Kʼicheʼ Mixed Language", "Cakchiquel-Quiché Mixed Language", "Cauque Mayan"}, } m["cla"] = { other_names = {"Bokkos", "Daffo-Butura", "Shagawu"}, } m["clc"] = { aliases = {"Tsilhqot'in", "Tsilhqut'in", "Tzilkotin"}, } m["cld"] = { } m["cle"] = { } m["clh"] = { } m["cli"] = { } m["clj"] = { aliases = {"Laitu"}, } m["clk"] = { other_names = {"Idu-Mishmi", "Idu Mishmi"}, } m["cll"] = { } m["clm"] = { aliases = {"Clallam", "S'Klallam"}, } m["clo"] = { other_names = {"Oaxaca Chontal", "Oaxacan Chontal", "Chontal", "Huamelultec", "Huamelula Chontal", "Coastal Chontal"}, } m["clt"] = { aliases = {"Lautu", "Lautu Chin", "Lutuv Chin"}, } m["clu"] = { } m["clw"] = { other_names = {"Chulim", "Chulym-Turkic", "Küerik", "Chulym Tatar", "Melets Tatar"}, } m["cly"] = { } m["cma"] = { aliases = {"Mạ", "Maa"}, } m["cme"] = { } m["cmg"] = { aliases = {"Classical Mongolian"}, } m["cmi"] = { } m["cml"] = { } m["cmm"] = { } m["cmn"] = { aliases = {"จีนแมนดาริน", "แมนดาริน", "Mandarin", "Mandarin Chinese", "Putonghua", "Guoyu", "Huayu", "Guanhua", "Beifanghua", "Standard Chinese"}, } m["cmo"] = { aliases = {"Central Mnong"}, } m["cmr"] = { other_names = {"Mro-Khimi Chin", "Mro", "Mro-Khimi"}, } m["cms"] = { aliases = {"Messapian"}, } m["cmt"] = { } m["cna"] = { } m["cnb"] = { aliases = {"Chinbon"}, } m["cnc"] = { aliases = {"Côông", "Coong"}, } m["cng"] = { } m["cnh"] = { aliases = {"ฮ่าค่า", "ชีนแบบฮาคา", "ชีนแบบฮ่าค่า", "ปาวี", "Lai", "Hakha Chin", "Hakha", "Haka Chin", "Haka", "Pawi"}, } m["cni"] = { aliases = {"Ashaninka"}, } m["cnk"] = { other_names = {"Khumi", "Khami", "Nisay", "Nise", "Eastern Khumi", "Eastern Khumi Chin"}, } m["cnl"] = { } m["cno"] = { } m["cnp"] = { aliases = {"Northern Pinghua", "Northern Ping"}, } m["cns"] = { varieties = {"Ajam", "Misman", "Simai"}, } m["cnt"] = { } m["cnu"] = { aliases = {"Shenwa"}, } m["cnw"] = { aliases = {"Ngawn"}, } m["cnx"] = { } m["coa"] = { aliases = {"Cocos Malay"}, } m["cob"] = { } m["coc"] = { } m["cod"] = { other_names = {"Kokama", "Kokáma", "Cocama-Cocamilla", "Kukama-Kukamiria", "Cocamilla", "Kokamíya", "Cocaima"}, } m["coe"] = { } m["cof"] = { other_names = {"Colorado", "Tsáchila"}, } m["cog"] = { aliases = {"Chong"}, } m["coh"] = { } m["coj"] = { } m["cok"] = { } m["col"] = { other_names = {"Columbia-Wenatchee", "Columbia-Moses", "Nxaamxcin", "Wenatchi", "Wenatchee"}, } m["com"] = { } m["con"] = { -- per Wikipedia [[w:Maku people]], Maku "is a pejorative term referring to several hunter-gatherer peoples of the -- upper Amazon" aliases = {"Cofan", "Kofan", "Kofane", "A'ingae", "Maku", "Macu"}, varieties = {"Aguarico", "Santa Rosa"}, pseudo_families = "sai", } m["coo"] = { } m["cop"] = { aliases = {"Coptic"}, -- Don't include varieties in [[Module:etymology languages/data]] } m["coq"] = { } m["cot"] = { } m["cou"] = { } m["cov"] = { aliases = {"Cao Miao"}, } m["cow"] = { } m["cox"] = { } m["coy"] = { } m["coz"] = { other_names = {"Chocho", "Chocholtec"}, } m["cpa"] = { } m["cpb"] = { } m["cpc"] = { aliases = {"Ajyíninka Apurucayali"}, } m["cpg"] = { aliases = {"Cappadocian"}, } m["cpi"] = { } m["cpn"] = { other_names = {"Chiripon", "Chiripong", "Kyerepong", "Okere"}, } m["cpo"] = { other_names = {"Kpeego", "Kpeen", "Numu"}, } m["cps"] = { } m["cpu"] = { } m["cpx"] = { aliases = {"หมิ่นแบบผู้เซียน", "หมิ่นผูเซียน", "Puxian Min", "Puxian", "Pu-Xian", "Pu-Xian Min", "Pu Xian", "Pu Xian Min", "Putian", "Xinghua", "Henghua", "Hinghua", "Henghwa", "Hinghwa"} } m["cpy"] = { } m["cqd"] = { } m["cra"] = { } m["crb"] = { other_names = {"Igneri", "Inyeri", "Iñeri", "Island Carib", "Kalhiphona", "Karifuna"}, } m["crc"] = { } m["crd"] = { } m["crf"] = { } m["crg"] = { } m["crh"] = { aliases = {"Crimean Tatar"}, } m["cri"] = { aliases = {"Forro", "São Tomense"}, } m["crj"] = { } m["crk"] = { } m["crl"] = { } m["crm"] = { } m["crn"] = { } m["cro"] = { other_names = {"Apsalooke"}, } m["crq"] = { } m["crr"] = { } m["crs"] = { } m["crt"] = { } m["crv"] = { other_names = {"Tutet"}, } m["crw"] = { } m["crx"] = { } m["cry"] = { } m["crz"] = { } m["csa"] = { } m["csb"] = { aliases = {"Kashubian"}, } m["csc"] = { } m["csd"] = { } m["cse"] = { } m["csf"] = { } m["csg"] = { } m["csh"] = { aliases = {"Asho"}, } m["csi"] = { } m["csj"] = { aliases = {"Songlai"}, } m["csk"] = { } m["csl"] = { } m["csm"] = { } m["csn"] = { } m["cso"] = { } m["csp"] = { aliases = {"Southern Pinghua", "Southern Ping"}, } m["csq"] = { } m["csr"] = { } m["css"] = { other_names = {"Mutsun", "San Juan Bautista Costanoan", "Rumsien", "San Carlos Costanoan", "Carmeleno"}, } m["cst"] = { } m["csv"] = { aliases = {"Sumtu"}, } m["csw"] = { } m["csx"] = { aliases = {"CSL", "CBSL", "CBDSL", "Khmer Sign Language", "KSL"}, } m["csy"] = { aliases = {"Siyin"}, } m["csz"] = { other_names = {"Hanis", "Hanis Coos"}, } m["cta"] = { } m["ctc"] = { other_names = {"Chetco", "Siletz Dee-ni", "Deeni", "Tututni", "Siletz"}, } m["ctd"] = { other_names = {"Tedim", "Tiddim", "Sukte"}, } m["cte"] = { } m["ctg"] = { } m["cth"] = { aliases = {"Thaiphum"}, } m["ctl"] = { } m["ctm"] = { aliases = {"Sitimaxa", "Čitimaaša"}, pseudo_families = "nai", } m["ctn"] = { } m["cto"] = { } m["ctp"] = { } m["cts"] = { aliases = {"Northern Catanduanes Bicolano"}, -- old name } m["ctt"] = { aliases = {"Chetti"}, } m["ctu"] = { } m["ctz"] = { } m["cua"] = { } m["cub"] = { aliases = {"Cuveo", "Kubéo", "Kubeo", "Kubéu", "Kubeu", "Cobewa", "Cobéua", "Cobeua", "Kubéwa", "Kubewa", "Kobéua", "Kobeua", "Kobewa", "Pamiwa"}, } m["cuc"] = { } m["cug"] = { other_names = {"Chung", "Chungmboko", "Chung-Mboko", "Mboko"}, } m["cuh"] = { } m["cui"] = { } m["cuj"] = { } m["cuk"] = { } m["cul"] = { other_names = {"Kulina", "Kulína", "Kulyna", "Curina", "Corina", "Korina", "Culina-Madijá", "Madijá", "Madija", "Madiha", "Madihá"}, } m["cuo"] = { other_names = {"Cumanogota", "Cumana", "Cumaná", "Kumana", "Kumaná"}, } m["cup"] = { } m["cuq"] = { aliases = {"เกอหลง", "Cun", "Gelong"}, } m["cur"] = { } m["cut"] = { } m["cuu"] = { } m["cuv"] = { } m["cuw"] = { } m["cux"] = { } m["cuy"] = { aliases = {"Cuitlateco"}, pseudo_families = "nai", } m["cvg"] = { } m["cvn"] = { } m["cwa"] = { } m["cwb"] = { } m["cwd"] = { } m["cwe"] = { } m["cwg"] = { aliases = {"Cheq Wong", "Cheq-Wong", "Ceq Wong"}, } m["cwt"] = { aliases = {"Kwatay"}, } m["cya"] = { } m["cyb"] = { aliases = {"Cayuvava", "Cayuwaba"}, pseudo_families = "sai", } m["cyo"] = { } m["czh"] = { aliases = {"Huizhou Chinese"}, } m["czk"] = { pseudo_families = "qfa-jew", } m["czn"] = { } m["czo"] = { aliases = {"หมิ่นจง", "หมิ่นกลาง", "Min Zhong", "Min Zhong Chinese"}, } m["czt"] = { aliases = {"Zotung"}, } return m o957iawy2jcb94jnd2aa8r9jc0yfz4q มอดูล:languages/data/3/b/extra 828 312387 5775705 5723662 2026-10-19T13:53:34Z Octahedron80 267 5775705 Scribunto text/plain local m = {} m["baa"] = { aliases = {"Mbambatana", "Bambatana"}, } m["bab"] = { } m["bac"] = { aliases = {"Badui"}, } m["bae"] = { aliases = {"Barawana"}, } m["baf"] = { other_names = {"Nu Baca", "Baca"}, } m["bag"] = { } m["bah"] = { aliases = {"Bahamian Creole English", "Bahamian", "Bahamas Creole", "Bahamas Creole English"}, } m["baj"] = { } m["bal"] = { aliases = {"บาลูจี", "Baluchi", "Balochi"}, varieties = {{"Southern Baluchi", "Southern Balochi"}, {"Eastern Baluchi", "Eastern Balochi"}, {"Western Baluchi", "Western Balochi"}}, } m["ban"] = { aliases = {"Balinese"}, } m["bao"] = { } m["bap"] = { } m["bar"] = { aliases = {"ออสโตร-บาวาเรีย", "Bavarian", "Austro-Bavarian"}, } m["bas"] = { aliases = {"Basa (Cameroon)", "Basa"}, } m["bau"] = { aliases = {"Bada", "Bada (Nigeria)"}, varieties = {"Mbat", "Galamkya"}, } m["bav"] = { other_names = {"Vengo"}, } m["baw"] = { } m["bax"] = { aliases = {"Bamun"}, } m["bay"] = { } m["bba"] = { aliases = {"Bariba"}, } m["bbb"] = { varieties = {"Birarie", "Muguani"}, } m["bbc"] = { aliases = {"Batak Toba"}, } m["bbd"] = { } m["bbe"] = { } m["bbf"] = { } m["bbg"] = { } m["bbh"] = { aliases = {"Bogan"}, } m["bbi"] = { aliases = {"Rombi", "Lombi", "Lombe"}, } m["bbj"] = { other_names = {"Ghomálá'", "Bamileke-Banjun"}, } m["bbk"] = { other_names = {"Kejom", "Kidzem"}, } m["bbl"] = { aliases = {"Bats", "Batsbi", "Tsova-Tush"}, } m["bbm"] = { -- name includes prefix other_names = {"Bango", "Mobango", "Ebango"}, } m["bbn"] = { } m["bbo"] = { other_names = {"Bobo Fing", "Black Bobo", "Northern Bobo Madaré", "Bobo", "Jèrè", "Kukoma", "Kure", "Sankuma", "Tankri", "Yaba"}, } m["bbp"] = { } m["bbq"] = { } m["bbr"] = { } m["bbs"] = { } m["bbt"] = { } m["bbu"] = { other_names = {"Kulung", "Kulung (Nigeria)"}, } m["bbv"] = { } m["bbw"] = { } m["bbx"] = { -- cf bvb } m["bby"] = { } m["bca"] = { other_names = {"Jianchuan Bai"}, } m["bcb"] = { } m["bcd"] = { } m["bce"] = { aliases = {"Menyam", "Mamenyan"}, -- apparently called Mengambo in French } m["bcf"] = { varieties = {"Gama", "Lower Bamu", "Nuhiro", "Sisiame", "Upper Bamu"}, } m["bcg"] = { other_names = {"Baga Binari", "Baga Mboteni"}, } m["bch"] = { } m["bci"] = { aliases = {"Baoulé", "Bawule"}, } m["bcj"] = { } m["bck"] = { } m["bcl"] = { aliases = {"บีโคลกลาง", "บีโคล", "Bikol Central", "Central Bikol", "Bikol"}, -- also "Central Bicolano"? } m["bcm"] = { other_names = {"Bannoni", "Tsunari"}, } m["bcn"] = { other_names = {"Bali", "Bali (Nigeria)", "Abaali"}, } m["bco"] = { varieties = {"Kugenesi", "Nuclear Kaluli", "Ologo", "Walulu"}, } m["bcp"] = { other_names = {"Bali (Congo)", "Bali (Democratic Republic of the Congo)", "Baali", "Kibali", "Libaali"}, } m["bcq"] = { } m["bcr"] = { other_names = {"Babine", "Witsuwit'en", "Northern Carrier", "Western Carrier", "Nadot’en-Wets’uwet’en"}, } m["bcs"] = { } m["bct"] = { } m["bcu"] = { other_names = {"Awad Bing"}, } m["bcv"] = { other_names = {"Shoo", "Minda", "Nye"}, } m["bcw"] = { } m["bcy"] = { aliases = {"Bwatiye", "Bachama"}, } m["bcz"] = { } m["bda"] = { aliases = {"Baiot", "Baiote", "Bayotte"}, } m["bdb"] = { } m["bdc"] = { } m["bdd"] = { } m["bde"] = { } m["bdf"] = { } m["bdg"] = { } m["bdh"] = { other_names = {"Baka", "Baka (Sudan)"}, } m["bdi"] = { other_names = {"Northern Burun", "Maiak", "Mayak", "Mughaja", "Kurmuk"}, } m["bdj"] = { aliases = {"Bai", "Bari"}, -- Belanda and Biri/Bviri appear to be related tribes, not aliases or varieties other_names = {"BGamba", "Gumba", "Mbegumba", "Mvegumba"}, } m["bdk"] = { aliases = {"Budugh"}, } m["bdl"] = { aliases = {"บาเจาแบบซูลาเวซี", "บาเจา", "Indonesian Bajau", "Indonesian Bajo", "Sulawesi Bajau", "Sulawesi Bajaw", "Bajau", "Bajaw", "Bajo"}, } m["bdm"] = { other_names = {"Yedina", "Kuri"}, } m["bdn"] = { } m["bdo"] = { } m["bdp"] = { } m["bdq"] = { aliases = {"บานา", "Bahnar"}, } m["bdr"] = { aliases = {"West Coast Bajau"}, } m["bds"] = { } m["bdt"] = { } m["bdu"] = { other_names = {"Bima", "Bakundu-Balue", "Balundu-Bima"}, } m["bdv"] = { } m["bdw"] = { aliases = {"Mbaham", "Mbahaam"}, } m["bdx"] = { } m["bdy"] = { } m["bdz"] = { } m["bea"] = { other_names = {"Dane-zaa", "Danezaa", "Danezaa ZaageɁ"}, } m["beb"] = { } m["bec"] = { } m["bed"] = { } m["bee"] = { } m["bef"] = { } m["beg"] = { other_names = {"Lemeting"}, } m["beh"] = { other_names = {"Berba", "Bieri"}, } m["bei"] = { aliases = {"Bekati’", "Bekatiq", "Bakati"}, } m["bej"] = { } m["bek"] = { } m["bem"] = { aliases = {"Bemba (Zambia)"}, } m["beo"] = { aliases = {"Bedamini", "Bedamuni", "Mougulu"}, -- per Wikipedia varieties = {"Komofio", "North Beami"}, } m["bep"] = { aliases = {"Behoa"}, } m["beq"] = { other_names = {"Bembe", "Kibeembe"}, } m["bes"] = { } m["bet"] = { other_names = {"Bété of Guiberoua", "Western Bété"}, } m["beu"] = { aliases = {"เบอลาการ์", "Blagar", "Belagar"}, varieties = {"Coastal Blagar", -- Coastal Blagar varieties: "East-Northeast Pura", "Melangvala-Bakalang", "North-Northwest Pura", "Southern Pura", "Hinterland Blagar", -- Hinterlang Blagar varieties: "Northern Hinterland Blagar", "Southern Hinterland Blagar", }, } m["bev"] = { other_names = {"Bété of Daloa", "Northern Bété"}, } m["bew"] = { aliases = {"บาตาเวีย", "จาการ์ตา", "มลายูแบบเบอตาวี", "มลายูแบบบาตาเวีย", "มลายูแบบจาการ์ตา", "Betawi", "Batavian", "Jakartanese", "Betawi Malay", "Batavian Malay", "Jakarta Malay"}, } m["bex"] = { } m["bey"] = { aliases = {"Beli", "Beli (Papua New Guinea)", "Akuwagel"}, } m["bez"] = { other_names = {"Bena", "Bena (Tanzania)"}, } m["bfa"] = { other_names = {"Pojulu", "Pöjulu", "Fadjulu", "Fajelu", "Madi", "Pajulu"}, } m["bfb"] = { } m["bfc"] = { other_names = {"Bijiang Bai", "Lemo"}, } m["bfd"] = { } m["bfe"] = { } m["bff"] = { } m["bfg"] = { } m["bfh"] = { aliases = {"Mblafe-Ránmo"}, -- Glottolog's name varieties = {"Mblafe", "Ránmo"}, } m["bfi"] = { aliases = {"BSL"}, } m["bfj"] = { } m["bfk"] = { } m["bfl"] = { } m["bfm"] = { } m["bfn"] = { } m["bfo"] = { } m["bfp"] = { } m["bfq"] = { aliases = {"Badaga"}, } m["bfr"] = { } m["bfs"] = { other_names = {"Dali Bai"}, } m["bft"] = { aliases = {"Balti"}, } m["bfu"] = { } m["bfw"] = { other_names = {"Remo"}, } m["bfx"] = { } m["bfy"] = { } m["bfz"] = { } m["bga"] = { other_names = {"Wurə-Gwamhyə-Mba", "Lyase"}, } m["bgb"] = { } m["bgc"] = { aliases = {"หรยาณวี", "Haryanvi"}, } m["bgd"] = { } m["bge"] = { } m["bgf"] = { } m["bgg"] = { } m["bgi"] = { } m["bgj"] = { } m["bgk"] = { } m["bgl"] = { aliases = {"Bo (Laos)"}, -- if 'bpw' is added, the disambig name will have to be made canonical } m["bgo"] = { } m["bgq"] = { } m["bgr"] = { other_names = {"Bawm", "Banjogi"}, } m["bgs"] = { } m["bgt"] = { aliases = {"Bugotu"}, } m["bgu"] = { aliases = {"Kamkam"}, } m["bgv"] = { } m["bgw"] = { } m["bgx"] = { aliases = {"Balkan Turkic"}, } m["bgy"] = { } m["bgz"] = { } m["bha"] = { } m["bhb"] = { } m["bhc"] = { } m["bhd"] = { aliases = {"Bhadarwahi"}, } m["bhe"] = { } m["bhf"] = { aliases = {"Busa"}, -- per Glottolog pseudo_families = "paa", } m["bhg"] = { varieties = {"Ambasi", "Binandere Proper"}, } m["bhh"] = { aliases = {"Bukhori", "Bukharian", "Bukharic", "Buchari", "Buchori", "Bucharian", "Bucharic"}, pseudo_families = "qfa-jew", } m["bhi"] = { } m["bhj"] = { } m["bhl"] = { varieties = {"Bim", "Nimtep Weng"}, } m["bhm"] = { aliases = {"Batahari", "Bat'hari", "Bautahari", "Botahari", "Bathara"}, } m["bhn"] = { } m["bho"] = { aliases = {"โภชปุรี", "Bhojpuri"}, } m["bhp"] = { aliases = {"Bimanese"}, } m["bhq"] = { aliases = {"Tukang Besi South"}, -- varieties = {"Popalia"}, - - double check; listed as a language by Collins (1983), identified with bhq by ABVD } m["bhs"] = { } m["bht"] = { } m["bhu"] = { } m["bhv"] = { } m["bhw"] = { } m["bhx"] = { -- spurious? other_names = {"Bhalay-Gowlan"}, } m["bhy"] = { other_names = {"Ebhele", "Piri", "Kipiri"}, } m["bhz"] = { aliases = {"Bada (Indonesia)"}, } m["bia"] = { } m["bib"] = { } m["bid"] = { } m["bie"] = { } m["bif"] = { } m["big"] = { varieties = {"Ngowiye", "Yongolei"}, } m["bij"] = { other_names = {"Kwang", "Vaghat-Ya-Bijim-Legeri", "Vaghat", "Ya", "Bijim", "Legeri"}, } m["bil"] = { aliases = {"Bille"}, } m["bim"] = { } m["bin"] = { other_names = {"Bini"}, } m["bio"] = { other_names = {"Biaka"}, } m["bip"] = { other_names = {"Forest Bira"}, } m["biq"] = { } m["bir"] = { varieties = {"Pikaru"}, } m["bit"] = { varieties = {"Bitara"}, } m["biu"] = { } m["biv"] = { } m["biw"] = { aliases = {"Kol"}, } m["bix"] = { } m["biy"] = { } m["biz"] = { } m["bja"] = { aliases = {"Buja"}, } m["bjb"] = { other_names = {"Parnkalla", "Banggarla", "Parnkala", "Parnkarla", "Barngala", "Bangala", "Bungala", "Bungela", "Banggala", "Bahngala", "Pankalla", "Punkalla", "Pangkala", "Pankarla", "Parkalla", "Pakarla", "Bungeha", "Bahanga-La", "Kortabina", "Arkaba-tura", "Port Lincon", "Kooapidna", "Punkirla", "Wanbirujurari", "Willara", "Willeuroo"}, } m["bjc"] = { other_names = {"Bareji", "Aga Bereho"}, } m["bje"] = { other_names = {"Biao Min", "Jiaogong Mian"}, } m["bjf"] = { pseudo_families = "qfa-jew", } m["bjg"] = { aliases = {"Bijago"}, } m["bjh"] = { } m["bji"] = { } m["bjj"] = { } m["bjk"] = { } m["bjl"] = { aliases = {"Bulu (Papua New Guinea)", "Bulu"}, } m["bjm"] = { } m["bjn"] = { aliases = {"Banjarese", "Banjar"}, } m["bjo"] = { } m["bjp"] = { } m["bjr"] = { } m["bjs"] = { other_names = {"Barbadian", "Barbadian Creole", "Barbadian Creole English"}, } m["bjt"] = { } m["bju"] = { } m["bjv"] = { } m["bjw"] = { } m["bjx"] = { } m["bjy"] = { } m["bjz"] = { varieties = {"Bareji", "Mado", "Nuclear Baruga", "Tafota Baruga"}, } m["bka"] = { other_names = {"Nyakyak", "Bambuka"}, } m["bkc"] = { aliases = {"Baka (Cameroon)"}, } m["bkd"] = { aliases = {"บูกิด", "บูกิดโนน", "Bukid", "Binukid", "Bukidnon"}, } m["bkf"] = { } m["bkg"] = { } m["bkh"] = { } m["bki"] = { } m["bkj"] = { other_names = {"Pande-Gongo"}, } m["bkk"] = { -- written in Balti script } m["bkl"] = { } m["bkm"] = { aliases = {"Kom"}, } m["bkn"] = { aliases = {"Bekatan", "Bakatan", "Baketan"}, } m["bko"] = { } m["bkp"] = { aliases = {"Boko", "Boko (Congo)", "Boko (Democratic Republic of the Congo)"}, } m["bkq"] = { aliases = {"Bakairi", "Bacairí", "Bacairi"}, } m["bkr"] = { } m["bks"] = { } m["bkt"] = { } m["bku"] = { } m["bkv"] = { } m["bkw"] = { aliases = {"Bekwil"}, } m["bkx"] = { } m["bky"] = { } m["bkz"] = { } m["bla"] = { other_names = {"Siksika", "Blackfeet"}, } m["blb"] = { pseudo_families = "paa", } m["blc"] = { aliases = {"Nuxálk", "Bella Coola"}, } m["bld"] = { } m["ble"] = { } m["blf"] = { } m["blg"] = { } m["blh"] = { other_names = {"Belle", "Belleh", "Kowaao", "Kwaa"}, } m["bli"] = { other_names = {"Lia"}, } m["blj"] = { aliases = {"Bolongan"}, } m["blk"] = { aliases = {"ปะโอ", "กะเหรี่ยงดำ", "Pa'o Karen", "Pa'o", "Black Karen"}, } m["bll"] = { } m["blm"] = { aliases = {"Beli", "Behli", "Beili", "Jur Beli", "Beli (Sudan)", "'Bëlï", "´Bëlï", "’Bëlï"}, } m["bln"] = { aliases = {"Southern Catanduanes Bicolano"}, -- old name other_names = {"Virac"}, } m["blo"] = { other_names = {"Bassila", "Basila", "Baseca", "Ouinji-Ouinji", "Winji-Winji"}, } m["blp"] = { } m["blq"] = { } m["blr"] = { other_names = {"Bulang", "Pulang", "Kontoi", "Shinman"}, } m["bls"] = { } m["blt"] = { aliases = {"ไทน้อย", "Tai Noi", "Tai Dam", "Black Tai"}, } m["blv"] = { other_names = {"Bolo", "Ngoya", "Kibala-Ngoya"}, } m["blw"] = { } m["blx"] = { } m["bly"] = { aliases = {"Nootre"}, } m["blz"] = { } m["bma"] = { } m["bmb"] = { other_names = {"Bemba", "Kinyabemba"}, } m["bmc"] = { } m["bmd"] = { aliases = {"Baga Maduri", "Baga Mandari"}, } m["bme"] = { } m["bmf"] = { } m["bmg"] = { } m["bmh"] = { other_names = {"Bemal"}, } m["bmi"] = { } m["bmj"] = { } m["bmk"] = { } m["bml"] = { } m["bmn"] = { aliases = {"Bina (New Guinea)", "Bina (Papua New Guinea)"}, } m["bmo"] = { } m["bmp"] = { } m["bmq"] = { } m["bmr"] = { } m["bmt"] = { } m["bmu"] = { aliases = {"Burum-Mindik"}, varieties = {"Siawari", "Somba"}, } m["bmv"] = { } m["bmw"] = { } m["bmx"] = { } m["bmz"] = { } m["bna"] = { } m["bnb"] = { } m["bnd"] = { aliases = {"Banda (Indonesia)"}, } m["bne"] = { } m["bnf"] = { other_names = {"Bonfia"}, } m["bng"] = { } m["bni"] = { other_names = {"Bobangi", "Bubangi"}, } m["bnj"] = { } m["bnk"] = { } m["bnl"] = { } m["bnm"] = { } m["bnn"] = { } m["bno"] = { aliases = {"บันโตอาโนน", "บีนันโตอาโนน", "Asi", "Bantoanon", "Binantoanon"}, } m["bnp"] = { } m["bnq"] = { } m["bnr"] = { } m["bns"] = { other_names = {"Bundelkhandi"}, } m["bnu"] = { } m["bnv"] = { aliases = {"Bonerif"}, -- Glottolog } m["bnw"] = { } m["bnx"] = { } m["bny"] = { } m["bnz"] = { } m["boa"] = { } m["bob"] = { } m["boe"] = { } m["bof"] = { } m["bog"] = { } m["boh"] = { } m["boi"] = { } m["boj"] = { } m["bok"] = { } m["bol"] = { aliases = {"Bole"}, } m["bom"] = { aliases = {"Birom"}, } m["bon"] = { varieties = {"Boze-Giringarede", "Irupi-Drageli", "Kunini", "Masingle", "Sebe", "Sogal", "Tate"}, } m["boo"] = { } m["bop"] = { } m["boq"] = { pseudo_families = "paa", } m["bor"] = { } m["bot"] = { } m["bou"] = { aliases = {"Boondei", "Boondéi"}, } m["bov"] = { other_names = {"Bowili", "Bowiri", "Liwuli", "Siwuri", "Tuwili", "Tora"}, } m["bow"] = { other_names = {"Bothar"}, } m["box"] = { aliases = {"Bwamu"}, } m["boy"] = { aliases = {"Bodo (Central African Republic)", "Bodo"}, } m["boz"] = { } m["bpa"] = { other_names = {"Dakaka", "South Ambrym", "Baiap"}, } m["bpd"] = { } m["bpe"] = { aliases = {"Barupu", "Warapu"}, varieties = {"Barapu-Warapu", "Pou"}, -- per Glottolog } m["bpg"] = { } m["bph"] = { aliases = {"Botlix"}, } m["bpi"] = { } m["bpj"] = { } m["bpk"] = { } m["bpl"] = { } m["bpm"] = { } m["bpn"] = { } m["bpo"] = { } m["bpp"] = { aliases = {"Kaure-Narau"}, -- Glottolog's term } m["bpq"] = { } m["bpr"] = { } m["bps"] = { } m["bpt"] = { } m["bpu"] = { } m["bpv"] = { } -- bpw: Bo (Papua New Guinea): excluded in 2012 and re-evaluated in 2025 with the same conclusion; per Wikipedia: "It is -- essentially undocumented, and its status as a separate language is unconfirmed." m["bpx"] = { } m["bpy"] = { aliases = {"Bishnupriya", "Manipuri Bishnupriya"}, } m["bpz"] = { } m["bqa"] = { } m["bqb"] = { } m["bqc"] = { aliases = {"Boko (Benin)"}, } m["bqd"] = { } m["bqf"] = { } m["bqg"] = { } m["bqh"] = { } m["bqi"] = { } m["bqj"] = { } m["bqk"] = { } m["bql"] = { aliases = {"Bilakura", "Karen"}, } m["bqm"] = { } m["bqn"] = { } m["bqo"] = { } m["bqp"] = { } m["bqq"] = { } m["bqr"] = { } m["bqs"] = { } m["bqt"] = { } m["bqu"] = { } m["bqv"] = { } m["bqw"] = { aliases = {"Buru"}, } m["bqx"] = { } m["bqy"] = { } m["bqz"] = { } m["bra"] = { aliases = {"Braj", "Braj Bhasha"}, } m["brb"] = { other_names = {"Laveh", "Rawe", "Brao"}, } m["brc"] = { aliases = {"Berbice Dutch", "Berbice Dutch Creole", "Berbice Creole"}, } m["brd"] = { } m["brf"] = { aliases = {"Bira"}, } m["brg"] = { aliases = {"Bauré"}, } m["brh"] = { aliases = {"บราฮุย", "Brahui"}, } m["bri"] = { } m["brj"] = { } m["brk"] = { aliases = {"Birked"}, } m["brl"] = { aliases = {"Sebirwa"}, } m["brm"] = { } m["brn"] = { } m["bro"] = { } m["brp"] = { varieties = {"Marikai", "Sipisi"}, } m["brq"] = { } m["brr"] = { } m["brs"] = { other_names = {"Ende", "West Kaili"}, } m["brt"] = { other_names = {"Njwande"}, } m["bru"] = { aliases = {"Eastern Bru"}, } m["brv"] = { aliases = {"Western Bru"}, } m["brw"] = { } m["brx"] = { aliases = {"Bodo", "Bodo (India)", "Boro", "Boro (India)", "Mech"}, } m["bry"] = { } m["brz"] = { } m["bsa"] = { pseudo_families = "paa", } m["bsb"] = { } m["bsc"] = { other_names = {"Basari", "Oniyan", "Onian", "Onëyan", "Ayan", "Biyan", "Wo"}, } m["bse"] = { other_names = {"Babessi"}, } m["bsf"] = { } m["bsg"] = { } m["bsh"] = { other_names = {"Kati"}, } m["bsi"] = { } m["bsj"] = { } m["bsk"] = { } m["bsl"] = { } m["bsm"] = { } m["bsn"] = { } m["bso"] = { } m["bsp"] = { } m["bsq"] = { } m["bsr"] = { aliases = {"Basa-Kontagora"}, } m["bss"] = { } m["bst"] = { aliases = {"Basketto", "Baskatta", "Mesketo", "Misketto"}, } m["bsu"] = { } m["bsv"] = { } m["bsw"] = { } m["bsx"] = { } m["bsy"] = { } m["bta"] = { } m["btc"] = { aliases = {"Bati"}, } m["btd"] = { aliases = {"Batak Dairi"}, } m["bte"] = { } m["btf"] = { } m["btg"] = { } m["bth"] = { } m["bti"] = { } m["btj"] = { } m["btm"] = { aliases = {"Batak Mandailing", "Mandailing"}, } m["btn"] = { } m["bto"] = { aliases = {"Iriga Bicolano"}, -- old name } m["btp"] = { } m["btq"] = { } m["btr"] = { } m["bts"] = { aliases = {"Batak Simalungun", "Simalungun"}, } m["btt"] = { } m["btu"] = { } m["btv"] = { } m["btw"] = { } m["btx"] = { aliases = {"Batak Karo"}, } m["bty"] = { } m["btz"] = { aliases = {"Batak Alas-Kluet"}, } m["bua"] = { aliases = {"Buriat", "Buryat"}, } m["bub"] = { } m["bud"] = { other_names = {"Tobote", "Ncam", "Basar", "Basari"}, } m["bue"] = { } m["buf"] = { } m["bug"] = { aliases = {"Buginese"}, } m["buh"] = { other_names = {"Yuno"}, } m["bui"] = { } m["buj"] = { } m["buk"] = { aliases = {"Bukaua", "Bugawac", "Gawac"}, } m["bum"] = { aliases = {"Bulu"}, } m["bun"] = { } m["buo"] = { } m["bup"] = { } m["buq"] = { aliases = {"Barem", "Bunabun", "Bububun", "Bunubun"}, } m["bus"] = { } m["but"] = { } m["buu"] = { } m["buv"] = { } m["buw"] = { } m["bux"] = { } m["buy"] = { other_names = {"Mani", "Bullom So", "Mandingi"}, } m["bva"] = { } m["bvb"] = { } m["bvc"] = { } m["bvd"] = { aliases = {"Mbaenggu", "Baegu"}, } m["bve"] = { } m["bvf"] = { } m["bvg"] = { } m["bvh"] = { } m["bvi"] = { } m["bvj"] = { } m["bvk"] = { } m["bvl"] = { } m["bvm"] = { } m["bvn"] = { varieties = {"Kasmin", "Masan"}, } m["bvo"] = { } m["bvp"] = { } m["bvq"] = { } m["bvr"] = { } m["bvt"] = { aliases = {"Bati"}, } m["bvu"] = { } m["bvv"] = { } m["bvw"] = { } m["bvx"] = { aliases = {"Dibole", "Bole"}, } m["bvy"] = { other_names = {"Babay", "Utudnon", "Leyte"}, } m["bvz"] = { varieties = {"Aumenefa", "Gesda Dae", {"Neao", "Neao (Indonesia)"}}, } m["bwa"] = { } m["bwb"] = { } m["bwc"] = { } m["bwd"] = { aliases = {"Bwaidoga"}, } m["bwe"] = { } m["bwf"] = { aliases = {"Bosilewa"}, } m["bwg"] = { } m["bwh"] = { } m["bwi"] = { other_names = {"Baniba", "Baniva", "Carutana", "Carútana", "Carúzana", "Izaneni", "Karu", "Tapuya"}, } m["bwj"] = { } m["bwk"] = { } m["bwl"] = { } m["bwm"] = { other_names = {"Mundugumor"}, } m["bwn"] = { aliases = {"Hm Nai", "Ng-nai", "Wunai"}, } m["bwo"] = { other_names = {"Boro", "Boro (Ethiopia)", "Borna", "Bworo", "Sinicho"}, } m["bwp"] = { aliases = {"Mandobo Bawah"}, varieties = {"Central Mandobo", "Kaisah", "Osso", "Selil", "Tinggam", -- Central Mandobo varieties "Mariam Mandobo", "Kouh", "Mariam", -- Mariam Mandobo varieties }, } m["bwq"] = { other_names = {"Bobo Madaré", "Southern Bobo Madaré", "Bobo", "Syabéré", "Sya", "Benge", "Sogokiré", "Voré", "Zara", "Bobo Jula", "Jula"}, } m["bwr"] = { other_names = {"Bura-Pabir", "Pabir", "Burra"}, } m["bws"] = { } m["bwt"] = { } m["bwu"] = { aliases = {"Buli"}, } m["bww"] = { } m["bwx"] = { other_names = {"Bu Nao", "Bunu", "Dongnu", "Dahua Dongnu", "Tung Nu", "Bunuo", "Pu No", "Naoklao", "Baonao", "Nao Klao", "Numao", "Nu Mhou", "Nunu", "Lingyun Nunu", "Nu Nu"}, } m["bwy"] = { } m["bwz"] = { } m["bxa"] = { other_names = {"Tairaha"}, } m["bxb"] = { } m["bxc"] = { } m["bxd"] = { } m["bxe"] = { other_names = {"Birale", "Birayle"}, } m["bxf"] = { } m["bxg"] = { aliases = {"Ngala"}, } m["bxh"] = { } m["bxi"] = { } m["bxj"] = { } m["bxk"] = { } m["bxl"] = { aliases = {"Blé"}, } m["bxn"] = { } m["bxo"] = { aliases = {"Barikanci", "Barikanchi Pidgin"}, } m["bxp"] = { } m["bxq"] = { } m["bxs"] = { } m["bxv"] = { } m["bxw"] = { aliases = {"Bankagooma"}, } m["bxz"] = { -- Glottolog splits Binahari into two languages varieties = {{"Ma", "Binahari-Ma"}, {"Neme", "Binahari-Neme"}}, } m["bya"] = { other_names = {"Batak"}, } m["byb"] = { } m["byc"] = { } m["byd"] = { } m["bye"] = { varieties = {"Bouye", "Maurom"}, } m["byf"] = { } m["byg"] = { } m["byh"] = { } m["byi"] = { other_names = {"Buya"}, } m["byj"] = { aliases = {"Bina", "Bina (Nigeria)"}, } m["byk"] = { } m["byl"] = { } m["bym"] = { } m["byn"] = { aliases = {"Bilin", "Bilen", "Belen", "Bilein"}, } m["byo"] = { other_names = {"Piyo", "Biyue"}, } m["byp"] = { } m["byq"] = { aliases = {"Basai"}, } m["byr"] = { varieties = {"Gulicha", "Nuclear Baruya", "Usirampia", "Wantakia"}, } m["bys"] = { } m["byt"] = { } m["byv"] = { } m["byw"] = { } m["byx"] = { other_names = {"Kakat", "Baining"}, } m["byz"] = { } m["bza"] = { aliases = {"Gbandi"}, } m["bzb"] = { } m["bzd"] = { } m["bze"] = { } m["bzf"] = { varieties = {"Central Boikin", "East Boikin", "Haripmor", "Island Boikin", "Kunai", "Kwusaun", {"Munji", "Munji (Papua New Guinea)"}, "West Boikin"}, } m["bzg"] = { other_names = {"Favorlang", "Poavosa", "Taokas"}, } m["bzh"] = { } m["bzi"] = { aliases = {"Bisu", "Mbisu"}, } m["bzj"] = { aliases = {"Belizean Creole English", "Belizean Kriol", "Belize Kriol English", "Kriol"}, } m["bzk"] = { other_names = {"Miskito Coast Creole", "Nicaraguan Creole English", "Nicaragua Creole English"}, } m["bzl"] = { -- supposedly also called "Bolano", but I can find no evidence of that other_names = {"Boano", "Austronesian Boano", "Totoli Boano"}, } m["bzm"] = { } m["bzn"] = { other_names = {"Boano", "Austronesian Boano", "Seram Boano"}, } m["bzo"] = { } m["bzp"] = { varieties = {"Barau", "Weriagar"}, } m["bzq"] = { aliases = {"Buli"}, } m["bzr"] = { } m["bzs"] = { other_names = {"LGB", "LSB", "LSCB", "Libras"}, } m["bzu"] = { other_names = {"Taurap"}, pseudo_families = "paa", } m["bzv"] = { other_names = {"Naami"}, } m["bzw"] = { other_names = {"Basa (Nigeria)", "Basa-Benue"}, } m["bzx"] = { } m["bzy"] = { } m["bzz"] = { } return m o2tmckun936ux1ypg6cebebgeg7ojd6 มอดูล:languages/data/3/a/extra 828 312391 5775706 5770094 2026-10-19T13:58:34Z Octahedron80 267 5775706 Scribunto text/plain local m = {} m["aaa"] = { aliases = {"Otuo"}, } m["aab"] = { other_names = {"Alumu", "Tesu"}, } m["aac"] = { } m["aad"] = { other_names = {"Alai"}, } m["aaf"] = { aliases = {"Eranadan"}, } m["aag"] = { } m["aah"] = { other_names = {"Abu' Arapesh", "Ua"}, } m["aai"] = { other_names = {"Arifama", "Miniafia"}, } m["aak"] = { aliases = {"Angave"}, varieties = {"Ankai", "Bu'u", "Miyatnu", "Sawuve", "Wiyagwa", "Wunavai"}, } m["aal"] = { } m["aan"] = { aliases = {"Anambe", "Anambe of Cairari"}, } m["aap"] = { other_names = {"Arára"}, } m["aaq"] = { other_names = {"Eastern Abenaki", "Eastern Abnaki"}, } m["aas"] = { other_names = {"Aasáx", "Aasá", "Asa", "Asá", "Asax", "Aramanik", "Laramanik"}, } m["aau"] = { } m["aaw"] = { other_names = {"Arove", "Arawe"}, } m["aax"] = { aliases = {"Mandobo Atas"}, varieties = {"Langgoan", "Maju Mandobo", "Wariktop", "Winiktit"}, } m["aaz"] = { } m["aba"] = { aliases = {"อับเบ", "Abé", "Abbé", "Abbey", "Abi"}, } m["abb"] = { other_names = {"Abo", "Bo", "Abaw", "Miang", "Mandouka"}, } m["abc"] = { } m["abd"] = { other_names = {"Manide"}, } m["abe"] = { other_names = {"Western Abenaki", "Abnaki", "Western Abnaki"}, } m["abf"] = { } m["abg"] = { } m["abh"] = { aliases = {"Tajiki Arabic"}, } m["abi"] = { } m["abj"] = { other_names = {"Bea", "Aka-Bea-da", "Akabeada", "Aka-Bia", "Bia", "Aka-Bia-da", "Akabiada", "Bojingiji"}, } m["abl"] = { other_names = {"Pepadun", "Lampung Nyo"}, } m["abm"] = { } m["abn"] = { } m["abo"] = { aliases = {"Abɔ̃"}, } m["abp"] = { } m["abq"] = { } m["abs"] = { } m["abt"] = { varieties = {"Maprik", "Wingei", "Wosera-Kamu", "Wosera-Mamu"}, } m["abu"] = { } m["abv"] = { aliases = {"Baharna Arabic", "Bahrani Arabic"}, } m["abw"] = { aliases = {"Abasakur"}, } m["abx"] = { } m["aby"] = { varieties = {"Auwaka", "Buniabura", {"Doma", "Doma (Papua New Guinea)"}, "Jari", "Mori"}, } m["abz"] = { varieties = {"Alakaman", "Atimelang", "Kobola", "Papuna"}, } m["aca"] = { aliases = {"Achawa", "Ajagua", "Axagua", "Achugua", "Ajaga", "Xagua", "Jagua"}, } m["acb"] = { } m["acd"] = { aliases = {"Kyode", "Gichode"}, } m["ace"] = { aliases = {"อาเจะห์", "Acehnese", "Achinese", "Atjehnese"}, } m["ach"] = { aliases = {"Acoli", "Shuli", "Acooli"}, } m["aci"] = { other_names = {"Cari", "Aka-Kari", "Kari", "Chariar"}, } m["ack"] = { other_names = {"Kora"}, } m["acl"] = { other_names = {"Bale", "Bele", "Akar-Bele", "Balawa", "Balwa", "Bojingiji"}, } m["acm"] = { aliases = {"อาหรับแบบเมโสโปเตเมีย", "Iraqi Arabic", "Mesopotamian Arabic"}, } m["acn"] = { other_names = {"Xiandao", "Chintaw"}, } m["acp"] = { } m["acr"] = { other_names = {"Achí", "Achi Maya", "Cubulco Achi", "Cubulco Achí", "Cubulco Achi'"}, } m["acs"] = { aliases = {"Akroá", "Coroá", "Acroa", "Acroá-Mirim"}, } m["acu"] = { other_names = {"Achuar-Shiwiar"}, } m["acv"] = { } m["acw"] = { aliases = {"Hijazi Arabic", "Hejazi Arabic", "West Arabian Arabic"}, } m["acx"] = { aliases = {"Omani Arabic"}, } m["acy"] = { aliases = {"Cypriot Arabic", "Cypriot Maronite Arabic", "Sanna"}, } m["acz"] = { aliases = {"Asheron"}, } m["ada"] = { aliases = {"Dangme"}, } m["adb"] = { -- erroneously formerly known as "Adabe" varieties = {"Rasua", {"Raklungu", "Klu'un Hahan Adabe", "Adabe"}, "Hresuk", "Dadu'a"}, } m["add"] = { other_names = {"Lidzonka"}, } m["ade"] = { } m["adf"] = { } m["adg"] = { varieties = {"Ayerrerenge"}, } m["adh"] = { } m["adi"] = { other_names = {"Abor", "Ashing", "Minyong", "Mising", "Padam", "Panggi", "Pasi", "Shimong", "Ajukru"}, } m["adj"] = { aliases = {"Adjukru", "Adyoukrou", "Adyukru", "Ajukru"}, } m["adl"] = { other_names = {"Gallong"}, } m["adn"] = { varieties = {"Aimoli"}, } m["ado"] = { other_names = {"Adjora"}, varieties = {"Auwa", "Nuclear Abu", {"Sabu", "Sabu (Papua New Guinea)"}}, } m["adp"] = { } m["adq"] = { other_names = {"Agotime"}, } m["adr"] = { } m["ads"] = { } m["adt"] = { } m["adu"] = { } m["adw"] = { aliases = {"Amundava"}, } m["ady"] = { aliases = {"เซอร์แคสเซียตะวันตก", "Adyghe", "Western Circassian"}, } m["adz"] = { } m["aea"] = { } m["aeb"] = { aliases = {"Tunisian Arabic"}, varieties = {"Judeo-Tunisian Arabic"}, --formerly ajt } m["aed"] = { } m["aee"] = { other_names = {"Northeast Pashai", "Pashai"}, } m["aek"] = { } m["ael"] = { } m["aem"] = { } m["aen"] = { } m["aeq"] = { } m["aer"] = { varieties = {"Akarre", "Ikngerripenhe", "Mparntwe Arrernte", "Northern Arrernte"}, } m["aes"] = { other_names = {"Yaquina", "Yakwina", "Alseya", "Yakona"}, -- names of the two dialects that make up the language } m["aeu"] = { other_names = {"Chepya"}, } m["aew"] = { aliases = {"Aion"}, -- not sure about "Porapora" varieties = {"Northern Ambakich", "Southern Ambakich"}, } m["aey"] = { varieties = {"Haija", "Huar", "Jagahala"}, } m["aez"] = { aliases = {"Aiga"}, -- Orokaiva is a sister language per Glottolog } m["afb"] = { } m["afd"] = { varieties = {"Andambit", "Imboin", "Kaiyam", "Kupin", "Namata"}, } m["afe"] = { } m["afg"] = { } m["afh"] = { } m["afi"] = { aliases = {"Chini"}, -- Glottolog's name, additional ISO name } m["afk"] = { aliases = {"Nanubae-Imangae"}, -- Glottolog's name varieties = {"Imanmeri", "Nanbay", "Wamblamas", "Yamandim", -- the latter two are Nanbay subvarietiess }, } m["afn"] = { } m["afo"] = { } m["afp"] = { varieties = {"Awim", "Imboin-Awim"}, } m["afs"] = { } m["aft"] = { other_names = {"Affiti", "Ditti"}, } m["afu"] = { aliases = {"Efutu"}, } m["afz"] = { } m["agb"] = { } m["agc"] = { } m["agd"] = { } m["age"] = { aliases = {"Mendi"}, } m["agf"] = { } m["agg"] = { aliases = {"Anggor"}, varieties = {{"Nai", "Nai (Angor)"}, "Samanai"}, } m["agh"] = { aliases = {"Angba"}, } m["agj"] = { } m["agk"] = { } m["agl"] = { other_names = {"Agala"}, } m["agm"] = { } m["agn"] = { aliases = {"อากูไตนึน", "Agutaynen"}, } m["ago"] = { } m["agq"] = { } m["agr"] = { } m["ags"] = { aliases = {"Isimbi"}, } m["agt"] = { } m["agu"] = { aliases = {"Aguacatec", "Aguacateco", "Awakatek", "Awakateko", "Awakateka", "Qa'yol"}, } m["agv"] = { other_names = {"Remontado Dumagat", "Sinauna", "Hatang Kayey"}, } m["agw"] = { } m["agx"] = { aliases = {"Agul"}, } m["agy"] = { } m["agz"] = { } m["aha"] = { } m["ahb"] = { } m["ahg"] = { } m["ahh"] = { } m["ahi"] = { aliases = {"Tiagbrmrin Aizi"}, } m["ahk"] = { aliases = {"Akha", "Aka", "Ako"}, } m["ahl"] = { aliases = {"Ahlon"}, } m["ahm"] = { aliases = {"Mobumrin Aizi"}, } m["ahn"] = { aliases = {"Ahan", "Ahaan"}, } m["aho"] = { aliases = {"อะหม", "Ahom"}, } m["ahp"] = { aliases = {"Aproumu Aizi"}, } m["ahr"] = { other_names = {"Khandeshi", "Khandesi"}, } m["ahs"] = { } m["aht"] = { } m["aia"] = { } m["aib"] = { other_names = {"Aynu", "Ainu", "Ainu (China)", "Aini", "Eyni", "Ejnu", "Abdal", "Äynú"}, } m["aic"] = { } m["aid"] = { } m["aie"] = { } m["aif"] = { } m["aig"] = { other_names = {"Leeward Caribbean Creole English", "Antiguan Creole English", "Kokoy Creole English", "Saint Kitts Creole", "Montserrat Creole", "Anguillan Creole"}, } m["aih"] = { } m["aii"] = { aliases = {"Assyrian Neo-Aramaic"}, } m["aij"] = { pseudo_families = "qfa-jew", } m["aik"] = { } m["ail"] = { } m["aim"] = { } m["ain"] = { aliases = {"Ainu", "Ainu (Japan)"}, } m["aio"] = { aliases = {"ไทอ่ายตน", "Aiton", "Tai Aiton", "Aitonia", "Sham Doaniya"}, } m["aip"] = { } m["air"] = { } m["ait"] = { } m["aiw"] = { } m["aix"] = { } m["aiy"] = { } m["aja"] = { aliases = {"Aja", "Adja", "Aja (Sudan)"}, } m["ajg"] = { aliases = {"Adja", "Aja", "Aja (Benin)", "Aja (Togo)", "Ajagbe"}, } m["aji"] = { other_names = {"Houailou"}, } m["ajn"] = { } m["ajp"] = { aliases = {"South Levantine Arabic"}, } m["ajs"] = { aliases = {"Ghardaia Sign Language"}, pseudo_families = "qfa-jew", } m["ajw"] = { } m["ajz"] = { } m["akb"] = { aliases = {"Batak Angkola"}, } m["akc"] = { varieties = {"Amberbaken", "Arfu", "Kebar"}, pseudo_families = "paa", } m["akd"] = { aliases = {"Akpet-Ehom", "Ukpet-Ubeteng-Evia"}, varieties = {"Akpet", "Ukpet", "Ehom", "Ubeteng", "Ebeteng", "Evia"}, } m["ake"] = { aliases = {"Acauayo", "Acaguayo", "Akawai", "Acawai", "Accawai"}, } m["akf"] = { } m["akg"] = { } m["akh"] = { } m["aki"] = { aliases = {"Aiom", "Ayom"}, } m["akj"] = { other_names = {"Aka-Jeru"}, } m["akk"] = { aliases = {"Akkadian"}, } m["akl"] = { aliases = {"อักลาโนน", "Aklanon", "Aklan", "Akeanon"}, } m["akm"] = { other_names = {"Ba", "Bo"}, } m["ako"] = { } m["akp"] = { } m["akq"] = { } m["akr"] = { } m["aks"] = { other_names = {"Tchamba", "Akasele", "Tsamba"}, } m["akt"] = { } m["aku"] = { } m["akv"] = { } m["akw"] = { } m["akx"] = { other_names = {"Kede"}, } m["aky"] = { other_names = {"Kol", "Kawl", "Aka-Kawl", "Bojingiji"}, } m["akz"] = { aliases = {"Alabama"}, } m["ala"] = { } m["alc"] = { other_names = {"Qawasqar", "Alacaluf"}, } m["ald"] = { other_names = {"Alladyan", "Allagian", "Alaguian"}, } m["ale"] = { aliases = {"Aleutian"}, } m["alf"] = { } m["alh"] = { } m["ali"] = { } m["alj"] = { } m["alk"] = { } m["all"] = { other_names = {"Chatan"}, } m["alm"] = { } m["alo"] = { varieties = {"Allang", "Larike", "Wakasihu"}, } m["alp"] = { } m["alq"] = { } m["alr"] = { aliases = {"Alyutor"}, } m["alt"] = { aliases = {"Southern Altai", "Southern Altay", "Altai", "Altay"}, } m["alu"] = { aliases = {"Areare"}, } m["alw"] = { other_names = {"Alaba-K'abeena", "Alaaba", "K'abeena"}, } m["alx"] = { aliases = {"Alatil", "Mol"}, -- Alatil is ISO's old name (pre-2007); Mol is Glottolog's name } m["aly"] = { } m["alz"] = { } m["ama"] = { } m["amb"] = { } m["amc"] = { } m["ame"] = { other_names = {"Amuesha"}, } m["amf"] = { aliases = {"Hamer", "Hamer-Banna"}, } m["amg"] = { other_names = {"Amarag"}, } m["ami"] = { other_names = {"Nataoran Amis"}, } m["amj"] = { other_names = {"Biltine", "Mimi"}, } m["amk"] = { other_names = {"Wadapi-Laut"}, } m["aml"] = { } m["amm"] = { aliases = {"Ama (New Guinea)", "Ama (Papua New Guinea)"}, } m["amn"] = { } m["amo"] = { other_names = {"Timap", "Map", "Among", "Amap", "Amon"}, } m["amp"] = { varieties = {"Karawari", "Kuvenmas"}, } m["amq"] = { } m["amr"] = { } m["ams"] = { aliases = {"Southern Amami-Oshima"}, } m["amt"] = { } m["amu"] = { other_names = {"Amuzgo", "Xochistlahuaca Amuzgo", "Northern Amuzgo", "Southern Amuzgo"}, } m["amv"] = { } m["amw"] = { } m["amx"] = { varieties = {"Eastern Anmatyerre", "Western Anmatyerre"}, } m["amy"] = { other_names = {"Ame", "Amijangal"}, } m["amz"] = { } m["ana"] = { aliases = {"Andaquí", "Andakí", "Andaki"}, } m["anb"] = { other_names = {"Shimigae", "Semigae", "Gae", "Gay", "Gaye", "Siaviri", "Katsakáti"}, } m["anc"] = { other_names = {"Angas", "Angass", "Hill Ngas", "Plain Ngas", "Hill Angas", "Plain Angas", "Karang", "Kerang"}, } m["and"] = { } m["ane"] = { aliases = {"Xaracuu"}, } m["anf"] = { } m["ang"] = { aliases = {"อังกฤษโบราณ", "แองโกล-แซกซัน", "Old English", "Anglo-Saxon"}, } m["anh"] = { other_names = {"Nent", "Angaua"}, } m["ani"] = { } m["anj"] = { } m["ank"] = { } m["anl"] = { other_names = {"Khaungtso", "Anu-Hkongso", "Anu-Hkongso Chin"}, -- the last is the ISO's unattested blend of the names of its two dialects and half of the name of the place where it's spoken } m["anm"] = { other_names = {"Anal", "Anaal", "Namfau"}, -- Namfau is actually a placename } m["ann"] = { } m["ano"] = { pseudo_families = "sai", } m["anp"] = { } m["anq"] = { aliases = {"Jarawa (India)"}, } m["anr"] = { } m["ans"] = { } m["ant"] = { } m["anu"] = { aliases = {"Anyua", "Anywa", "Anyuak"}, } m["anv"] = { } m["anw"] = { other_names = {"Anang", "Annang", "Western Ibibio"}, } m["anx"] = { } m["any"] = { aliases = {"Anyin"}, } m["anz"] = { aliases = {"Anêm"}, varieties = {"Akiblik", "Coastal Anem"}, pseudo_families = "paa", } m["aoa"] = { } m["aob"] = { pseudo_families = "paa", } m["aoc"] = { other_names = {"Pemón", "Arekuna", "Arecuna", "Taurepan", "Taurepán", "Taurepang", "Taulipang", "Taulipáng", "Kamarakoto", "Camaracoto", "Camaragoto"}, } m["aod"] = { } m["aoe"] = { } m["aof"] = { } m["aog"] = { other_names = {"Pondo", "Kanda", "Maramba"}, } m["aoi"] = { aliases = {"Enindhilyagwa"}, } m["aoj"] = { other_names = {"Muhian", "Muhiang"}, varieties = {"Balif", "Filifita", "Iwam-Nagalemb", "Nagipaem", "Supari"}, } m["aok"] = { } m["aol"] = { aliases = {"Alor"}, } m["aom"] = { varieties = {"Asapa", "Gora-Bomahouji", "Zuwadza"}, } m["aon"] = { varieties = {"Bonahoi", "Timingir", "Urita", "Weril", "Werir"}, } m["aor"] = { } m["aos"] = { } m["aot"] = { aliases = {"Atong (India)", "Atong", "A'tong"}, } m["aou"] = { other_names = {"Ayo", "A'ou Gelao"}, } m["aox"] = { } m["aoz"] = { aliases = {"Dawanese", "Dawan", "Atoni"}, } m["apb"] = { other_names = {"South Malaita", "Apae'aa"}, } m["apc"] = { } m["apd"] = { aliases = {"Sudanese Arabic"}, } m["ape"] = { varieties = {"Coastal Arapesh", "Nuclear Bukiyip"}, } m["apf"] = { } m["apg"] = { } m["aph"] = { other_names = {"Athpariya"}, } m["api"] = { aliases = {"Apiacá"}, } m["apj"] = { aliases = {"Jicarilla Apache"}, } m["apk"] = { aliases = {"Kiowa Apache"}, } m["apl"] = { aliases = {"Lipan Apache"}, } m["apm"] = { other_names = {"Mescalero", "Mescalero-Chiricahua Apache"}, -- two dialects combined by Ethnologue } m["apn"] = { aliases = {"Apinajé", "Apinagé", "Apinaye", "Apinaje", "Apinage"}, } m["apo"] = { aliases = {"Apalik"}, } m["app"] = { } m["apq"] = { other_names = {"Pucikwar", "Puchikwar", "Aka-Pucikwar", "Pujjukar", "Bójigiáb", "Bojigiab", "Bojigyab"}, -- last three may apply also to other languages } m["apr"] = { } m["aps"] = { } m["apt"] = { other_names = {"Apa Tani", "Tanii"}, } m["apu"] = { } m["apv"] = { } m["apw"] = { aliases = {"Western Apache"}, } m["apx"] = { } m["apy"] = { aliases = {"Apalai"}, } m["apz"] = { varieties = {"Aiewomba", "Wajakes"}, } m["aqc"] = { } m["aqd"] = { } m["aqg"] = { } m["aqm"] = { } m["aqn"] = { } m["aqp"] = { other_names = {"Akokisa", "Orcoquiza", "Eastern Atakapa", "Western Atakapa"}, pseudo_families = "nai", } m["aqr"] = { } m["aqt"] = { } m["aqz"] = { } m["arc"] = { aliases = {"แอราเมอิก", "Aramaic", "Aramaean", "Aramean"}, -- varieties are in [[Module:etymology language/data]] } m["ard"] = { } m["are"] = { aliases = {"Western Arrarnta"}, -- Glottolog varieties = {"Akerre", "Pertame", "Tyuretye Arrernte"}, } m["arh"] = { other_names = {"Ika"}, } m["ari"] = { } m["arj"] = { } m["ark"] = { } m["arl"] = { } m["arn"] = { aliases = {"Mapuche", "Mapudungün", "Mapuzugün", "Mapudungu", "Araucanian"}, varieties = {"Moluche", "Pehuenche", "Picunche"}, } m["aro"] = { } m["arp"] = { } m["arq"] = { aliases = {"Algerian Arabic"}, } m["arr"] = { other_names = {"Karo", "Karo (Brazil)", "Ramarama", "Itanga", "Itogapuc", "Itogapúk", "Ntogapid", "Ntogapig", "Arára", "Arára de Rondonia", "Arára do Jiparaná", "Uruku", "Urukú"}, } m["ars"] = { } m["aru"] = { aliases = {"Aruá", "Arawa", "Arawá"}, -- extinct, northern Brazil, cf. 'arx' } m["arv"] = { } m["arw"] = { aliases = {"อาราวัก", "อาโรวัก", "อารวก", "โลโคโน", "Lokono", "Arawak", "Arowak", "Aruak", "Locono"}, } m["arx"] = { aliases = {"Arua", "Aruashi", "Aruáshi", "Aruachi"}, -- moribund, central Brazil, cf 'aru' } m["ary"] = { aliases = {"Moroccan Arabic"}, varieties = {"Judeo-Moroccan Arabic"}, -- formerly aju } m["arz"] = { aliases = {"Egyptian Arabic"}, } m["asa"] = { other_names = {"Asu", "Asu (Tanzania)", "Chasu", "Kipare", "Southern Pare", "South Pare"}, } m["asb"] = { } m["asc"] = { varieties = {"Matia", "Sapan"}, } m["ase"] = { aliases = {"American Sign Language", "Ameslan", "ASL"}, } m["asf"] = { aliases = {"Australian Sign Language"}, } m["asg"] = { aliases = {"Shingini"}, } m["ash"] = { other_names = {"Tequiraca", "Tekiráka", "Avishiri", "Auishiri", "Agouisiri", "Avirxiri", "Abiquira", "Abigira", "Aiwa", "Aewa"}, pseudo_families = "sai", } m["asi"] = { } m["asj"] = { aliases = {"Sari", "Saari"}, } m["ask"] = { } m["asl"] = { } m["asn"] = { } m["aso"] = { varieties = {"Amaizuho", "Bohena", "Kongi", "Lunube Mado", "Upper Asaro"}, } m["asp"] = { } m["asq"] = { } m["asr"] = { aliases = {"Asur"}, } m["ass"] = { } m["ast"] = { aliases = {"Asturian"}, } m["asu"] = { other_names = {"Asurini", "Asuriní", "Asuriní of Tocantins", "Asuriní do Tocantins", "Akwawa", "Akwáwa"}, } m["asv"] = { } m["asw"] = { aliases = {"Australian Aborigines Sign Language"}, } m["asx"] = { varieties = {"Asat", "Aset", "Miratayak"}, -- per Glottolog } m["asy"] = { } m["asz"] = { } m["ata"] = { aliases = {"Ata", "Wasi"}, -- Presumably Ata and Pele are the same as Lower and Upper, but which is which is impossible to tell. varieties = {{"Ata", "Ata (New Britain)"}, {"Pele", "Pele (New Britain)"}, "Lower dialect", "Upper dialect"}, pseudo_families = "paa", } m["atb"] = { } m["atc"] = { } m["atd"] = { } m["ate"] = { aliases = {"Mand"}, } m["atg"] = { other_names = {"Ivbie North", "Arhe", "Ivbie North-Okpela-Arhe"}, } m["ati"] = { } m["atj"] = { } m["atk"] = { } m["atl"] = { } m["atm"] = { } m["ato"] = { aliases = {"Atoŋ", "Atong"}, } m["atp"] = { } m["atq"] = { } m["atr"] = { } m["ats"] = { other_names = {"Atsina"}, } m["att"] = { } m["atu"] = { } m["atv"] = { aliases = {"Northern Altai", "Northern Altay", "Altai", "Altay"}, } m["atw"] = { aliases = {"Atsugé"}, } m["atx"] = { } m["aty"] = { aliases = {"Aneityum"}, } m["atz"] = { } m["aua"] = { } m["aub"] = { } m["auc"] = { other_names = {"Waorani", "Sabela", "Wao", "Huao", "Aushiri", "Ssabela", "Wao Terero", "Auka", "Auca"}, pseudo_families = "sai", } m["aud"] = { } m["aug"] = { } m["auh"] = { } m["aui"] = { } m["auj"] = { aliases = {"Awjilah", "Augila"}, } m["auk"] = { } m["aul"] = { } m["aum"] = { other_names = {"Abewa", "Asu (Nigeria)"}, } m["aun"] = { varieties = {"Central Aunalei", "North Aunalei", "South Aunalei"}, } m["auo"] = { } m["aup"] = { aliases = {"Tirio", "Makaeyam", "Aturu", "Atura", "Adulu"}, varieties = {"Giribam"}, } m["auq"] = { other_names = {"A", "Korur", "Korurnus"}, -- no name attested? lect may be same as 'pdn' } m["aur"] = { } m["aut"] = { } m["auu"] = { aliases = {"Auwje"}, } m["auw"] = { aliases = {"Awye"}, } m["aux"] = { } m["auy"] = { aliases = {"Awiyaana"}, } m["auz"] = { aliases = {"Uzbeki Arabic", "Uzbek Arabic"}, } m["avb"] = { } m["avd"] = { other_names = {"Alviri", "Vidari"}, } m["avi"] = { } m["avk"] = { aliases = {"Kotava"}, } m["avm"] = { } m["avn"] = { } m["avs"] = { } m["avt"] = { } m["avu"] = { } m["avv"] = { other_names = {"Avá", "Canoe"}, } m["awa"] = { aliases = {"อวธี", "โอธี", "Awadhi", "Oudhi"}, } m["awb"] = { aliases = {"Awa", "Awa (Papua New Guinea)"}, varieties = {"Ilakia", "Northeast Awa", "South Awa", "Tauna"}, } m["awc"] = { aliases = {"Cipu"}, } m["awe"] = { } m["awg"] = { other_names = {"Alngith", "Leningitij", "Mpakwithi"}, } m["awh"] = { aliases = {"Awban"}, } m["awi"] = { aliases = {"Awin", "Aiwin", "Akium"}, varieties = {"East Awin", "North Awin", "South Awin"}, } m["awk"] = { } m["awm"] = { } m["awn"] = { } m["awo"] = { } m["awr"] = { } m["aws"] = { varieties = {"Ia River Awyu", "Shiaxa", "Sjiagha", "Syiaxa", "Bamgi River Awyu", "Yenimu", "Jénimu", "Oser"}, } m["awt"] = { } m["awu"] = { } m["awv"] = { aliases = {"Kia River Awyu"}, -- per Glottolog } m["aww"] = { aliases = {"Auwon"}, -- per Glottolog } m["awx"] = { } m["awy"] = { } m["axb"] = { other_names = {"Abipon", "Callaga", "Kalyaga"}, } m["axe"] = { } m["axg"] = { } m["axk"] = { other_names = {"Yaka", "Yaka (Central African Republic)", "Aka", "Beka"}, -- cf 'iyx', 'yaf' } m["axl"] = { other_names = {"Lower Southern Arrernte", "Southern Arrernte", "Southern Aranda"}, } m["axm"] = { aliases = {"Middle Armenian"}, } m["axx"] = { aliases = {"Xaragure"}, } m["aya"] = { varieties = {"Nubia", "Nuclear Awar"}, } m["ayb"] = { aliases = {"Ayizo Gbe"}, } m["ayd"] = { aliases = {"Ayapathu", "Badhu"}, } m["aye"] = { } m["ayg"] = { aliases = {"Nyanga", "Ginyanga"}, } m["ayi"] = { } m["ayk"] = { aliases = {"Akhukhu"}, } m["ayl"] = { aliases = {"Libyan Arabic"}, } m["ayn"] = { aliases = {"Yemeni Arabic"}, } m["ayo"] = { other_names = {"Morotoco", "Moro", "Ayoweo", "Ayoré", "Pyeta Yovai"}, } m["ayp"] = { aliases = {"North Mesopotamian Arabic"}, } m["ayq"] = { aliases = {"Ayi (New Guinea)", "Ayi (Papua New Guinea)"}, } m["ays"] = { } m["ayt"] = { other_names = {"Magbukun Ayta", "Mariveleño"}, } m["ayu"] = { } -- ayy removed from ISO and deleted; see comment in [[Module:languages/data/3/a]] m["ayz"] = { aliases = {"Mai Brat", "Ajamaru", "Ayamaru"}, varieties = {{"Maisefa", varieties = {"Mayhapeh", "Maymare", "Maymaru"}}, "Mayasmaun", "Mayte"}, } m["aza"] = { } m["azd"] = { } m["azg"] = { other_names = {"Upper Eastern Amuzgo", "Oaxaca Amuzgo"}, } m["azm"] = { other_names = {"Lower Eastern Amuzgo"}, } m["azn"] = { } m["azo"] = { } m["azt"] = { } m["azz"] = { } return m 4b1dpn34be0j7nprdhxugfk94am932d แม่แบบ:mul-numberchart 10 335257 5775713 5719252 2026-10-20T08:18:54Z Octahedron80 267 5775713 wikitext text/x-wiki {{top3}} {{#ifeq:{{{type|all}}}|nondigit|| * [[w:ตัวเลขอาหรับตะวันออก|ตัวเลขอาหรับ (ตะวันออก)]]: {{#if:{{{arab|}}}|{{lang|mul|sc=Arab|{{{arab}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:ตัวเลขอาหรับ|ตัวเลขอาหรับ (ตะวันตก)]]: {{#if:{{{numb|}}}|{{{numb}}}|''กรุณาเพิ่มหากคุณทราบ''}} }}{{#ifeq:{{{type|all}}}|digit|| * [[w:ตัวเลขอาร์มีเนีย|ตัวเลขอาร์มีเนีย]]: {{#if:{{{armn|}}}|{{{armn}}}|''กรุณาเพิ่มหากคุณทราบ''}} }}{{#ifeq:{{{type|all}}}|nondigit|| * [[w:ตัวเลขอัสสัม|ตัวเลขอัสสัม]]: {{#if:{{{beng|}}}|{{lang|mul|sc=Beng|{{{beng}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:อักษรบาหลี|ตัวเลขบาหลี]]: {{#if:{{{bali|}}}|{{lang|mul|sc=Bali|{{{bali}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:ตัวเลขเบงกอล|ตัวเลขเบงกอล]]: {{#if:{{{beng|}}}|{{lang|mul|sc=Beng|{{{beng}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} }}{{#ifeq:{{{type|all}}}|all| * [[w:ตัวเลขพราหมี|ตัวเลขพราหมี]]: {{#if:{{{brah|}}}|{{lang|mul|sc=Brah|{{{brah}}}}}{{#if:{{{brah2|}}}|, {{q|ประจำหลัก}} {{lang|mul|sc=Brah|{{{brah2}}}}}|}}|''กรุณาเพิ่มหากคุณทราบ''}}|{{#ifeq:{{{type}}}|digit| * [[w:ตัวเลขพราหมี|ตัวเลขพราหมี]]: {{#if:{{{brah2|}}}|{{lang|mul|sc=Brah|{{{brah2}}}}}|''กรุณาเพิ่มหากคุณทราบ''}}|{{#ifeq:{{{type}}}|nondigit| * [[w:ตัวเลขพราหมี|ตัวเลขพราหมี]]: {{#if:{{{brah|}}}|{{lang|mul|sc=Brah|{{{brah}}}}}|''กรุณาเพิ่มหากคุณทราบ''}}| * <span style="foreground:red"> Type must be digit, nondigit, all or omitted.</span> }}}}}}{{#ifeq:{{{type|all}}}|nondigit|| * [[w:อักษรจักมา|ตัวเลขจักมา]]: {{#if:{{{cakm|}}}|{{lang|mul|sc=Cakm|{{{cakm}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:อักษรจาม|ตัวเลขจาม]]: {{#if:{{{cham|}}}|{{lang|mul|sc=Cham|{{{cham}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} }}{{#ifeq:{{{type|all}}}|digit|| * [[w:ตัวเลขจีน|ตัวเลขจีน]]: {{#if:{{{hant|}}}|{{lang|mul|sc=Hant|{{{hant}}}}}{{#if:{{{hant2|}}}|, {{lang|mul|sc=Hant|{{{hant2}}}}}|}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:รอยคะแนน|รอยคะแนนจีน-ญี่ปุ่น-เกาหลี]]: {{#if:{{{cjktally|}}}|{{{cjktally}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:แท่งนับจีน|แท่งนับจีน]]: {{#if:{{{rod|}}}|{{{rod}}}|''กรุณาเพิ่มหากคุณทราบ''}} }}{{#ifeq:{{{type|all}}}|nondigit|| * [[w:ตัวเลขอินเดีย|ตัวเลขเทวนาครี]]: {{#if:{{{deva|}}}|{{lang|mul|sc=Deva|{{{deva}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:อักษรดิเวส อกุรุ|ตัวเลขดิเวส อกุรุ]]: {{#if:{{{diak|}}}|{{lang|mul|sc=Deva|{{{diak}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} }}{{#ifeq:{{{type|all}}}|digit|| * [[w:ตัวเลขอียิปต์|ตัวเลขอียิปต์]]: {{#if:{{{egyp|}}}|{{lang|mul|sc=Egyp|{{{egyp}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:อักษรกืออึซ|ตัวเลขเอธิโอเปีย]]: {{#if:{{{ethi|}}}|{{{ethi}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:อักษรกอทิก|ตัวเลขกอทิก]]: {{#if:{{{goth|}}}|{{{goth}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:ตัวเลขกรีก|ตัวเลขกรีก]]: {{#if:{{{grek|}}}|{{{grek}}}{{#ifeq:{{{grek2|}}}|-||, {{lc:{{{grek}}}}}}}{{#if:{{{grek2|}}}|{{#ifeq:{{{grek2|}}}|-||, {{{grek2}}}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} }}{{#ifeq:{{{type|all}}}|nondigit|| * [[w:ตัวเลขอินเดีย|ตัวเลขคุชราต]]: {{#if:{{{gujr|}}}|{{lang|mul|sc=Gujr|{{{gujr}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:ตัวเลขอินเดีย|ตัวเลขคุรมุขี]]: {{#if:{{{guru|}}}|{{{guru}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:Hanifi Rohingya script|Hanifi Rohingya numerals]]: {{#if:{{{rohg|}}}|{{lang|mul|sc=Rohg|{{{rohg|}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} }}{{#ifeq:{{{type|all}}}|digit|| * [[w:ตัวเลขฮีบรู|ตัวเลขฮีบรู]]: {{#if:{{{hebr|}}}|{{lang|mul|sc=Hebr|{{{hebr|}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} }}{{#ifeq:{{{type|all}}}|nondigit|| * [[w:ตัวเลขชวา|ตัวเลขชวา]]: {{#if:{{{java|}}}|{{lang|mul|sc=Java|{{{java}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:ตัวเลขอินเดีย|ตัวเลขกันนฑะ]]: {{#if:{{{knda|}}}|{{lang|mul|sc=Knda|{{{knda}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:อักษรกวิ|ตัวเลขกวิ]]: {{#if:{{{kawi|}}}|{{lang|mul|sc=Kawi|{{{kawi}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:Kayah Li alphabet|Kayah Li numerals]]: {{#if:{{{kali|}}}|{{lang|mul|sc=Kali|{{{kali}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:ตัวเลขเขมร|ตัวเลขเขมร]]: {{#if:{{{khmr|}}}|{{lang|mul|sc=Khmr|{{{khmr}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:อักษรคุดาบาด|ตัวเลขคุดาบาด]]: {{#if:{{{sind|}}}|{{lang|mul|sc=Sind|{{{sind}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:อักษรธรรมล้านนา|ตัวเลขล้านนา]]: {{#if:{{{lana|}}}| {{q|ทางโลก}} {{lang|mul|sc=Lana|{{{lana}}}}}{{#if:{{{lana2|}}}|, {{q|ทางธรรม}} {{lang|mul|sc=Lana|{{{lana2}}}}}|}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:ตัวเลขลาว|ตัวเลขลาว]]: {{#if:{{{laoo|}}}|{{lang|mul|{{{laoo}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:อักษรเลปชา|ตัวเลขเลปชา]]: {{#if:{{{lepc|}}}|{{lang|mul|sc=Lepc|{{{lepc}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:อักษรลิมบู|ตัวเลขลิมบู]]: {{#if:{{{limb|}}}|{{lang|mul|sc=Limb|{{{limb}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:ตัวเลขอินเดีย|ตัวเลขมลยาฬัม]]: {{#if:{{{mlym|}}}|{{lang|mul|sc=Mlym|{{{mlym}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:อักษรมณีปุระ|ตัวเลขมณีปุระ]]: {{#if:{{{mtei|}}}|{{lang|mul|sc=Mtei|{{{mtei}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:อักษรมองโกเลีย|ตัวเลขมองโกเลีย]]: {{#if:{{{mong|}}}|{{{mong}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:อักษรพม่า|ตัวเลขพม่า]]: {{#if:{{{mymr|}}}|{{lang|mul|sc=Mymr|{{{mymr}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:อักษรอึนโก|ตัวเลขอึนโก]]: {{#if:{{{nkoo|}}}|{{lang|mul|sc=Nkoo|{{{nkoo}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:Ol Chiki script|Ol Chiki numerals]]: {{#if:{{{olck|}}}|{{lang|mul|sc=Olck|{{{olck}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} }}{{#ifeq:{{{type|all}}}|digit|| * [[w:อักษรเปอร์เซียเก่า|ตัวเลขเปอร์เซียเก่า]]: {{#if:{{{xpeo|}}}|{{lang|mul|sc=Xpeo|{{{xpeo}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} }}{{#ifeq:{{{type|all}}}|nondigit|| * [[w:ตัวเลขอินเดีย|ตัวเลขโอริยา]]: {{#if:{{{orya|}}}|{{lang|mul|sc=Orya|{{{orya}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:อักษรอุสมาน|ตัวเลขอุสมาน]]: {{#if:{{{osma|}}}|{{lang|mul|sc=Osma|{{{osma}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:ตัวเลขอาหรับตะวันออก|ตัวเลขเปอร์เซีย]]: {{#if:{{{fa-arab|}}}|{{lang|mul|sc=Arab|{{{fa-arab}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} }}{{#ifeq:{{{type|all}}}|digit|| * [[w:ตัวเลขโรมัน|ตัวเลขโรมัน]]: {{#if:{{{latn|}}}|<samp>{{{latn}}}</samp>{{#ifeq:{{{latn2|}}}|-||, <samp>{{lc:{{{latn}}}}}</samp>}}{{#if:{{{latn2|}}}|{{#ifeq:{{{latn2|}}}|-||, {{{latn2}}}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} }}{{#ifeq:{{{type|all}}}|nondigit|| * [[w:อักษรเสาราษฏร์|ตัวเลขเสาราษฏร์]]: {{#if:{{{saur|}}}|{{lang|mul|sc=Saur|{{{saur}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:อักษรศารทา|ตัวเลขศารทา]]: {{#if:{{{shrd|}}}|{{lang|mul|sc=Shrd|{{{shrd}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} }}{{#ifeq:{{{type|all}}}|all| * [[w:อักษรสิงหล|ตัวเลขสิงหล]]: {{#if:{{{sinh|}}}|{{lang|mul|sc=Sinh|{{{sinh}}}}}{{#if:{{{sinh2|}}}|, {{q|โบราณ}} {{lang|mul|sc=Sinh|{{{sinh2}}}}}|}}|''กรุณาเพิ่มหากคุณทราบ''}}|{{#ifeq:{{{type}}}|digit| * [[w:อักษรสิงหล|ตัวเลขสิงหล]]: {{#if:{{{sinh|}}}|{{lang|mul|sc=Sinh|{{{sinh}}}}}|''กรุณาเพิ่มหากคุณทราบ''}}|{{#ifeq:{{{type}}}|nondigit| * [[w:อักษรสิงหล|ตัวเลขสิงหล]]: {{#if:{{{sinh2|}}}|{{lang|mul|sc=Sinh|{{{sinh2}}}}}|''กรุณาเพิ่มหากคุณทราบ''}}| * <span style="foreground:red"> Type must be digit, nondigit, all or omitted.</span> }}}}}}{{#ifeq:{{{type|all}}}|nondigit|| * [[w:อักษรซุนดา|ตัวเลขซุนดา]]: {{#if:{{{sund|}}}|{{lang|mul|sc=Sund|{{{sund}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:อักษรฏากรี|ตัวเลขฏากรี]]: {{#if:{{{takr|}}}|{{lang|mul|sc=Takr|{{{takr}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} }}{{#ifeq:{{{type|all}}}|digit|| * [[w:รอยคะแนน|รอยคะแนน]]: {{#if:{{{tally|}}}|{{{tally}}}|''กรุณาเพิ่มหากคุณทราบ''}} }}{{#ifeq:{{{type|all}}}|nondigit|| * [[w:ตัวเลขอินเดีย|ตัวเลขทมิฬ]]: {{#if:{{{taml|}}}|{{{taml}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:ตัวเลขอินเดีย|ตัวเลขเตลูกู]]: {{#if:{{{telu|}}}|{{lang|mul|sc=Telu|{{{telu}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:ตัวเลขไทย|ตัวเลขไทย]]: {{#if:{{{thai|}}}|{{lang|mul|sc=Thai|{{{thai}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:ตัวเลขอินเดีย|ตัวเลขทิเบต]]: {{#if:{{{tibt|}}}|{{lang|mul|sc=Tibt|{{{tibt}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:อักษรติรหุตา|ตัวเลขติรหุตา]]: {{#if:{{{tirh|}}}|{{lang|mul|sc=Tirh|{{{tirh}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} * [[w:อักษรวรังจิติ|ตัวเลขวรังจิติ]]: {{#if:{{{wara|}}}|{{lang|mul|sc=Wara|{{{wara}}}}}|''กรุณาเพิ่มหากคุณทราบ''}} }} {{bottom}}<!-- --><noinclude>{{documentation}}</noinclude> r1abp66qi0mutnzp16zn9bs1mkbqpnn มอดูล:th-utilities 828 338046 5775726 5775472 2026-10-20T09:56:05Z Octahedron80 267 5775726 Scribunto text/plain local export = {} local sub = mw.ustring.sub local gsub = mw.ustring.gsub local len = mw.ustring.len local find = mw.ustring.find local match = mw.ustring.match local en_utilities = require("Module:en-utilities") local thai_digits = {"๐", "๑", "๒", "๓", "๔", "๕", "๖", "๗", "๘", "๙"} local thai_words = {"ศูนย์", "หนึ่ง", "สอง", "สาม", "สี่", "ห้า", "หก", "เจ็ด", "แปด", "เก้า"} local thai_words2 = {["."]="จุด",["-"]="ขีด",["+"]="บวก",["−"]="ลบ",["/"]="ทับ"} -- from [[Module:headword/data]] local thai_pos = { -- these are lemmas ["abbreviations"] = "คำย่อ", ["acronyms"] = "อักษรย่อรวมพยางค์", ["adjectives"] = "คำคุณศัพท์", --["adnominals"] = "adnominals", --["adpositions"] = "adpositions", ["adverbs"] = "คำกริยาวิเศษณ์", ["affixes"] = "หน่วยคำเติม", --["ambipositions"] = "ambipositions", ["articles"] = "คำกำกับนาม", ["circumfixes"] = "หน่วยคำเติมคร่อม", --["circumpositions"] = "circumpositions", ["classifiers"] = "คำลักษณนาม", ["cmavo"] = "ชมาโว", --["cmavo clusters"] = "cmavo clusters", ["cmene"] = "ชเมเน", --["combining forms"] = "combining forms", ["conjunctions"] = "คำสันธาน", --["counters"] = "counters", ["determiners"] = "ตัวกำหนด", --["diacritical marks"] = "diacritical marks", ["digraphs"] = "ทวิอักษร", ["fu'ivla"] = "ฟูฮิฝลา", ["gismu"] = "กิสมู", ["Han characters"] = "อักษรจีน", ["Han tu"] = "ฮั้นถื่อ", ["hanja"] = "ฮันจา", ["hanzi"] = "ฮั่นจื้อ", --["ideophones"] = "ideophones", ["idioms"] = "สำนวน", ["infixes"] = "อาคม", ["initialisms"] = "อักษรย่อ", ["iteration marks"] = "เครื่องหมายซ้ำ", ["interfixes"] = "หน่วยคำเติมเชื่อม", ["interjections"] = "คำอุทาน", ["kana"] = "คานะ", ["kanji"] = "คันจิ", ["letters"] = "ตัวอักษร", ["ligatures"] = "ตัวอักษรควบ", --["logograms"] = "logograms", ["lujvo"] = "ลุฌโว", ["morae"] = "มอรา", ["morphemes"] = "หน่วยคำ", --["non-constituents"] = "non-constituents", ["nouns"] = "คำนาม", ["numbers"] = "จำนวน", ["numeral symbols"] = "ตัวเลข", ["numerals"] = "เลข", ["num"] = "เลข", ["particles"] = "คำอนุภาค", ["phrases"] = "วลี", ["postpositions"] = "คำปัจฉบท", ["postpositional phrases"] = "วลีปัจฉบท", --["predicatives"] = "predicatives", ["prefixes"] = "อุปสรรค", ["prepositional phrases"] = "วลีบุพบท", ["prepositions"] = "คำบุพบท", ["preverbs"] = "คำกริยาเติมหน้า", --["pronominal adverbs"] = "pronominal adverbs", ["pronouns"] = "คำสรรพนาม", ["proper nouns"] = "คำวิสามานยนาม", ["propn"] = "คำวิสามานยนาม", ["proverbs"] = "สุภาษิต", ["punctuation marks"] = "เครื่องหมายวรรคตอน", --["relatives"] = "relatives", ["roots"] = "ราก", ["stems"] = "ต้นเค้าศัพท์", ["suffixes"] = "ปัจจัย", ["syllables"] = "พยางค์", ["symbols"] = "สัญลักษณ์", ["verbs"] = "คำกริยา", -- these are non-lemmas ["active participle forms"] = "รูปผันรูปกริยาขยายกรรตุวาจก", ["active participles"] = "รูปกริยาขยายกรรตุวาจก", ["adjectival participles"] = "รูปกริยาขยายเชิงคุณศัพท์", --["adjective case forms"] = "adjective case forms", ["adjective forms"] = "รูปคุณศัพท์", --["adjective feminine forms"] = "adjective feminine forms", ["adjective plural forms"] = "รูปคุณศัพท์พหูพจน์", ["adverb forms"] = "รูปกริยาวิเศษณ์", ["adverbial participles"] = "รูปกริยาขยายเชิงกริยาวิเศษณ์", --["agent participles"] = "agent participles", ["article forms"] = "รูปกำกับนาม", ["circumfix forms"] = "รูปหน่วยคำเติมคร่อม", --["combined forms"] = "combined forms", ["comparative adjective forms"] = "รูปคุณศัพท์ขั้นกว่า", ["comparative adjectives"] = "คำคุณศัพท์ขั้นกว่า", ["comparative adverb forms"] = "รูปกริยาวิเศษณ์ขั้นกว่า", ["comparative adverbs"] = "คำกริยาวิเศษณ์ขั้นกว่า", ["conjunction forms"] = "รูปสันธาน", ["contractions"] = "รูปหดย่อ", --["converbs"] = "converbs", ["determiner comparative forms"] = "รูปตัวกำหนดขั้นกว่า", ["determiner forms"] = "รูปตัวกำหนด", ["determiner superlative forms"] = "รูปตัวกำหนดขั้นสุด", ["diminutive nouns"] = "คำนามบอกความเล็ก", --["elative adjectives"] = "elative adjectives", ["equative adjective forms"] = "รูปคุณศัพท์ขั้นเท่า", ["equative adjectives"] = "คำคุณศัพท์ขั้นเท่า", ["future participles"] = "รูปกริยาขยายอนาคตกาล", ["gerunds"] = "รูปกริยาเป็นนาม", ["infinitive forms"] = "รูปผันรูปกริยากลาง", ["infinitives"] = "รูปกริยากลาง", ["interjection forms"] = "รูปอุทาน", ["jyutping"] = "ยฺหวืดเพ็ง", ["misspellings"] = "รูปสะกดผิด", --["negative participles"] = "negative participles", --["nominal participles"] = "nominal participles", --["noun case forms"] = "noun case forms", ["noun dual forms"] = "รูปนามทวิพจน์", ["noun forms"] = "รูปนาม", ["nf"] = "รูปนาม", ["nounf"] = "รูปนาม", ["noun paucal forms"] = "รูปนามบอกความน้อย", ["noun plural forms"] = "รูปนามพหูพจน์", --["noun possessive forms"] = "noun possessive forms", --["noun singulative forms"] = "noun singulative forms", ["numeral forms"] = "รูปเลข", ["participles"] = "รูปกริยาขยาย", ["participle forms"] = "รูปผันรูปกริยาขยาย", ["particle forms"] = "รูปอนุภาค", ["passive participles"] = "รูปกริยาขยายกรรมวาจก", ["past active participles"] = "รูปกริยาขยายกรรตุวาจกอดีตกาล", ["past participles"] = "รูปกริยาขยายอดีตกาล", ["past participle forms"] = "รูปผันรูปกริยาขยายอดีตกาล", ["past passive participles"] = "รูปกริยาขยายกรรมวาจกอดีตกาล", --["perfect active participles"] = "perfect active participles", --["perfect participles"] = "perfect participles", --["perfect passive participles"] = "perfect passive participles", ["pinyin"] = "พินอิน", ["plurals"] = "พหูพจน์", ["postposition forms"] = "รูปปัจฉบท", ["prefix forms"] = "รูปอุปสรรค", --["preposition contractions"] = "preposition contractions", ["preposition forms"] = "รูปบุพบท", --["prepositional pronouns"] = "prepositional pronouns", ["present active participles"] = "รูปกริยาขยายกรรตุวาจกปัจจุบันกาล", ["present participles"] = "รูปกริยาขยายปัจจุบันกาล", ["present passive participles"] = "รูปกริยาขยายกรรมวาจกปัจจุบันกาล", ["pronoun forms"] = "รูปสรรพนาม", --["pronoun possessive forms"] = "pronoun possessive forms", ["proper noun forms"] = "รูปวิสามานยนาม", ["proper noun plural forms"] = "รูปวิสามานยนามพหูพจน์", ["rafsi"] = "รัฟซี", ["romanizations"] = "การถอดเป็นอักษรโรมัน", --["root forms"] = "root forms", --["singulatives"] = "singulatives", ["suffix forms"] = "รูปปัจจัย", ["superlative adjective forms"] = "รูปคุณศัพท์ขั้นสุด", ["superlative adjectives"] = "คำคุณศัพท์ขั้นสุด", ["superlative adverb forms"] = "รูปกริยาวิเศษณ์ขั้นสุด", ["superlative adverbs"] = "คำกริยาวิเศษณ์ขั้นสุด", ["verb forms"] = "รูปกริยา", ["verbal nouns"] = "คำกริยานาม", -- these are something else ["cardinal nouns"] = "คำนามเชิงการนับ", ["abstract nouns"] = "คำอาการนาม", ["auxiliary verbs"] = "คำกริยาช่วย", ["cardinal adjectives"] = "คำคุณศัพท์เชิงการนับ", } function export.th_pos(pos) return thai_pos[pos] or thai_pos[en_utilities.pluralize(pos)] or pos end -- Converts Thai "lemma" category name into Thai "non-lemma form" category name function export.th_pos_to_form(pos) local result if pos == "" or pos == "คำหลัก" or pos == "รูปผัน" then result = "รูปผัน" elseif find(pos, "^คำ") then result = gsub(pos, "^คำ", "รูป") -- needs variable for the first return of gsub elseif find(pos, "^รูป") then result = "รูปผัน" .. pos else result = "รูป" .. pos end return result end -- Insert a full language name into a category name by Thai logic function export.th_categorize(cat, langname) local result local isEndWithThai = find(cat, "[ก-๛]$") if find(cat, "^ศัพท์") then result = "ศัพท์" .. langname .. sub(cat, 6) elseif find(cat, "^รายการ") then result = "รายการ" .. langname .. sub(cat, 7) elseif find(cat, "★") then -- inserts in-between at ★ result = gsub(cat, "★", langname) -- needs variable for the first return of gsub else result = cat .. (isEndWithThai and "" or " ") .. langname end return result end -- Converts Arabic numbers (e.g., "123") to Thai numbers (e.g., "๑๒๓") function export.arabic_to_thai_digits(num) local str = tostring(num) for i = 0, 9 do str = gsub(str, tostring(i), thai_digits[i + 1]) end return str end -- Converts Thai numbers (e.g., "๑๒๓") to Arabic numbers (e.g., "123") function export.thai_to_arabic_digits(str) str = tostring(str) for i, thai_char in ipairs(thai_digits) do str = gsub(str, thai_char, tostring(i - 1)) end return str end -- Read Number as Value function export.number_to_thai_words(num) local str = tostring(num) str = gsub(str, ",", "") str = export.thai_to_arabic_digits(str) -- Handle signs local prefix = "" local first_char = sub(str, 1, 1) if first_char == "-" then prefix = thai_words2["−"] -- Mathematical "ลบ" str = sub(str, 2) elseif first_char == "+" then prefix = thai_words2["+"] str = sub(str, 2) end -- Split string into integer and decimal parts local intPart, decPart = match(str, "^(%d*)%.?(%d*)$") if (not intPart or intPart == "") and (not decPart or decPart == "") then return "Invalid input" end -- Strip leading zeros from integer part if intPart == "" then intPart = "0" end intPart = match(intPart, "^0*(.+)$") or "0" -- Helper: Process Integer Part local function get_integer_words(s) if s == "0" then return thai_words[1] end local positions = {"", "สิบ", "ร้อย", "พัน", "หมื่น", "แสน"} local result = "" local length = len(s) for i = 1, length do local d = tonumber(sub(s, i, i)) local pos = length - i + 1 local effPos = ((pos - 1) % 6) + 1 if d ~= 0 then local word = thai_words[d + 1] if d == 1 and effPos == 1 and i > 1 then word = "เอ็ด" end if d == 1 and effPos == 2 then word = "" end if d == 2 and effPos == 2 then word = "ยี่" end result = result .. word .. positions[effPos] end if pos > 1 and effPos == 1 then result = result .. "ล้าน" end end return result end -- Helper: Process Decimal Part local function get_decimal_words(s) if not s or s == "" then return "" end local result = thai_words2["."] for i = 1, len(s) do local d = tonumber(sub(s, i, i)) result = result .. thai_words[d + 1] end return result end return prefix .. get_integer_words(intPart) .. get_decimal_words(decPart) end -- Read Number in Sequence function export.read_number_in_sequence(num) local str = tostring(num) str = gsub(str, ",", "") str = export.thai_to_arabic_digits(str) local has_math_minus = false if find(str, "−") then has_math_minus = true str = gsub(str, "−", "") end local result = "" if has_math_minus then result = result .. thai_words2["−"] end for i = 1, len(str) do local char = sub(str, i, i) local d = tonumber(char) if d then result = result .. thai_words[d + 1] elseif thai_words2[char] then result = result .. thai_words2[char] end end return result end return export 06uks30lcd1d7oy6xy1d8itgf8cmid6 มอดูล:eu-pron/new 828 372808 5775720 1951931 2026-10-20T08:29:18Z Octahedron80 267 5775720 Scribunto text/plain --Based on Module:es-pronunc by Benwing2. local export = {} local m_IPA = require("Module:IPA") local m_table = require("Module:table") local decorations_module = "Module:decorations" local put_module = "Module:parse utilities" local force_cat = false -- for testing local lang = require("Module:languages").getByCode("eu") local u = mw.ustring.char local rfind = mw.ustring.find local rsubn = mw.ustring.gsub local rmatch = mw.ustring.match local rsplit = mw.text.split local ulower = mw.ustring.lower local uupper = mw.ustring.upper local usub = mw.ustring.sub local ulen = mw.ustring.len local unfd = mw.ustring.toNFD local unfc = mw.ustring.toNFC local TILDE = u(0x0303) -- tilde = ̃ local AC = u(0x0301) --acute ´ local SYLDIV = u(0xFFF0) -- used to represent a user-specific syllable divider (.) so we won't change it local BREVE = u(0x032F) local vowel = "aeiouAEIOU" -- vowel; include y so we get single-word y correct and for syllabifying from spelling local V = "[" .. vowel .. "]" -- vowel class local W = "[wʝ]" -- glides, used in a few loanwords local sylsep = "%-." .. SYLDIV -- hyphen included for syllabifying from spelling local sylsep_c = "[" .. sylsep .. "]" local wordsep = "# " local separator = sylsep .. wordsep local separator_c = "[" .. separator .. "]" local C = "[^" .. vowel .. separator .. "]" -- consonant class including h -- version of rsubn() that discards all but the first return value local function rsub(term, foo, bar) local retval = rsubn(term, foo, bar) return retval end -- version of rsubn() that returns a 2nd argument boolean indicating whether -- a substitution was made. local function rsubb(term, foo, bar) local retval, nsubs = rsubn(term, foo, bar) return retval, nsubs > 0 end -- apply rsub() repeatedly until no change local function rsub_repeatedly(term, foo, bar) while true do local new_term = rsub(term, foo, bar) if new_term == term then return term end term = new_term end end local function decompose(text, rh_to_rac) -- decompose everything but ñ and ŕ text = unfd(text) text = rsub(text, ".[" .. TILDE .. AC .. "]", { ["n" .. TILDE] = "ñ", ["N" .. TILDE] = "Ñ", ["r" .. AC] = "ŕ", ["R" .. AC] = "Ŕ" }) if rh_to_rac then text = rsub(text, "rh$", "r") text = rsub(text, "rh([%- ])", "r%1") text = rsub(text, "ŕ", "r") text = rsub(text, "Ŕ", "R") end return text end local function split_on_comma(term) if term:find(",%s") then return require(put_module).split_on_comma(term) else return rsplit(term, ",") end end -- Remove any HTML from the formatted text and resolve links, since the extra characters don't contribute to the -- displayed length. local function convert_to_raw_text(text) text = rsub(text, "<.->", "") if text:find("%[%[") then text = require("Module:links").remove_links(text) end return text end -- Return the approximate displayed length in characters. local function textual_len(text) return ulen(convert_to_raw_text(text)) end local function construct_default_differences(dialect) if dialect == "gipuzkoan" then return { northern_different = false, j_different = false, need_bisc = false, } end return nil end -- Main syllable-division algorithm local function syllabify_from_spelling_or_pronun(text) text = rsub_repeatedly(text, "(" .. V .. ")(" .. C .. W .. "?" .. V .. ")", "%1.%2") text = rsub_repeatedly(text, "(" .. V .. C .. ")(" .. C .. V .. ")", "%1.%2") text = rsub_repeatedly(text, "(" .. V .. C .. ")(" .. C .. C .. V .. ")", "%1.%2") text = rsub_repeatedly(text, "(" .. V .. C .. C .. ")(" .. C .. C .. V .. ")", "%1.%2") text = rsub(text, "([pfbktdɡg])%.([lrɾ])", ".%1%2") --the first "ɡ" is the IPA one; the second "g" is the regular one text = rsub_repeatedly(text, "(" .. C .. ")%.s(" .. C .. ")", "%1s.%2") -- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% text = rsub_repeatedly(text, "([ae]" .. ")ui", "%1u.i") text = rsub_repeatedly(text, "([aeiou]" .. ")([aeo])", "%1.%2") text = rsub_repeatedly(text, "ii", "i.i") text = rsub_repeatedly(text, "([iou]" .. ")u", "%1.u") return text end local function syllabify_from_spelling(text) text = decompose(text) -- start at FFF1 because FFF0 is used for SYLDIV -- Temporary replacements for characters we want treated as default consonants. The C and related consonant regexes -- treat all unknown characters as consonants. local TEMP_tz = u(0xFFF1) local TEMP_ts = u(0xFFF2) local TEMP_tx = u(0xFFF3) local TEMP_tx_CAPS = u(0xFFF4) local TEMP_ll = u(0xFFF5) local TEMP_ll_CAPS = u(0xFFF6) local TEMP_dd = u(0xFFF7) local TEMP_dd_CAPS = u(0xFFF8) local TEMP_tt = u(0xFFF9) local TEMP_tt_CAPS = u(0xFFFA) local TEMP_rr = u(0xFFB) -- Change user-specified . into SYLDIV so we don't shuffle it around when dividing into syllables. text = text:gsub("%.", SYLDIV) -- handle digraphs text = rsub(text, "tz", TEMP_tz) text = rsub(text, "ts", TEMP_ts) text = rsub(text, "tx", TEMP_tx) text = rsub(text, "Tx", TEMP_tx_CAPS) text = rsub(text, "ll", TEMP_ll) text = rsub(text, "Ll", TEMP_ll_CAPS) text = rsub(text, "tt", TEMP_tt) text = rsub(text, "Tt", TEMP_tt_CAPS) text = rsub(text, "dd", TEMP_dd) text = rsub(text, "Dd", TEMP_dd_CAPS) text = rsub(text, "rr", TEMP_rr) text = syllabify_from_spelling_or_pronun(text) text = text:gsub(SYLDIV, ".") text = text:gsub(TEMP_tz, "tz") text = text:gsub(TEMP_ts, "ts") text = text:gsub(TEMP_tx, "tx") text = text:gsub(TEMP_tx_CAPS, "Tx") text = text:gsub(TEMP_ll, "ll") text = text:gsub(TEMP_ll_CAPS, "Ll") text = text:gsub(TEMP_tt, "tt") text = text:gsub(TEMP_tt_CAPS, "Tt") text = text:gsub(TEMP_dd, "dd") text = text:gsub(TEMP_dd_CAPS, "Dd") text = text:gsub(TEMP_rr, "rr") text = unfc(text) return text end -- Generate the IPA of a given respelling, where a respelling is the representation of the pronunciation of a given function export.IPA(text, dialect, phonetic) local northern = dialect == "northern" local southern = dialect == "gipuzkoan" or dialect == "navarrese" or dialect == "biscayan" local nav = dialect == "navarrese" local bisc = dialect == "biscayan" local northern_different = false local j_different = false local need_bisc = false local J = "" local N = "" -- start at FFF1 because FFF0 is used for SYLDIV local TEMP_Y = u(0xFFF1) local TEMP_W = u(0xFFF2) --function that gets the last two syllables (used for generating the correct rhymes) local function extract_last_syllables(text) local words = rsplit(text, " ") if #words > 1 then --no rhymes are generated when there are multiple words return "" end text = rsub(text, "([aeou])i", "%1") text = rsub(text, "([ae])u", "%1") local length = string.len(text) local rhyme = "" local count = -1 local syl = 0 while count > -length do if string.find("aeiou", string.sub(text,count,count)) then rhyme = string.sub(text,count,-1) syl = syl + 1 if syl == 2 then return rhyme end end count = count - 1 end return rhyme end if not text then error("Internal error: `text` must be passed in") end text = ulower(text) -- decompose everything but ñ and ü text = decompose(text) -- convert commas and en/en dashes to IPA foot boundaries text = rsub(text, "%s*[,–—]%s*", " | ") -- question mark or exclamation point in the middle of a sentence -> IPA foot boundary text = rsub(text, "([^%s])%s*[!?]%s*([^%s])", "%1 | %2") -- canonicalize multiple spaces and remove leading and trailing spaces local function canon_spaces(text) text = rsub(text, "%s+", " ") text = rsub(text, "^ ", "") text = rsub(text, " $", "") return text end text = canon_spaces(text) -- Convert hyphens to spaces, to handle [[Austria-Hungría]], [[franco-italiano]], etc. text = rsub(text, "%-", " ") -- canonicalize multiple spaces again, which may have been introduced by hyphens text = canon_spaces(text) -- now eliminate punctuation text = rsub(text, "[!?']", "") -- put # at word beginning and end and double ## at text/foot boundary beginning/end text = rsub(text, " | ", "# | #") text = "##" .. rsub(text, " ", "# #") .. "##" --determining whether "h" denotes a phoneme, or the lack of palatalization, palatalization when needed text = rsub(text, "nh", "N") text = rsub(text, "lh", "L") text = rsub(text, "rh#", "ɾ#") text = rsub(text, "ŕ", "ɾ#") text = rsub(text, "([aeo])il([# .h]*[aeiou])", (northern and "%1ił%2" or "%1ĺ%2")) text = rsub(text, "([aeo])in([# .h]*[aeiou])", (northern and "%1iň%2" or "%1ń%2")) text = rsub(text, "uin([# .h]*[aeiou])", (northern and "uiň%1" or "uiń%1")) text = rsub(text, "uil([# .h]*[aeiou])", (northern and "uił%1" or "uiĺ%1")) text = rsub(text, "il([# .h]*[aeiou])", (northern and "ił%1" or "iĺ%1")) text = rsub(text, "in([# .h]*[aeiou])", (northern and "iň%1" or "iń%1")) if text:find("[łňńĺh]") then northern_different = true end if extract_last_syllables(text):find("[łňńĺh]") then N = "N" end text = rsub(text, "ĺ", "ʎ") text = rsub(text, "ń", "ɲ") text = rsub(text, "N", "n") text = rsub(text, "L", "l") text = rsub(text, "ň", "n") text = rsub(text, "ł", "l") --c, g, q text = rsub(text, "ng([^aeiouüwhlr])", "n%1") -- [[Bangkok]], [[angstrom]], etc. text = rsub(text, "q", "k") -- [[quark]], [[Qatar]], [[burqa]], [[Iraq]], etc. text = rsub(text, "c", "k") -- [[campus]], etc. --alphabet-to-phoneme text = rsub(text, "aje#", "aʒe#") -- final -aje is pronounced /aʒe/ in the North and /axe/ in the South, regardless of how native j is pronounced text = rsub(text, "ihoa", "iχoa") -- the <h> in conjugated forms of joan is pronounced in the South text = rsub(text, "zh", "ź") text = rsub(text, "tx", "C") --not the real sound text = rsub(text, "tz", "Ś") --not the real sound text = rsub(text, "ts", "S") --not the real sound text = rsubb(text, "ll", "ʎ") text = rsubb(text, "dd", "ɟ") text = rsubb(text, "tt", "c") text = rsub(text, "x", "ʃ") text = rsub(text, "#p([st])", "#%1") -- [[psicologia]], [[pterodaktilo]] text = rsub(text, "[gñrvz]", { ["g"] = "ɡ", ["ñ"] = "ɲ", ["v"] = "b", ["z"] = "ś" }) if text:find("ś") or text:find("S") then need_bisc = true end --/x/~/j/~/ʒ/ sounds if text:find("[yj]") then northern_different = true j_different = true end if extract_last_syllables(text):find("[yj]") then J = "J" end if text:find("ʒ") or text:find("χ") then northern_different = true end if extract_last_syllables(text):find("ʒ") then N = "N" end if text:find("kh") then northern_different = true end if extract_last_syllables(text):find("kh") then N = "N" end if text:find("ź") then northern_different = true end if extract_last_syllables(text):find("ź") then N = "N" end text = rsubb(text, "j", (northern and "ɟ" or "x")) text = rsubb(text, "y", (northern and "ɟ" or "j")) -- <y> is used for words which always have a palatal text = rsubb(text, "kh", (northern and "k" or "χ")) text = rsubb(text, "ź", (northern and "ʒ" or "ʃ")) -- trilled r (in all cases except between vowels) text = rsub_repeatedly(text, "([aeiou])r([aeiou])", "%1ɾ%2") -- it has to be applied twice in order to handle VrVrV sequences text = rsub(text, "rr", "r") text = rsub(text, "n([# .]*[bpm])", "m%1") -- lack of /h/ in Southern dialects text = rsub_repeatedly(text, "([aeiou])h%1", northern and "%1h%1" or "%1") text = rsub(text, "h", (northern and "h" or "")) text = rsub(text, "n([# .]*[bpm])", "m%1") -- handle i/u between vowels text = rsub_repeatedly(text, "ui", "U") --this dipthong requires special treatment local vowel_to_glide = { ["i"] = "i.", ["u"] = "u." } text = rsub_repeatedly(text, "(" .. V .. "*)([iu])(" .. V .. ")", function(v1, iu, v2) return v1 .. vowel_to_glide[iu] .. v2 end ) text = rsub_repeatedly(text, "U", "ui") --syllable division text = syllabify_from_spelling_or_pronun(text) --dialectal differences if nav then text = rsub(text, "x", "j") elseif bisc then --fake symbols, to be replaced later text = rsub(text, "x", "đ") text = rsub(text, "j", "đ") text = rsub(text, "ś", "s") text = rsub(text, "S", "Ś") end text = rsubb(text, "ʒ", (southern and "x" or "ʒ")) text = rsubb(text, "χ", (southern and "x" or "h")) --phonetic transcription if phonetic then -- θ, s, f before voiced consonants local voiced = "mnɲbdɟɡʎljđ" local r = "ɾr" local tovoiced = { ["s"] = "z̺", ["ś"] = "z̻", } local function voice(sound, following) return tovoiced[sound] .. following end text = rsub(text, "([sś])(" .. separator_c .. "*[" .. voiced .. r .. "])", voice) -- fricative vs. stop allophones; first convert stops to fricatives, then back to stops -- after nasals and sometimes after l local stop_to_fricative = {["b"] = "β", ["d"] = "ð", ["ɡ"] = "ɣ"} local fricative_to_stop = {["β"] = "b", ["ð"] = "d", ["ɣ"] = "ɡ"} text = rsub(text, "[bdɡ]", stop_to_fricative) text = rsub(text, "([mnɲ]" .. separator_c .. "*)([βɣ])", function(nasal, fricative) return nasal .. fricative_to_stop[fricative] end ) text = rsub(text, "([lʎmnɲ]" .. separator_c .. "*)([ð])", function(nasal_l, fricative) return nasal_l .. fricative_to_stop[fricative] end ) text = rsub(text, "##β", "##b") text = rsub(text, "##ð", "##d") text = rsub(text, "##ɣ", "##ɡ") text = rsub(text, "[td]", {["t"] = "t̪", ["d"] = "d̪"}) -- nasal assimilation before consonants local labiodental, dentialveolar, alveolopalatal, palatal, velar = "ɱ", "n̪", "nʲ", "ɲ", "ŋ" local nasal_assimilation = { ["f"] = labiodental, ["t"] = dentialveolar, ["d"] = dentialveolar, ["C"] = alveolopalatal, ["ʃ"] = alveolopalatal, ["đ"] = alveolopalatal, ["ɟ"] = palatal, ["c"] = palatal, ["ʎ"] = palatal, ["j"] = palatal, ["k"] = velar, ["x"] = velar, ["ɡ"] = velar, } text = rsub(text, "n(" .. separator_c .. "*)(.)", function(stress, following) return (nasal_assimilation[following] or "n") .. stress .. following end ) -- lateral assimilation before consonants text = rsub(text, "l(" .. separator_c .. "*)(.)", function(stress, following) local l = "l" if following == "t" or following == "d" then -- dentialveolar l = "l̪" elseif following == "C" or following == "ʃ" or following == "đ" then -- alveolopalatal l = "lʲ" elseif following == "ɟ" or following == "c" or following == "j" then -- alveolopalatal l = "ʎ" end return l .. stress .. following end) -- voiced fricatives are actually approximants text = rsub(text, "([βðɣ])", "%1̞") --nasalization of vowels text = rsub(text, "([aeou])i([mnɲ])", "%1" .. TILDE .. "i" .. TILDE .. "%2") text = rsub(text, "([ae])u([mnɲ])", "%1" .. TILDE .. "u" .. TILDE .. "%2") text = rsub(text, "([aeiou])([mnɲ])", "%1" .. TILDE .. "%2") --word final /ɾ/ text = rsub(text, "ɾ#", "R#") text = rsub(text, "R#([# .]*[aeiou])", "ɾ#%1") text = rsub(text, "R", "r") end --semivowels text = rsub(text, "([aeou])" .. TILDE .. "([i])", "%1" .. TILDE .. "%2̯") text = rsub(text, "([ae])" .. TILDE .. "([u])", "%1" .. TILDE .. "%2̯") text = rsub(text, "([aeou][i])", "%1̯") text = rsub(text, "([ae][u])", "%1̯") text = rsub(text, "u̯i̯", "u̯i") --correct the mistake appeareing in words with aui, eui -- convert fake symbols to real ones local final_conversions = { ["S"] = "t͡s̺", ["Ś"] = "t͡s̻", ["s"] = "s̺", ["ś"] = "s̻", ["C"] = "t͡ʃ", ["X"] = "x", ["đ"] = "d͡ʒ", ["ʝ"] = "j" } text = rsub(text, "[SŚsśCXđʝ]", final_conversions) -- remove # symbols at word and text boundaries text = rsub(text, "#", "") text = mw.ustring.toNFC(text) --add technical characters to the end of the rhyme in order to parse the rhymes correctly text = text .. J .. N local differences = nil if dialect == "gipuzkoan" then differences = { northern_different = northern_different, need_bisc = need_bisc, j_different = j_different, } end local ret = { text = text, differences = differences, } return ret end function export.IPA_string(frame) local iparams = { [1] = {}, ["style"] = {required = true}, ["phonetic"] = {type = "boolean"}, } local iargs = require("Module:parameters").process(frame.args, iparams) local retval = export.IPA(iargs[1] or mw.loadData("Module:headword/data").pagename, iargs.style, iargs.phonetic) return retval.text end -- Generate all relevant dialect pronunciations and group into styles. local function express_all_styles(style_spec, dodialect) local ret = { pronun = {}, expressed_styles = {}, } local need_bisc local function express_style(hidden_tag, tag, representative_dialect, matching_styles) matching_styles = matching_styles or representative_dialect -- If style specified, make sure it matches the requested style. local style_matches if not style_spec then style_matches = true else local style_parts = rsplit(matching_styles, "%-") local or_styles = rsplit(style_spec, "%s*,%s*") for _, or_style in ipairs(or_styles) do local and_styles = rsplit(or_style, "%s*%+%s*") local and_matches = true for _, and_style in ipairs(and_styles) do local negate if and_style:find("^%-") then and_style = and_style:gsub("^%-", "") negate = true end local this_style_matches = false for _, part in ipairs(style_parts) do if part == and_style then this_style_matches = true break end end if negate then this_style_matches = not this_style_matches end if not this_style_matches then and_matches = false end end if and_matches then style_matches = true break end end end if not style_matches then return end -- Fetch the representative dialect's pronunciation if not already present. if not ret.pronun[representative_dialect] then dodialect(ret, representative_dialect) end -- Insert the new style into the style group, creating the group if necessary. local new_style = { tag = tag, pronun = ret.pronun[representative_dialect], } for _, hidden_tag_style in ipairs(ret.expressed_styles) do if hidden_tag_style.tag == hidden_tag then table.insert(hidden_tag_style.styles, new_style) return end end table.insert(ret.expressed_styles, { tag = hidden_tag, styles = {new_style}, }) end -- For each type of difference, figure out if the difference exists in any of the given respellings. We do this by -- generating the pronunciation for the dialect "gipuzkoan", for each respelling. In the process of -- generating the pronunciation for a given respelling, it computes how the other dialects for that respelling -- differ. Then we take the union of these differences across the respellings. dodialect(ret, "gipuzkoan") local differences = {} for _, difftype in ipairs { "northern_different", "j_different", "need_bisc"} do for _, pronun in ipairs(ret.pronun["gipuzkoan"]) do if pronun.differences[difftype] then differences[difftype] = true end end end local northern_different = differences.northern_different local j_different = differences.j_different need_bisc = differences.need_bisc -- Now, based on the observed differences, figure out how to combine the individual dialects into styles and style groups. if northern_different then express_style("<<Navarro-Lapurdian>>","<<Navarro-Lapurdian>>","northern") if j_different then express_style("<<Southern>>","<<Gipuzkoan>>","gipuzkoan") express_style("<<Southern>>","<<Biscayan>>","biscayan") express_style("<<Southern>>","<<Navarrese>>","navarrese") else if need_bisc then express_style("<<Southern>>","<<Gipuzkoan>>, <<Navarrese>>","gipuzkoan") express_style("<<Southern>>","<<Biscayan>>","biscayan") else express_style("<<Southern>>","Southern","gipuzkoan") end end else if j_different then express_style("<<Navarro-Lapurdian>>","<<Navarro-Lapurdian>>","northern") express_style("<<Southern>>","<<Gipuzkoan>>","gipuzkoan") express_style("<<Southern>>","<<Biscayan>>","biscayan") express_style("<<Southern>>","<<Navarrese>>","navarrese") elseif need_bisc then express_style(false,"most dialects","gipuzkoan") express_style(false,"<<Biscayan>>","biscayan") else express_style(false,false,"gipuzkoan") end end return ret end local function format_all_styles(expressed_styles, format_style) for i, style_group in ipairs(expressed_styles) do if #style_group.styles == 1 then style_group.formatted, style_group.formatted_len = format_style(style_group.styles[1].tag, style_group.styles[1], i == 1) else style_group.formatted, style_group.formatted_len = format_style(style_group.tag, style_group.styles[1], i == 1) for j, style in ipairs(style_group.styles) do style.formatted, style.formatted_len = format_style(style.tag, style, i == 1 and j == 1) end end end local maxlen = 0 for i, style_group in ipairs(expressed_styles) do local this_len = style_group.formatted_len if #style_group.styles > 1 then for _, style in ipairs(style_group.styles) do this_len = math.max(this_len, style.formatted_len) end end maxlen = math.max(maxlen, this_len) end local lines = {} local need_major_hack = false for i, style_group in ipairs(expressed_styles) do if #style_group.styles == 1 then table.insert(lines, style_group.formatted) need_major_hack = false else local inline = '\n<div class="vsShow" style="display:none">\n' .. style_group.formatted .. "</div>" local full_prons = {} for _, style in ipairs(style_group.styles) do table.insert(full_prons, style.formatted) end local full = '\n<div class="vsHide">\n' .. table.concat(full_prons, "\n") .. "</div>" local em_length = math.floor(maxlen * 0.68) -- from [[Module:grc-pronunciation]] table.insert(lines, '<div class="vsSwitcher" data-toggle-category="pronunciations" style="width: ' .. em_length .. 'em; max-width:100%;"><span class="vsToggleElement" style="float: right;">&nbsp;</span>' .. inline .. full .. "</div>") need_major_hack = true end end -- major hack to get bullets working on the next line after a div box return table.concat(lines, "\n") .. (need_major_hack and "\n<span></span>" or "") end local function dodialect_pronun(args, ret, dialect) ret.pronun[dialect] = {} for i, term in ipairs(args.terms) do local phonemic, phonetic, differences if term.raw then phonemic = term.raw_phonemic phonetic = term.raw_phonetic differences = construct_default_differences(dialect) else phonemic = export.IPA(term.term, dialect, false) phonetic = export.IPA(term.term, dialect, true) differences = phonemic.differences phonemic = phonemic.text phonetic = phonetic.text end local refs if not term.ref then refs = nil else refs = {} for _, refspec in ipairs(term.ref) do local this_refs = require("Module:references").parse_references(refspec) for _, this_ref in ipairs(this_refs) do table.insert(refs, this_ref) end end end ret.pronun[dialect][i] = { raw = term.raw, phonemic = phonemic, phonetic = phonetic, refs = refs, q = term.q, qq = term.qq, a = term.a, aa = term.aa, differences = differences, } end end local function generate_pronun(args) local function remove_technical_chars(text) return rsub(text, "([JN])", "") end local function this_dodialect_pronun(ret, dialect) dodialect_pronun(args, ret, dialect) end local ret = express_all_styles(args.style, this_dodialect_pronun) local function format_style(tag, expressed_style, is_first) local pronunciations = {} local formatted_pronuns = {} local function ins(formatted_part) table.insert(formatted_pronuns, formatted_part) end -- Loop through each pronunciation. For each one, add the phonemic and phonetic versions to `pronunciations`, -- for formatting by [[Module:IPA]], and also create an approximation of the formatted version so that we can -- compute the appropriate width of the HTML switcher div box that holds the different per-dialect variants. -- NOTE: The code below constructs the formatted approximation out-of-order in some cases but that doesn't -- currently matter because we assume all characters have the same width. If we change the width computation -- in a way that requires the correct order, we need changes to the code below. for j, pronun in ipairs(expressed_style.pronun) do -- Add tag to right accent qualifiers if last one local aas = pronun.aa if j == #expressed_style.pronun and tag then if aas then aas = m_table.deepCopy(aas) table.insert(aas, tag) else aas = {tag} end end local first_pronun = #pronunciations + 1 if not pronun.phonemic and not pronun.phonetic then error("Internal error: Saw neither phonemic nor phonetic pronunciation") end if pronun.phonemic then -- missing if 'raw:[...]' given -- don't display syllable division markers in phonemic local slash_pron = "/" .. remove_technical_chars(pronun.phonemic:gsub("%.", "")) .. "/" table.insert(pronunciations, { pron = slash_pron, }) ins(slash_pron) end if pronun.phonetic then -- missing if 'raw:/.../' given local bracket_pron = "[" .. remove_technical_chars(pronun.phonetic) .. "]" table.insert(pronunciations, { pron = bracket_pron, }) ins(bracket_pron) end local last_pronun = #pronunciations if pronun.q then pronunciations[first_pronun].q = pronun.q end if pronun.a then pronunciations[first_pronun].a = pronun.a end if j > 1 then pronunciations[first_pronun].separator = ", " ins(", ") end if pronun.qq then pronunciations[last_pronun].qq = pronun.qq end if aas then pronunciations[last_pronun].aa = aas end if pronun.q or pronun.qq or pronun.a or aas then -- Note: This inserts the actual formatted qualifier text, including HTML and such, but the later call -- to textual_len() removes all HTML and reduces links. ins(require(decorations_module).format_decorations { lang = lang, text = "", -- need to copy as formatting accent qualifiers destructively modifies the lists q = m_table.shallowCopy(pronun.q), qq = m_table.shallowCopy(pronun.qq), a = m_table.shallowCopy(pronun.a), aa = m_table.shallowCopy(aas), }) end if pronun.refs then pronunciations[last_pronun].refs = pronun.refs -- Approximate the reference using a footnote notation. This will be slightly inaccurate if there are -- more than nine references but that is rare. ins(string.rep("[1]", #pronun.refs)) end if first_pronun ~= last_pronun then pronunciations[last_pronun].separator = " " ins(" ") end end local bullet = string.rep("*", args.bullets) .. " " -- Here we construct the formatted line in `formatted`, and also try to construct the equivalent without HTML -- and wiki markup in `formatted_for_len`, so we can compute the approximate textual length for use in sizing -- the toggle box with the "more" button on the right. local pre = is_first and args.pre and args.pre .. " " or "" local post = is_first and args.post and " " .. args.post or "" local formatted = bullet .. pre .. m_IPA.format_IPA_full { lang = lang, items = pronunciations, separator = "" } .. post local formatted_for_len = bullet .. pre .. "IPA(key): " .. table.concat(formatted_pronuns) .. post return formatted, textual_len(formatted_for_len) end ret.text = format_all_styles(ret.expressed_styles, format_style) return ret end local function parse_respelling(respelling, pagename, parse_err) local raw_respelling = respelling:match("^raw:(.*)$") if raw_respelling then local raw_phonemic, raw_phonetic = raw_respelling:match("^/(.*)/ %[(.*)%]$") if not raw_phonemic then raw_phonemic = raw_respelling:match("^/(.*)/$") end if not raw_phonemic then raw_phonetic = raw_respelling:match("^%[(.*)%]$") end if not raw_phonemic and not raw_phonetic then parse_err(("Unable to parse raw respelling '%s', should be one of /.../, [...] or /.../ [...]") :format(raw_respelling)) end return { raw = true, raw_phonemic = raw_phonemic, raw_phonetic = raw_phonetic, } end if respelling == "+" then respelling = pagename end return {term = respelling} end -- Return the number of syllables of a phonemic representation, which should have syllable dividers in it but no -- hyphens. local function get_num_syl_from_phonemic(phonemic) -- Maybe we should just count vowels instead of the below code. phonemic = rsub(phonemic, "|", " ") -- remove IPA foot boundaries local words = rsplit(phonemic, " +") for i, word in ipairs(words) do -- IPA stress marks are syllable divisions if between characters; otherwise just remove. word = rsub(word, "(.)[ˌˈ](.)", "%1.%2") word = rsub(word, "[ˌˈ]", "") words[i] = word end -- There should be a syllable boundary between words. phonemic = table.concat(words, ".") return ulen(rsub(phonemic, "[^.]", "")) + 1 end -- Take the last two syllables for the ryhme, unless the word has a single syllable local function convert_phonemic_to_rhyme(phonemic, short) local syllables = rsplit(phonemic, "%.") local rh = "" if #syllables > 1 then rh = short and syllables[#syllables] or table.concat(syllables, ".", #syllables - 1, #syllables) else rh = phonemic end return rsub(rh, "^[^" .. vowel .. "]*", ""):gsub("%.", ""):gsub("͡", "") end local function split_syllabified_spelling(spelling) return rsplit(spelling, "%.") end -- "Align" syllabification to original spelling by matching character-by-character, allowing for extra syllable and -- accent markers in the syllabification. If we encounter an extra syllable marker (.), we allow and keep it. If we -- encounter an extra accent marker in the syllabification, we drop it. In any other case, we return nil indicating -- the alignment failed. local function align_syllabification_to_spelling(syllab, spelling) local result = {} local syll_chars = rsplit(decompose(syllab, true), "") local spelling_chars = rsplit(decompose(spelling, false), "") local i = 1 local j = 1 while i <= #syll_chars or j <= #spelling_chars do local ci = syll_chars[i] local cj = spelling_chars[j] if ci == cj then table.insert(result, ci) i = i + 1 j = j + 1 elseif ci == "." then table.insert(result, ci) i = i + 1 elseif ci == AC then -- skip character i = i + 1 else -- non-matching character return nil end end if i <= #syll_chars or j <= #spelling_chars then -- left-over characters on one side or the other return nil end return unfc(table.concat(result)) end local function generate_hyph_obj(term) return {syllabification = term, hyph = split_syllabified_spelling(term)} end -- Word should already be decomposed. local function word_has_vowels(word) return rfind(word, V) end local function all_words_have_vowels(term) local words = rsplit(decompose(term, false), "[ %-]") for i, word in ipairs(words) do -- Allow empty word; this occurs with prefixes and suffixes. if word ~= "" and not word_has_vowels(word) then return false end end return true end local function should_generate_rhyme_from_respelling(term) local words = rsplit(decompose(term, false), " +") return #words == 1 and -- no if multiple words not words[1]:find(".%-.") and -- no if word is composed of hyphenated parts (e.g. [[Austria-Hungría]]) not words[1]:find("%-$") and -- no if word is a prefix word_has_vowels(words[1]) -- no if word has no vowels (e.g. a single letter) end local function should_generate_rhyme_from_ipa(ipa) return not ipa:find("%s") and word_has_vowels(decompose(ipa, false)) end local function dodialect_specified_rhymes(rhymes, hyphs, parsed_respellings, rhyme_ret, dialect) rhyme_ret.pronun[dialect] = {} for _, rhyme in ipairs(rhymes) do local num_syl = rhyme.num_syl local no_num_syl = false -- If user explicitly gave the rhyme but didn't explicitly specify the number of syllables, try to take it from -- the hyphenation. if not num_syl then num_syl = {} for _, hyph in ipairs(hyphs) do if should_generate_rhyme_from_respelling(hyph.syllabification) then local this_num_syl = 1 + ulen(rsub(hyph.syllabification, "[^.]", "")) m_table.insertIfNot(num_syl, this_num_syl) else no_num_syl = true break end end if no_num_syl or #num_syl == 0 then num_syl = nil end end -- If that fails and term is single-word, try to take it from the phonemic. if not no_num_syl and not num_syl then for _, parsed in ipairs(parsed_respellings) do for dialect, pronun in pairs(parsed.pronun.pronun[dialect]) do -- Check that pronun.phonemic exists (it may not if raw phonetic-only pronun is given). if pronun.phonemic then if not should_generate_rhyme_from_ipa(pronun.phonemic) then no_num_syl = true break end -- Count number of syllables by looking at syllable boundaries (including stress marks). local this_num_syl = get_num_syl_from_phonemic(pronun.phonemic) m_table.insertIfNot(num_syl, this_num_syl) end end if no_num_syl then break end end if no_num_syl or #num_syl == 0 then num_syl = nil end end table.insert(rhyme_ret.pronun[dialect], { rhyme = rhyme.rhyme, num_syl = num_syl, q = rhyme.q, qq = rhyme.qq, a = rhyme.a, aa = rhyme.aa, differences = construct_default_differences(dialect), }) end end local function parse_pron_modifier(arg, parse_err, generate_obj, param_mods, no_split_on_comma) local retval = {} if arg:find("<") then local put = require(put_module) local function get_valid_prefixes() local valid_prefixes = {} for param_mod, _ in pairs(param_mods) do table.insert(valid_prefixes, param_mod) end table.insert(valid_prefixes, "q") table.insert(valid_prefixes, "qq") table.insert(valid_prefixes, "a") table.insert(valid_prefixes, "aa") table.sort(valid_prefixes) return valid_prefixes end local segments = put.parse_balanced_segment_run(arg, "<", ">") local comma_separated_groups = no_split_on_comma and {segments} or put.split_alternating_runs_on_comma(segments) for _, group in ipairs(comma_separated_groups) do local obj = generate_obj(group[1]) for j = 2, #group - 1, 2 do if group[j + 1] ~= "" then parse_err("Extraneous text '" .. group[j + 1] .. "' after modifier") end local modtext = group[j]:match("^<(.*)>$") if not modtext then parse_err("Internal error: Modifier '" .. group[j] .. "' isn't surrounded by angle brackets") end local prefix, val = modtext:match("^([a-z]+):(.*)$") if not prefix then local valid_prefixes = get_valid_prefixes() for i, valid_prefix in ipairs(valid_prefixes) do valid_prefixes[i] = "'" .. valid_prefix .. ":'" end parse_err("Modifier " .. group[j] .. " lacks a prefix, should begin with one of " .. m_table.serialCommaJoin(valid_prefixes)) end if prefix == "q" or prefix == "qq" or prefix == "a" or prefix == "aa" then if not obj[prefix] then obj[prefix] = {} end table.insert(obj[prefix], val) elseif param_mods[prefix] then local key = param_mods[prefix].item_dest or prefix if obj[key] then parse_err("Modifier '" .. prefix .. "' specified more than once") end local convert = param_mods[prefix].convert if convert then obj[key] = convert(val) else obj[key] = val end else local valid_prefixes = get_valid_prefixes() for i, valid_prefix in ipairs(valid_prefixes) do valid_prefixes[i] = "'" .. valid_prefix .. "'" end parse_err("Unrecognized prefix '" .. prefix .. "' in modifier " .. group[j] .. ", should be " .. m_table.serialCommaJoin(valid_prefixes)) end end table.insert(retval, obj) end elseif no_split_on_comma then table.insert(retval, generate_obj(arg)) else for _, term in ipairs(split_on_comma(arg)) do table.insert(retval, generate_obj(term)) end end return retval end local function parse_rhyme(arg, parse_err) local function generate_obj(term) return {rhyme = term} end local param_mods = { s = { item_dest = "num_syl", convert = function(arg) local nsyls = rsplit(arg, ",") for i, nsyl in ipairs(nsyls) do if not nsyl:find("^[0-9]+$") then parse_err("Number of syllables '" .. nsyl .. "' should be numeric") end nsyls[i] = tonumber(nsyl) end return nsyls end, }, } return parse_pron_modifier(arg, parse_err, generate_obj, param_mods) end local function parse_hyph(arg, parse_err) -- None other than decorations local param_mods = {} return parse_pron_modifier(arg, parse_err, generate_hyph_obj, param_mods) end local function parse_homophone(arg, parse_err) local function generate_obj(term) return {term = term} end local param_mods = { t = { -- We need to store the <t:...> inline modifier into the "gloss" key of the parsed term, -- because that is what [[Module:links]] (called from [[Module:homophones]]) expects. item_dest = "gloss", }, gloss = {}, pos = {}, alt = {}, lit = {}, id = {}, g = { -- We need to store the <g:...> inline modifier into the "genders" key of the parsed term, -- because that is what [[Module:links]] (called from [[Module:homophones]]) expects. item_dest = "genders", convert = function(arg) return rsplit(arg, ",") end, }, } return parse_pron_modifier(arg, parse_err, generate_obj, param_mods) end local function generate_audio_obj(arg) local file, gloss if arg:find("#") then file, gloss = arg:match("^(.-)%s*#%s*(.*)$") else file, gloss = arg:match("^(.-)%s*;%s*(.*)$") end file = file or arg return {file = file, gloss = gloss} end local function parse_audio(arg, parse_err) -- None other than decorations local param_mods = {} -- Don't split on comma because some filenames have embedded commas not followed by a space -- (typically followed by an underscore). return parse_pron_modifier(arg, parse_err, generate_audio_obj, param_mods, "no split on comma") end -- External entry point for {{es-pr}}. function export.show_pr(frame) local params = { [1] = {list = true}, ["rhyme"] = true, ["hyph"] = true, ["hmp"] = true, ["audio"] = {list = true}, ["pagename"] = true, } local parargs = frame:getParent().args local args = require("Module:parameters").process(parargs, params) local pagename = args.pagename or mw.loadData("Module:headword/data").pagename -- Parse the arguments. local function remove_technical_chars(text) return rsub(text, "([JN])", "") end local respellings = #args[1] > 0 and args[1] or {"+"} local parsed_respellings = {} local function overall_parse_err(msg, arg, val) error(msg .. ": " .. arg .. "= " .. val) end local overall_rhyme = args.rhyme and parse_rhyme(args.rhyme, nil, function(msg) overall_parse_err(msg, "rhyme", args.rhyme) end) or nil local overall_hyph = args.hyph and parse_hyph(args.hyph, nil, function(msg) overall_parse_err(msg, "hyph", args.hyph) end) or nil local overall_hmp = args.hmp and parse_homophone(args.hmp, nil, function(msg) overall_parse_err(msg, "hmp", args.hmp) end) or nil local overall_audio if args.audio then overall_audio = {} for _, audio in ipairs(args.audio) do local parsed_audio = parse_audio(audio, nil, function(msg) overall_parse_err(msg, "audio", audio) end) if #parsed_audio > 1 then error("Internal error: Saw more than one object returned from parse_audio") end table.insert(overall_audio, parsed_audio[1]) end end local put for i, respelling in ipairs(respellings) do local function parse_err(msg) error(msg .. ": " .. i .. "= " .. respelling) end if respelling:find("<") then if not put then put = require(put_module) end local param_mods = { pre = {}, post = {}, style = {}, bullets = { convert = function(arg) if not arg:find("^[0-9]+$") then parse_err("Modifier 'bullets' should have a number as argument, but saw '" .. arg .. "'") end return tonumber(arg) end, }, rhyme = { insert = true, flatten = true, convert = function(arg) return parse_rhyme(arg, parse_err) end, }, hyph = { insert = true, flatten = true, convert = function(arg) return parse_hyph(arg, parse_err) end, }, hmp = { insert = true, flatten = true, convert = function(arg) return parse_homophone(arg, parse_err) end, }, audio = { insert = true, flatten = true, convert = function(arg) return parse_audio(arg, parse_err) end, }, } local function get_valid_prefixes() local valid_prefixes = {} for param_mod, _ in pairs(param_mods) do table.insert(valid_prefixes, param_mod) end table.insert(valid_prefixes, "ref") table.insert(valid_prefixes, "q") table.insert(valid_prefixes, "qq") table.insert(valid_prefixes, "a") table.insert(valid_prefixes, "aa") table.sort(valid_prefixes) return valid_prefixes end local segments = put.parse_balanced_segment_run(respelling, "<", ">") local comma_separated_groups = put.split_alternating_runs_on_comma(segments, ",") local parsed = {terms = {}, audio = {}, rhyme = {}, hyph = {}, hmp = {}} for j, group in ipairs(comma_separated_groups) do local termobj = parse_respelling(group[1], pagename, parse_err) for k = 2, #group - 1, 2 do if group[k + 1] ~= "" then parse_err("Extraneous text '" .. group[k + 1] .. "' after modifier") end local modtext = group[k]:match("^<(.*)>$") if not modtext then parse_err("Internal error: Modifier '" .. group[k] .. "' isn't surrounded by angle brackets") end local prefix, arg = modtext:match("^([a-z]+):(.*)$") if not prefix then local valid_prefixes = get_valid_prefixes() for i, valid_prefix in ipairs(valid_prefixes) do valid_prefixes[i] = "'" .. valid_prefix .. ":'" end parse_err("Modifier " .. group[k] .. " lacks a prefix, should begin with one of " .. m_table.serialCommaJoin(valid_prefixes)) end if prefix == "ref" or prefix == "q" or prefix == "qq" or prefix == "a" or prefix == "aa" then if not termobj[prefix] then termobj[prefix] = {} end table.insert(termobj[prefix], arg) elseif param_mods[prefix] then if j < #comma_separated_groups then parse_err("Modifier '" .. prefix .. "' should occur after the last comma-separated term") end if not param_mods[prefix].insert and parsed[prefix] then parse_err("Modifier '" .. prefix .. "' occurs twice, second occurrence " .. group[k]) end local converted if param_mods[prefix].convert then converted = param_mods[prefix].convert(arg) else converted = arg end if param_mods[prefix].insert then if param_mods[prefix].flatten then for _, obj in ipairs(converted) do table.insert(parsed[prefix], obj) end else table.insert(parsed[prefix], converted) end else parsed[prefix] = converted end else local valid_prefixes = get_valid_prefixes() for i, valid_prefix in ipairs(valid_prefixes) do valid_prefixes[i] = "'" .. valid_prefix .. "'" end parse_err("Unrecognized prefix '" .. prefix .. "' in modifier " .. group[k] .. ", should be " .. m_table.serialCommaJoin(valid_prefixes)) end end table.insert(parsed.terms, termobj) end if not parsed.bullets then parsed.bullets = 1 end table.insert(parsed_respellings, parsed) else local termobjs = {} for _, term in ipairs(split_on_comma(respelling)) do table.insert(termobjs, parse_respelling(term, pagename, parse_err)) end table.insert(parsed_respellings, { terms = termobjs, audio = {}, rhyme = {}, hyph = {}, hmp = {}, bullets = 1, }) end end if overall_hyph then local hyphs = {} for _, hyph in ipairs(overall_hyph) do if hyph.syllabification == "+" then hyph.syllabification = syllabify_from_spelling(pagename) hyph.hyph = split_syllabified_spelling(hyph.syllabification) elseif hyph.syllabification == "-" then overall_hyph = {} break end end end -- Loop over individual respellings, processing each. for _, parsed in ipairs(parsed_respellings) do parsed.pronun = generate_pronun(parsed) local no_auto_rhyme = false for _, term in ipairs(parsed.terms) do if term.raw then if not should_generate_rhyme_from_ipa(term.raw_phonemic or term.raw_phonetic) then no_auto_rhyme = true break end elseif not should_generate_rhyme_from_respelling(term.term) then no_auto_rhyme = true break end end if #parsed.hyph == 0 then if not overall_hyph and all_words_have_vowels(pagename) then for _, term in ipairs(parsed.terms) do if not term.raw then local syllabification = syllabify_from_spelling(term.term) local aligned_syll = align_syllabification_to_spelling(syllabification, pagename) if aligned_syll then m_table.insertIfNot(parsed.hyph, generate_hyph_obj(aligned_syll)) end end end end else for _, hyph in ipairs(parsed.hyph) do if hyph.syllabification == "+" then hyph.syllabification = syllabify_from_spelling(pagename) hyph.hyph = split_syllabified_spelling(hyph.syllabification) elseif hyph.syllabification == "-" then parsed.hyph = {} break end end end -- Generate the rhymes. local function dodialect_rhymes_from_pronun(rhyme_ret, dialect) rhyme_ret.pronun[dialect] = {} -- It's possible the pronunciation for a passed-in dialect was never generated. This happens e.g. with -- {{es-pr|cebolla<style:seseo>}}. The initial call to generate_pronun() fails to generate a pronunciation -- for the dialect 'distinction-yeismo' because the pronunciation of 'cebolla' differs between distincion -- and seseo and so the seseo style restriction rules out generation of pronunciation for distincion -- dialects (other than 'gipuzkoan', which always gets generated so as to determine on which axes -- the dialects differ). However, when generating the rhyme, it is based only on -olla, whose pronunciation -- does not differ between distincion and seseo, but does differ between lleismo and yeismo, so it needs to -- generate a yeismo-specific rhyme, and 'distincion-yeismo' is the representative dialect for yeismo in the -- situation where distincion and seseo do not have distinct results (based on the following line in -- express_all_styles()): -- express_style(false, "most of Spain and Latin America", "distincion-yeismo", "distincion-seseo-yeismo") -- In this case we need to generate the missing overall pronunciation ourselves since we need it to generate -- the dialect-specific rhyme pronunciation. if not parsed.pronun.pronun[dialect] then dodialect_pronun(parsed, parsed.pronun, dialect) end for _, pronun in ipairs(parsed.pronun.pronun[dialect]) do -- We should have already excluded multiword terms and terms without vowels from rhyme generation (see -- `no_auto_rhyme` below). But make sure to check that pronun.phonemic exists (it may not if raw -- phonetic-only pronun is given). if pronun.phonemic then -- Count number of syllables by looking at syllable boundaries (including stress marks). local num_syl = get_num_syl_from_phonemic(pronun.phonemic) -- Get the rhyme by truncating everything up through the last stress mark + any following -- consonants, and remove syllable boundary markers. local rhyme = convert_phonemic_to_rhyme(pronun.phonemic, false) local short_rhyme = convert_phonemic_to_rhyme(pronun.phonemic, true) local saw_already = false for _, existing in ipairs(rhyme_ret.pronun[dialect]) do if existing.rhyme == rhyme then saw_already = true -- We already saw this rhyme but possibly with a different number of syllables, -- e.g. if the user specified two pronunciations 'biología' (4 syllables) and -- 'bi.ología' (5 syllables), both of which have the same rhyme /ia/. m_table.insertIfNot(existing.num_syl, num_syl) break end end if not saw_already then local rh2 = rsub(rhyme, "ts̻", "") local rhyme_diffs = nil if dialect == "gipuzkoan" then rhyme_diffs = {} if rfind(rh2,"s̻") then rhyme_diffs.need_bisc = true end if rfind(rhyme,"ts̺") then rhyme_diffs.need_bisc = true end if rfind(rhyme,"J") then rhyme_diffs.j_different = true end if rfind(rhyme,"N") then rhyme_diffs.northern_different = true end end table.insert(rhyme_ret.pronun[dialect], { rhyme = remove_technical_chars(rhyme), num_syl = {num_syl}, differences = rhyme_diffs, }) if rhyme ~= short_rhyme then table.insert(rhyme_ret.pronun[dialect], { rhyme = remove_technical_chars(short_rhyme), num_syl = {num_syl}, differences = rhyme_diffs, --we'll keep the rhyme in all dialects even if it's repeated (for clarity, see [[zinen]]) }) end end end end end if #parsed.rhyme == 0 then if overall_rhyme or no_auto_rhyme then parsed.rhyme = nil else parsed.rhyme = express_all_styles(parsed.style, dodialect_rhymes_from_pronun) end else local no_rhyme = false for _, rhyme in ipairs(parsed.rhyme) do if rhyme.rhyme == "-" then no_rhyme = true break end end if no_rhyme then parsed.rhyme = nil else local function this_dodialect(rhyme_ret, dialect) return dodialect_specified_rhymes(parsed.rhyme, parsed.hyph, {parsed}, rhyme_ret, dialect) end parsed.rhyme = express_all_styles(parsed.style, this_dodialect) end end end if overall_rhyme then local no_overall_rhyme = false for _, orhyme in ipairs(overall_rhyme) do if orhyme.rhyme == "-" then no_overall_rhyme = true break end end if no_overall_rhyme then overall_rhyme = nil else local all_hyphs if overall_hyph then all_hyphs = overall_hyph else all_hyphs = {} for _, parsed in ipairs(parsed_respellings) do for _, hyph in ipairs(parsed.hyph) do m_table.insertIfNot(all_hyphs, hyph) end end end local function dodialect_overall_rhyme(rhyme_ret, dialect) return dodialect_specified_rhymes(overall_rhyme, all_hyphs, parsed_respellings, rhyme_ret, dialect) end overall_rhyme = express_all_styles(parsed.style, dodialect_overall_rhyme) end end -- If all sets of pronunciations have the same rhymes, display them only once at the bottom. -- Otherwise, display rhymes beneath each set, indented. local first_rhyme_ret local all_rhyme_sets_eq = true for j, parsed in ipairs(parsed_respellings) do if j == 1 then first_rhyme_ret = parsed.rhyme elseif not m_table.deepEquals(first_rhyme_ret, parsed.rhyme) then all_rhyme_sets_eq = false break end end local function format_rhyme(rhyme_ret, num_bullets) local function format_rhyme_style(tag, expressed_style, is_first) local pronunciations = {} local rhymes = {} for _, pronun in ipairs(expressed_style.pronun) do table.insert(rhymes, pronun) end local data = { lang = lang, rhymes = rhymes, aa = tag and {tag} or nil, force_cat = force_cat, } local bullet = string.rep("*", num_bullets) .. " " local formatted = bullet .. require("Module:rhymes").format_rhymes(data) local formatted_for_len_parts = {} table.insert(formatted_for_len_parts, bullet .. "Rhymes: " .. (tag and "(" .. tag .. ") " or "")) for j, pronun in ipairs(expressed_style.pronun) do if j > 1 then table.insert(formatted_for_len_parts, ", ") end if pronun.q or pronun.qq or pronun.a or pronun.aa then -- Note: This inserts the actual formatted decoration text, including HTML and such, but the later call -- to textual_len() removes all HTML and reduces links. table.insert(formatted_for_len_parts, require(decorations_module).format_decorations { lang = lang, text = "", q = pronun.q, qq = pronun.qq, a = pronun.a, aa = pronun.aa, }) end table.insert(formatted_for_len_parts, "-" .. pronun.rhyme) end return formatted, textual_len(table.concat(formatted_for_len_parts)) end return format_all_styles(rhyme_ret.expressed_styles, format_rhyme_style) end -- If all sets of pronunciations have the same hyphenations, display them only once at the bottom. -- Otherwise, display hyphenations beneath each set, indented. local first_hyphs local all_hyph_sets_eq = true for j, parsed in ipairs(parsed_respellings) do if j == 1 then first_hyphs = parsed.hyph elseif not m_table.deepEquals(first_hyphs, parsed.hyph) then all_hyph_sets_eq = false break end end local function format_hyphenations(hyphs, num_bullets) local hyphtext = require("Module:hyphenation").format_hyphenations { lang = lang, hyphs = hyphs} return string.rep("*", num_bullets) .. " " .. hyphtext end -- If all sets of pronunciations have the same homophones, display them only once at the bottom. -- Otherwise, display homophones beneath each set, indented. local first_hmps local all_hmp_sets_eq = true for j, parsed in ipairs(parsed_respellings) do if j == 1 then first_hmps = parsed.hmp elseif not m_table.deepEquals(first_hmps, parsed.hmp) then all_hmp_sets_eq = false break end end local function format_homophones(hmps, num_bullets) local hmptext = require("Module:homophones").format_homophones { lang = lang, homophones = hmps } return string.rep("*", num_bullets) .. " " .. hmptext end local function format_audio(audios, num_bullets) local ret = {} for i, audio in ipairs(audios) do local text = require("Module:audio").format_audio { lang = lang, file = audio.file, caption = audio.gloss, q = audio.q, qq = audio.qq, a = audio.a, aa = audio.aa, } table.insert(ret, string.rep("*", num_bullets) .. " " .. text) end return table.concat(ret, "\n") end local textparts = {} local min_num_bullets = math.huge for j, parsed in ipairs(parsed_respellings) do if parsed.bullets < min_num_bullets then min_num_bullets = parsed.bullets end if j > 1 then table.insert(textparts, "\n") end table.insert(textparts, parsed.pronun.text) if #parsed.audio > 0 then table.insert(textparts, "\n") -- If only one pronunciation set, add the audio with the same number of bullets, otherwise -- indent audio by one more bullet. table.insert(textparts, format_audio(parsed.audio, #parsed_respellings == 1 and parsed.bullets or parsed.bullets + 1)) end if not all_rhyme_sets_eq and parsed.rhyme then table.insert(textparts, "\n") table.insert(textparts, format_rhyme(parsed.rhyme, parsed.bullets + 1)) end if not all_hyph_sets_eq and #parsed.hyph > 0 then table.insert(textparts, "\n") table.insert(textparts, format_hyphenations(parsed.hyph, parsed.bullets + 1)) end if not all_hmp_sets_eq and #parsed.hmp > 0 then table.insert(textparts, "\n") table.insert(textparts, format_homophones(parsed.hmp, parsed.bullets + 1)) end end if overall_audio and #overall_audio > 0 then table.insert(textparts, "\n") table.insert(textparts, format_audio(overall_audio, min_num_bullets)) end if all_rhyme_sets_eq and first_rhyme_ret then table.insert(textparts, "\n") table.insert(textparts, format_rhyme(first_rhyme_ret, min_num_bullets)) end if overall_rhyme then table.insert(textparts, "\n") table.insert(textparts, format_rhyme(overall_rhyme, min_num_bullets)) end if all_hyph_sets_eq and #first_hyphs > 0 then table.insert(textparts, "\n") table.insert(textparts, format_hyphenations(first_hyphs, min_num_bullets)) end if overall_hyph and #overall_hyph > 0 then table.insert(textparts, "\n") table.insert(textparts, format_hyphenations(overall_hyph, min_num_bullets)) end if all_hmp_sets_eq and #first_hmps > 0 then table.insert(textparts, "\n") table.insert(textparts, format_homophones(first_hmps, min_num_bullets)) end if overall_hmp and #overall_hmp > 0 then table.insert(textparts, "\n") table.insert(textparts, format_homophones(overall_hmp, min_num_bullets)) end return table.concat(textparts) end return export ml84qhuqslv1hn5hj0dwx5fzhvuidwf Antarktis 0 2358901 5775711 5770313 2026-10-20T02:38:42Z InternetArchiveBot 12208 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.6 5775711 wikitext text/x-wiki == ภาษาเดนมาร์ก == {{wp|da:}} === รากศัพท์ === จาก{{der|da|la-new|Antarctica}}, จาก{{der|da|grc|ἀνταρκτικός}} === คำวิสามานยนาม === {{da-proper noun}} # {{tcl|da|แอนตาร์กติกา|id=Q51}} ==== คำเกี่ยวข้อง ==== * {{l|da|antarktisk|pos=คำคุณศัพท์|t=แอนตาร์กติก}} == ภาษานอร์เวย์แบบนือนอสก์ == {{wp|nn:}} === คำวิสามานยนาม === {{head|nn|คำวิสามานยนาม}} # {{tcl|nn|แอนตาร์กติก|id=Q1555938}} ==== คำเกี่ยวข้อง ==== * {{l|nn|Antarktika}} * {{l|nn|antarktisk}} == ภาษานอร์เวย์แบบบุ๊กมอล == {{wikipedia|no:Antarktis,no:Antarktika}} [[ไฟล์:Antarctica (orthographic projection).svg|thumb|Antarctica on a globe.]] === รากศัพท์ === {{der+|nb|la|Antarctica}}, ชื่อทางภูมิศาสตร์ภาษาละตินใหม่จาก {{der|nb|grc|ἀνταρκτικός|tr=antarktikós|t=ตรงข้ามกับอาร์กติก; ทางใต้}}, จาก{{prefix|grc|ἀντ-|ἀρκτικός|t1=ตรงข้าม, ต่อต้าน|t2=อาร์กติก, ทางเหนือ|nocat=1}}, คำหลัง แรกสุดมาจาก {{m|grc|ἄρκτος|tr=árktos|t=หมี; กลุ่มดาวหมีใหญ่}} ซึ่งหมายถึงกลุ่มดาวทางทิศเหนือ ชื่อนี้จึงหมายถึงภูมิภาคที่อยู่ตรงข้ามกับอาร์กติกซึ่งแปลตามตัวอักษร; {{doublet|nb|Antarktika|t1=แอนตาร์กติกา, โดยเฉพาะตัวทวีป}} เทียบ{{cog|da|Antarktis}}, {{cog|sv|Antarktis}}, {{cog|de|Antarktis}}, {{cog|nl|Antarctica}} และ {{cog|en|Antarctica}} === การออกเสียง === * {{IPA|nb|/anˈtark.tɪs/}} * {{rhymes|nb|arktɪs|s=3}} * {{hyphenation|nb|Ant|ark|tis}} === คำวิสามานยนาม === {{head|nb|คำวิสามานยนาม}} # {{tcl|nb|แอนตาร์กติกา|id=Q51}} #* {{quote-book|nb|year=1994|author={{w|Vera Henriksen}}|title=Luftforsvarets historie|volume=1|publisher=Aschehoug|page=198|passage=da ble Antarktis omseilt og Prinsesse Ragnhilds Land oppdaget og flyfotografert|t=จากนั้นจึงมีการแล่นเรือรอบแอนตาร์กติกา และดินแดนพรินเซสแรกน์ฮิลด์ก็ถูกค้นพบและถ่ายภาพจากทางอากาศ}} #* {{quote-book|nb|year=2022|author=Øyvind Paasche and Erik Kolstad|title=Hva er klima|page=90|passage=iskappene, representert ved Antarktis og Grønland, spiller en sentral rolle i vår forståelse av klimaet på jorda|t=พืดน้ำแข็ง ซึ่งมีตัวแทนคือแอนตาร์กติกาและกรีนแลนด์ มีบทบาทสำคัญต่อความเข้าใจของเราเกี่ยวกับสภาพภูมิอากาศของโลก}} # {{tcl|nb|แอนตาร์กติก|id=Q1555938}} ==== หมายเหตุการใช้ ==== * {{m|nb|Antarktis}} เป็นชื่อภาษานอร์เวย์ที่ใช้กันตามปกติสำหรับทั้งตัวทวีปเอง และในความหมายที่กว้างกว่าสำหรับภูมิภาคขั้วโลกใต้ ส่วนชื่อที่มีการใช้น้อยกว่าอย่าง {{m|nb|Antarktika}} จะหมายถึงมวลแผ่นดินทวีปโดยเฉพาะ ซึ่งอาจเรียกว่า '''det antarktiske kontinentet''' หรือ '''sørpolskontinentet''' ได้ด้วยเช่นกัน ==== ลูกคำ ==== {{col2|nb|antarktisk<t:แอนตาร์กติก>|Øst-Antarktis<t:แอนตาร์กติกาตะวันออก>|Vest-Antarktis<t:แอนตาร์กติกาตะวันตก>|sort=0}} ==== คำเกี่ยวข้อง ==== * {{l|nb|Antarktika||แอนตาร์กติกา, โดยเฉพาะตัวทวีป}} ==== ดูเพิ่ม ==== {{list:continents/nb}} === อ้างอิง === * [https://snl.no/Antarktis “Antarktis”] in ''{{w|Store norske leksikon}}''. * [https://snl.no/Antarktika “Antarktika”] in ''{{w|Store norske leksikon}}''. * {{R:nb:OB|antarktisk}} * {{R:nb:NAOB|antarktisk}} == ภาษาฟินแลนด์ == {{wp|fi:}} === รากศัพท์ === จาก{{der|fi|sv|Antarktis}} === การออกเสียง === {{fi-p}} === คำวิสามานยนาม === {{fi-proper noun}} # {{tcl|fi|แอนตาร์กติกา|id=Q51}} ==== การผันรูป ==== {{fi-decl-vastaus|n=sg|Antarkti|a}} ==== คำพ้องความ ==== * {{l|fi|Etelämanner}} * {{l|fi|Etelänapamanner}} ==== ลูกคำ ==== {{col|fi |antarktislainen }} === คำสลับอักษร === * {{anagrams|fi|a=aaiknrstt|tarkistan}} == ภาษาเยอรมัน == {{wp|de:}} === การออกเสียง === * {{audio|de|De-Antarktis.ogg|a=<<Germany>> (<<Berlin>>)}} === คำวิสามานยนาม === {{de-proper noun|f.article}} # {{tcl|de|แอนตาร์กติก|id=Q1555938}} # {{lb|de|colloquial|layman speech}} {{tcl|de|แอนตาร์กติกา|id=Q51}} #: {{syn|de|Antarktika}} ==== การผันรูป ==== {{de-ndecl|f.sg.article}} ==== คำเกี่ยวข้อง ==== * {{l|de|antarktisch}} * {{l|de|Arktis}} == ภาษาสวีเดน == {{wp|sv:}} === รากศัพท์ === จาก{{der|sv|la-new|Antarctica}}, จาก{{der|sv|grc|ἀνταρκτικός}}, จาก{{m|grc|ἀντ-|t=[[ตรงข้าม]], [[ต่อต้าน]]}} + {{m|grc|ἀρκτικός|t=[[อาร์กติก]]}}, จาก{{der|sv|grc|ἄρκτος|t=[[หมี]]}} === การออกเสียง === * {{IPA|sv|/anˈtarktɪs/}} * {{audio|sv|Sv-Antarktis.ogg}} === คำวิสามานยนาม === {{sv-proper noun|n}} # {{tcl|sv|แอนตาร์กติกา|id=Q51}} ==== คำเกี่ยวข้อง ==== * {{l|sv|antarktisk|pos=คำคุณศัพท์|t=แอนตาร์กติก}} ==== ดูเพิ่ม ==== {{list:continents/sv}} === อ้างอิง === * [https://web.archive.org/web/20241007092653/https://mesh.kib.ki.se/term/D000864/antarctic-regions Svensk MeSH] == ภาษาเอสโตเนีย == {{wp|et:}} === การออกเสียง === * {{et-IPA|anˈtarktis}} {{rfap|et}} === คำวิสามานยนาม === {{et-proper noun}} # {{tcl|et|แอนตาร์กติกา|id=Q51}} ==== การผันรูป ==== {{et-decl-harjutus|Antarkti}} 7ngm3bf5qi6elzzamqnfgbnmmzz3b2y ภาคผนวก:หน่วยนามภาษาอาหรับ 100 2359219 5775721 5775351 2026-10-20T09:35:39Z Octahedron80 267 5775721 wikitext text/x-wiki ==พหูพจน์หลายรูป== คำนามภาษาอาหรับมักมีรูปพหูพจน์ได้หลายรูป ตัวอย่างเช่น {{m|ar|بَحْر||[[ทะเล]]}} สามารถมีรูปพหูพจน์เป็น {{m|ar|بِحَار}}, {{m|ar|بُحُور}}, {{m|ar|أَبْحَار}} หรือ {{m|ar|أَبْحُر}} รูปเหล่านี้เป็นทางเลือกต่าง ๆ ในการทำคำนามเดียวกันให้เป็นรูปพหูพจน์ ในบางครั้งรูปพหูพจน์รูปแบบใดรูปแบบหนึ่งจะสัมพันธ์กับนัยความหมายเฉพาะของคำนามนั้น ตัวอย่างเช่นในคำว่า {{m|ar|عين#คำนาม|عَيْن|t=[[ตา]]}} นัยความหมายที่ 5 คือ "ตัวสิ่งนั้นเอง" มีรูปพหูพจน์เฉพาะคือ {{m|ar|أَعْيُن}} ส่วนในกรณีอื่น ๆ อาจเป็นเรื่องของความนิยมในการเลือกใช้หรือภาษาถิ่น ในการระบุหัวข้อรายการศัพท์ที่มีพหูพจน์หลายรูป ควรพยายามเรียงรูปพหูพจน์ที่พบบ่อยที่สุดไว้เป็นลำดับแรก ==คำนามและคำคุณศัพท์ที่รับมา== ในภาษาอาหรับ คำนามและคำคุณศัพท์หลากหลายประเภทสามารถรับมาจากรากกริยาได้ โดยทั่วไป การรับมาและแม่แบบอื่น ๆ สำหรับกริยาสามพยัญชนะจะแสดงโดยใช้ราก {{ar-root|ف ع ل|nocat=1}} สำหรับกริยาสี่พยัญชนะ รากดั้งเดิมคือ {{ar-root|ف ع ل ل|nocat=1}} แต่สิ่งนี้สร้างความสับสนเนื่องจากพยัญชนะตัวที่สามและสี่เหมือนกัน ซึ่งอาจทำให้เข้าใจผิดว่าเป็นกริยาพยัญชนะซ้ำ เราจึงใช้ {{ar-root|ف ع ز ل|nocat=1}} แทน ===คำกริยานาม=== คำกริยานาม ({{m|ar|مَصْدَر}}) ของ[[ภาคผนวก:คำกริยาภาษาอาหรับ#รูป I|รูป I]] ไม่ได้ดำเนินตามรูปแบบใดรูปแบบหนึ่งเป็นพิเศษ ที่พบบ่อยที่สุดคือ {{m|ar||فَعْل}} แต่ยังมีรูปแบบอื่น ๆ อีกมาก เช่น {{m|ar||فِعْل}}, {{m|ar||فُعْل}}, {{m|ar||فَعَل}}, {{m|ar||فَعَال}}, {{m|ar||فِعَال}}, {{m|ar||فُعُول}}, {{m|ar||فُعَال}}, {{m|ar||فَعُول}}, {{m|ar||مَفْعَل}}, {{m|ar||مَفْعِل}}, {{m|ar||تَفْعَال}}, {{m|ar||فِعْلَان}}, {{m|ar||فُعْلَان}}, {{m|ar||فَعَلَان}} ฯลฯ รวมไปถึงรูปเพศหญิงที่คู่กัน เช่น {{m|ar||فَعْلَة}}, {{m|ar||فِعْلَة}}, {{m|ar||فُعْلَة}}, {{m|ar||فَعَلَة}}, {{m|ar||فَعَالَة}}, {{m|ar||فِعَالَة}}, {{m|ar||فُعُولَة}}, {{m|ar||فَعْلُولَة}}, {{m|ar||مَفْعَلَة}}, {{m|ar||مَفْعِلَة}} ฯลฯ ส่วนคำกริยานามของรูปอื่น ๆ จะดำเนินตามรูปแบบเฉพาะดังนี้: :{| class="wikitable" style="text-align:center" |- ! รูป !! คำกริยานามสมบูรณ์ !! คำกริยานามท้ายอ่อน |- | I || ไม่มีรูปแบบเฉพาะ || ไม่มีรูปแบบเฉพาะ |- | II || {{m|ar||تَفْعِيل}}, {{m|ar||تَفْعَال}}, {{m|ar||فِعَّال}}, {{m|ar||تَفْعِلَة}} || {{m|ar||تَفْعِيَة}} |- | III || {{m|ar||مُفَاعَلَة}}, {{m|ar||فِعَال}} || {{m|ar||مُفَاعَاة}}, {{m|ar||فِعَاء}} |- | IV || {{m|ar||إِفْعَال}} || {{m|ar||إفْعَاء}} |- | V || {{m|ar||تَفَعُّل}}, {{m|ar||تِفِعَّال}} || {{m|ar||تَفَعٍّ}} |- | VI || {{m|ar||تَفَاعُل}} || {{m|ar||تَفَاعٍ}} |- | VII || {{m|ar||اِنْفِعَال}} || {{m|ar||اِنْفِعَاء}} |- | VIII || {{m|ar||اِفْتِعَال}} || {{m|ar||اِفْتِعَاء}} |- | IX || {{m|ar||اِفْعِلَال}} || |- | X || {{m|ar||اِسْتِفْعَال}} || {{m|ar||اِسْتِفْعَاء}} |- | XI || {{m|ar||اِفْعِيلَال}} || |- | XII || {{m|ar||اِفْعِيعَال}} || {{m|ar||اِفْعِيعَاء}} |- | XIII || {{m|ar||اِفْعِوَّال}} || {{m|ar||اِفْعِوَّاء}} |- | XIV || {{m|ar||اِفْعِنْلَال}} || {{m|ar||اِفْعِنْيَاء}}?? |- | XV || {{m|ar||اِفْعِنْلَاء}} || {{m|ar||اِفْعِنْيَاء}}?? |- | Iq || {{m|ar||فَعْزَلَة}}, {{m|ar||فَعْزَال}}, {{m|ar||فِعْزَال}}, {{m|ar||فُعْزَال}} || {{m|ar||فَعْزَال}}?? |- | IIq || {{m|ar||تَفَعْزُل}} || {{m|ar||تَفَعْزٍ}} |- | IIIq || {{m|ar||اِفْعِنْزَال}} || {{m|ar||اِفْعِنْزَاء}} |- | IVq || {{m|ar||اِفْعِزْلَال}} || {{m|ar||اِفْعِزْيَاء}}?? |- |} ===รูปกริยาขยายกรรตุวาจก=== รูปกริยาขยายกรรตุวาจก ({{m|ar|اسم فاعل|اِسْم الْفَاعِل}}) ดำเนินตามรูปแบบปรกติ: :{| class="wikitable" style="text-align:center" |- ! รูป !! รูปกริยาขยายกรรตุวาจกสมบูรณ์ !! รูปกริยาขยายกรรตุวาจกท้ายอ่อน |- | I || {{m|ar||فَاعِل}} || {{m|ar||فَاعٍ}} |- | II || {{m|ar||مُفَعِّل}} || {{m|ar||مُفَعٍّ}} |- | III || {{m|ar||مُفَاعِل}} || {{m|ar||مُفَاعٍ}} |- | IV || {{m|ar||مُفْعِل}} || {{m|ar||مُفْعٍ}} |- | V || {{m|ar||مُتَفَعِّل}} || {{m|ar||مُتَفَعٍّ}} |- | VI || {{m|ar||مُتَفَاعِل}} || {{m|ar||مُتَفَاعٍ}} |- | VII || {{m|ar||مُنْفَعِل}} || {{m|ar||مُنْفَعٍ}} |- | VIII || {{m|ar||مُفْتَعِل}} || {{m|ar||مُفْتَعٍ}} |- | IX || {{m|ar||مُفْعَلّ}} || {{m|ar||مُفْعَيّ}}?? |- | X || {{m|ar||مُسْتَفْعِل}} || {{m|ar||مُسْتَفْعٍ}} |- | XI || {{m|ar||مُفْعَالّ}} || {{m|ar||مُفْعَايّ}}?? |- | XII || {{m|ar||مُفْعَوْعِل}} || {{m|ar||مُفْعَوْعٍ}} |- | XIII || {{m|ar||مُفْعَوِّل}} || {{m|ar||مُفْعَوٍّ}} |- | XIV || {{m|ar||مُفْعَنْلِل}} || {{m|ar||مُفْعَنْيٍ}}?? |- | XV || {{m|ar||مُفْعَنْلٍ}} || {{m|ar||مُفْعَنْيٍ}}?? |- | Iq || {{m|ar||مُفَعْزِل}} || {{m|ar||مُفَعْزٍ}} |- | IIq || {{m|ar||مُتَفَعْزِل}} || {{m|ar||مُตَفَعْزٍ}} |- | IIIq || {{m|ar||مُفْعَنْزِل}} || {{m|ar||مُفْعَنْزٍ}} |- | IVq || {{m|ar||مُفْعَزِلّ}} || {{m|ar||مُفْعَزِيّ}}?? |- |} ===รูปกริยาขยายกรรมวาจก=== รูปกริยาขยายกรรมวาจก ({{m|ar|اِسم مَفعول|اِسْم الْمَفْعُول}}) ดำเนินตามรูปแบบปรกติ: :{| class="wikitable" style="text-align:center" |- ! รูป !! รูปกริยาขยายกรรมวาจกสมบูรณ์ !! รูปกริยาขยายกรรมวาจกท้ายอ่อน |- | I || {{m|ar||مَفْعُول}} || {{m|ar||مَفْعُوّ}}, {{m|ar||مَفْعِيّ}} |- | II || {{m|ar||مُفَعَّل}} || {{m|ar||مُفَعًّى}} |- | III || {{m|ar||مُفَاعَل}} || {{m|ar||مُفَاعًى}} |- | IV || {{m|ar||مُفْعَل}} || {{m|ar||مُفْعًى}} |- | V || {{m|ar||مُتَفَعَّل}} || {{m|ar||مُتَفَعًّى}} |- | VI || {{m|ar||مُتَفَاعَل}} || {{m|ar||مُتَفَاعًى}} |- | VII || {{m|ar||مُنْفَعَل}} || {{m|ar||مُنْفَعًى}} |- | VIII || {{m|ar||مُفْتَعَل}} || {{m|ar||مُفْتَعًى}} |- | IX || ({{m|ar||مُفْعَلّ}}) || ({{m|ar||مُفْعَيّ}}??) |- | X || {{m|ar||مُسْتَفْعَل}} || {{m|ar||مُسْتَفْعًى}} |- | XI || ({{m|ar||مُفْعَالّ}}) || ({{m|ar||مُفْعَايّ}}??) |- | XII || {{m|ar||مُفْعَوْعَل}} || {{m|ar||مُفْعَوْعًى}} |- | XIII || {{m|ar||مُفْعَوَّل}} || {{m|ar||مُفْعَوًّى}} |- | XIV || {{m|ar||مُفْعَنْلَل}} || {{m|ar||مُفْعَنْلًى}} |- | XV || {{m|ar||مُفْعَنْلًى}} || {{m|ar||مُفْعَنْيًى}}?? |- | Iq || {{m|ar||مُفَعْزَل}} || {{m|ar||مُفَعْزًى}} |- | IIq || {{m|ar||مُتَفَعْزَل}} || {{m|ar||مُتَفَعْزًى}} |- | IIIq || {{m|ar||مُفْعَنْزَل}} || {{m|ar||مُفْعَنْزًى}} |- | IVq || {{m|ar||مُفْعَزَلّ}} || {{m|ar||مُفْعَزَيّ}}?? |- |} ===คำคุณศัพท์สัมพันธ์ (นิสบะฮ์)=== คำคุณศัพท์สัมพันธ์ หรือที่รู้จักกันในคำภาษาอาหรับว่า [[nisba|นิสบะฮ์]] เป็นคำคุณศัพท์ที่สร้างขึ้นจากคำอื่นโดยการเติม {{m|ar|ـِيّ}} (มักออกเสียงเสมือนเขียนว่า {{m|ar||ـِي}} ทั้งนี้การออกเสียงด้วย ''yy'' จะกลับมาในรูปเพศหญิง {{m|ar||ـِيَّة}}, รูปพหูพจน์เพศชาย {{m|ar||ـِيُّون}} และรูปพหูพจน์เพศหญิง {{m|ar||ـِيَّات}}) โครงสร้างนี้ค่อนข้างยืดหยุ่น และสามารถเติมปัจจัยนิสบะฮ์เข้ากับคำนามชนิดใดก็ได้ รวมถึงรูปพหูพจน์ เช่นเดียวกับในบางกรณีที่เติมเข้ากับชนิดของคำอื่น ๆ (เช่น {{m|ar|خَارِجِيّ||[[ภายนอก]]}} จากคำคุณศัพท์ {{m|ar|خَارِج||[[ภายนอก]], [[ข้างนอก]]}}, {{m|ar|ثَانَوِيّ||[[ทุติยภูมิ]], [[มัธยม]]}} จากคำคุณศัพท์ {{m|ar|ثَانٍ||[[ที่สอง]]}}, {{m|ar|أَنَانِيّ||[[เห็นแก่ตัว]]}} จากคำสรรพนาม {{m|ar|أَنَا||[[ฉัน]]}}, {{m|ar|فَوْقَانِيّ||[[ส่วนบน]]}} จากคำกริยาวิเศษณ์ {{m|ar|فَوْقُ||[[ข้างบน]]}}) คำคุณศัพท์นิสบะฮ์ยังสามารถสร้างขึ้นโดยตรงจากคำยืมภาษาต่างประเทศได้ด้วย เช่น {{m|ar|دِيمُقْرَاطِيّ||[[เกี่ยวกับประชาธิปไตย]]}} ซึ่งไม่มีคำว่า *{{m|ar||دِيمُقْرَاط}} ปรากฏอยู่จริง เมื่อนำคำคุณศัพท์นิสบะฮ์ไปเติมเข้ากับคำนามเพศหญิงที่ลงท้ายด้วย {{m|ar|ـَة}} หรือ {{m|ar|ـَاة}} โดยปรกติจะตัดปัจจัยนี้ออก ดังเช่นในคำคุณศัพท์ {{m|ar|مَادِّيّ||[[ทางกายภาพ]], [[เชิงวัตถุ]]}} ซึ่งสร้างขึ้นจากคำนาม {{m|ar|مَادَّة||[[สสาร]], [[วัตถุ]]}} ปัจจัยที่พบบ่อยอย่าง {{m|ar|ـِيَا}} ซึ่งปรากฏในชื่อประเทศ (บางครั้งเขียนเป็น {{m|ar|ـِيَة}} โดยทั้งสองรูปยืมมาจาก {{m|la|-ia}}) ก็จะถูกตัดออกเช่นกัน ตัวอย่างเช่น จาก {{m|ar|بِرِيطَانِيَا||[[บริเตน]]}} สร้างเป็น {{m|ar|بِرِيطَانِيّ||[[เกี่ยวกับบริเตน]]}} ปัจจัยอื่น ๆ อาจถูกตัดออกได้เช่นกัน เช่น จาก {{m|ar|كِيمِيَاء||[[เคมี]]}} สร้างเป็น {{m|ar|كِيمِيّ||[[ทางเคมี]]}} (รวมถึง {{m|ar|كِيمِيَائِيّ}} หรือ {{m|ar|كِيمَاوِيّ}}) ในบางกรณี โดยเฉพาะคำสั้นมากที่มีเพียงพยัญชนะและสระสั้นคั่น จะมีการเพิ่มพยัญชนะเชื่อมเข้ามา ดังเช่นใน {{m|ar|سَنَوِيّ||[[ประจำปี]]}} จาก {{m|ar|سَنَة||[[ปี]]}}, {{m|ar|نَوَوِيّ||[[นิวเคลียร์]]}} จาก {{m|ar|نَوَاة||[[นิวเคลียส]], [[เมล็ด]]}}, {{m|ar|يَدَوِيّ||[[ทำด้วยมือ]], [[คู่มือ]]}} จาก {{m|ar|يَد||[[มือ]]}}, {{m|ar|دَمَوِيّ||[[เกี่ยวกับเลือด]]}} จาก {{m|ar|دَم||[[เลือด]]}} (รวมถึง {{m|ar|دَمِيّ}} โดยไม่มีพยัญชนะเชื่อม) โดยปรกติพยัญชนะเชื่อมเฉพาะนี้คือ {{m|ar|و}} แต่อาจเป็นพยัญชนะตัวอื่นหากพยัญชนะนั้นปรากฏในรูปที่รับมารูปอื่นของคำพื้นฐานนั้น เทียบกับ {{m|ar|شَفَهِيّ||[[เกี่ยวกับริมฝีปาก]]}} และ {{m|ar|شَفَوِيّ}} จาก {{m|ar|شَفَة||[[ริมฝีปาก]]}} (เทียบกับรูปพหูพจน์ {{m|ar|شِفَاه||[[ริมฝีปากทั้งหลาย]]}} และ {{m|ar|شَفَوَات}}) โปรดสังเกตว่าพยัญชนะเชื่อมจะ''ไม่''ถูกนำมาใช้ในกรณีเช่น {{m|ar|عَادِيّ||[[ปรกติ]]}} ซึ่งมีสระยาว (จาก {{m|ar|عَادَة||[[ธรรมเนียม]], [[นิสัย]]}}) หรือ {{m|ar|صِحِّيّ||[[เกี่ยวกับสุขภาพ]]}} ซึ่งมีพยัญชนะซ้ำ (จาก {{m|ar|صِحَّة||[[สุขภาพ]]}}) พยัญชนะเชื่อมอาจปรากฏร่วมกับลำต้นที่มาจากรากท้ายอ่อน เช่น {{m|ar|ثَانَوِيّ||[[ทุติยภูมิ]], [[มัธยม]]}} จาก {{m|ar|ثَانٍ||[[ที่สอง]]}}, {{m|ar|عَلَوِيّ||[[ส่วนบน]], [[แห่งสวรรค์]], [[อะละวี]]}} จาก {{m|ar|عَلِيّ||[[สูง]], [[สูงส่ง]], [[อะลี]]}} ตัวอย่างที่มีตัวเชื่อม {{m|ar||ـَانـ}} ได้แก่ {{m|ar|أَنَانِيّ||[[เห็นแก่ตัว]]}} จาก {{m|ar|أَنَا||[[ฉัน]]}} และ {{m|ar|عَلْمَانِيّ||[[ทางโลก]], [[โลกียะ]]}} จาก {{m|ar|عَالَم||[[โลก]]}} ในบางครั้งลำต้นอาจเกิดการแปรเปลี่ยนรูปไป (มักจะสั้นลง) ในรูปนิสบะฮ์ ดังเช่นใน {{m|ar|عَلْمَانِيّ}} ที่เพิ่งกล่าวไป (ออกเสียงเป็น {{m|ar|عِلْمَانِيّ}} ได้เช่นกัน) และ {{m|ar|عُلْوِيّ||[[ส่วนบน]]}} จาก {{m|ar|عُلُوّ||[[ความสูง]]}} ===คำนามสัมพันธ์ (นิสบะฮ์)=== คำคุณศัพท์สัมพันธ์ ([[nisba|นิสบะฮ์]]) สามารถนำมาทำเป็นคำนามได้อย่างอิสระ ตัวอย่างเช่น จากคำคุณศัพท์ {{m|ar|بِرِيطَانِيّ||[[เกี่ยวกับบริเตน]]}} รับมาเป็นคำนาม {{m|ar|بِرِيطَانِيّ||[[ชายชาวบริเตน]], [[ชาวบริเตน]]}} และจากคำคุณศัพท์ {{m|ar|دِيمُقْرَاطِيّ||[[เกี่ยวกับประชาธิปไตย]]}} สร้างเป็นคำนาม {{m|ar|دِيمُقْرَاطِيّ||[[นักประชาธิปไตย]]}} คำนามเหล่านี้สร้างรูปเพศหญิงและรูปพหูพจน์ในแบบเดียวกับคำคุณศัพท์ที่คู่กัน นอกจากนี้ คำนามนิสบะฮ์เพศหญิงมักมีความหมายเป็นอาการนาม ตัวอย่างเช่น {{m|ar|دِيمُقْرَاطِيَّة||[[ประชาธิปไตย]]}} จาก {{m|ar|دِيمُقْرَاطِيّ||[[เกี่ยวกับประชาธิปไตย]]}} หรือ {{m|ar|ذِهْنِيَّة||[[กรอบความคิด]], [[จิตตานุภาพ]]}} จาก {{m|ar|ذِهْنِيّ||[[ทางจิตใจ]]}} (ซึ่งสร้างมาจาก {{m|ar|ذِهْن||[[จิตใจ]]}} อีกทอดหนึ่ง) ในบางกรณี วิธีที่ดีที่สุดคือมองว่าคำนามเหล่านี้สร้างขึ้นโดยตรงโดยใช้ปัจจัย {{m|ar|ـِيَّة}} โดยเฉพาะอย่างยิ่งเนื่องจากอาจไม่มีคำที่ลงท้ายด้วย {{m|ar|ـِيّ}} ที่คู่กันปรากฏอยู่ ตัวอย่างเช่น {{m|ar|كَمِّيَّة||[[ปริมาณ]]}} สร้างขึ้นจาก {{m|ar|كَمّ||[[ปริมาณ]]}}, {{m|ar|أَهَمِّيَّة||[[ความสำคัญ]]}} สร้างขึ้นจาก {{m|ar|أَهَمّ||[[สำคัญกว่า]], [[สำคัญมาก]]}} และ {{m|ar|هُوِيَّة||[[อัตลักษณ์]]}} สร้างขึ้นจาก {{m|ar|هُوَ||[[เขา]]}} (โปรดสังเกตว่าสองตัวอย่างหลังสร้างขึ้นจากชนิดของคำอื่นที่ไม่ใช่คำนาม) ===คำคุณศัพท์พื้นฐาน=== คำคุณศัพท์จำนวนมากสร้างขึ้นจากรากสามพยัญชนะโดยใช้รูปแบบ {{m|ar||فَعِيل}} ตัวอย่างเช่น: * {{m|ar|كَبِير|t=ใหญ่}} จาก {{ar-root|ك ب ر|nocat=1}} * {{m|ar|كَثِير|t=มาก, หลาย}} จาก {{ar-root|ك ث ر|nocat=1}} * {{m|ar|سَعِيد|t=มีความสุข}} จาก {{ar-root|س ع د|nocat=1}} * {{m|ar|جَدِيد|t=ใหม่}} จาก {{ar-root|ج د د|nocat=1}} * {{m|ar|قَرِيب|t=ใกล้}} จาก {{ar-root|ق ر ب|nocat=1}} * {{m|ar|جَمِيل|t=สวย, งาม}} จาก {{ar-root|ج م ل|nocat=1}} คำนามบางคำใช้รูปนี้เช่นกัน ตัวอย่างเช่น {{m|ar|الْخَمِيس|t=วันพฤหัสบดี}} รูปพหูพจน์เพศชายอาจเป็นแบบสมบูรณ์ หรือแบบแตก รูปแบบที่พบบ่อยที่สุดคือ {{m|ar||فُعَلَاء}} และ {{m|ar||فِعَال}} ส่วนรูปแบบอื่น ๆ ได้แก่ {{m|ar||أَفْعِلَاء}}, {{m|ar||فُعُل}} และ {{m|ar||أَفْعَال}} * เอกพจน์ {{m|ar|سَعِيد|t=มีความสุข}}, พหูพจน์ {{m|ar|سُعَدَاء}} * เอกพจน์ {{m|ar|كَبِير|t=ใหญ่}}, พหูพจน์ {{m|ar|كُبَرَاء}} หรือ {{m|ar|كِبَار}} * เอกพจน์ {{m|ar|صَدِيق|t=เพื่อน}}, พหูพจน์ {{m|ar|أَصْدِقَاء}} ===คำคุณศัพท์ขั้นยกระดับ=== [[elative|คำคุณศัพท์ขั้นยกระดับ]] ({{m|ar|اِسْم تَفْضِيل|اِسْم التَّفْضِيل}} หรือ {{m|ar|أَفْعَل التَّفْضِيل}}) สร้างขึ้นจากคำคุณศัพท์พื้นฐานสามพยัญชนะ โดยทั่วไปมาจากรูป {{m|ar||فَعِيل}} หรือ {{m|ar||فَاعِل}} แต่ก็พบรูปอย่าง {{m|ar||فَعْل}}, {{m|ar||فِعْل}} หรือ {{m|ar||فُعْل}} ได้เช่นกัน คำคุณศัพท์ขั้นยกระดับสร้างขึ้นโดยตรงจากรากของคำคุณศัพท์ และมีรูป[[diptote|ดิปโทต]] {{m|ar||أَفْعَل}} ในเพศชายเอกพจน์ คำคุณศัพท์ขั้นยกระดับมีความหมายเป็น[[comparative|ขั้นกว่า]] (เช่น ''smarter'' หรือ ''more intelligent'' ในภาษาอังกฤษ), [[superlative|ขั้นสุด]] (เช่น ''smartest'' หรือ ''most intelligent'' ในภาษาอังกฤษ) และ[[absolute superlative|ขั้นบริบูรณ์]] (เช่น ''very smart'', ''utterly intelligent'' ในภาษาอังกฤษ) ความแตกต่างมักแสดงออกผ่านโครงสร้างทางวากยสัมพันธ์ที่ต่างกัน คำคุณศัพท์บางคำมีรูปเป็นคำคุณศัพท์ขั้นยกระดับโดยไม่มีความหมายเชิงยกระดับ ตัวอย่างเช่น {{m|ar|آخَر||อื่น}} ในทางตรงกันข้าม คำคุณศัพท์บางคำถูกนำมาใช้เป็นคำคุณศัพท์ขั้นยกระดับโดยไม่ได้อยู่ในรูปยกระดับ ตัวอย่างเช่น {{m|ar|خَيْر||ดีกว่า, ดีที่สุด}} รูปแบบการผันคำสำหรับคำคุณศัพท์ขั้นยกระดับมีดังนี้: เพศหญิงเอกพจน์มีรูป {{m|ar||فُعْلَى}} ซึ่งไม่ผันแปรตามการกและสถานะ ส่วนพหูพจน์เพศชายเป็นดิปโทต {{m|ar||أَفَاعِل}} หรือแบบสมบูรณ์ {{m|ar||أَفْعَلُون}} พหูพจน์เพศหญิงอาจเป็น {{m|ar||فُعَل}} หรือแบบสมบูรณ์ {{m|ar||فُعْلَيَات}} ตัวอย่างที่มีการแจกวิภัตติครบถ้วนคือ {{m|ar|أَكْبَر||[[ใหญ่กว่า]], [[ใหญ่ที่สุด]]}} ซึ่งเป็นคำคุณศัพท์ขั้นยกระดับของ {{m|ar|كَبِير||[[ใหญ่]]}} คำคุณศัพท์นี้มีเพศหญิงเอกพจน์เป็น {{m|ar|كُبْرَى}}, พหูพจน์เพศชายเป็น {{m|ar|أَكْبَرُون}} และ {{m|ar|أَكَابِر}} และพหูพจน์เพศหญิงเป็น {{m|ar|كُبْرَيَات}} คำคุณศัพท์ขั้นยกระดับบางคำ เช่น {{m|ar||آخَر}} และ {{m|ar|أَوَّل||แรก, อันดับแรก}} ดำเนินตามการผันเหล่านี้อย่างสม่ำเสมอ อย่างไรก็ตาม คำคุณศัพท์ขั้นยกระดับส่วนใหญ่สามารถอยู่ในรูปเพศชายเอกพจน์ได้ แม้ว่าจะอ้างถึงคำนามเพศหญิงหรือพหูพจน์ก็ตาม อันที่จริง มีรูปคำคุณศัพท์ขั้นยกระดับที่ผันแล้วเพียงจำนวนจำกัดเท่านั้นที่ใช้กันในภาษาอาหรับร่วมสมัย และรูปเหล่านี้มักจำกัดอยู่เฉพาะในนัยความหมายขั้นบริบูรณ์ เช่น ใน {{m|ar|بِرِيطانْيَا اَلْعُظْمَى||บริเตนใหญ่}} ส่วนในภาษาอาหรับคลาสสิก รูปคำคุณศัพท์ขั้นยกระดับที่ผันแล้วถูกนำมาใช้อย่างอิสระมากกว่า ===คำคุณศัพท์บอกสีหรือข้อบกพร่อง=== {{anchor|Color/defect adjectives}} คำคุณศัพท์บอกสีหรือข้อบกพร่อง คือคำคุณศัพท์ในรูป {{m|ar||أَفْعَل}} โดยมีเพศหญิงเอกพจน์เป็น {{m|ar||فَعْلَاء}} โดยทั่วไปหมายถึงสีและข้อบกพร่องทางกายภาพ ทั้งเพศชายและเพศหญิงเป็นคำแบบ[[diptote|ดิปโทต]] โปรดสังเกตว่าเพศชายเอกพจน์มีรูปเดียวกับคำคุณศัพท์ขั้นยกระดับ แต่เพศหญิงเอกพจน์จะแตกต่างกัน รูปพหูพจน์ทั้งเพศชายและเพศหญิงมักอยู่ในรูป {{m|ar||فُعْل}} แต่ก็มีข้อยกเว้น เช่น {{m|ar|أَحْمَق||[[บ้า]]}} ซึ่งมีพหูพจน์ปรกติเป็น {{m|ar|حُمْق}} แต่ก็มีรูปพหูพจน์เป็น {{m|ar|حُمُق}}, {{m|ar|حَمْقَى}} และ {{m|ar|حَمَاقَى}} เช่นกัน ตัวอย่างต้นแบบของคำคุณศัพท์บอกสีในรูปนี้ ได้แก่: * {{m|ar|أَبْيَض||[[ขาว]]}}, * {{m|ar|أَسْوَد||[[ดำ]]}}, * {{m|ar|أَحْمَر||[[แดง]]}}, * {{m|ar|أَزْرَق||[[น้ำเงิน]], [[ฟ้า]]}}, * {{m|ar|أَخْضَر||[[เขียว]]}} และ * {{m|ar|أَصْفَر||[[เหลือง]]}} ยังมีคำอื่น ๆ อีก เช่น * {{m|ar|أَغْبَر||[[สีฝุ่น]], [[สีกระดำกระด่าง]]}}, * {{m|ar|أَسْمَر||[[ผิวคล้ำ]], [[สีน้ำตาลแกมเหลือง]]}} และ * {{m|ar|أَشْقَر||[[ผมบลอนด์]], [[สีทองแดง]]}} แต่สีส่วนใหญ่ที่เหลือมักอยู่ในรูปคำคุณศัพท์[[nisba|นิสบะฮ์]] เช่น * {{m|ar|بُنِّيّ||[[น้ำตาล]]}} (ตามตัวอักษรคือ "กาแฟ" มาจาก {{m|ar|بُنّ||[[กาแฟ]]}}), * {{m|ar|بَنَفْسَجِيّ||[[ม่วง]]}} (มาจาก {{m|ar|بَنَفْسَج||[[ไวโอเลต]] {{gloss|[[ดอกไม้]]}}}}), * {{m|ar|بُرْتُقَالِيّ||[[ส้ม]]}} (มาจาก {{m|ar|بُرْتُقَال||[[ส้ม]] {{gloss|[[ผลไม้]]}}}}), ฯลฯ คำคุณศัพท์บอก "ข้อบกพร่อง" ที่เป็นต้นแบบจะหมายถึงข้อบกพร่องทางกายภาพจริง ๆ เช่น * {{m|ar|أَطْرَش||[[หูหนวก]]}}, * {{m|ar|أَعْمَى||[[ตาบอด]]}}, * {{m|ar|أَعْوَر||[[ตาบอดข้างเดียว]]}}, * {{m|ar|أَحْوَل||[[ตาเข]]}}, * {{m|ar|أَجْرَب||[[เป็นขี้เรื้อน]]}}, * {{m|ar|أَجْرَد||[[หัวล้าน]]}} แต่คำอื่น ๆ อาจหมายถึงข้อบกพร่องทางจิตใจ เช่น * {{m|ar|أَبْلَه||[[โง่เขลา]], [[เซ่อ]]}} และ * {{m|ar|أَحْمَق||[[บ้า]]}} ในขณะที่บางคำหมายถึงคุณลักษณะที่อาจมีความหมายโดยนัยเชิงลบ แต่ไม่ได้เป็น "ข้อบกพร่อง" อย่างชัดเจน เช่น * {{m|ar|أَخْشَن||[[หยาบ]], [[หยาบคาย]]}}, * {{m|ar|أَعْقَد||[[เป็นปม]]}}, * {{m|ar|أَزَبّ||[[มีขนดก]]}}, * {{m|ar|أَمْيَل||[[เอียง]], [[ลาด]]}}, * {{m|ar|أَجْوَف||[[เว้า]], [[กลวง]]}}, * {{m|ar|أَغْلَف||[[ยังไม่ทำสุหนัต]], [[ไร้อารยธรรม]]}}, * {{m|ar|أَعْزَب||[[โสด]]}} และ * {{m|ar|أَبْتَر||[[ไร้บุตร]], [[ไร้ทายาท]]}} และยังมีคำอื่น ๆ ที่มีความหมายซึ่งไม่สามารถจัดว่าเป็นข้อบกพร่องได้เลยในทางใดทางหนึ่ง เช่น * {{m|ar|أَلْيَس||[[กล้าหาญ]]}}, * {{m|ar|أَشْوَส||[[ทรนง]], [[บ้าบิ่น]]}} และ * {{m|ar|أَجْمَع||[[ทั้งหมด]], [[ทั้งสิ้น]]}} รากต้นอ่อนและรากกลางอ่อนจะสร้างขึ้นในลักษณะเดียวกับรากแข็งแรง เช่น {{m|ar|أَوْجَر||[[ขี้ขลาด]], [[หวาดกลัว]]}} และ {{m|ar|أَبْيَض||[[ขาว]]}}; รากท้ายอ่อนสร้างขึ้นตามรูปแบบ {{m|ar||أَفْعَى}} เช่น {{m|ar|أَعْمَى||[[ตาบอด]]}}; ส่วนรากพยัญชนะซ้ำสร้างขึ้นตามรูปแบบ {{m|ar||أَفَعّ}} เช่น {{m|ar|أَزَبّ||[[มีขนดก]]}} ===คำสมุหนาม=== คำสมุหนามมีรูปเป็นเอกพจน์แต่มีความหมายเป็นพหูพจน์ คำสมุหนามส่วนใหญ่หมายถึงสิ่งที่ไม่ใช่มนุษย์ (มักเป็นสัตว์หรือพืช) แต่ก็มีคำสมุหนามสำหรับมนุษย์หรือสิ่งมีชีวิตทรงภูมิปัญญาอื่น ๆ ด้วยเช่นกัน กลุ่มหลังนี้บางครั้งเรียกว่า ''คำสมุหนามบอกชาติพันธุ์'' (ethnic collectives) ซึ่งมักใช้การสอดคล้องแบบพหูพจน์ ในขณะที่คำสมุหนามสิ่งที่ไม่ใช่มนุษย์โดยทั่วไปจะใช้การสอดคล้องแบบเอกพจน์ คำนามที่มีความหมายเป็นเอกพจน์ที่คู่กันคือ ''คำเอกนาม'' (ดูด้านล่าง) ซึ่งคำเอกนามนี้มักสามารถนำไปสร้างเป็นรูปพหูพจน์แท้จริงต่อได้ ===คำเอกนาม=== คำเอกนาม ({{l|ar|اِسْم وَحْدَة}}) มีความหมายเป็นเอกพจน์และสร้างขึ้นจากคำสมุหนามโดยการเติม {{m|ar|َة}} เว้นแต่ว่าคำสมุหนามนั้นหมายถึงมนุษย์หรือสิ่งมีชีวิตทรงภูมิปัญญา ซึ่งในกรณีนี้จะลงท้ายด้วยส่วนลงท้าย[[nisba|นิสบะฮ์]] {{m|ar|ـِيّ}} เช่น {{m|ar|عَرَب||[[ชาวอาหรับ]]ทั้งหลาย}}, {{m|ar|عَرَبِيّ||[[ชาวอาหรับ]]คนหนึ่ง}} หรือ {{m|ar|يَهُود||[[ชาวยิว]]ทั้งหลาย}}, {{m|ar|يَهُودِيّ||[[ชาวยิว]]คนหนึ่ง}} หรือ {{m|ar|جِنّ||[[ญิน]], ปีศาจทั้งหลาย}}, {{m|ar|جِنِّي||ญินตนหนึ่ง, ปีศาจตนหนึ่ง}} คำเอกนามสร้างรูปพหูพจน์ตามวิธีปรกติ เช่น จาก {{m|ar|شَجَرَة||ต้นไม้}} เป็นรูปพหูพจน์ {{m|ar|أَشْجَار}} ทั้งรูปนี้และคำสมุหนาม {{m|ar|شَجَر}} ต่างแปลเป็นภาษาอังกฤษได้ว่า “trees” (ต้นไม้หลายต้น) ความแตกต่างคือ {{m|ar||أَشْجَار}} มองต้นไม้เหล่านั้นเป็นรายต้นหรือแยกเป็นเอกเทศ ส่วน {{m|ar|شَجَر}} มองในภาพรวม (กรณีคล้ายกันในภาษาอังกฤษอาจเทียบได้กับความแตกต่างระหว่าง {{m|en|persons}} และ {{m|en|people}}) รูปพหูพจน์ของคำเอกนามในบางครั้งเรียกว่า ''พหูพจน์แสดงความหลากหลาย'' (plurals of variety) คำเรียกนี้อาจทำให้เข้าใจคลาดเคลื่อนได้อยู่บ้าง แต่มีที่มาจากข้อเท็จจริงที่ว่า {{m|ar||أَشْجَار}} ยังถูกนำมาใช้ในความหมายว่า “ต้นไม้หลากชนิด” ได้ด้วยเช่นกัน ===คำนามบอกครั้ง=== คำนามบอกครั้ง ({{l|ar|اِسْم مَرَّة}}) มีความหมายว่า "การกระทำสิ่งใดสิ่งหนึ่งหนึ่งครั้ง" และสร้างขึ้นจากคำกริยานามโดยการเติม {{m|ar|َة}} เช่น จากคำกริยานาม {{m|ar|ضَرْب||[[การตี]], [[การชก]]}} สร้างเป็น {{m|ar|ضَرْبَة||[[การตีหนึ่งครั้ง]], [[การฟาดหนึ่งที]]}} และจากคำกริยานาม {{m|ar|اِنْتِفَاض||[[การสลัดออก]]}} สร้างเป็น {{m|ar|اِنْتِفَاضَة||[[การสลัดออกหนึ่งครั้ง]], [[การลุกฮือ]], [[อินติฟาดะฮ์]]}} ===คำนามบอกสถานที่=== [[noun of place|คำนามบอกสถานที่]] ({{l|ar|اِسْم مَكَان}}) โดยทั่วไปรับมาจากรากกริยา และมีความหมายโดยประมาณว่า “สถานที่สำหรับกระทำ <var>x</var>” โดยที่ <var>x</var> คือความหมายของกริยานั้น คำนามบอกสถานที่ของ[[base stem|ลำต้นฐาน]] ({{ar-form|I|nocap=1}}) โดยทั่วไปจะมีอุปสรรค {{m|ar||مَـ}} โดยมีรูปเป็น {{m|ar||مَفْعِل}}, {{m|ar||مَفْعَل}}, {{m|ar||مَفْعَلَة}}, {{m|ar||مَفْعِلَة}} และพบรูป {{m|ar||مَفْعُلَة}} ได้ยาก ตัวอย่างเช่น: * {{m|ar|مَكْتَب|t=[[โต๊ะทำงาน]], [[สำนักงาน]]}} และ {{m|ar|مَكْتَبَة|t=[[ห้องสมุด]]}} จาก {{m|ar|كَتَبَ||[[เขียน]]}} * {{m|ar|مَطْبَخ|t=[[ครัว]]}} จาก {{m|ar|طَبَخَ|t=[[ปรุงอาหาร]]}} * {{m|ar|مَصْنَع|t=[[โรงงาน]]}} จาก {{m|ar|صَنَعَ|t=[[ทำ]], [[ผลิต]]}} * {{m|ar|مَجْلِس|t=[[ที่นั่ง]]}} จาก {{m|ar|جَلَسَ|t=[[นั่ง]]}} * {{m|ar|مَقْبَرَة}} และ {{m|ar|مَقْبُرَة|t=[[สุสาน]]}} จาก {{m|ar|قَبَرَ|t=[[ฝัง]]}} คำนามบอกสถานที่บางคำสร้างขึ้นจากรากที่ไม่ใช่กริยา เช่น {{m|ar|مَقْهًى||[[คาเฟ่]], [[ร้านกาแฟ]]}} สร้างขึ้นจากรากของ {{m|ar|قَهْوَة||[[กาแฟ]]}} และมีความหมายตามตัวอักษรว่า “สถานที่แห่งกาแฟ” คำนามบอกสถานที่ของกริยาที่นอกเหนือจากรูป I จะใช้รูปเดียวกันกับ[[passive participle|รูปกริยาขยายกรรมวาจก]] ซึ่งหมายความว่าจะขึ้นต้นด้วย {{m|ar||مُـ}} เช่น {{m|ar|مُسْتَشْفًى|t=[[โรงพยาบาล]]}} สร้างขึ้นจากกริยารูป X {{m|ar|اِسْتَشْفَى|t=[[แสวงหา]][[การรักษา]]}} จึงหมายถึง “สถานที่สำหรับแสวงหาการรักษา”, {{m|ar|مُنْتَزَه}} ของ{{ar-form|VII|nocap=1}} และ {{m|ar|مُتَنَزَّه}} ของ{{ar-form|V|nocap=1}} แปลว่า “สวนสาธารณะ, ที่ซึ่งผู้คนไปเดินเล่น”, {{m|ar|مُسْتَنْبَت|t=สถานที่เพาะปลูกพืช}} จากกริยารูป X {{m|ar|اِسْتَنْبَتَ|t=ปลูก, เพาะปลูก}} ===คำนามบอกเครื่องมือ=== คำนามบอกเครื่องมือ ({{m|ar|اسم آلة|اِسْم الْآلَة}}) โดยทั่วไปรับมาจากคำกริยา และมีความหมายโดยประมาณว่า ''เครื่องมือสำหรับกระทำ X'' โดยที่ ''X'' คือความหมายของคำกริยาพื้นฐาน คำนามบอกเครื่องมือมักมีอุปสรรค {{m|ar||مِـ}} และมักอยู่ในรูป {{m|ar|مِفْعَل}}, {{m|ar|مِفْعَلَة}} หรือ {{m|ar|مِفْعَال}} ตัวอย่างเช่น: *{{m|ar|مِحْفَر||[[พลั่ว]]}}, จาก {{m|ar|حَفَرَ||[[ขุด]]}} *{{m|ar|مِكْشَط||[[มีดขูดลบ]]}}, จาก {{m|ar|كَشَطَ||[[ขูดลบ]], [[ขูดออก]]}} *{{m|ar|مِكْنَسَة||[[ไม้กวาด]]}}, จาก {{m|ar|كَنَسَ||[[กวาด]]}} *{{m|ar|مِكْوَاة||[[เตารีด]]}}, จาก {{m|ar|كَوَى||[[รีดผ้า]], [[เผาไหม้]]}} *{{m|ar|مِيزَان||[[ตาชั่ง]]}}, จาก {{m|ar|وَزَنَ||[[ชั่ง]]}} *{{m|ar|مِحَشّ||[[เคียว]]}}, รวมถึง {{m|ar|مِحَشَّة}}, จาก {{m|ar|حَشَّ||[[เกี่ยวหญ้า]], [[ตัดหญ้า]]}} *{{m|ar|مِلْعَقَة||[[ช้อน]]}}, จาก {{m|ar|لَعِقَ||[[เลีย]]}} *{{m|ar|مِكْتَاب||[[เครื่องพิมพ์ดีด]]}}, จาก {{m|ar|كَتَبَ||[[เขียน]]}} คำนามบางคำในกลุ่มนี้รับมาจากคำนามอื่น โดยมีความหมายโดยประมาณว่า "เครื่องมือที่เกี่ยวข้องกับ X": * {{m|ar|مِكْوَر||[[ผ้าโพกศีรษะ]]}}, รวมถึง {{m|ar|مِكْوَرَة}}, จาก {{m|ar|كُورَة||[[ลูกบอล]], [[ทรงกลม]]}} * {{m|ar|مِرْوَحَة||[[พัดลม]], [[พัด]]}}, จากราก {{m|ar|ر و ح|pos=root}} ของ {{m|ar|رِيح||[[ลม]]}} แนวโน้มเมื่อไม่นานมานี้จะหันไปรับคำนามบอกเครื่องมือมาจากรูปเพศหญิงของคำนาม/คำคุณศัพท์บอกอาชีพหรือลักษณะเฉพาะ หรือจากรูปกริยาขยายกรรตุวาจก ซึ่งอาจเป็นการยืมตรงตัว (calque) จากภาษาอังกฤษ: * {{m|ar|دَبَّابَة||[[รถถัง]]}}, จาก {{m|ar|دَبَّاب||[[ที่คืบคลาน]]}}, {{m|ar|دَبَّ||[[คืบคลาน]]}} * {{m|ar|نَظَّارَة||[[กล้องโทรทรรศน์]], [[แว่นตา]]}}, จาก {{m|ar|نَظَّار||[[สายตาไว]], [[ช่างสังเกต]]}}, จาก {{m|ar|نَظَرَ||[[มอง]], [[ดู]]}} * {{m|ar|طَابِعَة||[[เครื่องพิมพ์]] {{gloss|อุปกรณ์คอมพิวเตอร์}}}}, จาก {{m|ar|طَابِع||[[ช่างพิมพ์]] {{gloss|บุคคล}}}}, จาก {{m|ar|طَبَعَ||[[พิมพ์]], [[ประทับตรา]]}}; เทียบกับ {{m|ar|مِطْبَعَة||[[แท่นพิมพ์]], [[โรงพิมพ์]]}} * {{m|ar|كَاسِحَة||[[เครื่องกวาด]]}} (เทียบกับ {{m|ar|كَاسِحَة الجَلِيد||[[เรือตัดน้ำแข็ง]]}}, {{m|ar|كَاسِحَة الأَلْغَام||[[เรือกวาดทุ่นระเบิด]]}}, {{m|ar|كَاسِحَة الثُلُوج||[[รถกวาดหิมะ]]}}, จาก {{m|ar|كَاسِح||[[ที่กวาดล้างทุกสิ่ง]]}}, จาก {{m|ar|كَسَحَ||[[กวาด]], [[เก็บกวาด]]}} คำนามบอกเครื่องมือบางคำรับมาจากรูปกริยาขยายกรรตุวาจกโดยตรง: * {{m|ar|مُحَرِّك||[[เครื่องยนต์]]}} (เดิมหมายถึง "สิ่งที่ขับเคลื่อน"), จาก {{m|ar|حَرَّكَ||[[ขับเคลื่อน]], [[ขยับ]]}} ===คำนามบอกอาชีพ=== ''คำนามบอกอาชีพ'' สามารถรับมาจากลำต้นกริยาได้เป็นจำนวนมาก โดยทั่วไปใช้รูป {{m|ar||فَعَّال}} เช่น {{m|ar|كَتَّاب||[[เสมียน]], [[อาลักษณ์]]}} จาก {{m|ar|كَتَبَ||[[เขียน]]}} [[active participle|รูปกริยาขยายกรรตุวาจก]]ก็สามารถนำมาใช้สร้างคำนามบอกอาชีพได้เช่นกัน เช่น {{m|ar|طَالِب||[[นักเรียน]], [[นักศึกษา]]}} จาก {{m|ar|طَلَبَ||[[ขอ]], [[แสวงหา]]}}, {{m|ar|كَاتِب||[[นักเขียน]], [[เสมียน]]}} จาก {{m|ar|كَتَبَ||[[เขียน]]}}, {{m|ar|بَائِع||[[ผู้ขาย]]}} จาก {{m|ar|بَاعَ||[[ขาย]]}}, {{m|ar|مُهَنْدِس||[[วิศวกร]]}} จาก {{m|ar|هَنْدَسَ||[[ออกแบบทางวิศวกรรม]]}} คำที่ใช้รูป {{m|ar||فَاعِل}} มักมีรูปพหูพจน์เป็น {{m|ar||فُعَّال}} หรือบางครั้งเป็น {{m|ar||فَعَلَة}}; ในบางครั้งปรากฏทั้งสองรูปพหูพจน์โดยมีความหมายต่างกัน เช่น {{m|ar|كُتَّاب||[[นักเขียนทั้งหลาย]]}} แต่ {{m|ar|كَتَبَة||[[เสมียนทั้งหลาย]]}} นอกจากนี้ คำนามบอกอาชีพบางคำยังอยู่ในรูป[[nisba|นิสบะฮ์]] (มีปัจจัย {{m|ar|ـِيّ}}) เช่น {{m|ar|صُحُفِيّ||[[นักข่าว]]}} หรือ {{m|ar|صِحَافِيّ||[[นักหนังสือพิมพ์]]}} ซึ่งรับมาจาก {{m|ar|صُحُف||[[หนังสือพิมพ์ทั้งหลาย]]}} และ {{m|ar|صِحَافَة||[[วารสารศาสตร์]], [[การสื่อสารมวลชน]]}} ตามลำดับ ===คำนามและคำคุณศัพท์บอกคุณลักษณะ=== ''คำนามบอกคุณลักษณะ'' สามารถรับมาจากลำต้นกริยาโดยใช้รูป {{m|ar||فَعَّال}} ซึ่งสร้างคำนามที่มีความหมายว่า "ผู้ที่กระทำ X เป็นนิสัยหรือเป็นอาจิณ" เช่น {{m|ar|كَذَّاب||[[คนโกหก]]}} โปรดสังเกตว่าเป็นรูปเดียวกันกับที่ใช้ใน[[#คำนามบอกอาชีพ|คำนามบอกอาชีพ]]จำนวนมาก ส่วน''คำคุณศัพท์บอกคุณลักษณะ''ก็มีรูปเดียวกันกับคำนามบอกคุณลักษณะ เช่น {{m|ar|دَبَّاب||[[ที่คืบคลาน]]}}, {{m|ar|نَظَّار||[[สายตาไว]], [[ช่างสังเกต]]}} ===ตัวบอกความเล็ก=== ''ตัวบอกความเล็ก'' สามารถรับมาจากคำนามสามพยัญชนะ และคำนามสี่พยัญชนะหรือคำที่ยาวกว่าบางคำ โดยใช้รูป {{m|ar||فُعَيْل}} หรือ {{m|ar||فُعَيِّل}}; และรูป {{m|ar||فُعَيْزِل}} สำหรับคำนามสี่พยัญชนะและคำที่ยาวกว่า ตัวบอกความเล็กไม่มีพลังในการสร้างคำมากนักในภาษาอาหรับมาตรฐานสมัยใหม่ หรือในภาษาถิ่นสมัยใหม่หลายภาษา (เช่น ภาษาถิ่นอียิปต์) แต่เคยมีพลังในการสร้างคำมากกว่ามากในภาษาถิ่นอาหรับคลาสสิกบางถิ่น ดังที่เห็นได้จากความแพร่หลายและพลังสร้างคำที่ยังคงมีอยู่อย่างต่อเนื่องในบางภาษาถิ่น เช่น ภาษาอาหรับมอร็อกโก ซึ่งคำนามเกือบทุกคำจะมีตัวบอกความเล็กคู่กัน คำนามบอกความเล็กมีความหมายว่า "X ขนาดเล็ก" หรือ "X ตัวน้อยน่ารัก" ตัวอย่างเช่น {{m|ar|كُلَيْب||[[หมา]][[ตัวน้อย]]}} จาก {{m|ar|كَلْب}}, {{m|ar|كُتَيِّب||[[หนังสือเล่มเล็ก]], [[จุลสาร]]}} จาก {{m|ar|كِتَاب||[[หนังสือ]]}} และ {{m|ar|بُنَيّ||[[ลูกชาย]][[ตัวน้อย]]}} จาก {{m|ar|اِبْن||[[ลูกชาย]]}} ตัวอย่างจากคำนามยาว ได้แก่ {{m|ar|أُبَيْطِر||[[จักรพรรดิ]][[องค์น้อย]]}} จาก {{m|ar|إِمْبِرَاطُور||[[จักรพรรดิ]]}} ตัวบอกความเล็กเพศหญิงก็สามารถสร้างได้เช่นกัน เช่น {{m|ar|قُصَيْبَة||[[ข้าวโอ๊ต]]}} จาก {{m|ar|قَصَبَة||[[อ้อย]], [[ต้นกก]]}} และ {{m|ar|بُنَيَّة||[[ลูกสาว]][[ตัวน้อย]]}} (เทียบกับ {{m|ar|بُنَيّ||[[ลูกชาย]][[ตัวน้อย]]}}) ==อ้างอิง== * {{cite-journal|de|authorlink=August Fischer|last=Fischer|first=August|title=Das Geschlecht der Infinitive im Arabischen|url=https://nbn-resolving.org/urn:nbn:de:gbv:3:5-8179-52331-18/fragment/page=00000923|pages=839–859|year=1906|volume=60|journal=Zeitschrift der Deutschen Morgenländischen Gesellschaft}} <references/> ==ดูเพิ่ม== *[[:ภาคผนวก:คำกริยาภาษาอาหรับ]] [[หมวดหมู่:ภาคผนวกคำนาม|อาหรับ]] [[หมวดหมู่:ภาคผนวกคำคุณศัพท์|อาหรับ]] [[หมวดหมู่:ภาคผนวกภาษาอาหรับ|หน่วยนาม]] 3urqqbtxf8lnm56ek956ot9yjryyl3w มอดูล:sju-sortkey 828 2359311 5775708 2026-10-19T14:09:50Z Octahedron80 267 สร้างหน้าด้วย "local export = {} local u = mw.ustring.char local a, b, c = u(0xF000), u(0xF001), u(0xF002) local oneChar = { ["á"] = "a" .. a, ["đ"] = "d" .. a, ["ï"] = "i" .. a, ["ŋ"] = "n" .. a, ["ŧ"] = "t" .. a, ["ü"] = "u" .. a, ["å"] = "z" .. a, ["ä"] = "z" .. b, ["ö"] = "z" .. c } function export.makeSortKey(text, lang, sc) return mw.ustring.upper(mw.ustring.gsub(mw.ustring.lower(text), ".", oneChar)) end return export" 5775708 Scribunto text/plain local export = {} local u = mw.ustring.char local a, b, c = u(0xF000), u(0xF001), u(0xF002) local oneChar = { ["á"] = "a" .. a, ["đ"] = "d" .. a, ["ï"] = "i" .. a, ["ŋ"] = "n" .. a, ["ŧ"] = "t" .. a, ["ü"] = "u" .. a, ["å"] = "z" .. a, ["ä"] = "z" .. b, ["ö"] = "z" .. c } function export.makeSortKey(text, lang, sc) return mw.ustring.upper(mw.ustring.gsub(mw.ustring.lower(text), ".", oneChar)) end return export celfjwyf4dir5zho8cie7z7xaz05uud มอดูล:sms-sortkey 828 2359312 5775709 2026-10-19T14:10:36Z Octahedron80 267 สร้างหน้าด้วย "local export = {} local u = mw.ustring.char local a, b, c = u(0xF000), u(0xF001), u(0xF002) local oneChar = { ["â"] = "a" .. a, ["č"] = "c" .. a, ["ʒ"] = "c" .. b, ["ǯ"] = "c" .. c, ["đ"] = "d" .. a, ["ǧ"] = "g" .. a, ["ǥ"] = "g" .. b, ["ǩ"] = "k" .. a, ["ŋ"] = "n" .. a, ["õ"] = "o" .. a, ["š"] = "s" .. a, ["ž"] = "z" .. a, ["å"] = "z" .. b, ["ä"] = "z" .. c } function export.makeSortKey(text, lang, sc) return mw.ustring.upper(mw.u..." 5775709 Scribunto text/plain local export = {} local u = mw.ustring.char local a, b, c = u(0xF000), u(0xF001), u(0xF002) local oneChar = { ["â"] = "a" .. a, ["č"] = "c" .. a, ["ʒ"] = "c" .. b, ["ǯ"] = "c" .. c, ["đ"] = "d" .. a, ["ǧ"] = "g" .. a, ["ǥ"] = "g" .. b, ["ǩ"] = "k" .. a, ["ŋ"] = "n" .. a, ["õ"] = "o" .. a, ["š"] = "s" .. a, ["ž"] = "z" .. a, ["å"] = "z" .. b, ["ä"] = "z" .. c } function export.makeSortKey(text, lang, sc) return mw.ustring.upper(mw.ustring.gsub(mw.ustring.lower(text), ".", oneChar)) end return export 5w71pmba6vvwltum336ecus7ndxgdy3 มอดูล:tzl-sortkey 828 2359313 5775710 2026-10-19T14:11:10Z Octahedron80 267 สร้างหน้าด้วย "local export = {} local u = mw.ustring.char local a = u(0xF000) local remove_diacritics = u(0x0300) .. "-" .. u(0x0303) .. u(0x0308) .. u(0x030A) .. u(0x0327) -- grave, acute, circumflex, tilde, diaeresis, ring above, cedilla local oneChar = { ["ð"] = "d" .. a, ["ß"] = "ss", ["þ"] = "z" .. a } function export.makeSortKey(text, lang, sc) return mw.ustring.upper(mw.ustring.toNFC(mw.ustring.gsub(mw.ustring.toNFD(mw.ustring.gsub(mw.ustring.lower..." 5775710 Scribunto text/plain local export = {} local u = mw.ustring.char local a = u(0xF000) local remove_diacritics = u(0x0300) .. "-" .. u(0x0303) .. u(0x0308) .. u(0x030A) .. u(0x0327) -- grave, acute, circumflex, tilde, diaeresis, ring above, cedilla local oneChar = { ["ð"] = "d" .. a, ["ß"] = "ss", ["þ"] = "z" .. a } function export.makeSortKey(text, lang, sc) return mw.ustring.upper(mw.ustring.toNFC(mw.ustring.gsub(mw.ustring.toNFD(mw.ustring.gsub(mw.ustring.lower(text), ".", oneChar)), "[" .. remove_diacritics .. "]", ""))) end return export 4a4nkggv02inwhmhhei0p86r2rm2w8j aletargar 0 2359314 5775714 2026-10-20T08:26:07Z Octahedron80 267 นำเข้าจาก enwikt เก็บกวาด 5775714 wikitext text/x-wiki == ภาษาสเปน == === รากศัพท์ === {{ety|es|:af|a-<id:verb prefix>|letargo|-ar<id:verb suffix>|text=+|tree=1}} === การออกเสียง === {{es-pr}} === คำกริยา === {{es-verb}} * {{lb|es|สกรรม}} ทำให้อยู่ในภาวะ[[เซื่องซึม]], ทำให้เกิดอาการ[[เฉื่อยชา]] * {{lb|es|สะท้อน}} [[จำศีล]] ==== การผันรูป ==== {{es-conj}} ==== ลูกคำ ==== {{col|es|aletargado|aletargamiento}} === อ่านเพิ่ม === * {{R:es:DRAE}} 0pv0a5v74h2jzb7m1l4ook07yisz60w aletargando 0 2359315 5775715 2026-10-20T08:26:27Z Octahedron80 267 นำเข้าจาก enwikt เก็บกวาด 5775715 wikitext text/x-wiki == ภาษาสเปน == === คำกริยา === {{head|es|รูปกริยาเป็นนาม}} # {{es-verb form of|aletargar}} 06b3bnt6vwbzuxti21uajx0to0civru aletargado 0 2359316 5775716 2026-10-20T08:26:48Z Octahedron80 267 นำเข้าจาก enwikt เก็บกวาด 5775716 wikitext text/x-wiki == ภาษาสเปน == === รากศัพท์ === จาก{{m|es|aletargar}} === การออกเสียง === {{es-pr}} === คำคุณศัพท์ === {{es-adj}} * [[เซื่องซึม]], [[เฉื่อยชา]] === รูปกริยาขยาย === {{es-past participle}} # {{past participle of|es|aletargar}} === อ่านเพิ่ม === * {{R:es:DRAE}} 2uyw8rcskmtpski1ck4y6s9u99xgw20 aletargados 0 2359317 5775717 2026-10-20T08:26:52Z Octahedron80 267 นำเข้าจาก enwikt เก็บกวาด 5775717 wikitext text/x-wiki == ภาษาสเปน == === การออกเสียง === {{es-pr}} === คำคุณศัพท์ === {{head|es|รูปคุณศัพท์}} # {{adj form of|es|aletargado||m|p}} === รูปกริยาขยาย === {{head|es|รูปผันรูปกริยาขยายอดีตกาล|g=m-p}} # {{masculine plural of|es|aletargado}} nx0ymwa6ogppvxtzj0aejng5nhgwsoo aletargada 0 2359318 5775718 2026-10-20T08:26:56Z Octahedron80 267 นำเข้าจาก enwikt เก็บกวาด 5775718 wikitext text/x-wiki == ภาษาสเปน == === การออกเสียง === {{es-pr}} === คำคุณศัพท์ === {{head|es|รูปคุณศัพท์}} # {{adj form of|es|aletargado||f|s}} === รูปกริยาขยาย === {{head|es|รูปผันรูปกริยาขยายอดีตกาล|g=f-s}} # {{feminine singular of|es|aletargado}} h02w27sostesi4aaidnysnpaajqu2u9 aletargadas 0 2359319 5775719 2026-10-20T08:27:00Z Octahedron80 267 นำเข้าจาก enwikt เก็บกวาด 5775719 wikitext text/x-wiki == ภาษาสเปน == === การออกเสียง === {{es-pr}} === คำคุณศัพท์ === {{head|es|รูปคุณศัพท์}} # {{adj form of|es|aletargado||f|p}} === รูปกริยาขยาย === {{head|es|รูปผันรูปกริยาขยายอดีตกาล|g=f-p}} # {{feminine plural of|es|aletargado}} 397a044m43xo8nqck5xzawouhxusyol มอดูล:category tree/utilities 828 2359320 5775724 2026-10-20T09:46:33Z Octahedron80 267 สร้างหน้าด้วย "local export = {} local en_utilities_module = "Module:en-utilities" local m_string_utilities = require("Module:string utilities") local m_table = require("Module:table") local umatch = m_string_utilities.match local uupper = m_string_utilities.upper local ulower = m_string_utilities.lower local pattern_escape = m_string_utilities.pattern_escape local list_to_set = m_table.listToSet local dump = mw.dumpObject local insert = table.insert local unpa..." 5775724 Scribunto text/plain local export = {} local en_utilities_module = "Module:en-utilities" local m_string_utilities = require("Module:string utilities") local m_table = require("Module:table") local umatch = m_string_utilities.match local uupper = m_string_utilities.upper local ulower = m_string_utilities.lower local pattern_escape = m_string_utilities.pattern_escape local list_to_set = m_table.listToSet local dump = mw.dumpObject local insert = table.insert local unpack = unpack or table.unpack -- Lua 5.2 compatibility -- If true, output debugging information indicating which specs are being processed and which labels and label objects -- generated. local debug_add_labels_from_specs = false --[==[ Generate labels for inflection classes. `data` is a table with the following fields: * `labels`: The table into which the labels are written. * `pos`: The singular part of speech, e.g. "noun". * `stem_classes`: Table of possible stem classes and associated properties. See below. * `principal_parts`: List of the principal part fields and descriptions. Each list element is a two-element list consisting of {"FIELD", "DESCRIPTION"} where FIELD is the field in the element in `stem_classes` (e.g. "nom_sg", "gen_sg", "pl", "sup") containing the detailed description of what this principal part looks like, and DESCRIPTION is the corresponding English description of the principal part (e.g. "nominative singular"). * `mark_up_spec`: Optional function to add markup to a spec. Takes two arguments, the spec and a flag `nolink`; if the flag is true, links should not be present in the resulting markup. The default just converts literal text enclosed in <...> into italics. * `make_spec_bare`: Optional function to make a spec (stem class or sortkey) free of markup. The default just converts literal text enclosed in <...> into bare text. * `addl`: Optional additional text to be displayed in the footer of each category page. `stem_classes` is a table describing the various stem classes and how to format the category description of each. It is a table with keys specifying the stem classes and values consisting of an object containing properties of the stem class. If the stem class contains the word 'GENDER' in it, it expands into labels both for a parent category that subsumes several genders (obtained by removing the word 'GENDER' and following whitespace) as well as gender-specific children categories (obtained by replacing the word 'GENDER' with the genders specified in the `possible_genders` field). The stem class can contain literal text (e.g. suffixes), which will be marked up appropriately (e.g. italicized) in breadcrumbs and titles. The fields of the property object for a given stem class are as follows: * `gender`: The description of the gender(s) of the stem class. If preceded by ~, the description is preceded by "most commonly". This appears in the `additional` field of the label properties. It is not used in gender-specific children categories; instead the gender of that category is used. * `possible_genders`: The possible genders this class occurs in. If this is specified, the word 'GENDER' must occur in the stem class, and gender-specific variants of the stem class (with GENDER replaced by the possible genders) are handled along with a parent category subsuming all genders. * `PRINCIPAL_PART`: The ending for the specified principal part. Use <...> to enclose literal Latin-script text (e.g. suffixes), which will be italicized. There will be one field for each principal part listed in the `principal_parts` table described above. * `GENDER_PRINCIPAL_PART`: The ending for the GENDER variant of the specified principal part. If not specified, the value of `PRINCIPAL_PART` is used. * `breadcrumb`: The breadcrumb for the category, appearing in the trail of breadcrumbs at the top of the page. If this stem has gender-specific variants, the breadcrumb specified here is used only for the parent category, while the gender-specific child categories use the gender as the breadcrumb. If not specified, it defaults to `sortkey`. If that is also not specified, or if the breadcrumb has the value "+", the stem class (without the word 'GENDER') is used. (Use "+" when a sortkey is specified but the stem class should be used as the breadcrumb.) * `parent`: The parent category or categories. If specified, the actual category label is formed by appending the part of speech (e.g. "nouns"). Defaults to "POS by inflection type" where POS is the part of speech. Note that gender-specific child categories do not use this, but always have the gender-subsuming parent stem class category as their parent. * `sortkey`: The sort key used for sorting this category among its parent's children. Defaults to the stem class (without the word 'GENDER'). Note that gender-specific child categories do nto use this, but always use the gender as the sort key. * `addl`: Optional additional text to be displayed in the footer of the category page. * `GENDER_addl`: Optional additional text to be displayed in the footer of a gender-specific category page, defaulting to `addl`. Use the value `false` to cancel out a non-gender-specific value. ]==] function export.add_inflection_labels(data) for _, reqfield_spec in ipairs { {"labels", "table of labels"}, {"pos", "singular part of speech"}, {"stem_classes", "table of possible stem classes and associated properties"}, {"principal_parts", "list of principal part fields and names"}, } do local reqfield, gloss = unpack(reqfield_spec) if not data[reqfield] then error(("Internal error: Missing field '%s', which should containing the %s"):format(reqfield, gloss)) end end local function default_mark_up_spec(spec, _nolink) return (spec:gsub("<(.-)>", "''%1''")) end local function default_make_spec_bare(spec) return (spec:gsub("<(.-)>", "%1")) end local function mark_up_spec(spec, nolink) return (data.mark_up_spec or default_mark_up_spec)(spec, nolink) end local function make_spec_bare(spec) return (data.make_spec_bare or default_make_spec_bare)(spec) end local plpos = require(en_utilities_module).pluralize(data.pos) for full_infl, spec in pairs(data.stem_classes) do local subgenders = spec.possible_genders -- Get the stem type. local infl if subgenders then if not full_infl:find("GENDER") then error(("Internal error: Declension spec '%s' needs to have the word 'GENDER' in it, in all caps"):format(full_infl)) end infl = full_infl:gsub("GENDER ", "") else infl = full_infl end -- Get the breadcrumb. local breadcrumb = spec.breadcrumb or spec.sortkey or "+" if breadcrumb == "+" then breadcrumb = infl end -- Generate the parents. local parents = {} local spec_parents = spec.parent if type(spec_parents) == "string" then spec_parents = {spec_parents} end local parent_sort = make_spec_bare(spec.sortkey or infl) if spec_parents then for _, parent in ipairs(spec_parents) do table.insert(parents, {name = make_spec_bare(parent) .. " " .. plpos, sort = parent_sort}) end else table.insert(parents, {name = plpos .. " by inflection type", sort = parent_sort}) end -- Generate the additional text, including principal part descriptions and footer. local function create_addl(gender_spec, subgender_prefix) local addl_parts = {} local function ins(txt) table.insert(addl_parts, txt) end local function insert_header(gender_spec) if gender_spec then local most_commonly, gender = gender_spec:match("^(~)(.*)$") most_commonly = most_commonly and "most commonly " or "" gender = gender or gender_spec ins(("These %s are %s%s, typically with the following endings:\n"):format(plpos, most_commonly, mark_up_spec(gender))) else ins(("These %s typically have the following endings:\n"):format(plpos)) end end local function process_ending(field, desc, is_last) local ending_spec = spec[subgender_prefix .. field] or spec[field] if not ending_spec then error(("Internal error: for inflection '%s', field '%s' for principal part '%s' is missing"):format( full_infl, field, desc)) end return ("* in the %s: %s%s"):format(desc, mark_up_spec(ending_spec), is_last and "." or ";\n") end local function insert_principal_part_info() for i, ppart_spec in ipairs(data.principal_parts) do local ppart_field, ppart_desc = unpack(ppart_spec) ins(process_ending(ppart_field, ppart_desc, i == #data.principal_parts)) end end insert_header(gender_spec) insert_principal_part_info() local spec_addl = spec[subgender_prefix .. "addl"] if spec_addl == nil then spec_addl = spec.addl end if data.addl or spec_addl then local footer_parts = {} if data.addl then table.insert(footer_parts, mark_up_spec(data.addl)) end if spec_addl then table.insert(footer_parts, mark_up_spec(spec_addl)) end ins("\n" .. table.concat(footer_parts, " ")) end return table.concat(addl_parts) end data.labels[make_spec_bare(infl) .. " " .. plpos] = { description = "{{{langname}}} " .. mark_up_spec(infl) .. " " .. plpos .. ".", displaytitle = "{{{langname}}} " .. mark_up_spec(infl, "nolink") .. " " .. plpos, additional = create_addl(spec.gender, ""), breadcrumb = mark_up_spec(breadcrumb, "nolink"), parents = parents, } if subgenders then for _, subgender in ipairs(subgenders) do local gender_infl = full_infl:gsub("GENDER", subgender) data.labels[make_spec_bare(gender_infl) .. " " .. plpos] = { description = "{{{langname}}} " .. mark_up_spec(gender_infl) .. " " .. plpos .. ".", displaytitle = "{{{langname}}} " .. mark_up_spec(gender_infl, "nolink") .. " " .. plpos, additional = create_addl(subgender, subgender .. "_"), breadcrumb = subgender, parents = {{ name = make_spec_bare(infl) .. " " .. plpos, sort = subgender, }}, } end end end end local recognized_label_fields = list_to_set { "additional", "breadcrumb", "breadcrumb_base", "breadcrumb_key", "breadcrumb_and_first_sort_base", "breadcrumb_and_first_sort_key", "umbrella", "umbrella_parents", } --[==[ Add category labels to `labels` from the specs in `specs`. The intent is to allow easy specification of iteration over part-of-speech and similar variables to construct multiple similar labels. `specs` is a list of labels specs, each of which is a table with three positional fields and additional named fields. The positional fields are as follows: * `[1]` = the label itself; * `[2]` = the description, without any preceding `{{{langname}}}` or following period; * `[3]` = the value of `parents`. If the language name (i.e. `{{{langname}}}`) appears other than at the beginning of the description, include it in the description and it will not be prepended. Note that in such a case, `{{{langname}}}` should be in an appositive construction, e.g. `{{{langname}}} words`, because when constructing the umbrella description, a non-initial occurrence of `{{{langname}}}` will be replaced with `specific-language`. In addition, the table can contain named fields. There are three types of named fields: # Fields referring to other properties of the label. These are such as `additional`, `breadcrumb`, `breadcrumb_base`, `breadcrumb_key`, `umbrella`, etc. These will be stored directly the label, but will be processed for variable references (see below). # ''Iteration variables''. Any string anywhere in a positional or named field can contain ''variable references'', e.g. `{pos}`, which refer to variables that will be iterated over. The values to be iterated over are specified by ''variable-list'' fields, e.g. `pos = {"nouns", "verbs", "adjectives"}`. If there are multiple iteration variables, each will be iterated over, meaning that e.g. if there are three variables with respectively K, M and N values, there will be K*M*N labels. Each value of an iteration variable list is either a string (the actual value) or a table where the `[1]` (the first positional field) is the value and named fields specify values of ''ancillary'' variables, which are not iterated over but which are appropriately substituted when the variable being iterated over takes the specified value. For example, the field `sufpos = {{"prefixes", begin_end = "beginnings"}, {"suffixes", begin_end = "endings"}}` specifies that the iteration variable `sufpos` will be iterated over with the values `prefixes` and `suffixes`, and when this happens, the ancillary variable `begin_end` will have the value `beginnings` when `sufpos` has the value `prefixes`, and will have the value `endings` when `sufpos` has the value `suffixes`. Ancillary variables can be referred to in the same fashion as iteration variables, e.g. `{begin_end}` and `{sufpos}`. # Ancillary default values. Fields beginning with `default_` supply the default value for ancillary variables whose value is not explicitly given for a specific value of an iteration variable. For example, if the iteration variable `pos` is specified using `pos = {"nouns", "proper nouns", {"suffixes", posdesc = "suffixes that form nouns"}}`, the ancillary variable `posdesc` will have the value `suffixes that form nouns` when `pos` has the value `suffixes`, but is otherwise unspecified. The value for the other iteration values is specified through a default, such as `default_posdesc = "{pos}"`, which says that the value should be `"{pos}"` (i.e. the same as the iteration value) for other iteration values. Defaults can also be specified at top level using the `defaults` field. If an ancillary variable is left unspecified, and there is no default value either in the label spec or at top level, an error will be thrown if/when a reference to the specified ancillary variable occurs. ]==] function export.add_labels_from_specs(labels, specs) for _, spec in ipairs(specs.specs) do if debug_add_labels_from_specs then mw.log(("Processing spec: %s"):format(dump(spec))) end local label_spec = spec[1] local description_spec = spec[2] if not description_spec:find("{{{langname}}}") then description_spec = "{{{langname}}} " .. description_spec end description_spec = description_spec .. "." local parents_spec = spec[3] local additional_label_properties = {} local ancillary_defaults = {} local iteration_vars = {} for k, v in pairs(spec) do if type(k) == "number" then if k >= 1 and k <= 3 then -- OK else error(("Internal error: Unrecognized positional field %s=%s in spec %s"):format(k, dump(v), dump(spec))) end elseif recognized_label_fields[k] then additional_label_properties[k] = v elseif k:find("^default_") then local ancvar = k:gsub("^default_", "") ancillary_defaults[ancvar] = v else if not v[1] then error(("Internal error: Iteration variable %s=%s is not in list form in spec %s"):format(k, dump(v), dump(spec))) end insert(iteration_vars, {k, v}) end end local function expand_variables_in_string(str, iteration_values) if not str:find("{") then return str end str = str:gsub("{{{", "\1"):gsub("}}}", "\2"):gsub("{{", "\3"):gsub("}}", "\4") if str:find("{") then str = str:gsub("{([^{}]*)}", function(var) if iteration_values[var] then return expand_variables_in_string(iteration_values[var], iteration_values) else error(("Internal error: Unable to expand variable {%s} in %s in spec %s" ):format(var, dump(str), dump(spec))) end end) end str = str:gsub("\1", "{{{"):gsub("\2", "}}}"):gsub("\3", "{{"):gsub("\4", "}}") return str end local function expand_variables(val, iteration_values) if type(val) == "string" then return expand_variables_in_string(val, iteration_values) elseif type(val) ~= "table" then return val else local newval = {} for k, v in pairs(val) do newval[k] = expand_variables(v, iteration_values) end return newval end end local function construct_iteration_values(explicit_values) local iteration_values = {} local ancillary_values = {} for k, v in pairs(explicit_values) do if type(v) == "string" then iteration_values[k] = v else iteration_values[k] = v[1] for kk, vv in pairs(v) do if type(kk) == "number" then if kk == 1 then -- OK else error(("Internal error: Unrecognized positional field %s=%s in iteration value %s=%s in spec %s" ):format(kk, dump(vv), k, dump(v), dump(spec))) end elseif ancillary_values[kk] then error(("Trying to set ancillary variable %s=%s in iteration value %s=%s and encountered already-set variable; presumably set in different iteration variables; spec %s" ):format(kk, dump(vv), k, dump(v), dump(spec))) elseif type(vv) ~= "string" then error(("Internal error: Ancillary value %s=%s not a string in iteration value %s=%s; spec %s" ):format(kk, dump(vv), k, dump(v), dump(spec))) else ancillary_values[kk] = vv end end end end local merged_ancillary_values = {} -- First merge the overall defaults. if specs.defaults then for k, v in pairs(specs.defaults) do if type(v) ~= "string" then error(("Internal error: Top-level ancillary default %s=%s not a string"):format(k, dump(v))) end merged_ancillary_values[k] = v end end -- Now merge the per-spec defaults. for k, v in pairs(ancillary_defaults) do if type(v) ~= "string" then error(("Internal error: Ancillary default %s=%s not a string; spec %s"):format(k, dump(v), dump(spec))) end merged_ancillary_values[k] = v end -- Now merge the per-iteration-value values; we already checked above that they are strings. for k, v in pairs(ancillary_values) do merged_ancillary_values[k] = v end -- Now merge the ancillary values into the iteration values. for k, v in pairs(merged_ancillary_values) do if iteration_values[k] then error(("Trying to set ancillary variable %s=%s in iteration values structure and encountered already-set variable with value %s; naming clash between iteration and ancillary variables; spec %s" ):format(k, dump(v), dump(iteration_values[k]), dump(spec))) end iteration_values[k] = v end return iteration_values end local function add_label(explicit_values) local iteration_values = construct_iteration_values(explicit_values) local label_obj = { description = expand_variables(description_spec, iteration_values), parents = expand_variables(parents_spec, iteration_values), } for k, v in pairs(additional_label_properties) do label_obj[k] = expand_variables(v, iteration_values) end local label = expand_variables(label_spec, iteration_values) if debug_add_labels_from_specs then mw.log(("Adding label %s = %s"):format(dump(label), dump(label_obj))) end labels[label] = label_obj end local iteration_indices = {} local iteration_lengths = {} local num_vars = #iteration_vars if num_vars == 0 then add_label({}) else for i = 1, num_vars do insert(iteration_indices, 1) insert(iteration_lengths, #iteration_vars[i][2]) end -- Loop over the Cartesian product of all iteration variables. In each iteration through the loop, we -- process one set of indices. while true do local explicit_values = {} for i, iteration_var in ipairs(iteration_vars) do local var, values = unpack(iteration_var) explicit_values[var] = values[iteration_indices[i]] end add_label(explicit_values) -- Now increment the iteration indices using the odometer algorithm. local next_var_index = 1 while true do iteration_indices[next_var_index] = iteration_indices[next_var_index] + 1 if iteration_indices[next_var_index] > iteration_lengths[next_var_index] then iteration_indices[next_var_index] = 1 next_var_index = next_var_index + 1 if next_var_index > num_vars then break end else break end end if next_var_index > num_vars then break end end end end end --[==[ Set `breadcrumb_base` on the labels in `label` by chopping off the parent (or the parent's parent, etc.) from the beginning or end of the label, if possible. This will not override existing breadcrumbs (using any of the breadcrumb or breadcrumb-related settings). `addl_terms_to_remove_for_breadcrumb_base` is a list of additional terms that will be chopped off of either end of the label to form the `breadcrumb_base`. (For example, [[Module:category tree/affixes and compounds]] specifies { {"compounds"}} because the parent is {"compound terms"} but many children end in {"compounds"}, and [[Module:category tree/entry maintenance]] specifies { {"entries", "terms"}}, which occurs at the beginning of many entry-maintenance categories.) `addl_terms_to_remove_for_sort` is a list of additional terms to remove from the beginning of the computed `breadcrumb_base` to form the value of `sort` in the first parent. If such a term is removed, `sort` will be set in the first parent if not already set, which will override the sort base coming from `breadcrumb_base`. (For example, [[Module:category tree/entry maintenance]] specifies { {"with"}}. The effect of this combined with the above setting is that a label like {"entries with incorrect language header"} with first parent {"entry maintenance"} will have a breadcrumb {"with incorrect language header"} and a sort key {"incorrect language header"}. ]==] function export.add_partial_breadcrumbs(labels_cats, addl_terms_to_remove_for_breadcrumb_base, addl_terms_to_remove_for_sort) for label, data in pairs(labels_cats) do if data.breadcrumb == nil and data.breadcrumb_key == nil and data.breadcrumb_base == nil and data.breadcrumb_and_first_sort_key == nil and data.breadcrumb_and_first_sort_base == nil then local pardata = data local function make_anycase_term_to_remove(term) local first, rest = umatch(term, "^(.)(.*)$") return ("[%s%s%s]%s"):format(first, uupper(first), ulower(first), pattern_escape(rest)) end -- Check a term against the beginning and end of the label and if found, set the breadcrumb base -- accordingly. Return true if the breadcrumb_base was set, otherwise false. If additional terms to check -- for sortkey removal are given, we check those terms at the beginning of the chopped breadcrumb_base or -- the label (regardless of whether we were able to remove any terms from the breadcrumb), and if we were -- able to remove any terms, attempt to set the sortkey. local function check_breadcrumb_base_term(term_to_remove) local breadcrumb_base local term_to_remove_pattern = make_anycase_term_to_remove(term_to_remove) -- Check the end of the label for the term to remove. breadcrumb_base = umatch(label, ("^(.-) %s$"):format(term_to_remove_pattern)) if not breadcrumb_base then -- If not found, check the beginning of the label for the term to remove. breadcrumb_base = umatch(label, ("^%s (.-)$"):format(term_to_remove_pattern)) end local breadcrumb_base_set = not not breadcrumb_base breadcrumb_base = breadcrumb_base or label -- If additional terms to remove to form the sortkey, do it now. if addl_terms_to_remove_for_sort then for _, addl_term in ipairs(addl_terms_to_remove_for_sort) do local sort = umatch(breadcrumb_base, ("^(.-) %s$"):format(make_anycase_term_to_remove(addl_term))) if sort then -- Attempt to set the `sort` on the first parent, but don't override an existing value. local parents = data.parents if type(parents) == "string" or type(parents) == "table" and not parents[1] then parents = {parents} end if parents and parents[1] then local parent = parents[1] if type(parent) == "string" then parent = {name = parent} end if type(parent) == "table" and not parent.sort then parent.sort = sort parents[1] = parent data.parents = parents end end break end end end if breadcrumb_base_set then data.breadcrumb_base = breadcrumb_base return true end return false end while true do -- Loop over first parents and first parents of first parents until there are no more. local parents = pardata.parents if type(parents) == "string" or type(parents) == "table" and not parents[1] then parents = {parents} end if not parents or not parents[1] then break end local parent = parents[1] if type(parent) == "table" then parent = parent.name end if type(parent) == "string" then if check_breadcrumb_base_term(parent) then break end pardata = labels_cats[parent] if not pardata then break end else break end end -- Also check additional specified terms to remove from the label to form the breadcrumb. if addl_terms_to_remove_for_breadcrumb_base then for _, addl_term in ipairs(addl_terms_to_remove_for_breadcrumb_base) do if check_breadcrumb_base_term(addl_term) then break end end end end end end -- FIXME: Older entry point. export.add_partial_breadcrumbs_to_labels = export.add_partial_breadcrumbs --[==[ Finalize the labels in `labels` according to the specs in `data`. This does two things: # Set `breadcrumb_base` on the labels in `label` by chopping off the parent (or the parent's parent, etc.) from the beginning or end of the label, if possible. This will not override existing breadcrumbs (using any of the breadcrumb or breadcrumb-related settings). `data.addl_terms_to_remove_for_breadcrumb_base` is a list of additional terms that will be chopped off of either end of the label to form the `breadcrumb_base`. (For example, [[Module:category tree/affixes and compounds]] specifies { {"compounds"}} because the parent is {"compound terms"} but many children end in {"compounds"}, and [[Module:category tree/entry maintenance]] specifies { {"entries", "terms"}}, which occurs at the beginning of many entry-maintenance categories.) `data.addl_terms_to_remove_for_sort` is a list of additional terms to remove from the beginning of the computed `breadcrumb_base` to form the value of `sort` in the first parent. If such a term is removed, `sort` will be set in the first parent if not already set, which will override the sort base coming from `breadcrumb_base`. (For example, [[Module:category tree/entry maintenance]] specifies { {"with"}}. The effect of this combined with the above setting is that a label like {"entries with incorrect language header"} with first parent {"entry maintenance"} will have a breadcrumb {"with incorrect language header"} and a sort key {"incorrect language header"}. # Add an `umbrella_parents` key if not already present and `data.default_umbrella_parents` is specified. ]==] function export.finalize_labels(labels, data) data = data or {} export.add_partial_breadcrumbs(labels, data.addl_terms_to_remove_for_breadcrumb_base, data.addl_terms_to_remove_for_sort) if data.default_umbrella_parents then -- Add 'umbrella_parents' key if not already present. for label, labdat in pairs(labels) do if not labdat.umbrella_parents then labdat.umbrella_parents = data.default_umbrella_parents end end end end function export.finalize_raw_categories(raw_categories, data) data = data or {} export.add_partial_breadcrumbs(raw_categories, data.addl_terms_to_remove_for_breadcrumb_base, data.addl_terms_to_remove_for_sort) end return export d234ry6bei5t65m2qwyp6geh1342cfd 5775725 5775724 2026-10-20T09:49:36Z Octahedron80 267 5775725 Scribunto text/plain local export = {} local en_utilities_module = "Module:en-utilities" local m_string_utilities = require("Module:string utilities") local m_table = require("Module:table") local umatch = m_string_utilities.match local uupper = m_string_utilities.upper local ulower = m_string_utilities.lower local pattern_escape = m_string_utilities.pattern_escape local list_to_set = m_table.listToSet local dump = mw.dumpObject local insert = table.insert local unpack = unpack or table.unpack -- Lua 5.2 compatibility -- If true, output debugging information indicating which specs are being processed and which labels and label objects -- generated. local debug_add_labels_from_specs = false --[==[ Generate labels for inflection classes. `data` is a table with the following fields: * `labels`: The table into which the labels are written. * `pos`: The singular part of speech, e.g. "noun". * `stem_classes`: Table of possible stem classes and associated properties. See below. * `principal_parts`: List of the principal part fields and descriptions. Each list element is a two-element list consisting of {"FIELD", "DESCRIPTION"} where FIELD is the field in the element in `stem_classes` (e.g. "nom_sg", "gen_sg", "pl", "sup") containing the detailed description of what this principal part looks like, and DESCRIPTION is the corresponding English description of the principal part (e.g. "nominative singular"). * `mark_up_spec`: Optional function to add markup to a spec. Takes two arguments, the spec and a flag `nolink`; if the flag is true, links should not be present in the resulting markup. The default just converts literal text enclosed in <...> into italics. * `make_spec_bare`: Optional function to make a spec (stem class or sortkey) free of markup. The default just converts literal text enclosed in <...> into bare text. * `addl`: Optional additional text to be displayed in the footer of each category page. `stem_classes` is a table describing the various stem classes and how to format the category description of each. It is a table with keys specifying the stem classes and values consisting of an object containing properties of the stem class. If the stem class contains the word 'GENDER' in it, it expands into labels both for a parent category that subsumes several genders (obtained by removing the word 'GENDER' and following whitespace) as well as gender-specific children categories (obtained by replacing the word 'GENDER' with the genders specified in the `possible_genders` field). The stem class can contain literal text (e.g. suffixes), which will be marked up appropriately (e.g. italicized) in breadcrumbs and titles. The fields of the property object for a given stem class are as follows: * `gender`: The description of the gender(s) of the stem class. If preceded by ~, the description is preceded by "most commonly". This appears in the `additional` field of the label properties. It is not used in gender-specific children categories; instead the gender of that category is used. * `possible_genders`: The possible genders this class occurs in. If this is specified, the word 'GENDER' must occur in the stem class, and gender-specific variants of the stem class (with GENDER replaced by the possible genders) are handled along with a parent category subsuming all genders. * `PRINCIPAL_PART`: The ending for the specified principal part. Use <...> to enclose literal Latin-script text (e.g. suffixes), which will be italicized. There will be one field for each principal part listed in the `principal_parts` table described above. * `GENDER_PRINCIPAL_PART`: The ending for the GENDER variant of the specified principal part. If not specified, the value of `PRINCIPAL_PART` is used. * `breadcrumb`: The breadcrumb for the category, appearing in the trail of breadcrumbs at the top of the page. If this stem has gender-specific variants, the breadcrumb specified here is used only for the parent category, while the gender-specific child categories use the gender as the breadcrumb. If not specified, it defaults to `sortkey`. If that is also not specified, or if the breadcrumb has the value "+", the stem class (without the word 'GENDER') is used. (Use "+" when a sortkey is specified but the stem class should be used as the breadcrumb.) * `parent`: The parent category or categories. If specified, the actual category label is formed by appending the part of speech (e.g. "nouns"). Defaults to "POS by inflection type" where POS is the part of speech. Note that gender-specific child categories do not use this, but always have the gender-subsuming parent stem class category as their parent. * `sortkey`: The sort key used for sorting this category among its parent's children. Defaults to the stem class (without the word 'GENDER'). Note that gender-specific child categories do nto use this, but always use the gender as the sort key. * `addl`: Optional additional text to be displayed in the footer of the category page. * `GENDER_addl`: Optional additional text to be displayed in the footer of a gender-specific category page, defaulting to `addl`. Use the value `false` to cancel out a non-gender-specific value. ]==] function export.add_inflection_labels(data) for _, reqfield_spec in ipairs { {"labels", "table of labels"}, {"pos", "singular part of speech"}, {"stem_classes", "table of possible stem classes and associated properties"}, {"principal_parts", "list of principal part fields and names"}, } do local reqfield, gloss = unpack(reqfield_spec) if not data[reqfield] then error(("Internal error: Missing field '%s', which should containing the %s"):format(reqfield, gloss)) end end local function default_mark_up_spec(spec, _nolink) return (spec:gsub("<(.-)>", "''%1''")) end local function default_make_spec_bare(spec) return (spec:gsub("<(.-)>", "%1")) end local function mark_up_spec(spec, nolink) return (data.mark_up_spec or default_mark_up_spec)(spec, nolink) end local function make_spec_bare(spec) return (data.make_spec_bare or default_make_spec_bare)(spec) end local plpos = require(en_utilities_module).pluralize(data.pos) for full_infl, spec in pairs(data.stem_classes) do local subgenders = spec.possible_genders -- Get the stem type. local infl if subgenders then if not full_infl:find("GENDER") then error(("Internal error: Declension spec '%s' needs to have the word 'GENDER' in it, in all caps"):format(full_infl)) end infl = full_infl:gsub("GENDER ", "") else infl = full_infl end -- Get the breadcrumb. local breadcrumb = spec.breadcrumb or spec.sortkey or "+" if breadcrumb == "+" then breadcrumb = infl end -- Generate the parents. local parents = {} local spec_parents = spec.parent if type(spec_parents) == "string" then spec_parents = {spec_parents} end local parent_sort = make_spec_bare(spec.sortkey or infl) if spec_parents then for _, parent in ipairs(spec_parents) do table.insert(parents, {name = make_spec_bare(parent) .. " " .. plpos, sort = parent_sort}) end else table.insert(parents, {name = plpos .. "แบ่งตามชนิดการผันรูป", sort = parent_sort}) end -- Generate the additional text, including principal part descriptions and footer. local function create_addl(gender_spec, subgender_prefix) local addl_parts = {} local function ins(txt) table.insert(addl_parts, txt) end local function insert_header(gender_spec) if gender_spec then local most_commonly, gender = gender_spec:match("^(~)(.*)$") most_commonly = most_commonly and "most commonly " or "" gender = gender or gender_spec ins(("These %s are %s%s, typically with the following endings:\n"):format(plpos, most_commonly, mark_up_spec(gender))) else ins(("These %s typically have the following endings:\n"):format(plpos)) end end local function process_ending(field, desc, is_last) local ending_spec = spec[subgender_prefix .. field] or spec[field] if not ending_spec then error(("Internal error: for inflection '%s', field '%s' for principal part '%s' is missing"):format( full_infl, field, desc)) end return ("* in the %s: %s%s"):format(desc, mark_up_spec(ending_spec), is_last and "." or ";\n") end local function insert_principal_part_info() for i, ppart_spec in ipairs(data.principal_parts) do local ppart_field, ppart_desc = unpack(ppart_spec) ins(process_ending(ppart_field, ppart_desc, i == #data.principal_parts)) end end insert_header(gender_spec) insert_principal_part_info() local spec_addl = spec[subgender_prefix .. "addl"] if spec_addl == nil then spec_addl = spec.addl end if data.addl or spec_addl then local footer_parts = {} if data.addl then table.insert(footer_parts, mark_up_spec(data.addl)) end if spec_addl then table.insert(footer_parts, mark_up_spec(spec_addl)) end ins("\n" .. table.concat(footer_parts, " ")) end return table.concat(addl_parts) end data.labels[make_spec_bare(infl) .. " " .. plpos] = { description = "{{{langname}}} " .. mark_up_spec(infl) .. " " .. plpos .. ".", displaytitle = "{{{langname}}} " .. mark_up_spec(infl, "nolink") .. " " .. plpos, additional = create_addl(spec.gender, ""), breadcrumb = mark_up_spec(breadcrumb, "nolink"), parents = parents, } if subgenders then for _, subgender in ipairs(subgenders) do local gender_infl = full_infl:gsub("GENDER", subgender) data.labels[make_spec_bare(gender_infl) .. " " .. plpos] = { description = "{{{langname}}} " .. mark_up_spec(gender_infl) .. " " .. plpos .. ".", displaytitle = "{{{langname}}} " .. mark_up_spec(gender_infl, "nolink") .. " " .. plpos, additional = create_addl(subgender, subgender .. "_"), breadcrumb = subgender, parents = {{ name = make_spec_bare(infl) .. " " .. plpos, sort = subgender, }}, } end end end end local recognized_label_fields = list_to_set { "additional", "breadcrumb", "breadcrumb_base", "breadcrumb_key", "breadcrumb_and_first_sort_base", "breadcrumb_and_first_sort_key", "umbrella", "umbrella_parents", } --[==[ Add category labels to `labels` from the specs in `specs`. The intent is to allow easy specification of iteration over part-of-speech and similar variables to construct multiple similar labels. `specs` is a list of labels specs, each of which is a table with three positional fields and additional named fields. The positional fields are as follows: * `[1]` = the label itself; * `[2]` = the description, without any preceding `{{{langname}}}` or following period; * `[3]` = the value of `parents`. If the language name (i.e. `{{{langname}}}`) appears other than at the beginning of the description, include it in the description and it will not be prepended. Note that in such a case, `{{{langname}}}` should be in an appositive construction, e.g. `{{{langname}}} words`, because when constructing the umbrella description, a non-initial occurrence of `{{{langname}}}` will be replaced with `specific-language`. In addition, the table can contain named fields. There are three types of named fields: # Fields referring to other properties of the label. These are such as `additional`, `breadcrumb`, `breadcrumb_base`, `breadcrumb_key`, `umbrella`, etc. These will be stored directly the label, but will be processed for variable references (see below). # ''Iteration variables''. Any string anywhere in a positional or named field can contain ''variable references'', e.g. `{pos}`, which refer to variables that will be iterated over. The values to be iterated over are specified by ''variable-list'' fields, e.g. `pos = {"nouns", "verbs", "adjectives"}`. If there are multiple iteration variables, each will be iterated over, meaning that e.g. if there are three variables with respectively K, M and N values, there will be K*M*N labels. Each value of an iteration variable list is either a string (the actual value) or a table where the `[1]` (the first positional field) is the value and named fields specify values of ''ancillary'' variables, which are not iterated over but which are appropriately substituted when the variable being iterated over takes the specified value. For example, the field `sufpos = {{"prefixes", begin_end = "beginnings"}, {"suffixes", begin_end = "endings"}}` specifies that the iteration variable `sufpos` will be iterated over with the values `prefixes` and `suffixes`, and when this happens, the ancillary variable `begin_end` will have the value `beginnings` when `sufpos` has the value `prefixes`, and will have the value `endings` when `sufpos` has the value `suffixes`. Ancillary variables can be referred to in the same fashion as iteration variables, e.g. `{begin_end}` and `{sufpos}`. # Ancillary default values. Fields beginning with `default_` supply the default value for ancillary variables whose value is not explicitly given for a specific value of an iteration variable. For example, if the iteration variable `pos` is specified using `pos = {"nouns", "proper nouns", {"suffixes", posdesc = "suffixes that form nouns"}}`, the ancillary variable `posdesc` will have the value `suffixes that form nouns` when `pos` has the value `suffixes`, but is otherwise unspecified. The value for the other iteration values is specified through a default, such as `default_posdesc = "{pos}"`, which says that the value should be `"{pos}"` (i.e. the same as the iteration value) for other iteration values. Defaults can also be specified at top level using the `defaults` field. If an ancillary variable is left unspecified, and there is no default value either in the label spec or at top level, an error will be thrown if/when a reference to the specified ancillary variable occurs. ]==] function export.add_labels_from_specs(labels, specs) for _, spec in ipairs(specs.specs) do if debug_add_labels_from_specs then mw.log(("Processing spec: %s"):format(dump(spec))) end local label_spec = spec[1] local description_spec = spec[2] if not description_spec:find("{{{langname}}}") then description_spec = "{{{langname}}} " .. description_spec end description_spec = description_spec .. "." local parents_spec = spec[3] local additional_label_properties = {} local ancillary_defaults = {} local iteration_vars = {} for k, v in pairs(spec) do if type(k) == "number" then if k >= 1 and k <= 3 then -- OK else error(("Internal error: Unrecognized positional field %s=%s in spec %s"):format(k, dump(v), dump(spec))) end elseif recognized_label_fields[k] then additional_label_properties[k] = v elseif k:find("^default_") then local ancvar = k:gsub("^default_", "") ancillary_defaults[ancvar] = v else if not v[1] then error(("Internal error: Iteration variable %s=%s is not in list form in spec %s"):format(k, dump(v), dump(spec))) end insert(iteration_vars, {k, v}) end end local function expand_variables_in_string(str, iteration_values) if not str:find("{") then return str end str = str:gsub("{{{", "\1"):gsub("}}}", "\2"):gsub("{{", "\3"):gsub("}}", "\4") if str:find("{") then str = str:gsub("{([^{}]*)}", function(var) if iteration_values[var] then return expand_variables_in_string(iteration_values[var], iteration_values) else error(("Internal error: Unable to expand variable {%s} in %s in spec %s" ):format(var, dump(str), dump(spec))) end end) end str = str:gsub("\1", "{{{"):gsub("\2", "}}}"):gsub("\3", "{{"):gsub("\4", "}}") return str end local function expand_variables(val, iteration_values) if type(val) == "string" then return expand_variables_in_string(val, iteration_values) elseif type(val) ~= "table" then return val else local newval = {} for k, v in pairs(val) do newval[k] = expand_variables(v, iteration_values) end return newval end end local function construct_iteration_values(explicit_values) local iteration_values = {} local ancillary_values = {} for k, v in pairs(explicit_values) do if type(v) == "string" then iteration_values[k] = v else iteration_values[k] = v[1] for kk, vv in pairs(v) do if type(kk) == "number" then if kk == 1 then -- OK else error(("Internal error: Unrecognized positional field %s=%s in iteration value %s=%s in spec %s" ):format(kk, dump(vv), k, dump(v), dump(spec))) end elseif ancillary_values[kk] then error(("Trying to set ancillary variable %s=%s in iteration value %s=%s and encountered already-set variable; presumably set in different iteration variables; spec %s" ):format(kk, dump(vv), k, dump(v), dump(spec))) elseif type(vv) ~= "string" then error(("Internal error: Ancillary value %s=%s not a string in iteration value %s=%s; spec %s" ):format(kk, dump(vv), k, dump(v), dump(spec))) else ancillary_values[kk] = vv end end end end local merged_ancillary_values = {} -- First merge the overall defaults. if specs.defaults then for k, v in pairs(specs.defaults) do if type(v) ~= "string" then error(("Internal error: Top-level ancillary default %s=%s not a string"):format(k, dump(v))) end merged_ancillary_values[k] = v end end -- Now merge the per-spec defaults. for k, v in pairs(ancillary_defaults) do if type(v) ~= "string" then error(("Internal error: Ancillary default %s=%s not a string; spec %s"):format(k, dump(v), dump(spec))) end merged_ancillary_values[k] = v end -- Now merge the per-iteration-value values; we already checked above that they are strings. for k, v in pairs(ancillary_values) do merged_ancillary_values[k] = v end -- Now merge the ancillary values into the iteration values. for k, v in pairs(merged_ancillary_values) do if iteration_values[k] then error(("Trying to set ancillary variable %s=%s in iteration values structure and encountered already-set variable with value %s; naming clash between iteration and ancillary variables; spec %s" ):format(k, dump(v), dump(iteration_values[k]), dump(spec))) end iteration_values[k] = v end return iteration_values end local function add_label(explicit_values) local iteration_values = construct_iteration_values(explicit_values) local label_obj = { description = expand_variables(description_spec, iteration_values), parents = expand_variables(parents_spec, iteration_values), } for k, v in pairs(additional_label_properties) do label_obj[k] = expand_variables(v, iteration_values) end local label = expand_variables(label_spec, iteration_values) if debug_add_labels_from_specs then mw.log(("Adding label %s = %s"):format(dump(label), dump(label_obj))) end labels[label] = label_obj end local iteration_indices = {} local iteration_lengths = {} local num_vars = #iteration_vars if num_vars == 0 then add_label({}) else for i = 1, num_vars do insert(iteration_indices, 1) insert(iteration_lengths, #iteration_vars[i][2]) end -- Loop over the Cartesian product of all iteration variables. In each iteration through the loop, we -- process one set of indices. while true do local explicit_values = {} for i, iteration_var in ipairs(iteration_vars) do local var, values = unpack(iteration_var) explicit_values[var] = values[iteration_indices[i]] end add_label(explicit_values) -- Now increment the iteration indices using the odometer algorithm. local next_var_index = 1 while true do iteration_indices[next_var_index] = iteration_indices[next_var_index] + 1 if iteration_indices[next_var_index] > iteration_lengths[next_var_index] then iteration_indices[next_var_index] = 1 next_var_index = next_var_index + 1 if next_var_index > num_vars then break end else break end end if next_var_index > num_vars then break end end end end end --[==[ Set `breadcrumb_base` on the labels in `label` by chopping off the parent (or the parent's parent, etc.) from the beginning or end of the label, if possible. This will not override existing breadcrumbs (using any of the breadcrumb or breadcrumb-related settings). `addl_terms_to_remove_for_breadcrumb_base` is a list of additional terms that will be chopped off of either end of the label to form the `breadcrumb_base`. (For example, [[Module:category tree/affixes and compounds]] specifies { {"compounds"}} because the parent is {"compound terms"} but many children end in {"compounds"}, and [[Module:category tree/entry maintenance]] specifies { {"entries", "terms"}}, which occurs at the beginning of many entry-maintenance categories.) `addl_terms_to_remove_for_sort` is a list of additional terms to remove from the beginning of the computed `breadcrumb_base` to form the value of `sort` in the first parent. If such a term is removed, `sort` will be set in the first parent if not already set, which will override the sort base coming from `breadcrumb_base`. (For example, [[Module:category tree/entry maintenance]] specifies { {"with"}}. The effect of this combined with the above setting is that a label like {"entries with incorrect language header"} with first parent {"entry maintenance"} will have a breadcrumb {"with incorrect language header"} and a sort key {"incorrect language header"}. ]==] function export.add_partial_breadcrumbs(labels_cats, addl_terms_to_remove_for_breadcrumb_base, addl_terms_to_remove_for_sort) for label, data in pairs(labels_cats) do if data.breadcrumb == nil and data.breadcrumb_key == nil and data.breadcrumb_base == nil and data.breadcrumb_and_first_sort_key == nil and data.breadcrumb_and_first_sort_base == nil then local pardata = data local function make_anycase_term_to_remove(term) local first, rest = umatch(term, "^(.)(.*)$") return ("[%s%s%s]%s"):format(first, uupper(first), ulower(first), pattern_escape(rest)) end -- Check a term against the beginning and end of the label and if found, set the breadcrumb base -- accordingly. Return true if the breadcrumb_base was set, otherwise false. If additional terms to check -- for sortkey removal are given, we check those terms at the beginning of the chopped breadcrumb_base or -- the label (regardless of whether we were able to remove any terms from the breadcrumb), and if we were -- able to remove any terms, attempt to set the sortkey. local function check_breadcrumb_base_term(term_to_remove) local breadcrumb_base local term_to_remove_pattern = make_anycase_term_to_remove(term_to_remove) -- Check the end of the label for the term to remove. breadcrumb_base = umatch(label, ("^(.-) %s$"):format(term_to_remove_pattern)) if not breadcrumb_base then -- If not found, check the beginning of the label for the term to remove. breadcrumb_base = umatch(label, ("^%s (.-)$"):format(term_to_remove_pattern)) end local breadcrumb_base_set = not not breadcrumb_base breadcrumb_base = breadcrumb_base or label -- If additional terms to remove to form the sortkey, do it now. if addl_terms_to_remove_for_sort then for _, addl_term in ipairs(addl_terms_to_remove_for_sort) do local sort = umatch(breadcrumb_base, ("^(.-) %s$"):format(make_anycase_term_to_remove(addl_term))) if sort then -- Attempt to set the `sort` on the first parent, but don't override an existing value. local parents = data.parents if type(parents) == "string" or type(parents) == "table" and not parents[1] then parents = {parents} end if parents and parents[1] then local parent = parents[1] if type(parent) == "string" then parent = {name = parent} end if type(parent) == "table" and not parent.sort then parent.sort = sort parents[1] = parent data.parents = parents end end break end end end if breadcrumb_base_set then data.breadcrumb_base = breadcrumb_base return true end return false end while true do -- Loop over first parents and first parents of first parents until there are no more. local parents = pardata.parents if type(parents) == "string" or type(parents) == "table" and not parents[1] then parents = {parents} end if not parents or not parents[1] then break end local parent = parents[1] if type(parent) == "table" then parent = parent.name end if type(parent) == "string" then if check_breadcrumb_base_term(parent) then break end pardata = labels_cats[parent] if not pardata then break end else break end end -- Also check additional specified terms to remove from the label to form the breadcrumb. if addl_terms_to_remove_for_breadcrumb_base then for _, addl_term in ipairs(addl_terms_to_remove_for_breadcrumb_base) do if check_breadcrumb_base_term(addl_term) then break end end end end end end -- FIXME: Older entry point. export.add_partial_breadcrumbs_to_labels = export.add_partial_breadcrumbs --[==[ Finalize the labels in `labels` according to the specs in `data`. This does two things: # Set `breadcrumb_base` on the labels in `label` by chopping off the parent (or the parent's parent, etc.) from the beginning or end of the label, if possible. This will not override existing breadcrumbs (using any of the breadcrumb or breadcrumb-related settings). `data.addl_terms_to_remove_for_breadcrumb_base` is a list of additional terms that will be chopped off of either end of the label to form the `breadcrumb_base`. (For example, [[Module:category tree/affixes and compounds]] specifies { {"compounds"}} because the parent is {"compound terms"} but many children end in {"compounds"}, and [[Module:category tree/entry maintenance]] specifies { {"entries", "terms"}}, which occurs at the beginning of many entry-maintenance categories.) `data.addl_terms_to_remove_for_sort` is a list of additional terms to remove from the beginning of the computed `breadcrumb_base` to form the value of `sort` in the first parent. If such a term is removed, `sort` will be set in the first parent if not already set, which will override the sort base coming from `breadcrumb_base`. (For example, [[Module:category tree/entry maintenance]] specifies { {"with"}}. The effect of this combined with the above setting is that a label like {"entries with incorrect language header"} with first parent {"entry maintenance"} will have a breadcrumb {"with incorrect language header"} and a sort key {"incorrect language header"}. # Add an `umbrella_parents` key if not already present and `data.default_umbrella_parents` is specified. ]==] function export.finalize_labels(labels, data) data = data or {} export.add_partial_breadcrumbs(labels, data.addl_terms_to_remove_for_breadcrumb_base, data.addl_terms_to_remove_for_sort) if data.default_umbrella_parents then -- Add 'umbrella_parents' key if not already present. for label, labdat in pairs(labels) do if not labdat.umbrella_parents then labdat.umbrella_parents = data.default_umbrella_parents end end end end function export.finalize_raw_categories(raw_categories, data) data = data or {} export.add_partial_breadcrumbs(raw_categories, data.addl_terms_to_remove_for_breadcrumb_base, data.addl_terms_to_remove_for_sort) end return export nqvux1m5hfwoyb92875osjfdu6cgy4x