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.14
case-sensitive
สื่อ
พิเศษ
พูดคุย
ผู้ใช้
คุยกับผู้ใช้
วิกิพจนานุกรม
คุยเรื่องวิกิพจนานุกรม
ไฟล์
คุยเรื่องไฟล์
มีเดียวิกิ
คุยเรื่องมีเดียวิกิ
แม่แบบ
คุยเรื่องแม่แบบ
วิธีใช้
คุยเรื่องวิธีใช้
หมวดหมู่
คุยเรื่องหมวดหมู่
ภาคผนวก
คุยเรื่องภาคผนวก
ดัชนี
คุยเรื่องดัชนี
สัมผัส
คุยเรื่องสัมผัส
อรรถาภิธาน
คุยเรื่องอรรถาภิธาน
TimedText
TimedText talk
มอดูล
คุยเรื่องมอดูล
Event
Event talk
animal
0
3529
5754500
5688305
2026-08-06T07:53:12Z
OctraBot
3198
/* รากศัพท์ */
5754500
wikitext
text/x-wiki
{{minitoc}}
== ภาษากาตาลา ==
=== รากศัพท์ ===
{{bor+|ca|la|animal}}
=== การออกเสียง ===
* {{ca-IPA}}
* {{audio|ca|LL-Q7026 (cat)-Millars-animal.wav|a=Valencia}}
* {{rhyme|ca|al|s=3}}
* {{hyph|ca|a|ni|mal}}
=== คำคุณศัพท์ ===
{{ca-adj}}
# [[ที่]][[เกี่ยว]][[กับ]]สัตว์
=== คำนาม ===
{{ca-noun|m}}
# [[สัตว์]]
==== ลูกคำ ====
* {{l|ca|animalada}}
* {{l|ca|animalitzar|t=ทำให้เป็นสัตว์}}
=== อ่านเพิ่ม ===
* {{R:ca:IEC2}}
* {{R:ca:GDLC}}
* {{R:ca:DNV}}
* {{R:ca:DCVB}}
{{C|ca|สัตว์}}
== ภาษากาปัมปางัน ==
=== รากศัพท์ ===
{{bor+|pam|es|animal}}
=== การออกเสียง ===
* {{pam-IPA}}
* {{hyph|pam|a|ni|mal}}
=== คำนาม ===
{{pam-noun}}
# [[สัตว์]]
#: {{syn|pam|ayup}}
== ภาษากาลิเซีย ==
{{wp|gl:}}
=== รากศัพท์ ===
{{lbor|gl|la|animal}}
=== การออกเสียง ===
{{gl-pr}}
* {{hyph|gl|a|ni|mal}}
=== คำคุณศัพท์ ===
{{gl-adj}}
# [[ที่]][[เกี่ยว]][[กับ]]สัตว์
=== คำนาม ===
{{gl-noun|m}}
# [[สัตว์]]
=== อ่านเพิ่ม ===
* {{R:gl:DRAG}}
* {{R:gl:Estraviz}}
{{C|gl|สัตว์}}
== ภาษาครีโอลกาบูเวร์ดี ==
=== รากศัพท์ ===
จาก{{der|kea|pt|animal}}
=== คำนาม ===
{{head|kea|คำนาม}}
# [[สัตว์ร้าย]]
# [[สัตว์]]
== ภาษาครีโอลเฮติ ==
=== รากศัพท์ ===
จาก{{der|ht|fr|animal}}, จาก{{der|ht|la|animal}}
=== การออกเสียง ===
* {{IPA|ht|/a.ni.mal/}}
=== คำนาม ===
{{head|ht|คำนาม}}
# [[สัตว์]]
#: {{syn|ht|zannimo}}
=== อ้างอิง ===
* {{R:ht:Targète|page=9}}
{{C|ht|สัตว์}}
== ภาษาเซบัวโน ==
=== รากศัพท์ ===
{{bor+|ceb|es|animal}}, จาก{{der|ceb|la|animal}}, การใช้เป็นคำนามของรูปคุณศัพท์ {{m|la|animale}}, เพศกลางของ {{m|la|animālis}}, จาก{{m|la|anima|t=ลมหายใจ, วิญญาณ}}
=== การออกเสียง ===
* {{ceb-IPA|animál}}
* {{hyph|ceb|a|ni|mal}}
=== คำนาม ===
{{ceb-noun|animál}}
# [[สัตว์]]
# {{lb|ceb|derogatory}} [[อันธพาล]]
#: {{syn|ceb|banyaga}}
# {{lb|ceb|sometimes humurous}} [[คน]][[บ้า]]
=== คำคุณศัพท์ ===
{{ceb-adj|animál}}
# {{lb|ceb|sometimes|_|humorous}} บ้า
# [[น่า]][[ดูถูก]], สมควรได้รับ[[ความดูถูก]]
# [[โหดเหี้ยม]]; ปราศจาก[[ความสงสาร]]หรือ[[ความเห็นใจ]]; [[โหดร้าย]], [[ไร้]][[ความปรานี]]
=== คำอุทาน ===
{{head|ceb|คำอุทาน|head=animál}}
# {{lb|ceb|vulgar}} {{n-g|ใช้เป็นคำแสดงออกถึง[[ความรังเกียจ]] [[ความโกรธ]] ฯลฯ}}
== ภาษาตอกปีซิน ==
=== รากศัพท์ ===
จาก{{inh|tpi|en|animal}}
=== คำนาม ===
{{head|tpi|คำนาม}}
# [[สัตว์]] {{gloss|ไม่รวมถึงมนุษย์}}
#: {{syn|tpi|abus}}
#* {{RQ:Buk Baibel|Jenesis|1|25|passage=God i kamapim ol kain kain '''animal''' bilong ples na ol bikpela na liklik '''animal''' bilong bus. God i lukim olgeta dispela samting i gutpela, na em i amamas.}}
==== ลูกคำ ====
* {{l|tpi|dokta bilong ol animal||veterinarian}}
== ภาษาตากาล็อก ==
=== รากศัพท์ ===
{{bor+|tl|es|animal}}, จาก{{der|tl|la|animal}}
=== การออกเสียง ===
{{tl-pr|animál}}
=== คำนาม ===
{{tl-noun|animál|b=+}}
# [[สัตว์ร้าย]]; [[สัตว์ป่า]]; [[สิ่งมีชีวิต]]
#: {{syn|tl|halimaw|hayop}}
# {{lb|tl|derogatory}} [[คน]][[ที่]][[ดุร้าย]][[เหมือน]]สัตว์; คน[[ไร้]][[มนุษยธรรม]]
#: {{syn|tl|hayop|bruto|bestiya}}
==== ลูกคำ ====
{{col3|tl|kaanimalan|pagkaanimal}}
==== คำเกี่ยวข้อง ====
{{col|tl|alma|anima|anime|animadbersiyon|animado|animador|animas|animasyon|animismo|animista|animo|animosidad|inanimado|des-animo|des-animado}}
=== คำอุทาน ===
{{tl-head|interjection|animál|b=+}}
# สัตว์!
#: {{syn|tl|hayop}}
=== คำสลับอักษร ===
* {{anagrams|tl|a=aailmn|alamin|Manila}}
{{C|tl|สัตว์|บุคคล}}
== ภาษาปาเปียเมนตู ==
=== รากศัพท์ ===
จาก{{der|pap|pt|animal}} และ{{der|pap|es|animal}}
=== คำนาม ===
{{head|pap|คำนาม}}
# [[สัตว์ร้าย]]
# [[สัตว์]]
== ภาษาโปรตุเกส ==
{{wp|pt:}}
{{picdic|image=Lightmatter chimp.jpg
|detail1=
{{picdicimg|pt|image=Eukaryota diversity 2.jpg|link=organismo}}
|detail2=
{{picdicimg|pt|image=Tiger in the water.jpg|link=mamífero}}
{{picdicimg|pt|image=Discus fish.jpg|link=peixe}}
{{picdicimg|pt|image=Notophthalmus viridescensPCCA20040816-3983A.jpg|link=anfíbio}}
{{picdicimg|pt|image=Tuatara.jpg|link=réptil}}
{{picdicimg|pt|image=Cyanocitta cristata FWS.jpg|link=ave}}
{{picdicimg|pt|image=Osmia rufa couple (aka).jpg|link=inseto}}}}
=== รากศัพท์ ===
{{lbor|pt|la|animal}}; {{doublet|pt|alimária}}
=== การออกเสียง ===
{{pt-IPA}}
* {{audio|pt|LL-Q5146 (por)-Santamarcanda-animal.wav|a=<<Portugal>> (<<Porto>>)}}
* {{rhymes|pt|al|q1=Portugal|aw|q2=Brazil|s=3}}
* {{hyphenation|pt|a|ni|mal}}
=== คำคุณศัพท์ ===
{{pt-adj|sup=+abs}}
# {{lb|pt|biology}} [[ที่]][[เกี่ยว]][[กับ]][[สัตว์]]
#* {{quote-book|pt|year=2000|author=Julio S. Inglez de Sousa; et al|title=Enciclopédia agrícola brasileira: E-H|publisher=Editora da Universidade de São Paulo|pageurl=https://books.google.com/books?id=Pydx4Jb_4-EC&pg=PP227&dq=%22animal%22|page=225
|passage=Em anatomia '''animal''' o termo é de uso muito comum, {{...}}|t=The term is very commonly used in '''animal''' anatomy, {{...}}}}
# {{lb|pt|derogatory|ใช้กับคน}} [[ดุร้าย]] {{gloss|ไร้สติ, ไร้เหตุผล}}
# {{lb|pt|Brazil|colloquial}} [[เท่]]; [[สุดยอด]]
#* {{quote-book|pt|year=2015|author=Juliana Rosenthal K.|title=Save the Day|publisher=Buqui|pageurl=https://books.google.com/books?id=CWUACwAAQBAJ&pg=PT52&dq=%22animal%22|page=52
|passage=É, tava '''animal''' mesmo — Bia mal consegue falar.|t=Yeah, it really was '''wild''' — Bia can barely speak.}}
=== คำนาม ===
{{pt-noun|m}}
# {{lb|pt|biology}} [[สัตว์]]
#* {{quote-book|pt|year=2010|author=João José da Costa|title=Fábulas do jeito que só vovô sabia contar|pageurl=http://books.google.com.br/books?id=VEtMBQAAQBAJ&pg=PA38#v=onepage&q&f=false|page=38|publisher=Clube de Autores|text=Quando a flor do abacateiro recebe o pólen de outra flor de abacateiro trazido pelas abelhas, beija-flores, borboletas e outros '''animais''', ela fica polinizada e começa a gerar um fruto, que é o abacate.}}
#* {{quote-book|pt|year=2020|author=Petrônio Braz|title=Léxico dos Gerais|publisher=Chiado Books|pageurl=https://books.google.com/books?id=HV3qDwAAQBAJ&pg=PT481&dq=%22animais%22|page=481
|passage=Primatas — '''Animais''' mamíferos, da ordem Primata, que compreende os macacos, antropóides e o homem.|t=Primates — Mammalian '''animals''', of the order Primata, which comprises monkeys/apes, anthropoids and man.}}
# {{lb|pt|non-scientific usage}} สัตว์ {{gloss|ไม่รวมถึงมนุษย์, โดยเฉพาะหมายถึงสัตว์มีกระดูกสันหลัง}}
#* '''2007''', Daniela Ikawa, ''Valor humano intrínseco e redistribuição social'' in '''2007''', Flávia Piovesan, Daniela Ikawa, ''Direitos Humanos: Fundamento, Proteção e Implementação'', volume 2, Juruá Editora, [https://books.google.com/books?id=tP3eeZRM2icC&pg=PA44&dq=%22animais%22 page 44]:
#*: {{quote|pt|Separar os dois grupos — humanos e '''animais''' requereria, dentro dos limites da teoria relativa à dor e ao sofrimento, {{...}}|Separating the two groups — humans and '''animals''' would require, within the limits of the theory relating to pain and suffering, {{...}}}}
#: {{syn|pt|besta|bicho}}
# {{lb|pt|colloquial}} [[คน]][[โง่]]; คน[[บ้า]]; คน[[ปัญญาอ่อน]]
#* {{quote-book|pt|year=1979|author=Wilson Bacelar de Oliveira|title=Os meus fantasmas|publisher=Editora Comunicação|pageurl=https://books.google.com/books?id=gpctAAAAYAAJ&q=%22animal%22|page=490
|passage=Escute aqui, seu '''animal''', então você brigou com o companheiro?|t=Listen up, you '''dumbass''', so you fought with [your] mate?}}
#: {{syn|pt|idiota|retardado|burro|imbecil|débil mental|besta}}
# {{lb|pt|colloquial}} [[คน]][[ที่]][[ดุร้าย]][[เหมือน]]สัตว์
#* {{quote-book|pt|year=2007|author=Creso Balduíno|title=O verso do ser|publisher=Editora Revan|pageurl=https://books.google.com/books?id=84xlAAAAMAAJ&dq=%22animal%22|page=170
|passage=Josuel é um '''animal''' repulsivo, uma besta humana.|t=Josuel is a repulsive '''beast''', a human beast.}}
#: {{syn|pt|monstro}}
==== ลูกคำ ====
{{col|pt
|animal de estimação
|animalizar
|animalzão
|animalzinho
|animal selvagem
|animal doméstico
|animal de criação}}
=== อ่านเพิ่ม ===
* {{R:pt:Aulete}}
* {{R:pt:Priberam}}
== ภาษาฝรั่งเศส ==
=== รากศัพท์ ===
{{bor+|fr|la|animal}}; เทียบคำร่วมรากโบราณ {{doublet|fr|aumaille|notext=1}} และรูปแบบอื่น {{doublet|fr|armaille|notext=1}}, ซึ่งทั้งคู่มาจากพหูพจน์เพศกลางภาษาละติน {{m|la|animālia}}
=== การออกเสียง ===
* {{fr-IPA}}
* {{audio|fr|Fr-un animal-fr.ogg|(un animal)}}
* {{audio|fr|Fr-animal.ogg}}
* {{audio|fr|LL-Q150 (fra)-DSwissK-animal.wav|a=<<Switzerland>> (<<Valais>>)}}
* {{audio|fr|LL-Q150 (fra)-GrandCelinien-animal.wav|a=<<France>> (<<Paris>>)}}
* {{audio|fr|LL-Q150 (fra)-Lepticed7-animal.wav|a=<<France>> (<<Toulouse>>)}}
* {{audio|fr|LL-Q150 (fra)-LoquaxFR-animal.wav|a=<<France>> (<<Vosges>>)}}
* {{audio|fr|LL-Q150 (fra)-Lyokoï-animal.wav|a=<<France>> (<<Lyon>>)}}
* {{audio|fr|LL-Q150 (fra)-Mecanautes-animal.wav|a=France}}
* {{audio|fr|LL-Q150 (fra)-Opsylac-animal.wav|a=<<France>> (<<Grenoble>>)}}
* {{audio|fr|LL-Q150 (fra)-Penegal-animal.wav|a=<<France>> (<<Vosges>>)}}
* {{audio|fr|LL-Q150 (fra)-Poslovitch-animal.wav|a=<<France>> (<<Vosges>>)}}
* {{audio|fr|LL-Q150 (fra)-T. Le Berre-animal.wav|a=<<France>> (<<Hérault>>)}}
* {{audio|fr|LL-Q150 (fra)-Touam-animal.wav|a=<<France>> (<<Saint-Étienne>>)}}
* {{audio|fr|LL-Q150 (fra)-WikiLucas00-animal.wav|a=<<France>> (<<Lyon>>)}}
* {{audio|fr|LL-Q150 (fra)-X-Javier-animal.wav|a=<<France>> (<<Massy>>)}}
* {{homophones|fr|animale|animales}}
=== คำนาม ===
{{fr-noun|m}}
# [[สัตว์]]
#: {{syn|fr|bête|bestiole}}
==== ลูกคำ ====
{{col3|fr
|animal de compagnie
|animal domestique
|animalerie
|droits des animaux
|règne animal
|reine des animaux
|roi des animaux
}}
==== คำสืบทอด ====
* {{desc|ht|animal}}
=== คำคุณศัพท์ ===
{{fr-adj}}
# [[ที่]][[เกี่ยว]][[กับ]]สัตว์
#: {{syn|fr|bestial}}
#: {{ant|fr|végétal}}
=== อ่านเพิ่ม ===
* {{R:fr:TLFi}}
=== คำสลับอักษร ===
* {{l|fr|lamina}}
{{C|fr|สัตว์}}
== ภาษาฝรั่งเศสกลาง ==
=== คำนาม ===
{{frm-noun|m|animaux|pl2=animaulx}}
# [[สัตว์]]
#: {{syn|frm|beste}}
== ภาษาโรมานช์ ==
=== รากศัพท์ ===
{{bor+|rm|la|animal}}
=== คำนาม ===
{{rm-noun|m}}
# {{lb|rm|Rumantsch Grischun|Sursilvan|Sutsilvan|Surmiran|Vallader}} [[สัตว์]]
==== คำพ้องความ ====
* {{qualifier|Rumantsch Grischun|Sursilvan|Surmiran}} {{l|rm|biestg}}
* {{qualifier|Rumantsch Grischun|Sutsilvan}} {{l|rm|bestga}}
* {{qualifier|Sursilvan}} {{l|rm|tier}}, {{l|rm|bestia}}
* {{qualifier|Puter|Vallader}} {{l|rm|bes-cha}}
{{C|rm|สัตว์}}
== ภาษาโรมาเนีย ==
=== รูปแบบอื่น ===
* {{alt|ro|анимал||new cyrl}}
=== รากศัพท์ ===
{{bor+|ro|fr|animal}}, จาก{{der|ro|la|animal}}; {{dbt|ro|nămaie}}
=== การออกเสียง ===
* {{IPA|ro|/a.niˈmal/}}
* {{audio|ro|LL-Q7913 (ron)-Andreea Teodoraa-animal.wav|q=female voice}}
* {{rhyme|ro|al|s=3}}
* {{hyph|ro|a|ni|mal}}
=== คำคุณศัพท์ ===
{{ro-adj|4}}
# [[ที่]][[เกี่ยว]][[กับ]][[สัตว์]], ที[[คล้าย]]สัตว์
# [[ดุร้าย]]
==== การผันรูป ====
{{ro-adj-4}}
=== คำกริยาวิเศษณ์ ===
{{ro-adv}}
# [[อย่าง]]ดุร้าย
=== คำนาม ===
{{ro-noun|n|animale}}
# [[สัตว์]]
==== การผันรูป ====
{{ro-noun-n}}
=== อ่านเพิ่ม ===
* {{R:DEX}}
== ภาษาละติน ==
=== รากศัพท์ ===
{{etymon|la|title=animāl|:nom|animālis|tree=1}}
[[substantivation|Substantivation]] of [[apocope|apocopated]] {{m|la|animāle}}, กรรตุการกเพศกลางเอกพจน์ของ {{m|la|animālis||สิ่งมีชีวิต}}; ดูที่ {{affix|la|-al}}
=== การออกเสียง ===
* {{la-IPA|animal}}
=== คำนาม ===
{{la-noun|animal<3>}}
# [[สัตว์]]
# [[สิ่งมีชีวิต]]
==== การผันรูป ====
{{la-ndecl|animal<3>}}
==== คำพ้องความ ====
* {{l|la|bestia}}
==== คำเกี่ยวข้อง ====
{{col3
|la|anima
|animō
|animus
}}
==== คำสืบทอด ====
{{top3}}
* Balkan Romance:
** {{desc|rup|nãmalj|nãmaljiu}}
** {{desc|ruq|nămal'}}
** {{desc|ro|nămaie}}
* {{desc|co|animale}}
* {{desc|dlm|animuol|animul}}
* {{desc|frp|armalye}}
* {{desc|fro|almaille}}
** {{desc|frm|almaille}}
*** {{desc|fr|aumaille|armaille}}
* {{desc|fur|nemâl}}
* {{desc|it|animale}}
** {{desc|mt|annimal|bor=1}}
* {{desc|roa-opt|almallo}}
** {{desc|gl|almallo}}
** {{desc|pt|almalho|alimanha|alimária}}
* {{desc|rgn|animêl}}
* {{desc|scn|armali|armalu}}
* {{desc|es|alimaña|almaje}}
* {{desc|roa-tar|anemale}}
* {{desc|vec|animal|anemal}}
Borrowings:
* {{desc|an|animal|bor=1}}
* {{desc|ast|animal|bor=1}}
* {{desc|eu|animalia|bor=1}}
* {{desc|cel-bry-pro|*anɨβ̃ėl|bor=1}}
** {{desc|br|aneval}}
** {{desc|cnx|enevalles|g=p}}
*** {{desc|kw|eneval}}
** {{desc|wlm|anyueyl}}
*** {{desc|cy|anifail}}
* {{desc|ca|animal|bor=1}}
* {{desc|frp|animal|bor=1}}
* {{desc|fur|animâl|bor=1}}
* {{desc|gl|animal|bor=1}}
* {{desc|io|animalo|bor=1}} {{q|also from various others}}
* {{desc|ia|animal|bor=1}}
* {{desc|mwl|animal|bor=1}}
* {{desc|oc|animal|bor=1}}
* {{desc|fro|animal|bor=1}}
** {{desc|frm|animal}}
*** {{desc|fr|animal}}
**** {{desc|ht|animal}}
**** {{desc|ro|animal|bor=1}}
** {{desc|bor=1|enm|animal|animale}}
*** {{desc|en|animal}}
**** {{desc|ceb|animal|bor=1}}
**** {{desc|eo|animalo|bor=1}} {{q|also from French}}
**** {{desc|tpi|animal|bor=1}}
*** {{desc|sco|ainimal}}
** {{desc|nrf|animâ}} {{qualifier|France}}, {{l|nrf|annima}} {{qualifier|Jersey}}
* {{desc|pt|animal|bor=1}}
** {{desc|kea|animal}}
** {{desc|pap|animal}}
* {{desc|rm|animal|bor=1}}
* {{desc|es|animal|bor=1}}
{{bottom}}
=== อ้างอิง ===
* {{R:la:L&S}}
* {{R:la:Elementary Lewis}}
* {{R:la:du Cange}}
* {{R:la:Gaffiot}}
* {{R:la:M&A}}
{{C|la|สัตววิทยา}}
== ภาษาสเปน ==
=== รากศัพท์ ===
{{bor+|es|la|animal}}; ดูเพิ่ม คำร่วมรากที่สืบทอดมา {{doublet|es|alimaña|notext=1}}
=== การออกเสียง ===
{{es-pr|+<audio:LL-Q1321 (spa)-Millars-animal.wav<a:Spain>>}}
=== คำคุณศัพท์ ===
{{es-adj}}
# [[ที่]][[เกี่ยว]][[กับ]][[สัตว์]]
=== คำนาม ===
{{es-noun|m}}
# {{lb|es|biology}} [[สัตว์]]
==== ลูกคำ ====
{{col|es
|animal de carga
|animal de compañía
|animal doméstico
|animal salvaje
|animal terrestre
|animalada
|animalero
|animalesco
|animalillo
|animalismo
|animalista
|animalístico
|animalito
|animalizar
|animalmente
|animalucho
|derechos de los animales
|protectora de animales
}}
==== คำเกี่ยวข้อง ====
{{col|es
|animálculo
|animalidad}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
=== คำสลับอักษร ===
* {{anagrams|es|a=aailmn|lámina|lamina}}
{{C|es|สัตว์}}
== ภาษาอังกฤษ ==
=== การออกเสียง ===
* {{IPA|en|/ˈæn.ᵻ.məl/}}
** {{audio|en|en-us-animal.ogg|a=US}}
* {{IPA|en|a=Indic|/ˈæ.nɪ.məl/|/ə.nɪ.məl/|[æː.nɪ.mɐl]|[ɐ.nɪ.mɐl]}}
* {{rhymes|en|ɪməl|s=3}}
* {{hyph|en|an|i|mal}}
=== รากศัพท์ 1 ===
{{etymon|en|id=noun|:inh|enm:animal<id:noun>|tree=1}}
{{root|en|ine-pro|*h₂enh₁-}}
{{picdic|image=Lightmatter chimp.jpg
|detail1=
{{picdicimg|en|image=Eukaryota diversity 2.jpg|link=organism}}
|detail2=
{{picdicimg|en|image=Tiger in the water.jpg|link=mammal}}
{{picdicimg|en|image=Discus fish.jpg|link=fish}}
{{picdicimg|en|image=Notophthalmus viridescensPCCA20040816-3983A.jpg|link=amphibian}}
|detail3=
{{picdicimg|en|image=Tuatara.jpg|link=reptile}}
{{picdicimg|en|image=Cyanocitta cristata FWS.jpg|link=bird}}
{{picdicimg|en|image=Osmia rufa couple (aka).jpg|link=insect}}
}}
จาก{{inh|en|enm|animal}}, จาก{{der|en|fro|animal}}, จาก{{der|en|la|animal}}, การใช้เป็นคำนามของรูปคุณศัพท์ {{m|la|animāle}}, เพศกลางของ {{m|la|animālis}}, จาก{{m|la|anima|t=ลมหายใจ, วิญญาณ}}; แทนที่คำพื้นถิ่นในภาษาอังกฤษกลาง {{m|enm|deor|deor, der|สัตว์}} (ซึ่งเป็นรากของ{{noncog|en|deer}} [สมัยใหม่]; จาก{{cog|ang|dēor|t=สัตว์}}), {{cog|enm|reother|t=สัตว์, วัว}} (ซึ่งเป็นรากของ{{noncog|en|rother}}} [สมัยใหม่]; จาก{{cog|ang|hriþer|hrīþer, hrȳþer|t=วัว}})
==== คำนาม ====
{{en-noun}}
# {{senseid|en|Q729}}<!--any eukaryote of the kingdom Animalia--> {{lb|en|science}} [[สัตว์]], [[สิ่งมีชีวิต]]หลาย[[เซลล์]]ใด ๆ ใน[[อาณาจักร]] {{l|mul|Animalia}} ที่มัก[[เคลื่อนที่]]ได้ โดยที่เซลล์ของสิ่งมีชีวิตเหล่านี้ไม่มี[[ผนังเซลล์]]ที่แข็งแรง (ซึ่งแตกต่างจาก[[พืช]]และ[[เห็ดรา]]) และได้รับ[[พลังงา]]นจาก[[การกิน]]สิ่งมีชีวิตอื่น ๆ เท่านั้น (ซึ่งแตกต่างจากพืชอีกด้วย)
#: {{syn|en|creature}}
#: {{hypo|en|human|person}}
#: {{ux|en|Humans, like other '''animals''', need air to breathe and food to eat.}}
#* {{RQ:Browne Pseudodoxia Epidemica|edition=2nd|chapter=Of the Cameleon|page=133|passage=It cannot be denied it [the [[chameleon]]] is (if not the moſt of any) a very abſtemious '''animall''', and ſuch as by reaſon of its frigidity, paucity of bloud, and latitancy in the winter (about which time the obſervations are often made) will long ſubſist without a viſible ſuſtentation.}}
# {{senseid|en|any nonhuman member of the kingdom Animalia}} {{lb|en|loosely}} สัตว์, โดยไม่รวมถึง[[มนุษย์]]
#: {{syn|en|beast}}
#: {{cot|en|human|person}}
# {{lb|en|loosely}} สัตว์ชั้นสูง; สัตว์ที่มีความเกี่ยวข้องกับมนุษย์
#: {{usex|en|When he's hungry my toddler opens his mouth like an '''animal''' instead of asking us to feed him.}}
## {{senseid|en|any land-living nonhuman vertebrate}} {{lb|en|colloquial}} สัตว์[[สี่]][[เท้า]]; [[สัตว์มีกระดูกสันหลัง]]ที่ไม่ใช่มนุษย์ ที่อาศัยอยู่บนพื้นดิน
##* {{quote-journal|en|year=2013|month=July-August|author=w:Henry Petroski|title=[http://www.americanscientist.org/issues/pub/2013/4/geothermal-energy Geothermal Energy]|volume=101|issue=4|magazine=w:American Scientist|passage=Ancient nomads, wishing to ward off the evening chill and enjoy a meal around a campfire, had to collect wood and then spend time and effort coaxing the heat of friction out from between sticks to kindle a flame. With more settled people, '''animals''' were harnessed to capstans or caged in treadmills to turn grist into meal.}}
## [[สัตว์เลือดอุ่น]]; [[สัตว์เลี้ยงลูกด้วยน้ำนม]]หรือ[[นก]]
## สัตว์เลี้ยงลูกด้วยน้ำนมที่ไม่ใช่มนุษย์
##: {{ux|en|I spent my summer studying the '''animals''' and birds of the two islands.}}
##* {{quote-book|en|year=1971|author=Gwen White|title=Antique Toys And Their Background|page=54|text=Birds are as popular as '''animals''' in the toy kingdom, especially pigeons, owls and domestic hens.}}
##* {{RQ:NYT|author=Robert Ito|title=The Makers of ‘BoJack Horseman’ Take Family Matters by the Reins|date=2025-08-21|url=https://www.nytimes.com/2025/08/21/arts/television/long-story-short-raphael-bob-waksberg-lisa-hanawalt-bojack.html|passage=“Long Story Short,” a new animated series from Raphael Bob-Waksberg with art by Lisa Hanawalt, trades the talking '''animals''' for kvetching humans.|archiveurl=https://archive.ph/FJNih|archivedate=2025-08-21}}
# {{senseid|en|person who behaves wildly}} {{lb|en|figuratively}} คนที่ทำตัวอย่างสัตว์ป่า; คนดุร้าย โหดร้าย หรือไร้มนุษยธรรม
#: {{syn|en|brute|monster|savage}}
#: {{ux|en|My students are '''animals'''.}}
#* {{quote-song|en|lyricist=w:Finneas O'Connell; w:Billie Eilish O'Connell|title=Bad Guy|artist=Billie Eilish|year=2019|text=Own me, I'll let you play the role<br>I'll be your '''animal'''}}
#* {{quote-journal|en-GB|author=Rachel Hall|quotee=Jodie White|title=‘I’ve never seen owt like it’: England fans in Benidorm in high spirits before Euro final|work=The Guardian|date=2024-07-14|url=https://www.theguardian.com/football/article/2024/jul/14/ive-never-seen-owt-like-it-england-fans-in-benidorm-in-high-spirits-before-euro-final|issn=0261-3077|passage=She speculated that things could deteriorate later: “I think they’re scared of the English, which is fair; we are '''animals'''.”}}
# {{senseid|en|person of a particular type specified}} {{lb|en|informal}} คนที่มีลักษณะเฉพาะเจาะจง ซึ่งขยายความโดยคำคุณศัพท์ที่ประกอบ
#: {{ux|en|He's a political '''animal'''.}}
# {{senseid|en|matter or thing}} {{lb|en|informal}} [[เรื่อง]], [[สิ่ง]]
#: {{co|en|a whole different '''animal'''|คนละเรื่องเดียวกัน}}
#: {{co|en|no such '''animal'''|ไม่มีอะไรแบบนั้น}}
===== คำลูกกลุ่ม =====
* ดูที่ [[อรรถาภิธาน:animal]]
===== ลูกคำ =====
{{col|en|advice animal
|ambassador animal
|animal activist
|animal-assisted therapy
|animal black
|animal cabinet
|animal charcoal
|animal companion
|animal control officer
|animal cracker
|animal dentistry
|animal dye
|animalesque
|animal experimentation
|animal fat
|animal feed|animal African trypanosomiasis|animal coat|animal trypanosomiasis
|animal flower
|animal food
|animal fries
|animal heat
|animalhood
|animal house|animal print|animal hoarding|animal soul|animal starch|animal unit
|animal husbandry
|animalian
|animalicide|robo-animal
|animalish
|animalism
|animalist
|animalistic
|animalivore
|animalivorous|Animal Jammer
|animalkind
|animal kingdom
|animal liberation
|animal-like
|animally
|animal magnetism
|animaloid
|animal product
|animal protein factor
|animal registry
|animal reminder disgust
|animal rights
|animal sanctuary
|animal science
|animal shelter
|animal tester
|animal testing
|animal welfare
|animal welfarist
|anipal
|antianimal
|assistance animal
|balloon animal
|companimal
|companion animal
|compound animal
|draft animal
|draught animal
|eat like an animal
|emotional support animal
|exploding animal
|farm animal
|funny animal
|go the entire animal
|intensive animal farming
|interanimal
|intraanimal
|koranimal
|manimal
|microanimal
|moss animal
|multianimal
|nonanimal
|pack animal
|party animal
|planimal
|plant-animal
|plush animal
|political animal
|power animal
|rare animal
|scape-animal
|service animal
|Set animal
|small animal
|spirit animal
|stock animal
|stuffed animal
|therapy animal
|Typhonian animal
|Typhonic animal
|wereanimal
|wheel animal
|wild animal
|working animal
|zoo animal
}}
===== คำเกี่ยวข้อง =====
{{col4
|en|anima
|animalcule
|mul:Animalia
|animalier
|animate
|animus
}}
===== คำสืบทอด =====
{{top3}}
* {{desc|bi|anamol}}
* {{desc|tpi|animal}}
* {{desc|eo|animalo|bor=1}}
* {{desc|io|animalo|bor=1}}
* {{desc|vo|nim|bor=1}}
{{bottom}}
=== รากศัพท์ 2 ===
{{etymon|en|id=adjective|:inh|enm:animal<id:adjective>|tree=1}}
จาก{{inh|en|enm|animal}}, จาก{{der|en|la|animālis}}, จาก {{m|la|anima|t=ลมหายใจ, วิญญาณ}} หรือ {{m|la|animus}}; เดิมทีคำนี้แตกต่างจากคำนาม แต่ต่อมาได้กลายเป็นคำนามที่ใช้ขยายความ และปัจจุบันแทบแยกไม่ออกแล้ว
==== คำคุณศัพท์ ====
{{en-adj|-}}
# ที่เกี่ยวกับสัตว์
#: {{syn|en|beastly|bestial}}
#: {{cot|en|vegetal}}
#: {{co|en|'''animal''' instincts}}
#* {{quote-book|en|author=w:William Cowper|chapter=To the Rev. [[w:William Bull (minister)|William Bull]]|title=Private Correspondence of William Cowper, Esq. with Several of His Most Intimate Friends.{{nb...|Now First Published from the Originals in the Possession of His Kinsman, John Johnson, LL. D. Rector of Yaxham with Welborne in Norfolk.}}|volume=I|location=London|publisher={{...|Printed for}} {{w|Henry Colburn}},{{nb...|New Burlington Street}}, and [[w:Simpkin & Marshall|Simpkin and Marshall]],{{nb...|Stationers’ Hall Court.}}|date=3 June 1783|year_published=1824|page=266|pageurl=https://archive.org/details/privatecorrespon01cowpuoft/page/266/mode/1up|passage=The season has been most unfavourable to '''animal''' life; and I, who am merely '''animal''', have suffered much by it.}}
#* {{quote-book|en|author=[[w:William Martin (naturalist)|William Martin]]|title=Outlines of an Attempt to Establish a Knowledge of Extraneous Fossils, on Scientific Principles.{{nb...|In Two Parts.}}|location=Macclesfield, Cheshire|publisher={{...|Printed by}} J. Wilson. Sold by the Author,{{nb...|Buxton}}; J. White,{{nb...|Fleet-Street}}, and [[w:Longman|Longman, Hurst, Rees, and Orme]],{{nb...|London.}}|year=1809|page=141|pageurl=https://archive.org/details/outlinesofattemp00martrich/page/141/mode/1up|passage={{nb...|nospace=1}}—according to Sanssure, Abbé Fortis, Bruckenman, Jameson, Dr. Richardson, &c. &c. both '''animal''' and vegetal remains have been detected in Basalt and Wacke.}}
#* {{quote-book|en|author=[[w:Lena, Lady Login|[Lena,] Lady Login]]|chapter=Lucknow|title=Sir John Login and Duleep Singh|location=London|publisher={{w|W. H. Allen & Co.}},{{nb...|13, Waterloo Place, S.W.}}|year=1890|page=78|pageurl=https://archive.org/details/in.ernet.dli.2015.208626/page/n102/mode/1up|passage=The body was covered with soft hair, and though undoubtedly human, it was very '''animal''' in its instincts and ways.}}
#* {{quote-book|en|author=[[w:Wilhelm Max Müller|W[ilhelm] Max Müller]]|chapter=[Egyptian Mythology] Worship of Animals and Men|editors=w:Louis Herbert Gray; w:George Foot Moore|title=[[w:The Mythology of All Races|The Mythology of All Races{{nb...|In Thirteen Volumes}}]]|volume=!XII (Egyptian; Indo-Chinese)|location=Boston, Mass.|publisher=Marshall Jones Company|year=1918|page=167|pageurl=https://archive.org/details/in.ernet.dli.2015.282278/page/n188/mode/1up|passage=The unsatisfactory material at our command, however, renders it difficult to determine why we cannot prove a worship of a living incarnation for every deity who is represented on the monuments in a form either wholly or partially '''animal'''. We must wonder why, for example, the sacred hawk or hawks of Horus at Edfu (who never has human form) are scarcely mentioned.}}
#* {{RQ:Lawrence England|page=243|passage=He looked down at the tangled wet hair, the wild, bare, '''animal''' shoulders.}}
#* {{quote-book|en|author=w:Jeet Thayil|title=[[w:Narcopolis (novel)|Narcopolis]]|location=New York, N.Y.|publisher=[[w:Penguin Group|The Penguin Press]]|year=2012|page=216|pageurl=https://archive.org/details/narcopolisanovel00thay/page/216/mode/1up|isbn=978-1-59420-330-5|passage=I thought: if pain is the thing shared by all living creatures, then I’m no longer human or '''animal''' or vegetal; I am unplugged from the tick of metabolism; I am mineral.}}
#* {{quote-book|en|author=Joseph M. Luguya|chapter=Part 1: The Demented Scholar|title=Humans: The Untold Story of Adam and Eve and their Descendants|volume=!one (The Thesis)|location=Silver Spring, Md.|publisher=Original Books|month=August|year=2015|page=46|pageurl=https://archive.org/details/humansuntoldstor0000lugu_k4o6/page/46/mode/1up|isbn=978-1517447847|passage=In any case, the argument the inhabitants of these parts would have advanced as their strongest one against the so-called chastity belt would, of course, have been that living species, whether '''animal''' or vegetative, were made the way they were for an obvious reason.}}
# [[ดิบ]], [[เถื่อน]], [[ไร้]][[ข้อจำกัด]][[ทาง]][[สังคม]]
#: {{syn|en|animalistic|beastly|bestial|untamed|wild}}
#: {{co|en|'''animal''' passions}}
#* {{quote-web|en|url=https://www.theatlantic.com/entertainment/archive/2016/08/glory-britney-spears-review-hookups-grace/497486/|title=Britney Spears Finds Grace in the Hook-Up on 'Glory'|work=w:The Atlantic|date=2016-08-26|author=Spencer Kornhaber|passage=But the line also distills pop culture’s big commandment about sex to its '''animal''' essence: If you’re not screwing somebody, you’re nobody.|archiveurl=https://web.archive.org/web/20160929035100/https://www.theatlantic.com/entertainment/archive/2016/08/glory-britney-spears-review-hookups-grace/497486/}}
# ที่เกี่ยวกับ[[จิต]]หรือ[[วิญญาณ]]; ที่เกี่ยวกับ[[ความรู้สึก]]หรือ[[ประสาทสัมผัส]]
#* {{quote-text|en|year=2003|author=Roy Porter|title=Flesh in the Age of Reason|page=47|publisher=Penguin|year_published=2004
|passage=To explain what activated the flesh, ‘'''animal''' spirits’ were posited, superfine fluids which shuttled between the mind and the vitals, conveying messages and motion.}}
# {{lb|en|slang|Ireland}} [[ยอดเยี่ยม]]
===== ลูกคำ =====
{{col3|en
|animal–industrial complex
|animalize
|animally
|animalness
|animal pole
|animal spirits
|humanimal
|nonanimal
|semianimal
|superanimal
|vegetoanimal
}}
=== ดูเพิ่ม ===
* [[ภาคผนวก:Animals|Wiktionary appendix of terms relating to animals]]
=== อ่านเพิ่ม ===
* {{pedia}}
* {{R:Century 1911}}
* {{R:OneLook}}
* {{R:Keywords 21st}}
* {{R:Britannica Dictionary}}
* {{R:Ozdic}}
* {{R:WordReference Collocations}}
=== คำสลับอักษร ===
* {{anagrams|en|a=aailmn|maalin|Almain|lamian|aminal|Manila|lamina|al-Amin|Milana|Alamin|almain|Malian|manila}}
{{cln|en|autohyponyms}}
{{C|en|สัตว์}}
== ภาษาอังกฤษกลาง ==
=== การออกเสียง ===
* {{IPA|enm|/aniˈmaːl/|/aˈnimal/}}
=== รากศัพท์ 1 ===
{{etymon|enm|id=noun|:bor|fro:animal<ety:der<la:animal>>}}
{{bor+|enm|fro|animal}}, จาก{{der|enm|la|animal}}
==== รูปแบบอื่น ====
* {{alter|enm|animale}}
==== คำนาม ====
{{enm-noun|animales}}
# [[สัตว์]] (รวมถึงมนุษย์)
===== คำสืบทอด =====
* {{desc|en|animal}} {{see desc}}
* {{desc|sco|ainimal}}
===== อ้างอิง =====
* {{R:MED Online|entry=animāl |pos=n|id=MED1656|accessdate=2019-01-16}}
=== รากศัพท์ 2 ===
{{etymon|enm|id=adjective|:bor|la:animālis}}
{{bor+|enm|la|animālis}}
==== รูปแบบอื่น ====
* {{alter|enm|animale|animall|anymal|anymall}}
==== คำคุณศัพท์ ====
{{enm-adj}}
# ที่เกี่ยวกับ[[จิต]]หรือ[[วิญญาณ]]ของ[[สิ่งมีชีวิต]] (เช่น [[ความรู้สึก]] หรือ[[ความฉลาด]])
===== คำสืบทอด =====
* {{desc|en|animal}}
===== อ้างอิง =====
* {{R:MED Online|entry=animāl |pos=adj|id=MED1657|accessdate=2019-01-16}}
{{C|enm|สัตว์}}
== ภาษาอัสตูเรียส ==
{{wp|ast:}}
=== รากศัพท์ ===
{{bor+|ast|la|animal}}
=== การออกเสียง ===
{{ast-pr}}
=== คำคุณศัพท์ ===
{{ast-adj-mf|pl=animales}}
# [[ที่]][[เกี่ยว]][[กับ]]สัตว์
=== คำนาม ===
{{ast-noun|m|animales}}
# [[สัตว์]]
=== อ่านเพิ่ม ===
* {{R:ast:DGLA}}
* {{R:ast:DALLA}}
{{C|ast|สัตว์}}
== ภาษาอินเทอร์ลิงกวา ==
=== การออกเสียง ===
* {{IPA|ia|/a.niˈmal/}}
=== คำนาม ===
{{ia-noun|es}}
# [[สัตว์]]
== ภาษาอีโลกาโน ==
=== รากศัพท์ ===
{{bor+|ilo|es|animal}}
=== การออกเสียง ===
* {{ilo-IPA|animál}}
* {{hyph|ilo|a|ni|mal}}
=== คำนาม ===
{{ilo-noun|animál}}
# [[สัตว์]]
#: {{syn|ilo|ayup}}
sn8yezkruhcwbkxrek53p9oc29bafjy
do
0
7342
5754488
5689955
2026-08-06T07:42:37Z
OctraBot
3198
update template use
5754488
wikitext
text/x-wiki
{{also/auto}}
== ภาษาญี่ปุ่น ==
=== การถอดเป็นอักษรโรมัน ===
{{ja-romaji}}
# {{Latn-def|ja|syllable|ど|ド|do}}
==ภาษาโปรตุเกส==
===รูปแบบอื่น===
* {{alter|pt|d'o}} {{qualifier|ล้าสมัย}}
===รากศัพท์===
{{etymon|pt|id=of the|:inh|roa-opt:do<id:of the>}}
{{inh+|pt|roa-opt|do}}, จาก {{m|roa-opt|de||ของ, จาก}} + {{m|roa-opt|o||ตัวกำหนด}}; เหมือนกับ{{cog|gl|do}}, {{cog|es|del}}, {{cog|fr|du}}
===การออกเสียง===
{{pt-IPA}}
* {{IPA|pt|/dø/|a=Madeira}}
* {{hyph|pt|do}}
===รูปหดย่อ===
{{head|pt|รูปหดย่อ|g=m-s|plural|dos|feminine|da|feminine plural|das}}
# {{senseid|pt|de o}} {{contraction of|pt|[[de]] [[o]]||ของ, จาก {{q|ใช้กับคำนามที่เป็นเอกพจน์และเพศชาย}}}}
== ภาษาอะตง ==
=== รากศัพท์ ===
{{bor+|aot|hi|दो}}
=== การออกเสียง ===
* {{IPA|aot|/do/}}
=== เลข ===
{{aot-num|দো}}
# [[สอง]]
==== คำพ้องความ ====
* {{l|aot|ni}}
* {{l|aot|rongni}}
* {{l|aot|tu}}
== ภาษาอังกฤษ ==
===การออกเสียง===
*{{IPA|en|/ˈdu/}}
=== คำกริยา ===
{{en-verb|does|doing|did|done}} (ดู)
# [[ทำ]]
#: {{ux|en|Why are you '''doing''' this?|คุณทำอย่างนี้ทำไม}}
#: {{ux|en|He [[told]] me I shouldn't '''do''' anything.|เขาบอกว่าฉันไม่ควรทำอะไรเลย}}
== ภาษาเอสเปรันโต ==
=== การออกเสียง ===
{{eo-pr}}
=== รากศัพท์ 1 ===
==== คำนาม ====
{{eo-head}}
# {{Latn-def|eo|name|D|d}}
===== ดูเพิ่ม =====
* {{รายชื่อ:ชื่อตัวอักษรในอักษรละติน/eo}}
=== รากศัพท์ 2 ===
จาก{{der|eo|fr|donc}}, เป็นไปได้ว่าผ่าน[[การกร่อนต้นคำ]]ของ{{der|eo|la|ad}} {{m|la|tunc}} (ดูเพิ่มที่ {{m|fr|adonc}}); เทียบ{{cog|it|dunque}}, {{cog|ro|atunci}}, {{cog|es|entonces}}
==== คำกริยาวิเศษณ์ ====
{{eo-adv}}
# [[ดังนั้น]], [[ต่อ]][[จาก]][[นั้น]], [[ฉะนั้น]], [[แท้]][[จริง]][[แล้ว]], [[อย่างไรก็ตาม]]
{{Universala Vortaro}}
{{eo BRO|1}}
616sk734wszby1shh6kbmq32xy86ry0
estrella
0
11363
5754483
5690322
2026-08-06T07:36:07Z
OctraBot
3198
update template use
5754483
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== รูปแบบอื่น ===
* {{alt|ca|estrela||Valencian}}
=== รากศัพท์ ===
{{bor+|ca|es|estrella}}
=== การออกเสียง ===
* {{ca-IPA|ê|cen=é,è|val=astrélla}}
* {{audio|ca|LL-Q7026 (cat)-Unjoanqualsevol-estrella.wav|a=Catalonia}}
=== คำนาม ===
{{ca-noun|f}}
# [[ดาว]], [[ดาวฤกษ์]]
#: {{syn|ca|estel}}
==== ลูกคำ ====
{{col|ca|estrellat}}
=== อ่านเพิ่ม ===
* {{R:ca:IEC2}}
* {{R:ca:DNV}}
* {{R:ca:DCVB}}
== ภาษาโปรตุเกส ==
=== รากศัพท์ 1 ===
==== คำนาม ====
{{pt-noun|f}}
# {{pt-pre-reform|estrela|pt=11|br=43}}
#* {{RQ:Vidas Seccas|chapter=Mudança|trans-chapter=A New Home|page=15|text=Saciado, cahiu de papo para cima, olhando as '''estrellas''', que vinham nascendo.|t=Satisfied, he fell belly-up, looking at the '''stars''', which were coming up.}}
=== รากศัพท์ 2 ===
==== คำกริยา ====
{{head|pt|รูปกริยา}}
# {{pt-verb form of|estrellar}}
== ภาษาเลออน ==
=== รูปแบบอื่น ===
* {{alter|roa-leo|estreilla}}
=== รากศัพท์ ===
{{inh+|roa-leo|la|stēlla}} (อาจรับผ่านภาษาถิ่นที่ยังไม่พิสูจน์ยืนยัน {{inh|roa-leo|la|*strēlla}})
=== คำนาม ===
{{head|roa-leo|คำนาม|g=f}}
# [[ดาว]], [[ดาวฤกษ์]]
=== อ้างอิง ===
* {{R:roa-leo:DCLLC}}
* {{R:roa-leo:Pallabreiru}}
== ภาษาสเปน ==
{{Wikiquote|lang=es}}
=== การออกเสียง ===
{{es-pr|+<audio:es-us-estrella.ogg<a:US>>}}
=== รากศัพท์ 1 ===
{{etymon|es|:inh|osp:estrella|tree=1}}
{{inh+|es|osp|estrella}} (เทียบ{{cog|gl|estrela}}, {{cog|pt|estrela}} และ{{cog|ca|estrella}}), จาก{{inh|es|la|stēlla}} (อาจรับผ่านภาษาถิ่นที่ยังไม่พิสูจน์ยืนยัน {{inh|es|la|*strēlla}}), จาก{{inh|es|itc-pro|*stērolā}}, จาก{{inh|es|ine-pro|*h₂stḗr}}
==== คำนาม ====
{{es-noun|f}}
# [[ดาว]], [[ดาวฤกษ์]]
#: {{syn|es|astro}}
# ดาว (รูปร่าง)
# [[ดารา]] (คนมีชื่อเสียงในการแสดง)
# {{lb|es|heraldiccharge}} ดาว ([[mullet]])
===== ลูกคำ =====
{{col|es
|anís estrella
|buena estrella
|Estrella
|estrella binaria
|estrella de Belén
|estrella de carbono
|estrella de David
|estrella de helio
|estrella de la tarde|estrella de los Andes
|estrella de mar
|estrella de neutrones
|estrellado
|estrella doble
|estrella enana
|estrella fija
|estrella fugaz
|estrella gigante
|estrella polar
|estrella porno
|estrellar<pos:v>
|estrella rezagada azul
|estrellita<pos:diminutive>
|estrellón
|ir de estrella<pos:v>
|lluvia de estrellas
|nacer con estrella<pos:v>
|pasto estrella
}}
===== คำเกี่ยวข้อง =====
{{col|es
|estelar
|estrellar
}}
===== คำสืบทอด =====
* {{desc|pap|strea}}
* {{desc|sc|streglia|bor=1}} {{q|Campidanese}}
* {{desc|tl|estrelya|bor=1}}
=== รากศัพท์ 2 ===
{{nonlemma}}
==== คำกริยา ====
{{head|es|รูปกริยา}}
# {{es-verb form of|estrellar}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
{{C|es|ดาราศาสตร์|Stars}}
== ภาษาสเปนเก่า ==
=== รูปแบบอื่น ===
* {{alt|osp|estrela|strela|strella}}
=== รากศัพท์ ===
{{etymon|osp|:inh|la:stēlla}}
จาก{{inh|osp|la|stēlla}} (อาจรับผ่านภาษาถิ่นที่ยังไม่พิสูจน์ยืนยัน {{inh|osp|la|*strēlla}}), แรกสุดจาก{{inh|osp|ine-pro|*h₂stḗr}}
=== การออกเสียง ===
* {{IPA|osp|/esˈtɾeʎa/}}
=== คำนาม ===
{{osp-noun|f}}
# [[ดาว]], [[ดาวฤกษ์]]
#* {{RQ:osp:Fazienda de Ultramar|5va<!--
-->|passage=Sõnaua q̃ el ſol. e la luna. E .xj. '''eſtrellas''' me adorauan.
|norm=Sonnava que el sol e la luna, e onze '''estrellas''' me adoravan.
|translation=I dreamt that the sun, then the moon, then eleven stars worshiped me.}}
#* {{RQ:osp:Fazienda de Ultramar|77vb<!--
-->|passage=alli luego guio el '''eſtrella''' alos tres reyes magos que uinjeron de orient.
|norm=allí luego guió el '''estrella''' a los tres Reyes Magos que vinieron de orient.
|translation=there the star later guided the Three Wise Men that came from the east.}}
==== ลูกคำ ====
{{col|osp
|estrellero<g:m>
}}
==== คำสืบทอด ====
* {{desc|lad|estreya}}
* {{desc|es|estrella}} {{see desc}}
=== อ้างอิง ===
* {{R:osp:VCM|245}}
== ภาษาอัสตูเรียส ==
=== รากศัพท์ ===
{{inh+|ast|la|stēlla}} (อาจรับผ่านภาษาถิ่นที่ยังไม่พิสูจน์ยืนยัน {{inh|ast|la|*strēlla}})
=== การออกเสียง ===
{{ast-pr}}
=== คำนาม ===
{{ast-noun|f|estrelles}}
# [[ดาว]], [[ดาวฤกษ์]]
==== ลูกคำ ====
{{col|ast|estrellalbu}}
=== อ่านเพิ่ม ===
* {{R:ast:DALLA}}
* {{R:ast:DGLA}}
a9yds8j77j047il7wak99qtysjocsjk
tú
0
11512
5754518
1878248
2026-08-06T08:40:45Z
OctraBot
3198
/* ภาษาจีนกลาง */ เก็บกวาด
5754518
wikitext
text/x-wiki
{{also/auto}}
==ภาษาสเปน==
===การออกเสียง===
* คำอ่านภาษาไทย: ตู
* {{es-IPA}}
==={{หน้าที่|es|สรรพนาม}}===
{{es-pronoun}}
# [[คุณ]] (คุ้นเคย)
====ดูเพิ่ม====
{{คำสรรพนามภาษาสเปน}}
== ภาษาจีนกลาง ==
=== การออกเสียง ===
* {{audio|cmn|Zh-tú.ogg}}
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|凃}}
# {{cmn-pinyin of|啙}}
# {{cmn-pinyin of|圖|圗|図|图|attn=1}}
# {{cmn-pinyin of|塗}}
# {{cmn-pinyin of|宊}}
# {{cmn-pinyin of|屠}}
# {{cmn-pinyin of|峹}}
# {{cmn-pinyin of|嵞}}
# {{cmn-pinyin of|庩}}
# {{cmn-pinyin of|徒}}
# {{cmn-pinyin of|怢}}
# {{cmn-pinyin of|悂}}
# {{cmn-pinyin of|捈}}
# {{cmn-pinyin of|揬}}
# {{cmn-pinyin of|梌}}
# {{cmn-pinyin of|涂}}
# {{cmn-pinyin of|湥}}
# {{cmn-pinyin of|潳}}
# {{cmn-pinyin of|瑹}}
# {{cmn-pinyin of|瘏}}
# {{cmn-pinyin of|稌}}
# {{cmn-pinyin of|突}}
# {{cmn-pinyin of|筡}}
# {{cmn-pinyin of|腞}}
# {{cmn-pinyin of|腯}}
# {{cmn-pinyin of|荼}}
# {{cmn-pinyin of|菞}}
# {{cmn-pinyin of|葖}}
# {{cmn-pinyin of|蒤}}
# {{cmn-pinyin of|跌}}
# {{cmn-pinyin of|跿}}
# {{cmn-pinyin of|途}}
# {{cmn-pinyin of|酴}}
# {{cmn-pinyin of|鈯}}
# {{cmn-pinyin of|鍎}}
# {{cmn-pinyin of|馟}}
# {{cmn-pinyin of|駼}}
# {{cmn-pinyin of|鵅}}
# {{cmn-pinyin of|鵚}}
# {{cmn-pinyin of|鶟}}
# {{cmn-pinyin of|鷋}}
# {{cmn-pinyin of|鷵}}
# {{cmn-pinyin of|鼵}}
ssuboo3v9bjcmjdzctszahq8ytrvnp8
5754519
5754518
2026-08-06T08:43:04Z
OctraBot
3198
/* ภาษาสเปน */ เก็บกวาด
5754519
wikitext
text/x-wiki
{{also/auto}}
== ภาษาสเปน ==
=== รากศัพท์ ===
{{inh+|es|la|tū}}, จาก{{inh|es|itc-pro|*tū}}, จาก{{inh|es|ine-pro|*túh₂}}; ร่วมเชื้อสายกับ{{cog|en|thou}}, {{cog|pt|tu}}, {{cog|ca|tu}}, {{cog|fr|tu}}, {{cog|it|tu}}, {{cog|ro|tu}}
=== การออกเสียง ===
{{es-pr|+<audio:Es-tú.ogg><hmp:tu>}}
=== คำสรรพนาม ===
{{head|es|คำสรรพนาม|disjunctive|ti|oblique|te|comitative|contigo|preposed possessive determiner|tu|possessive pronoun/postposed or standalone possessive determiner|tuyo}}
# {{lb|es|informal}} [[คุณ]] {{gl|คำสรรพนามบุรุษที่สองเอกพจน์}}
#: {{syn|es|vos<q:regional>|usted<q:regional or formal>|vuestra merced<q:archaic>|vusted<q:obsolete>}}
==== หมายเหตุการใช้ ====
* เมื่อมีคำสรรพนามหลายตัวอยู่ในประโยคเดียวกัน ถือว่าไม่สุภาพที่จะพูดคำสรรพนาม {{m|es|yo}} เป็นคำแรก จะต้องพูดเป็นคำสุดท้าย และต้องพูด '''tú''' ตามหลังคำสรรพนามบุรุษที่สาม (รวมถึง {{m|es|ti}} และ {{m|es|mí}} ด้วย)
** {{ux|es|Iremos Rosa, '''tú''' y yo.|inline=1|Rosa, '''you''' and I will go.}}
==== ลูกคำ ====
{{col|es
|tutear<pos:v>
|tuteo<g:m>
|¿tú y cuántos más?
|yo que tú
|a ti
}}
==== คำสืบทอด ====
* {{desc|cbk|tu}}
==== ดูเพิ่ม ====
* {{l|es|usted}}
{{es-personal pronouns}}
==== คำอุทาน ====
{{head|es|คำอุทาน}}
# {{lb|es|Central America|_|(particularly El Salvador)|Spain}} {{ng|คำหยาบ}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
* {{R:es:DEA}}
== ภาษาจีนกลาง ==
=== การออกเสียง ===
* {{audio|cmn|Zh-tú.ogg}}
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|凃}}
# {{cmn-pinyin of|啙}}
# {{cmn-pinyin of|圖|圗|図|图|attn=1}}
# {{cmn-pinyin of|塗}}
# {{cmn-pinyin of|宊}}
# {{cmn-pinyin of|屠}}
# {{cmn-pinyin of|峹}}
# {{cmn-pinyin of|嵞}}
# {{cmn-pinyin of|庩}}
# {{cmn-pinyin of|徒}}
# {{cmn-pinyin of|怢}}
# {{cmn-pinyin of|悂}}
# {{cmn-pinyin of|捈}}
# {{cmn-pinyin of|揬}}
# {{cmn-pinyin of|梌}}
# {{cmn-pinyin of|涂}}
# {{cmn-pinyin of|湥}}
# {{cmn-pinyin of|潳}}
# {{cmn-pinyin of|瑹}}
# {{cmn-pinyin of|瘏}}
# {{cmn-pinyin of|稌}}
# {{cmn-pinyin of|突}}
# {{cmn-pinyin of|筡}}
# {{cmn-pinyin of|腞}}
# {{cmn-pinyin of|腯}}
# {{cmn-pinyin of|荼}}
# {{cmn-pinyin of|菞}}
# {{cmn-pinyin of|葖}}
# {{cmn-pinyin of|蒤}}
# {{cmn-pinyin of|跌}}
# {{cmn-pinyin of|跿}}
# {{cmn-pinyin of|途}}
# {{cmn-pinyin of|酴}}
# {{cmn-pinyin of|鈯}}
# {{cmn-pinyin of|鍎}}
# {{cmn-pinyin of|馟}}
# {{cmn-pinyin of|駼}}
# {{cmn-pinyin of|鵅}}
# {{cmn-pinyin of|鵚}}
# {{cmn-pinyin of|鶟}}
# {{cmn-pinyin of|鷋}}
# {{cmn-pinyin of|鷵}}
# {{cmn-pinyin of|鼵}}
tbxuymh24vbgucfb2gr0q5npcgkicv3
5754520
5754519
2026-08-06T08:43:53Z
OctraBot
3198
/* คำสรรพนาม */
5754520
wikitext
text/x-wiki
{{also/auto}}
== ภาษาสเปน ==
=== รากศัพท์ ===
{{inh+|es|la|tū}}, จาก{{inh|es|itc-pro|*tū}}, จาก{{inh|es|ine-pro|*túh₂}}; ร่วมเชื้อสายกับ{{cog|en|thou}}, {{cog|pt|tu}}, {{cog|ca|tu}}, {{cog|fr|tu}}, {{cog|it|tu}}, {{cog|ro|tu}}
=== การออกเสียง ===
{{es-pr|+<audio:Es-tú.ogg><hmp:tu>}}
=== คำสรรพนาม ===
{{head|es|คำสรรพนาม|disjunctive|ti|oblique|te|comitative|contigo|preposed possessive determiner|tu|possessive pronoun/postposed or standalone possessive determiner|tuyo}}
# {{lb|es|informal}} [[คุณ]] {{gl|คำสรรพนามบุรุษที่สองเอกพจน์}}
#: {{syn|es|vos<q:เฉพาะภูมิภาค>|usted<q:เฉพาะภูมิภาคหรือทางการ>|vuestra merced<q:โบราณ>|vusted<q:เลิกใช้>}}
==== หมายเหตุการใช้ ====
* เมื่อมีคำสรรพนามหลายตัวอยู่ในประโยคเดียวกัน ถือว่าไม่สุภาพที่จะพูดคำสรรพนาม {{m|es|yo}} เป็นคำแรก จะต้องพูดเป็นคำสุดท้าย และต้องพูด '''tú''' ตามหลังคำสรรพนามบุรุษที่สาม (รวมถึง {{m|es|ti}} และ {{m|es|mí}} ด้วย)
** {{ux|es|Iremos Rosa, '''tú''' y yo.|inline=1|Rosa, '''you''' and I will go.}}
==== ลูกคำ ====
{{col|es
|tutear<pos:v>
|tuteo<g:m>
|¿tú y cuántos más?
|yo que tú
|a ti
}}
==== คำสืบทอด ====
* {{desc|cbk|tu}}
==== ดูเพิ่ม ====
* {{l|es|usted}}
{{es-personal pronouns}}
==== คำอุทาน ====
{{head|es|คำอุทาน}}
# {{lb|es|Central America|_|(particularly El Salvador)|Spain}} {{ng|คำหยาบ}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
* {{R:es:DEA}}
== ภาษาจีนกลาง ==
=== การออกเสียง ===
* {{audio|cmn|Zh-tú.ogg}}
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|凃}}
# {{cmn-pinyin of|啙}}
# {{cmn-pinyin of|圖|圗|図|图|attn=1}}
# {{cmn-pinyin of|塗}}
# {{cmn-pinyin of|宊}}
# {{cmn-pinyin of|屠}}
# {{cmn-pinyin of|峹}}
# {{cmn-pinyin of|嵞}}
# {{cmn-pinyin of|庩}}
# {{cmn-pinyin of|徒}}
# {{cmn-pinyin of|怢}}
# {{cmn-pinyin of|悂}}
# {{cmn-pinyin of|捈}}
# {{cmn-pinyin of|揬}}
# {{cmn-pinyin of|梌}}
# {{cmn-pinyin of|涂}}
# {{cmn-pinyin of|湥}}
# {{cmn-pinyin of|潳}}
# {{cmn-pinyin of|瑹}}
# {{cmn-pinyin of|瘏}}
# {{cmn-pinyin of|稌}}
# {{cmn-pinyin of|突}}
# {{cmn-pinyin of|筡}}
# {{cmn-pinyin of|腞}}
# {{cmn-pinyin of|腯}}
# {{cmn-pinyin of|荼}}
# {{cmn-pinyin of|菞}}
# {{cmn-pinyin of|葖}}
# {{cmn-pinyin of|蒤}}
# {{cmn-pinyin of|跌}}
# {{cmn-pinyin of|跿}}
# {{cmn-pinyin of|途}}
# {{cmn-pinyin of|酴}}
# {{cmn-pinyin of|鈯}}
# {{cmn-pinyin of|鍎}}
# {{cmn-pinyin of|馟}}
# {{cmn-pinyin of|駼}}
# {{cmn-pinyin of|鵅}}
# {{cmn-pinyin of|鵚}}
# {{cmn-pinyin of|鶟}}
# {{cmn-pinyin of|鷋}}
# {{cmn-pinyin of|鷵}}
# {{cmn-pinyin of|鼵}}
1f7pt31aja5xx0f6yvpp6cmd3ute3gg
5754521
5754520
2026-08-06T08:44:28Z
OctraBot
3198
/* คำอุทาน */
5754521
wikitext
text/x-wiki
{{also/auto}}
== ภาษาสเปน ==
=== รากศัพท์ ===
{{inh+|es|la|tū}}, จาก{{inh|es|itc-pro|*tū}}, จาก{{inh|es|ine-pro|*túh₂}}; ร่วมเชื้อสายกับ{{cog|en|thou}}, {{cog|pt|tu}}, {{cog|ca|tu}}, {{cog|fr|tu}}, {{cog|it|tu}}, {{cog|ro|tu}}
=== การออกเสียง ===
{{es-pr|+<audio:Es-tú.ogg><hmp:tu>}}
=== คำสรรพนาม ===
{{head|es|คำสรรพนาม|disjunctive|ti|oblique|te|comitative|contigo|preposed possessive determiner|tu|possessive pronoun/postposed or standalone possessive determiner|tuyo}}
# {{lb|es|informal}} [[คุณ]] {{gl|คำสรรพนามบุรุษที่สองเอกพจน์}}
#: {{syn|es|vos<q:เฉพาะภูมิภาค>|usted<q:เฉพาะภูมิภาคหรือทางการ>|vuestra merced<q:โบราณ>|vusted<q:เลิกใช้>}}
==== หมายเหตุการใช้ ====
* เมื่อมีคำสรรพนามหลายตัวอยู่ในประโยคเดียวกัน ถือว่าไม่สุภาพที่จะพูดคำสรรพนาม {{m|es|yo}} เป็นคำแรก จะต้องพูดเป็นคำสุดท้าย และต้องพูด '''tú''' ตามหลังคำสรรพนามบุรุษที่สาม (รวมถึง {{m|es|ti}} และ {{m|es|mí}} ด้วย)
** {{ux|es|Iremos Rosa, '''tú''' y yo.|inline=1|Rosa, '''you''' and I will go.}}
==== ลูกคำ ====
{{col|es
|tutear<pos:v>
|tuteo<g:m>
|¿tú y cuántos más?
|yo que tú
|a ti
}}
==== คำสืบทอด ====
* {{desc|cbk|tu}}
==== ดูเพิ่ม ====
* {{l|es|usted}}
{{es-personal pronouns}}
==== คำอุทาน ====
{{head|es|คำอุทาน}}
# {{lb|es|Central America|_|(โดยเฉพาะเอลซัลวาดอร์)|Spain}} {{ng|คำหยาบ}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
* {{R:es:DEA}}
== ภาษาจีนกลาง ==
=== การออกเสียง ===
* {{audio|cmn|Zh-tú.ogg}}
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|凃}}
# {{cmn-pinyin of|啙}}
# {{cmn-pinyin of|圖|圗|図|图|attn=1}}
# {{cmn-pinyin of|塗}}
# {{cmn-pinyin of|宊}}
# {{cmn-pinyin of|屠}}
# {{cmn-pinyin of|峹}}
# {{cmn-pinyin of|嵞}}
# {{cmn-pinyin of|庩}}
# {{cmn-pinyin of|徒}}
# {{cmn-pinyin of|怢}}
# {{cmn-pinyin of|悂}}
# {{cmn-pinyin of|捈}}
# {{cmn-pinyin of|揬}}
# {{cmn-pinyin of|梌}}
# {{cmn-pinyin of|涂}}
# {{cmn-pinyin of|湥}}
# {{cmn-pinyin of|潳}}
# {{cmn-pinyin of|瑹}}
# {{cmn-pinyin of|瘏}}
# {{cmn-pinyin of|稌}}
# {{cmn-pinyin of|突}}
# {{cmn-pinyin of|筡}}
# {{cmn-pinyin of|腞}}
# {{cmn-pinyin of|腯}}
# {{cmn-pinyin of|荼}}
# {{cmn-pinyin of|菞}}
# {{cmn-pinyin of|葖}}
# {{cmn-pinyin of|蒤}}
# {{cmn-pinyin of|跌}}
# {{cmn-pinyin of|跿}}
# {{cmn-pinyin of|途}}
# {{cmn-pinyin of|酴}}
# {{cmn-pinyin of|鈯}}
# {{cmn-pinyin of|鍎}}
# {{cmn-pinyin of|馟}}
# {{cmn-pinyin of|駼}}
# {{cmn-pinyin of|鵅}}
# {{cmn-pinyin of|鵚}}
# {{cmn-pinyin of|鶟}}
# {{cmn-pinyin of|鷋}}
# {{cmn-pinyin of|鷵}}
# {{cmn-pinyin of|鼵}}
7gkfryjsql372ad5xkrsts3gamr7ygw
5754522
5754521
2026-08-06T08:45:49Z
OctraBot
3198
5754522
wikitext
text/x-wiki
{{also/auto}}
== ภาษาสเปน ==
=== รากศัพท์ ===
{{inh+|es|la|tū}}, จาก{{inh|es|itc-pro|*tū}}, จาก{{inh|es|ine-pro|*túh₂}}; ร่วมเชื้อสายกับ{{cog|en|thou}}, {{cog|pt|tu}}, {{cog|ca|tu}}, {{cog|fr|tu}}, {{cog|it|tu}}, {{cog|ro|tu}}
=== การออกเสียง ===
{{es-pr|+<audio:Es-tú.ogg><hmp:tu>}}
=== คำสรรพนาม ===
{{head|es|คำสรรพนาม|disjunctive|ti|oblique|te|comitative|contigo|preposed possessive determiner|tu|possessive pronoun/postposed or standalone possessive determiner|tuyo}}
# {{lb|es|informal}} [[คุณ]] {{gl|คำสรรพนามบุรุษที่สองเอกพจน์}}
#: {{syn|es|vos<q:เฉพาะภูมิภาค>|usted<q:เฉพาะภูมิภาคหรือทางการ>|vuestra merced<q:โบราณ>|vusted<q:เลิกใช้>}}
==== หมายเหตุการใช้ ====
* เมื่อมีคำสรรพนามหลายตัวอยู่ในประโยคเดียวกัน ถือว่าไม่สุภาพที่จะพูดคำสรรพนาม {{m|es|yo}} เป็นคำแรก จะต้องพูดเป็นคำสุดท้าย และต้องพูด '''tú''' ตามหลังคำสรรพนามบุรุษที่สาม (รวมถึง {{m|es|ti}} และ {{m|es|mí}} ด้วย)
** {{ux|es|Iremos Rosa, '''tú''' y yo.|inline=1|Rosa, '''you''' and I will go.}}
==== ลูกคำ ====
{{col|es
|tutear<pos:v>
|tuteo<g:m>
|¿tú y cuántos más?
|yo que tú
|a ti
}}
==== คำสืบทอด ====
* {{desc|cbk|tu}}
==== ดูเพิ่ม ====
* {{l|es|usted}}
{{es-personal pronouns}}
==== คำอุทาน ====
{{head|es|คำอุทาน}}
# {{lb|es|Central America|_|(โดยเฉพาะเอลซัลวาดอร์)|Spain}} {{ng|คำหยาบ}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
* {{R:es:DEA}}
== ภาษาจีนกลาง ==
=== การออกเสียง ===
* {{audio|cmn|Zh-tú.ogg}}
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|凃}}
# {{cmn-pinyin of|啙}}
# {{cmn-pinyin of|圖|圗|図|图|attn=1}}
# {{cmn-pinyin of|塗}}
# {{cmn-pinyin of|宊}}
# {{cmn-pinyin of|屠}}
# {{cmn-pinyin of|峹}}
# {{cmn-pinyin of|嵞}}
# {{cmn-pinyin of|庩}}
# {{cmn-pinyin of|徒}}
# {{cmn-pinyin of|怢}}
# {{cmn-pinyin of|悂}}
# {{cmn-pinyin of|捈}}
# {{cmn-pinyin of|揬}}
# {{cmn-pinyin of|梌}}
# {{cmn-pinyin of|涂}}
# {{cmn-pinyin of|湥}}
# {{cmn-pinyin of|潳}}
# {{cmn-pinyin of|瑹}}
# {{cmn-pinyin of|瘏}}
# {{cmn-pinyin of|稌}}
# {{cmn-pinyin of|突}}
# {{cmn-pinyin of|筡}}
# {{cmn-pinyin of|腞}}
# {{cmn-pinyin of|腯}}
# {{cmn-pinyin of|荼}}
# {{cmn-pinyin of|菞}}
# {{cmn-pinyin of|葖}}
# {{cmn-pinyin of|蒤}}
# {{cmn-pinyin of|跌}}
# {{cmn-pinyin of|跿}}
# {{cmn-pinyin of|途}}
# {{cmn-pinyin of|酴}}
# {{cmn-pinyin of|鈯}}
# {{cmn-pinyin of|鍎}}
# {{cmn-pinyin of|馟}}
# {{cmn-pinyin of|駼}}
# {{cmn-pinyin of|鵅}}
# {{cmn-pinyin of|鵚}}
# {{cmn-pinyin of|鶟}}
# {{cmn-pinyin of|鷋}}
# {{cmn-pinyin of|鷵}}
# {{cmn-pinyin of|鼵}}
== ภาษาฮกเกี้ยน ==
{{zh-see|拄|poj}}
caybmotifsygcaurn128q0f42r2uvh1
5754523
5754522
2026-08-06T08:46:03Z
OctraBot
3198
เรียงลำดับหัวเรื่องภาษา
5754523
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การออกเสียง ===
* {{audio|cmn|Zh-tú.ogg}}
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|凃}}
# {{cmn-pinyin of|啙}}
# {{cmn-pinyin of|圖|圗|図|图|attn=1}}
# {{cmn-pinyin of|塗}}
# {{cmn-pinyin of|宊}}
# {{cmn-pinyin of|屠}}
# {{cmn-pinyin of|峹}}
# {{cmn-pinyin of|嵞}}
# {{cmn-pinyin of|庩}}
# {{cmn-pinyin of|徒}}
# {{cmn-pinyin of|怢}}
# {{cmn-pinyin of|悂}}
# {{cmn-pinyin of|捈}}
# {{cmn-pinyin of|揬}}
# {{cmn-pinyin of|梌}}
# {{cmn-pinyin of|涂}}
# {{cmn-pinyin of|湥}}
# {{cmn-pinyin of|潳}}
# {{cmn-pinyin of|瑹}}
# {{cmn-pinyin of|瘏}}
# {{cmn-pinyin of|稌}}
# {{cmn-pinyin of|突}}
# {{cmn-pinyin of|筡}}
# {{cmn-pinyin of|腞}}
# {{cmn-pinyin of|腯}}
# {{cmn-pinyin of|荼}}
# {{cmn-pinyin of|菞}}
# {{cmn-pinyin of|葖}}
# {{cmn-pinyin of|蒤}}
# {{cmn-pinyin of|跌}}
# {{cmn-pinyin of|跿}}
# {{cmn-pinyin of|途}}
# {{cmn-pinyin of|酴}}
# {{cmn-pinyin of|鈯}}
# {{cmn-pinyin of|鍎}}
# {{cmn-pinyin of|馟}}
# {{cmn-pinyin of|駼}}
# {{cmn-pinyin of|鵅}}
# {{cmn-pinyin of|鵚}}
# {{cmn-pinyin of|鶟}}
# {{cmn-pinyin of|鷋}}
# {{cmn-pinyin of|鷵}}
# {{cmn-pinyin of|鼵}}
== ภาษาสเปน ==
=== รากศัพท์ ===
{{inh+|es|la|tū}}, จาก{{inh|es|itc-pro|*tū}}, จาก{{inh|es|ine-pro|*túh₂}}; ร่วมเชื้อสายกับ{{cog|en|thou}}, {{cog|pt|tu}}, {{cog|ca|tu}}, {{cog|fr|tu}}, {{cog|it|tu}}, {{cog|ro|tu}}
=== การออกเสียง ===
{{es-pr|+<audio:Es-tú.ogg><hmp:tu>}}
=== คำสรรพนาม ===
{{head|es|คำสรรพนาม|disjunctive|ti|oblique|te|comitative|contigo|preposed possessive determiner|tu|possessive pronoun/postposed or standalone possessive determiner|tuyo}}
# {{lb|es|informal}} [[คุณ]] {{gl|คำสรรพนามบุรุษที่สองเอกพจน์}}
#: {{syn|es|vos<q:เฉพาะภูมิภาค>|usted<q:เฉพาะภูมิภาคหรือทางการ>|vuestra merced<q:โบราณ>|vusted<q:เลิกใช้>}}
==== หมายเหตุการใช้ ====
* เมื่อมีคำสรรพนามหลายตัวอยู่ในประโยคเดียวกัน ถือว่าไม่สุภาพที่จะพูดคำสรรพนาม {{m|es|yo}} เป็นคำแรก จะต้องพูดเป็นคำสุดท้าย และต้องพูด '''tú''' ตามหลังคำสรรพนามบุรุษที่สาม (รวมถึง {{m|es|ti}} และ {{m|es|mí}} ด้วย)
** {{ux|es|Iremos Rosa, '''tú''' y yo.|inline=1|Rosa, '''you''' and I will go.}}
==== ลูกคำ ====
{{col|es
|tutear<pos:v>
|tuteo<g:m>
|¿tú y cuántos más?
|yo que tú
|a ti
}}
==== คำสืบทอด ====
* {{desc|cbk|tu}}
==== ดูเพิ่ม ====
* {{l|es|usted}}
{{es-personal pronouns}}
==== คำอุทาน ====
{{head|es|คำอุทาน}}
# {{lb|es|Central America|_|(โดยเฉพาะเอลซัลวาดอร์)|Spain}} {{ng|คำหยาบ}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
* {{R:es:DEA}}
== ภาษาฮกเกี้ยน ==
{{zh-see|拄|poj}}
9qcdvrbb6kjvpssj9yw0k70mlw9g3h0
jardin
0
11683
5754456
1876665
2026-08-06T05:11:08Z
Octahedron80
267
5754456
wikitext
text/x-wiki
{{also/auto}}
==ภาษาฝรั่งเศส==
===การออกเสียง===
* {{audio|fr|Fr-jardin.ogg}}
*/ʒaʁ.dɛ̃/
===คำนาม===
{{fr-noun|m}}
# [[สวน]]
== ภาษาอังกฤษ ==
=== รากศัพท์ ===
{{root|en|ine-pro|*gʰerdʰ-}}
จาก{{bor|en|fr|jardin||สวน}}, จากลักษณะคล้ายมอส; {{doublet|en|garden}}
=== คำนาม ===
{{en-noun}}
# สิ่งเจือปนและรอยร้าวภายใน[[มรกต]]
65vumh5lt0365o3kx1be671u5742t5n
5754458
5754456
2026-08-06T05:15:56Z
Octahedron80
267
/* ภาษาฝรั่งเศส */ เก็บกวาด
5754458
wikitext
text/x-wiki
{{also/auto}}
== ภาษาฝรั่งเศส ==
=== รากศัพท์ ===
{{ety|fr|:inh|frm:jardin<ety:inh<fro:gardin>>}}
จาก{{der|fr|frm|jardin}}, จาก{{der|fr|fro|jardin}}, จาก{{der|fr|la-med|jardinus||สวน}}, จาก{{der|fr|frk|*gardin}} [เก่า], การกอ้อมของ {{m|frk|*gardō||ที่ปิดล้อม, สนาม}} (เทียบเพิ่มเติม{{cog|fro|jart||สวน}}), จาก{{der|fr|gem-pro|*gardô||ที่ปิดล้อม, สวน, บ้าน}}, จาก{{der|fr|ine-pro|*gʰordʰos||แนวพุ่มไม้, ที่ปิดล้อม}}, จาก{{der|fr|ine-pro|*gʰerdʰ-||ลาน, สนาม}}
ร่วมเชื้อสายกับ{{cog|goh|gart}}, {{m|goh|garto||สวน, ที่ปิดล้อม, สนาม}}, {{cog|ang|ġeard||สวน, สนาม, รั้ว, ที่ปิดล้อม}}; ร่วมเชื้อสายกับอังกฤษ ''[[garden]]'', ซึ่งรับมาจากรูปแบบอื่นของแองโกล-นอร์มัน/ฝรั่งเศสเหนือเก่า; ดูเพิ่มที่ {{m|en|yard}}
=== การออกเสียง ===
* {{fr-IPA}}
* {{audio|fr|Fr-jardin.ogg}}
* {{audio|fr|LL-Q150 (fra)-LoquaxFR-jardin.wav|a=<<France>> (<<Vosges>>)}}
* {{audio|fr|LL-Q150 (fra)-WikiLucas00-jardin.wav|a=<<France>> (<<Lyon>>)}}
* {{audio|fr|LL-Q150 (fra)-Jérémy-Günther-Heinz Jähnick-jardin.wav|a=<<France>> (<<Somain>>)}}
=== คำนาม ===
{{fr-noun|m}}
# [[สวน]]
==== ลูกคำ ====
{{col3|fr
|araignée des jardins
|chrysanthème des jardins
|coronille des jardins
|jardin botanique
|jardin d'acclimatation
|jardin d'Éden
|jardin d'enfants
|jardin potager
|jardin public
|jardin secret
|jardin zoologique
|jardinage
|jardinier
|nain de jardin
|scabieuse des jardins
}}
==== ลูกคำ ====
* {{l|fr|jardiner}}
** {{l|fr|jardinage}}
* {{l|fr|jardinerie}}
* {{l|fr|jardinet}}
* {{l|fr|jardinier}}, {{l|fr|jardinière}}
==== คำสืบทอด ====
* {{desc|ca|jardí|bor=1}}
* {{desc|it|giardino|bor=1}}
* {{desc|fur|zardìn|bor=1}}
* {{desc|es|jardín|bor=1}} {{see desc}}
* {{desc|vec|zardin|bor=1}}
=== อ่านเพิ่ม ===
* {{R:fr:TLFi}}
== ภาษาอังกฤษ ==
=== รากศัพท์ ===
{{root|en|ine-pro|*gʰerdʰ-}}
จาก{{bor|en|fr|jardin||สวน}}, จากลักษณะคล้ายมอส; {{doublet|en|garden}}
=== คำนาม ===
{{en-noun}}
# สิ่งเจือปนและรอยร้าวภายใน[[มรกต]]
tlun20371awtbyj2smzbpxbenh8lfdv
5754459
5754458
2026-08-06T05:17:57Z
Octahedron80
267
5754459
wikitext
text/x-wiki
{{also/auto}}
== ภาษาฝรั่งเศส ==
=== รากศัพท์ ===
{{ety|fr|:inh|frm:jardin<ety:inh<fro:gardin>>}}
จาก{{der|fr|frm|jardin}}, จาก{{der|fr|fro|jardin}}, จาก{{der|fr|la-med|jardinus||สวน}}, จาก{{der|fr|frk|*gardin}} [เก่า], การกอ้อมของ {{m|frk|*gardō||ที่ปิดล้อม, สนาม}} (เทียบเพิ่มเติม{{cog|fro|jart||สวน}}), จาก{{der|fr|gem-pro|*gardô||ที่ปิดล้อม, สวน, บ้าน}}, จาก{{der|fr|ine-pro|*gʰordʰos||แนวพุ่มไม้, ที่ปิดล้อม}}, จาก{{der|fr|ine-pro|*gʰerdʰ-||ลาน, สนาม}}
ร่วมเชื้อสายกับ{{cog|goh|gart}}, {{m|goh|garto||สวน, ที่ปิดล้อม, สนาม}}, {{cog|ang|ġeard||สวน, สนาม, รั้ว, ที่ปิดล้อม}}; ร่วมเชื้อสายกับอังกฤษ ''[[garden]]'', ซึ่งรับมาจากรูปแบบอื่นของแองโกล-นอร์มัน/ฝรั่งเศสเหนือเก่า; ดูเพิ่มที่ {{m|en|yard}}
=== การออกเสียง ===
* {{fr-IPA}}
* {{audio|fr|Fr-jardin.ogg}}
* {{audio|fr|LL-Q150 (fra)-LoquaxFR-jardin.wav|a=<<France>> (<<Vosges>>)}}
* {{audio|fr|LL-Q150 (fra)-WikiLucas00-jardin.wav|a=<<France>> (<<Lyon>>)}}
* {{audio|fr|LL-Q150 (fra)-Jérémy-Günther-Heinz Jähnick-jardin.wav|a=<<France>> (<<Somain>>)}}
=== คำนาม ===
{{fr-noun|m}}
# [[สวน]]
==== ลูกคำ ====
{{col3|fr
|araignée des jardins
|chrysanthème des jardins
|coronille des jardins
|jardin botanique
|jardin d'acclimatation
|jardin d'Éden
|jardin d'enfants
|jardin potager
|jardin public
|jardin secret
|jardin zoologique
|jardinage
|jardinier
|nain de jardin
|scabieuse des jardins
}}
==== ลูกคำ ====
* {{l|fr|jardiner}}
** {{l|fr|jardinage}}
* {{l|fr|jardinerie}}
* {{l|fr|jardinet}}
* {{l|fr|jardinier}}, {{l|fr|jardinière}}
==== คำสืบทอด ====
* {{desc|ca|jardí|bor=1}}
* {{desc|it|giardino|bor=1}}
* {{desc|fur|zardìn|bor=1}}
* {{desc|es|jardín|bor=1}} {{see desc}}
* {{desc|vec|zardin|bor=1}}
=== อ่านเพิ่ม ===
* {{R:fr:TLFi}}
== ภาษาอังกฤษ ==
=== รากศัพท์ ===
{{root|en|ine-pro|*gʰerdʰ-}}
จาก{{bor|en|fr|jardin||สวน}}, จากลักษณะคล้ายมอส; {{doublet|en|garden}}
=== คำนาม ===
{{en-noun}}
# สิ่งเจือปนและรอยร้าวภายใน[[มรกต]]
== ภาษาอินเทอร์ลิงกวา ==
=== คำนาม ===
{{ia-noun|es}}
# [[สวน]]
== ภาษาครีโอลกาบูเวร์ดี ==
=== รากศัพท์ ===
จาก{{der|kea|pt|jardim}}
=== คำนาม ===
{{head|kea|คำนาม}}
# [[สวน]]
# [[สนาม]][[หลัง]][บ้าน]]
=== อ้างอิง ===
* {{R:kea:Gonçalves}}
== ภาษามีรังดา ==
=== คำนาม ===
{{mwl-noun|m}}
# [[สวน]]
== ภาษาอุตซิตา ==
=== การออกเสียง ===
* {{IPA|oc|[(d)ʒarˈdi]}}
* {{audio|oc|LL-Q14185 (oci)-Davidgrosclaude-jardin.wav|a=Béarn}}
=== คำนาม ===
{{oc-noun|m}}
# [[สวน]]
== ภาษาฝรั่งเศสเก่า ==
=== คำนาม ===
{{fro-noun|m}}
# {{alternative form of|fro|gardin}}
2hga4ujpc76y6711cwadee135suoocm
5754460
5754459
2026-08-06T05:20:29Z
Octahedron80
267
5754460
wikitext
text/x-wiki
{{also/auto}}
== ภาษาฝรั่งเศส ==
=== รากศัพท์ ===
{{ety|fr|:inh|frm:jardin<ety:inh<fro:gardin>>}}
จาก{{der|fr|frm|jardin}}, จาก{{der|fr|fro|jardin}}, จาก{{der|fr|la-med|jardinus||สวน}}, จาก{{der|fr|frk|*gardin}} [เก่า], การกอ้อมของ {{m|frk|*gardō||ที่ปิดล้อม, สนาม}} (เทียบเพิ่มเติม{{cog|fro|jart||สวน}}), จาก{{der|fr|gem-pro|*gardô||ที่ปิดล้อม, สวน, บ้าน}}, จาก{{der|fr|ine-pro|*gʰordʰos||แนวพุ่มไม้, ที่ปิดล้อม}}, จาก{{der|fr|ine-pro|*gʰerdʰ-||ลาน, สนาม}}
ร่วมเชื้อสายกับ{{cog|goh|gart}}, {{m|goh|garto||สวน, ที่ปิดล้อม, สนาม}}, {{cog|ang|ġeard||สวน, สนาม, รั้ว, ที่ปิดล้อม}}; ร่วมเชื้อสายกับอังกฤษ ''[[garden]]'', ซึ่งรับมาจากรูปแบบอื่นของแองโกล-นอร์มัน/ฝรั่งเศสเหนือเก่า; ดูเพิ่มที่ {{m|en|yard}}
=== การออกเสียง ===
* {{fr-IPA}}
* {{audio|fr|Fr-jardin.ogg}}
* {{audio|fr|LL-Q150 (fra)-LoquaxFR-jardin.wav|a=<<France>> (<<Vosges>>)}}
* {{audio|fr|LL-Q150 (fra)-WikiLucas00-jardin.wav|a=<<France>> (<<Lyon>>)}}
* {{audio|fr|LL-Q150 (fra)-Jérémy-Günther-Heinz Jähnick-jardin.wav|a=<<France>> (<<Somain>>)}}
=== คำนาม ===
{{fr-noun|m}}
# [[สวน]]
==== ลูกคำ ====
{{col3|fr
|araignée des jardins
|chrysanthème des jardins
|coronille des jardins
|jardin botanique
|jardin d'acclimatation
|jardin d'Éden
|jardin d'enfants
|jardin potager
|jardin public
|jardin secret
|jardin zoologique
|jardinage
|jardinier
|nain de jardin
|scabieuse des jardins
}}
==== ลูกคำ ====
* {{l|fr|jardiner}}
** {{l|fr|jardinage}}
* {{l|fr|jardinerie}}
* {{l|fr|jardinet}}
* {{l|fr|jardinier}}, {{l|fr|jardinière}}
==== คำสืบทอด ====
* {{desc|ca|jardí|bor=1}}
* {{desc|it|giardino|bor=1}}
* {{desc|fur|zardìn|bor=1}}
* {{desc|es|jardín|bor=1}} {{see desc}}
* {{desc|vec|zardin|bor=1}}
=== อ่านเพิ่ม ===
* {{R:fr:TLFi}}
== ภาษาอังกฤษ ==
=== รากศัพท์ ===
{{root|en|ine-pro|*gʰerdʰ-}}
จาก{{bor|en|fr|jardin||สวน}}, จากลักษณะคล้ายมอส; {{doublet|en|garden}}
=== คำนาม ===
{{en-noun}}
# สิ่งเจือปนและรอยร้าวภายใน[[มรกต]]
== ภาษาอินเทอร์ลิงกวา ==
=== คำนาม ===
{{ia-noun|es}}
# [[สวน]]
== ภาษาครีโอลกาบูเวร์ดี ==
=== รากศัพท์ ===
จาก{{der|kea|pt|jardim}}
=== คำนาม ===
{{head|kea|คำนาม}}
# [[สวน]]
# [[สนาม]][[หลัง]][บ้าน]]
=== อ้างอิง ===
* {{R:kea:Gonçalves}}
== ภาษามีรังดา ==
=== คำนาม ===
{{mwl-noun|m}}
# [[สวน]]
== ภาษาอุตซิตา ==
=== การออกเสียง ===
* {{IPA|oc|[(d)ʒarˈdi]}}
* {{audio|oc|LL-Q14185 (oci)-Davidgrosclaude-jardin.wav|a=Béarn}}
=== คำนาม ===
{{oc-noun|m}}
# [[สวน]]
== ภาษาฝรั่งเศสเก่า ==
=== คำนาม ===
{{fro-noun|m}}
# {{alternative form of|fro|gardin}}
== ภาษากาลิเซีย-โปรตุเกสเก่า ==
=== รูปแบบอื่น ===
* {{alt|roa-opt|jardim}}
=== รากศัพท์ ===
{{etymon|roa-opt|:bor|fro:gardin<id:garden>|id=garden|tree=1}}
{{bor+|roa-opt|fro|gardin||สวน, ที่ปิดล้อม}}, เป็นไปได้ว่ารับมาจาก{{der|roa-opt|la-vul|-}} หรือแกลโล-โรมานซ์ช่วงต้น ''hortus gardinus'', จาก{{der|roa-opt|frk|*gardin}} [เก่า], การกอ้อมของ {{m|frk|*gardo||ที่ปิดล้อม, สนาม}}, จาก{{der|roa-opt|gem-pro|*gardô||ที่ปิดล้อม, สวน, บ้าน}}, จาก{{der|roa-opt|ine-pro|*gʰordʰos||แนวพุ่มไม้, ที่ปิดล้อม}}, จาก{{m|ine-pro|*gʰerdʰ-||ลาน, สนาม}}
=== การออกเสียง ===
* {{IPA|roa-opt|/d͡ʒaɾˈdĩ/}}
* {{rhyme|roa-opt|ĩ|s=2}}
* {{hyph|roa-opt|jar|din}}
=== คำนาม ===
{{roa-opt-noun|m}}
# [[สวน]]
#: {{syn|roa-opt|orto|vergeu}}
# {{lb|roa-opt|figuratively|Christianity}} [[สวรรค์]]
#: {{syn|roa-opt|ceo|parayso}}
#* {{RQ:Cantigas de Santa Maria|E|235|http://www.pbm.com/~lindahl/cantigas/facsimiles/E/425small.gif|text={{...}}a Loemos que nos meta no '''iardi[n]''' / de ſeu fille que nos guarde do mui grand fogỹfernal.|t={{...}} let us praise Her so that She will admit us to the '''garden''' of Her Son (=Heaven) and save us from the great fire of Hell.}}
==== คำสืบทอด ====
* {{desc|fax|jardín}}
* {{desc|gl|xardín}}
* {{desc|pt|jardim}}
=== อ้างอิง ===
* {{R:roa-opt:DDGM}}
* {{R:roa-opt:CX}}
{{C|roa-opt|สวน}}
== ภาษาสเปน ==
=== คำนาม ===
{{es-noun|m|jardines}}
# {{obsolete spelling of|es|jardín}}
6nq5lsfsq9q053f5fmf26wn2y9t94mt
5754461
5754460
2026-08-06T05:20:55Z
Octahedron80
267
เรียงลำดับหัวเรื่องภาษา
5754461
wikitext
text/x-wiki
{{also/auto}}
== ภาษากาลิเซีย-โปรตุเกสเก่า ==
=== รูปแบบอื่น ===
* {{alt|roa-opt|jardim}}
=== รากศัพท์ ===
{{etymon|roa-opt|:bor|fro:gardin<id:garden>|id=garden|tree=1}}
{{bor+|roa-opt|fro|gardin||สวน, ที่ปิดล้อม}}, เป็นไปได้ว่ารับมาจาก{{der|roa-opt|la-vul|-}} หรือแกลโล-โรมานซ์ช่วงต้น ''hortus gardinus'', จาก{{der|roa-opt|frk|*gardin}} [เก่า], การกอ้อมของ {{m|frk|*gardo||ที่ปิดล้อม, สนาม}}, จาก{{der|roa-opt|gem-pro|*gardô||ที่ปิดล้อม, สวน, บ้าน}}, จาก{{der|roa-opt|ine-pro|*gʰordʰos||แนวพุ่มไม้, ที่ปิดล้อม}}, จาก{{m|ine-pro|*gʰerdʰ-||ลาน, สนาม}}
=== การออกเสียง ===
* {{IPA|roa-opt|/d͡ʒaɾˈdĩ/}}
* {{rhyme|roa-opt|ĩ|s=2}}
* {{hyph|roa-opt|jar|din}}
=== คำนาม ===
{{roa-opt-noun|m}}
# [[สวน]]
#: {{syn|roa-opt|orto|vergeu}}
# {{lb|roa-opt|figuratively|Christianity}} [[สวรรค์]]
#: {{syn|roa-opt|ceo|parayso}}
#* {{RQ:Cantigas de Santa Maria|E|235|http://www.pbm.com/~lindahl/cantigas/facsimiles/E/425small.gif|text={{...}}a Loemos que nos meta no '''iardi[n]''' / de ſeu fille que nos guarde do mui grand fogỹfernal.|t={{...}} let us praise Her so that She will admit us to the '''garden''' of Her Son (=Heaven) and save us from the great fire of Hell.}}
==== คำสืบทอด ====
* {{desc|fax|jardín}}
* {{desc|gl|xardín}}
* {{desc|pt|jardim}}
=== อ้างอิง ===
* {{R:roa-opt:DDGM}}
* {{R:roa-opt:CX}}
{{C|roa-opt|สวน}}
== ภาษาครีโอลกาบูเวร์ดี ==
=== รากศัพท์ ===
จาก{{der|kea|pt|jardim}}
=== คำนาม ===
{{head|kea|คำนาม}}
# [[สวน]]
# [[สนาม]][[หลัง]][บ้าน]]
=== อ้างอิง ===
* {{R:kea:Gonçalves}}
== ภาษาฝรั่งเศส ==
=== รากศัพท์ ===
{{ety|fr|:inh|frm:jardin<ety:inh<fro:gardin>>}}
จาก{{der|fr|frm|jardin}}, จาก{{der|fr|fro|jardin}}, จาก{{der|fr|la-med|jardinus||สวน}}, จาก{{der|fr|frk|*gardin}} [เก่า], การกอ้อมของ {{m|frk|*gardō||ที่ปิดล้อม, สนาม}} (เทียบเพิ่มเติม{{cog|fro|jart||สวน}}), จาก{{der|fr|gem-pro|*gardô||ที่ปิดล้อม, สวน, บ้าน}}, จาก{{der|fr|ine-pro|*gʰordʰos||แนวพุ่มไม้, ที่ปิดล้อม}}, จาก{{der|fr|ine-pro|*gʰerdʰ-||ลาน, สนาม}}
ร่วมเชื้อสายกับ{{cog|goh|gart}}, {{m|goh|garto||สวน, ที่ปิดล้อม, สนาม}}, {{cog|ang|ġeard||สวน, สนาม, รั้ว, ที่ปิดล้อม}}; ร่วมเชื้อสายกับอังกฤษ ''[[garden]]'', ซึ่งรับมาจากรูปแบบอื่นของแองโกล-นอร์มัน/ฝรั่งเศสเหนือเก่า; ดูเพิ่มที่ {{m|en|yard}}
=== การออกเสียง ===
* {{fr-IPA}}
* {{audio|fr|Fr-jardin.ogg}}
* {{audio|fr|LL-Q150 (fra)-LoquaxFR-jardin.wav|a=<<France>> (<<Vosges>>)}}
* {{audio|fr|LL-Q150 (fra)-WikiLucas00-jardin.wav|a=<<France>> (<<Lyon>>)}}
* {{audio|fr|LL-Q150 (fra)-Jérémy-Günther-Heinz Jähnick-jardin.wav|a=<<France>> (<<Somain>>)}}
=== คำนาม ===
{{fr-noun|m}}
# [[สวน]]
==== ลูกคำ ====
{{col3|fr
|araignée des jardins
|chrysanthème des jardins
|coronille des jardins
|jardin botanique
|jardin d'acclimatation
|jardin d'Éden
|jardin d'enfants
|jardin potager
|jardin public
|jardin secret
|jardin zoologique
|jardinage
|jardinier
|nain de jardin
|scabieuse des jardins
}}
==== ลูกคำ ====
* {{l|fr|jardiner}}
** {{l|fr|jardinage}}
* {{l|fr|jardinerie}}
* {{l|fr|jardinet}}
* {{l|fr|jardinier}}, {{l|fr|jardinière}}
==== คำสืบทอด ====
* {{desc|ca|jardí|bor=1}}
* {{desc|it|giardino|bor=1}}
* {{desc|fur|zardìn|bor=1}}
* {{desc|es|jardín|bor=1}} {{see desc}}
* {{desc|vec|zardin|bor=1}}
=== อ่านเพิ่ม ===
* {{R:fr:TLFi}}
== ภาษาฝรั่งเศสเก่า ==
=== คำนาม ===
{{fro-noun|m}}
# {{alternative form of|fro|gardin}}
== ภาษามีรังดา ==
=== คำนาม ===
{{mwl-noun|m}}
# [[สวน]]
== ภาษาสเปน ==
=== คำนาม ===
{{es-noun|m|jardines}}
# {{obsolete spelling of|es|jardín}}
== ภาษาอังกฤษ ==
=== รากศัพท์ ===
{{root|en|ine-pro|*gʰerdʰ-}}
จาก{{bor|en|fr|jardin||สวน}}, จากลักษณะคล้ายมอส; {{doublet|en|garden}}
=== คำนาม ===
{{en-noun}}
# สิ่งเจือปนและรอยร้าวภายใน[[มรกต]]
== ภาษาอินเทอร์ลิงกวา ==
=== คำนาม ===
{{ia-noun|es}}
# [[สวน]]
== ภาษาอุตซิตา ==
=== การออกเสียง ===
* {{IPA|oc|[(d)ʒarˈdi]}}
* {{audio|oc|LL-Q14185 (oci)-Davidgrosclaude-jardin.wav|a=Béarn}}
=== คำนาม ===
{{oc-noun|m}}
# [[สวน]]
0ia5wc67nb82i36jeiteu9d3lyoycl8
5754462
5754461
2026-08-06T05:22:06Z
Octahedron80
267
/* คำนาม */
5754462
wikitext
text/x-wiki
{{also/auto}}
== ภาษากาลิเซีย-โปรตุเกสเก่า ==
=== รูปแบบอื่น ===
* {{alt|roa-opt|jardim}}
=== รากศัพท์ ===
{{etymon|roa-opt|:bor|fro:gardin<id:garden>|id=garden|tree=1}}
{{bor+|roa-opt|fro|gardin||สวน, ที่ปิดล้อม}}, เป็นไปได้ว่ารับมาจาก{{der|roa-opt|la-vul|-}} หรือแกลโล-โรมานซ์ช่วงต้น ''hortus gardinus'', จาก{{der|roa-opt|frk|*gardin}} [เก่า], การกอ้อมของ {{m|frk|*gardo||ที่ปิดล้อม, สนาม}}, จาก{{der|roa-opt|gem-pro|*gardô||ที่ปิดล้อม, สวน, บ้าน}}, จาก{{der|roa-opt|ine-pro|*gʰordʰos||แนวพุ่มไม้, ที่ปิดล้อม}}, จาก{{m|ine-pro|*gʰerdʰ-||ลาน, สนาม}}
=== การออกเสียง ===
* {{IPA|roa-opt|/d͡ʒaɾˈdĩ/}}
* {{rhyme|roa-opt|ĩ|s=2}}
* {{hyph|roa-opt|jar|din}}
=== คำนาม ===
{{roa-opt-noun|m}}
# [[สวน]]
#: {{syn|roa-opt|orto|vergeu}}
# {{lb|roa-opt|figuratively|Christianity}} [[สวรรค์]]
#: {{syn|roa-opt|ceo|parayso}}
#* {{RQ:Cantigas de Santa Maria|E|235|http://www.pbm.com/~lindahl/cantigas/facsimiles/E/425small.gif|text={{...}}a Loemos que nos meta no '''iardi[n]''' / de ſeu fille que nos guarde do mui grand fogỹfernal.|t={{...}} let us praise Her so that She will admit us to the '''garden''' of Her Son (=Heaven) and save us from the great fire of Hell.}}
==== คำสืบทอด ====
* {{desc|fax|jardín}}
* {{desc|gl|xardín}}
* {{desc|pt|jardim}}
=== อ้างอิง ===
* {{R:roa-opt:DDGM}}
* {{R:roa-opt:CX}}
{{C|roa-opt|สวน}}
== ภาษาครีโอลกาบูเวร์ดี ==
=== รากศัพท์ ===
จาก{{der|kea|pt|jardim}}
=== คำนาม ===
{{head|kea|คำนาม}}
# [[สวน]]
# [[สนาม]][[หลัง]][[บ้าน]]
=== อ้างอิง ===
* {{R:kea:Gonçalves}}
== ภาษาฝรั่งเศส ==
=== รากศัพท์ ===
{{ety|fr|:inh|frm:jardin<ety:inh<fro:gardin>>}}
จาก{{der|fr|frm|jardin}}, จาก{{der|fr|fro|jardin}}, จาก{{der|fr|la-med|jardinus||สวน}}, จาก{{der|fr|frk|*gardin}} [เก่า], การกอ้อมของ {{m|frk|*gardō||ที่ปิดล้อม, สนาม}} (เทียบเพิ่มเติม{{cog|fro|jart||สวน}}), จาก{{der|fr|gem-pro|*gardô||ที่ปิดล้อม, สวน, บ้าน}}, จาก{{der|fr|ine-pro|*gʰordʰos||แนวพุ่มไม้, ที่ปิดล้อม}}, จาก{{der|fr|ine-pro|*gʰerdʰ-||ลาน, สนาม}}
ร่วมเชื้อสายกับ{{cog|goh|gart}}, {{m|goh|garto||สวน, ที่ปิดล้อม, สนาม}}, {{cog|ang|ġeard||สวน, สนาม, รั้ว, ที่ปิดล้อม}}; ร่วมเชื้อสายกับอังกฤษ ''[[garden]]'', ซึ่งรับมาจากรูปแบบอื่นของแองโกล-นอร์มัน/ฝรั่งเศสเหนือเก่า; ดูเพิ่มที่ {{m|en|yard}}
=== การออกเสียง ===
* {{fr-IPA}}
* {{audio|fr|Fr-jardin.ogg}}
* {{audio|fr|LL-Q150 (fra)-LoquaxFR-jardin.wav|a=<<France>> (<<Vosges>>)}}
* {{audio|fr|LL-Q150 (fra)-WikiLucas00-jardin.wav|a=<<France>> (<<Lyon>>)}}
* {{audio|fr|LL-Q150 (fra)-Jérémy-Günther-Heinz Jähnick-jardin.wav|a=<<France>> (<<Somain>>)}}
=== คำนาม ===
{{fr-noun|m}}
# [[สวน]]
==== ลูกคำ ====
{{col3|fr
|araignée des jardins
|chrysanthème des jardins
|coronille des jardins
|jardin botanique
|jardin d'acclimatation
|jardin d'Éden
|jardin d'enfants
|jardin potager
|jardin public
|jardin secret
|jardin zoologique
|jardinage
|jardinier
|nain de jardin
|scabieuse des jardins
}}
==== ลูกคำ ====
* {{l|fr|jardiner}}
** {{l|fr|jardinage}}
* {{l|fr|jardinerie}}
* {{l|fr|jardinet}}
* {{l|fr|jardinier}}, {{l|fr|jardinière}}
==== คำสืบทอด ====
* {{desc|ca|jardí|bor=1}}
* {{desc|it|giardino|bor=1}}
* {{desc|fur|zardìn|bor=1}}
* {{desc|es|jardín|bor=1}} {{see desc}}
* {{desc|vec|zardin|bor=1}}
=== อ่านเพิ่ม ===
* {{R:fr:TLFi}}
== ภาษาฝรั่งเศสเก่า ==
=== คำนาม ===
{{fro-noun|m}}
# {{alternative form of|fro|gardin}}
== ภาษามีรังดา ==
=== คำนาม ===
{{mwl-noun|m}}
# [[สวน]]
== ภาษาสเปน ==
=== คำนาม ===
{{es-noun|m|jardines}}
# {{obsolete spelling of|es|jardín}}
== ภาษาอังกฤษ ==
=== รากศัพท์ ===
{{root|en|ine-pro|*gʰerdʰ-}}
จาก{{bor|en|fr|jardin||สวน}}, จากลักษณะคล้ายมอส; {{doublet|en|garden}}
=== คำนาม ===
{{en-noun}}
# สิ่งเจือปนและรอยร้าวภายใน[[มรกต]]
== ภาษาอินเทอร์ลิงกวา ==
=== คำนาม ===
{{ia-noun|es}}
# [[สวน]]
== ภาษาอุตซิตา ==
=== การออกเสียง ===
* {{IPA|oc|[(d)ʒarˈdi]}}
* {{audio|oc|LL-Q14185 (oci)-Davidgrosclaude-jardin.wav|a=Béarn}}
=== คำนาม ===
{{oc-noun|m}}
# [[สวน]]
8d3nm9iwd5ilfq6yzhu0dykkxiin7wu
vélo
0
13089
5754480
4849711
2026-08-06T07:24:14Z
OctraBot
3198
update template use
5754480
wikitext
text/x-wiki
== ภาษาฝรั่งเศส ==
=== รากศัพท์ ===
{{etymon|fr|id=bicycle|:from|vélocipède<id:velocipede>}}
{{clipping|fr|vélocipède||จักรยานถีบล้อหน้า}} ซึ่งปัจจุบันเลิกใช้แล้ว
=== การออกเสียง ===
* {{fr-IPA}}
* {{audio|fr|Fr-vélo.ogg|a=Paris}}
* {{homophones|fr|vélos}}
* {{hyphenation|fr|vé|lo}}
* {{rhymes|fr|o|s=2}}
=== คำนาม ===
{{fr-noun|m}}
# {{lb|fr|usually|informal}} [[จักรยาน]]
#: {{syn|fr|bicyclette}}
# {{lb|fr|informal}} [[การขี่]]จักรยาน {{gloss|กิจกรรม}}
#: {{syn|fr|cyclisme}}
#: {{coi|fr|faire du '''vélo'''|to go cycling, to go for a bike ride}}
#: {{coi|fr|J'adore le '''vélo'''.|I love cycling.}}
==== ลูกคำ ====
{{col3|fr
|vélo à neige
|vélo à pneus surdimensionnés
|vélo couché
|vélo d'appartement
|vélodrome
|vélomobile
|vélomoteur
|vélorizontal
|véloroute
|vélo stationnaire
|vélotaf
|vélo tout terrain
}}
==== คำสืบทอด ====
* {{desc|bor=1|gsw|Welo|alts=1}}
* {{desc|bor=1|nl|velo}}
* {{desc|bor=1|de|Velo}}
* {{desc|bor=1|ln|veló}}
* {{desc|bor=1|ru|велосипед}}
=== อ่านเพิ่ม ===
* {{R:fr:TLFi}}
=== คำสลับอักษร ===
* {{l|fr|love}}, {{l|fr|lové}}
* {{l|fr|vole}}, {{l|fr|volé}}
{{C|fr|การขี่จักรยาน}}
ey0qbhzjokt9qrxxhg260mh7wiayxsf
praia
0
13148
5754492
2674241
2026-08-06T07:43:39Z
OctraBot
3198
update template use
5754492
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
{{slim-wikipedia|lang=gl}}
=== รากศัพท์ ===
{{etymon|gl|inh|roa-opt>praia>beach|id=beach|text=++}}
=== การออกเสียง ===
{{gl-pr}}
* {{hyph|gl|pra|ia}}
=== คำนาม ===
{{gl-noun|f}}
# [[หาด]]
=== อ่านเพิ่ม ===
* {{R:gl:DRAG}}
* {{R:gl:Estraviz}}
{{C|gl|ธรณีสัณฐาน}}
== ภาษากาลิเซีย-โปรตุเกสเก่า ==
=== รูปแบบอื่น ===
* {{alt|roa-opt|praya}}
=== รากศัพท์ ===
{{etymon|roa-opt|inh|la-med>plagia>slope|id=beach|text=++}}
=== คำนาม ===
{{roa-opt-noun|f}}
# [[หาด]]
==== คำสืบทอด ====
* {{desc|gl|praia}}
* {{desc|pt|praia}}
=== อ้างอิง ===
* {{R:roa-opt:DDGM}}
* {{R:roa-opt:CX}}
{{C|roa-opt|ธรณีสัณฐาน}}
== ภาษาโปรตุเกส ==
[[ไฟล์:Praia de Odeceixe (7667131250).jpg|thumb]]
=== รูปแบบอื่น ===
* {{alt|pt|praya||obsolete}}
=== รากศัพท์ ===
{{etymon|pt|:inh|roa-opt:praia<id:beach>|id=beach|text=++}} {{doublet|pt|plaga}}
ร่วมเชื้อสายกับ{{cog|gl|praia}}, {{cog|es|playa}}, {{cog|ca|platja}}, {{cog|oc|plaja}}, {{cog|fr|plage}} และ{{cog|it|spiaggia}}
=== การออกเสียง ===
{{pt-IPA}}
* {{rhymes|pt|ajɐ}}
* {{hyphenation|pt|prai|a}}
=== คำนาม ===
{{pt-noun|f}}
# [[หาด]]
#* {{quote-text|pt|translation=But the Moors who were around the '''beach''', / to defend its desired water, / one who was embarked with a shield and an assegai, / other with a harsh bow and thrown arrow: [...]|year=1572|author=w:Luís de Camões|title=[[s:The Lusiads|Os Lusíadas]]|section=[[s:pt:Os Lvsiadas/I|First Canto]]|passage=Mas os Mouros que andauão pela '''praya''', / Por lhe defender a agoa deſejada, / Hum de eſcudo embarcado, & de azagaya, / Outro de arco encuruado, & ſeta eruada: {{...}}}}
==== คำพ้องความ ====
{{top3}}
* {{l|pt|areal}}
* {{l|pt|beira-mar}}
* {{l|pt|margem}}
{{bottom}}
==== ลูกคำ ====
{{top3}}
* {{l|pt|baga-da-praia}}
* {{l|pt|morrer na praia}}
* {{l|pt|praia fluvial}}
* {{l|pt|praiano}}
* {{l|pt|praieiro}}
* {{l|pt|ser a praia de alguém}}
{{bottom}}
==== คำสืบทอด ====
* {{desc|en-HK|praya|bor=1}}
* {{desc|hrx|Praia|bor=1}}
* {{desc|yrl|praya|bor=1}}
=== อ้างอิง ===
* {{R:pt:Infopédia}}
* {{R:pt:Aulete}}
* {{R:pt:Priberam}}
=== อ่านเพิ่ม ===
* {{pedia|lang=pt}}
{{C|pt|ธรณีสัณฐาน}}
7gyvc7sopinmnfts96ukh3fsnixk8df
jardim
0
13599
5754437
2362877
2026-08-06T04:14:51Z
Octahedron80
267
/* รากศัพท์ */
5754437
wikitext
text/x-wiki
==ภาษาโปรตุเกส==
{{wikipedia|lang=pt}}
[[Image:Parco di Castello 5.JPG|thumb|250px|Um jardim]]
===รากศัพท์===
{{etymon|pt|:inh|roa-opt:jardin<id:garden>|id=garden|tree=1}}
จาก{{inh|pt|roa-opt|jardin||สวน}}, จาก{{der|pt|fro|jardin||สวน, ที่ปิดล้อม}}, จาก{{der|pt|ML.|jardinus||สวน}}, จาก{{der|pt|frk|*gardin}} [เก่า], การกอ้อมของ {{m|frk|*gardo||ที่ปิดล้อม, สนาม}}, จาก{{uder|pt|gem-pro|*gardô||ที่ปิดล้อม, สวน, บ้าน}}, จาก{{uder|pt|ine-pro|*gʰordʰos||แนวพุ่มไม้, ที่ปิดล้อม}}, จาก{{uder|pt|ine-pro|*gʰerdʰ-||ลาน, สนาม}}
เทียบ{{cog|gl|xardín}}, {{cog|es|jardín}}, {{cog|ca|jardí}}, {{cog|oc,fr|jardin}}, {{cog|it|giardino}}
===การออกเสียง===
{{pt-IPA}}
* {{IPA|pt|/ʒaɦ.ˈdĩ(j̃)/|a=Nordestino}}
* {{rhymes|pt|ĩ|s=2}}
* {{hyph|pt|jar|dim}}
===คำนาม===
{{pt-noun|m}}
# [[สวน]]
# {{lb|pt|บราซิล}} {{ellipsis of|pt|jardim de infância}}
====คำเกี่ยวข้อง====
{{col-auto|pt
|jardinagem
|jardinar
|jardineiro
|jardim de infância}}
====คำสืบสอด====
* {{desc|kbc|jaadi|bor=1}}
===อ่านเพิ่ม===
* {{R:pt:DAN}}
* {{R:pt:Michaelis}}
* {{R:pt:Priberam}}
=== อ้างอิง ===
{{รายการอ้างอิง}}
* ''Oxford Portuguese Dictionary''. (2023). Oxford University Press.
ix9mwa814j1ss3r6456r9vr2klgid9b
5754457
5754437
2026-08-06T05:13:19Z
Octahedron80
267
/* รากศัพท์ */
5754457
wikitext
text/x-wiki
==ภาษาโปรตุเกส==
{{wikipedia|lang=pt}}
[[Image:Parco di Castello 5.JPG|thumb|250px|Um jardim]]
=== รากศัพท์ ===
{{etymon|pt|:inh|roa-opt:jardin<id:garden>|id=garden|tree=1}}
จาก{{inh|pt|roa-opt|jardin||สวน}}, จาก{{der|pt|fro|jardin||สวน, ที่ปิดล้อม}}, จาก{{der|pt|ML.|jardinus||สวน}}, จาก{{der|pt|frk|*gardin}} [เก่า], การกอ้อมของ {{m|frk|*gardo||ที่ปิดล้อม, สนาม}}, จาก{{uder|pt|gem-pro|*gardô||ที่ปิดล้อม, สวน, บ้าน}}, จาก{{uder|pt|ine-pro|*gʰordʰos||แนวพุ่มไม้, ที่ปิดล้อม}}, จาก{{uder|pt|ine-pro|*gʰerdʰ-||ลาน, สนาม}}
เทียบ{{cog|gl|xardín}}, {{cog|es|jardín}}, {{cog|ca|jardí}}, {{cog|oc,fr|jardin}}, {{cog|it|giardino}}
===การออกเสียง===
{{pt-IPA}}
* {{IPA|pt|/ʒaɦ.ˈdĩ(j̃)/|a=Nordestino}}
* {{rhymes|pt|ĩ|s=2}}
* {{hyph|pt|jar|dim}}
===คำนาม===
{{pt-noun|m}}
# [[สวน]]
# {{lb|pt|บราซิล}} {{ellipsis of|pt|jardim de infância}}
====คำเกี่ยวข้อง====
{{col-auto|pt
|jardinagem
|jardinar
|jardineiro
|jardim de infância}}
====คำสืบสอด====
* {{desc|kbc|jaadi|bor=1}}
===อ่านเพิ่ม===
* {{R:pt:DAN}}
* {{R:pt:Michaelis}}
* {{R:pt:Priberam}}
=== อ้างอิง ===
{{รายการอ้างอิง}}
* ''Oxford Portuguese Dictionary''. (2023). Oxford University Press.
gdp59bc5x79en1vumktnobv1mavmq36
árvore
0
13605
5754486
5676715
2026-08-06T07:42:27Z
OctraBot
3198
update template use
5754486
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
{{picdic
|image=Birnbaum am Lerchenberg retouched.jpg
|text=árvore(1)
|detail1=
{{picdicimg|pt|image=Brunfelsia pauciflora shrub.jpg|link=planta}}
|detail3=<!-- Meronyms -->
{{picdicimg|pt|image=Roots by cesarpb.jpg|link=raiz}}
{{picdicimg|pt|image=Magnolia acuminata trunk.JPG|link=tronco}}
{{picdicimg|pt|image=Ceiba sp branches.jpg|link=ramo}}
{{picdicimg|pt|image=Autumn Red Oak Leaf.jpg|link=folha}}
{{picdicimg|pt|image=Picea koyamae shoot.JPG|link=agulha}}
{{picdicimg|pt|image=Flor_de_poma.jpg|link=flor}}
{{picdicimg|pt|image=Red_Apple.jpg|link=fruto}}
}}
=== รากศัพท์ ===
{{dercat|pt|itc-ola|itc-pro|ine-pro|inh=2}}
{{etymon|pt|id=tree|:inh|roa-opt:arvor<id:tree>|text=:la|tree=1}}
{{root|pt|ine-pro|*h₃erdʰ-}} จาก{{inh|pt|roa-opt|arvor}}, จาก{{inh|pt|la|arbor|arborem}}; เทียบ{{cog|gl|árbore}}, {{cog|es|árbol}}
=== การออกเสียง ===
{{pt-IPA|árvo^re}}
* {{IPA|pt|/ˈaɹ.vo.ɾi/|a=Caipira}}
* {{IPA|pt|/ˈaɦ.vo.ɾi/|/ˈaɦ.vu.ɾi/|a=Northeast Brazil}}
* {{audio|pt|pt-br-árvore.ogg|a=BR}}
* {{audio|pt|LL-Q5146 (por)-Nelson Ricardo 2500-árvore.wav|a=Portugal}}
* {{audio|pt|LL-Q5146 (por)-Santamarcanda-árvore.wav|a=<<Portugal>> (<<Porto>>)}}
* {{hmp|pt|Árvore}}
* {{hyph|pt|ár|vo|re}}
=== คำนาม ===
{{pt-noun|f}}
# [[ต้นไม้]]
#: {{ux|pt|As '''árvores''' melhoram a qualidade do ar.|'''Trees''' improve air quality.}}
# {{lb|pt|graph theory}} ต้นไม้ (กราฟ)
==== ลูกคำ ====
* {{l|pt|arvorar}}
* {{l|pt|árvore da vida}}
* {{l|pt|árvore da Liberdade}}
* {{l|pt|árvore de fogo}}
* {{l|pt|árvore de Natal||Christmas tree}}
* {{l|pt|árvore genealógica||family tree}}
* {{l|pt|árvore de Diana||arbor Dianae}}
==== คำสืบทอด ====
* {{desc|pov|arvuri}}
* {{desc|kea|arvi|arvori}}
* {{desc|mzs|árve|alts=1}}
=== อ่านเพิ่ม ===
* {{R:pt:Aulete}}
* {{R:pt:Priberam}}
{{C|pt|พืช}}
0mif13oci9oviwfeadeqxi7lif0sg5u
pão
0
14328
5754491
5633678
2026-08-06T07:43:35Z
OctraBot
3198
update template use
5754491
wikitext
text/x-wiki
{{also/auto}}
==ภาษาโปรตุเกส==
=== รากศัพท์ ===
{{etymon|pt|id=bread|:inh|roa-opt:pan<id:bread>|tree=+|text=+2}}
{{inh+|pt|roa-opt|pan}}, จาก{{inh|pt|la|panis|pānem}}<ref>{{R:pt:Infopédia}}</ref><ref>{{R:pt:Priberam}}</ref>
เทียบ{{cog|gl|-}}, {{cog|ast|-}}, {{cog|roa-leo|-}}, {{cog|es|pan}}, {{cog|ca|pa}}, {{cog|fr|pain}}, {{cog|it|pane}}, และ{{cog|ro|pâine}}
<!--{{cog|gl,ast,roa-leo,es|pan}}-->
===การออกเสียง===
{{pt-IPA}}
* {{audio|pt|LL-Q5146 (por)-Nelson Ricardo 2500-pão.wav |a=Portugal}}
* คำอ่านเทียบเคียง: เปาง์ (เสียงสระเอาขึ้นจมูก)
* {{rhymes|pt|ɐ̃w̃|s=1}}
* {{hyphenation|pt|pão}}
===คำนาม===
{{pt-noun|m|pães}}
# [[ขนมปัง]]
# วัตถุที่มีรูปทรงหรือลักษณะคล้ายขนมปัง
# ธัญพืชที่ใช้สำหรับทำขนมปัง
# [[อาหาร]]
# (''ความหมายเชิงภาพพจน์'') สิ่งที่จำเป็นต่อการยังชีพ
7qw0p077bu8ibgpj52bpr169ufljpgi
bouteille
0
14370
5754478
4746813
2026-08-06T07:23:58Z
OctraBot
3198
update template use
5754478
wikitext
text/x-wiki
{{also/auto}}
== ภาษาดัตช์ ==
=== รูปแบบอื่น ===
* {{alt|nl|boetelje|bottelje|boutelje||เลิกใช้ทั้งหมด}}
=== รากศัพท์ ===
{{bor+|nl|fr|bouteille}}
=== การออกเสียง ===
* {{IPA|nl|/buˈtɛi̯(l).jə/}}
* {{hyphenation|nl|bou|teil|le}}
=== คำนาม ===
{{nl-noun|f|-s|-}}
# {{lb|nl|archaic}} [[ขวด]]
#: {{syn|nl|fles}}
==== คำเกี่ยวข้อง ====
* {{l|nl|bottel}}
== ภาษาฝรั่งเศส ==
=== รากศัพท์ ===
{{etymon|fr|:inh|fro:boteille<id:bottle>|id=bottle}}
จาก{{inh|fr|fro|boteille}}, จาก{{inh|fr|LL.|butticula}}
=== การออกเสียง ===
* {{fr-IPA}}
* {{audio|fr|Fr-bouteille.ogg}}
* {{rhymes|fr|ɛj|s=2}}
=== คำนาม ===
{{fr-noun|f}}
# [[ขวด]]
#: {{coi|fr|boire à la '''bouteille'''|to drink straight from the bottle}}
# [[ประสบการณ์]]
#: {{coi|fr|[[avoir de la bouteille|avoir de la '''bouteille''']]|to be experienced}}
#: {{coi|fr|[[prendre de la bouteille|prendre de la '''bouteille''']]|to gain experience}}
==== ลูกคำ ====
{{col|fr|title=Related terms
|aimer la bouteille
|avec des si on mettrait Paris en bouteille
|bouteille à l’encre
|bouteille à la mer
|cul de bouteille,cul-de-bouteille
|demi-bouteille
|embouteillage
|embouteiller
|embouteiller
|embouteilleur
|embouteilleuse
|jeter une bouteille à la mer
|laisser sa raison au fond de la bouteille
|mettre en bouteille
|mise en bouteille
|ouvre-bouteille
|règle de bouteille
}}
==== คำสืบทอด ====
* {{desc|ht|boutèy}}
; Borrowings
{{top3}}
* {{desc|bor=1|gsw|Butëlle}}
* {{desc|bor=1|an|botella}}
* {{desc|bor=1|ast|botella}}
* {{desc|bor=1|eu|botila}}
* {{desc|bor=1|bg|бутилка}} {{q|+ {{m|bg|-ка}}}}
* {{desc|bor=1|ca|botella}}
* {{desc|bor=1|chn|laputay}} ''(from la bouteille)''
** {{desc|myh|lapu·ta·y|bor=1}}
* {{desc|bor=1|nl|bouteille|alts=1}} {{q|obsolete}}
* {{desc|bor=1|gl|botella}}
* {{desc|bor=1|de|Bouteille}} {{q|obsolete|unadapted}}
* {{desc|bor=1|de|Buttel}} {{q|adapted}}
** {{desc|pl|butla|bor=1}}
*** {{desc|pl|butelka|der=1}} {{see desc}}
* {{desctree|bor=1|it|bottiglia}}
* {{desc|bor=1|lt|butelis}}
* {{desc|bor=1|gml|buddel}}
** {{desc|nds-de|Buddel}}
*** {{desc|de|Buddel|bor=1}}
** {{desc|pdt|Buddel}}
** {{desc|et|pudel|bor=1}}
** {{desc|lv|pudele|bor=1}}
* {{desc|bor=1|mos|butelle|bugtelle}}
* {{desc|bor=1|se|bohtal}}
* {{desc|bor=1|pt|botelha}}
* {{desc|bor=1|ro|butelie}}
* {{desc|bor=1|ru|бутыль}}
* {{desc|bor=1|es|botella}} {{see desc}}
* {{desctree|bor=1|sv|butelj}}
* {{desc|bor=1|sh|putela}} / {{l|sh|путела}}
{{bottom}}
=== อ่านเพิ่ม ===
* {{R:fr:TLFi}}
{{cln|fr|terms inherited from Latin}}
{{C|fr|Containers|Vessels}}
lwvx7furu6wuuzn9l770fge228cxcuu
duo
0
15948
5754501
5726253
2026-08-06T07:55:35Z
OctraBot
3198
/* รากศัพท์ */
5754501
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|𦕰}}
{{head|cmn|พินอิน}}
# {{nonstandard spelling of|cmn|sc=Latn|duō}}
# {{nonstandard spelling of|cmn|sc=Latn|duó}}
# {{nonstandard spelling of|cmn|sc=Latn|duǒ}}
# {{nonstandard spelling of|cmn|sc=Latn|duò}}
== ภาษาละติน ==
{{number box|la|2}}
===รูปแบบอื่น===
* Symbol: {{l|la|II}}
===รากศัพท์===
{{etymon|la|:inh|itc-pro:*duō}}
{{PIE word|la|dwóh₁}}
จาก{{inh|la|itc-pro|*duō}}, จาก{{inh|la|ine-pro|*dwóh₁}} (ซึ่งผันรูปเป็นทวิพจน์l); ร่วมเชื้อสายกับ{{cog|grc|δύο}}, {{cog|sa|द्व|tr=dvá}}, {{cog|cu|дъва}}, และ{{cog|ang|twā}} (ซึ่งเป็นรากของ{{cog|en|two}})<ref>{{R:itc:EDL|page=183|head=duo, duae, duo}}</ref>
=== การออกเสียง ===
* {{la-IPA|eccl=yes}}
* {{audio|la|la-cls-duo.ogg|a=คลาสสิก}}
=== เลข ===
{{la-num-adj|duo<irreg+>|type=card}}
# [[สอง]]
{{la-adecl|duo<irreg+>}}
[[หมวดหมู่:จำนวนเชิงการนับภาษาละติน]]
dts68w5lu1vq0v3v59ymu41k034q61r
5754502
5754501
2026-08-06T07:56:00Z
OctraBot
3198
/* รากศัพท์ */
5754502
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|𦕰}}
{{head|cmn|พินอิน}}
# {{nonstandard spelling of|cmn|sc=Latn|duō}}
# {{nonstandard spelling of|cmn|sc=Latn|duó}}
# {{nonstandard spelling of|cmn|sc=Latn|duǒ}}
# {{nonstandard spelling of|cmn|sc=Latn|duò}}
== ภาษาละติน ==
{{number box|la|2}}
===รูปแบบอื่น===
* Symbol: {{l|la|II}}
===รากศัพท์===
{{etymon|la|:inh|itc-pro:*duō}}
{{PIE word|la|dwóh₁}}
จาก{{inh|la|itc-pro|*duō}}, จาก{{inh|la|ine-pro|*dwóh₁}} (ซึ่งผันรูปเป็นทวิพจน์); ร่วมเชื้อสายกับ{{cog|grc|δύο}}, {{cog|sa|द्व|tr=dvá}}, {{cog|cu|дъва}}, และ{{cog|ang|twā}} (ซึ่งเป็นรากของ{{cog|en|two}})<ref>{{R:itc:EDL|page=183|head=duo, duae, duo}}</ref>
=== การออกเสียง ===
* {{la-IPA|eccl=yes}}
* {{audio|la|la-cls-duo.ogg|a=คลาสสิก}}
=== เลข ===
{{la-num-adj|duo<irreg+>|type=card}}
# [[สอง]]
{{la-adecl|duo<irreg+>}}
[[หมวดหมู่:จำนวนเชิงการนับภาษาละติน]]
8avqr4s6fufmz3n6sd5znueozc8bnsa
5754503
5754502
2026-08-06T07:56:22Z
OctraBot
3198
/* รูปแบบอื่น */
5754503
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|𦕰}}
{{head|cmn|พินอิน}}
# {{nonstandard spelling of|cmn|sc=Latn|duō}}
# {{nonstandard spelling of|cmn|sc=Latn|duó}}
# {{nonstandard spelling of|cmn|sc=Latn|duǒ}}
# {{nonstandard spelling of|cmn|sc=Latn|duò}}
== ภาษาละติน ==
{{number box|la|2}}
===รูปแบบอื่น===
* Symbol: {{l|la|II|tr-}}
===รากศัพท์===
{{etymon|la|:inh|itc-pro:*duō}}
{{PIE word|la|dwóh₁}}
จาก{{inh|la|itc-pro|*duō}}, จาก{{inh|la|ine-pro|*dwóh₁}} (ซึ่งผันรูปเป็นทวิพจน์); ร่วมเชื้อสายกับ{{cog|grc|δύο}}, {{cog|sa|द्व|tr=dvá}}, {{cog|cu|дъва}}, และ{{cog|ang|twā}} (ซึ่งเป็นรากของ{{cog|en|two}})<ref>{{R:itc:EDL|page=183|head=duo, duae, duo}}</ref>
=== การออกเสียง ===
* {{la-IPA|eccl=yes}}
* {{audio|la|la-cls-duo.ogg|a=คลาสสิก}}
=== เลข ===
{{la-num-adj|duo<irreg+>|type=card}}
# [[สอง]]
{{la-adecl|duo<irreg+>}}
[[หมวดหมู่:จำนวนเชิงการนับภาษาละติน]]
oqei6sfpih4ja6ie7caewr0klw247ir
5754504
5754503
2026-08-06T07:56:37Z
OctraBot
3198
/* รูปแบบอื่น */
5754504
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|𦕰}}
{{head|cmn|พินอิน}}
# {{nonstandard spelling of|cmn|sc=Latn|duō}}
# {{nonstandard spelling of|cmn|sc=Latn|duó}}
# {{nonstandard spelling of|cmn|sc=Latn|duǒ}}
# {{nonstandard spelling of|cmn|sc=Latn|duò}}
== ภาษาละติน ==
{{number box|la|2}}
===รูปแบบอื่น===
* Symbol: {{l|la|II|tr=-}}
===รากศัพท์===
{{etymon|la|:inh|itc-pro:*duō}}
{{PIE word|la|dwóh₁}}
จาก{{inh|la|itc-pro|*duō}}, จาก{{inh|la|ine-pro|*dwóh₁}} (ซึ่งผันรูปเป็นทวิพจน์); ร่วมเชื้อสายกับ{{cog|grc|δύο}}, {{cog|sa|द्व|tr=dvá}}, {{cog|cu|дъва}}, และ{{cog|ang|twā}} (ซึ่งเป็นรากของ{{cog|en|two}})<ref>{{R:itc:EDL|page=183|head=duo, duae, duo}}</ref>
=== การออกเสียง ===
* {{la-IPA|eccl=yes}}
* {{audio|la|la-cls-duo.ogg|a=คลาสสิก}}
=== เลข ===
{{la-num-adj|duo<irreg+>|type=card}}
# [[สอง]]
{{la-adecl|duo<irreg+>}}
[[หมวดหมู่:จำนวนเชิงการนับภาษาละติน]]
sccloix951pn7yhduq7lo8lyh8s9nn6
5754509
5754504
2026-08-06T08:24:58Z
OctraBot
3198
/* ภาษาจีนกลาง */ เก็บกวาด
5754509
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|𦕰}}
{{cmn-pinyin|notr=1}}
# {{nonstandard spelling of|cmn|sc=Latn|duō}}
# {{nonstandard spelling of|cmn|sc=Latn|duó}}
# {{nonstandard spelling of|cmn|sc=Latn|duǒ}}
# {{nonstandard spelling of|cmn|sc=Latn|duò}}
==== หมายเหตุการใช้ ====
* {{cmn-toneless-note}}
== ภาษาละติน ==
{{number box|la|2}}
===รูปแบบอื่น===
* Symbol: {{l|la|II|tr=-}}
===รากศัพท์===
{{etymon|la|:inh|itc-pro:*duō}}
{{PIE word|la|dwóh₁}}
จาก{{inh|la|itc-pro|*duō}}, จาก{{inh|la|ine-pro|*dwóh₁}} (ซึ่งผันรูปเป็นทวิพจน์); ร่วมเชื้อสายกับ{{cog|grc|δύο}}, {{cog|sa|द्व|tr=dvá}}, {{cog|cu|дъва}}, และ{{cog|ang|twā}} (ซึ่งเป็นรากของ{{cog|en|two}})<ref>{{R:itc:EDL|page=183|head=duo, duae, duo}}</ref>
=== การออกเสียง ===
* {{la-IPA|eccl=yes}}
* {{audio|la|la-cls-duo.ogg|a=คลาสสิก}}
=== เลข ===
{{la-num-adj|duo<irreg+>|type=card}}
# [[สอง]]
{{la-adecl|duo<irreg+>}}
[[หมวดหมู่:จำนวนเชิงการนับภาษาละติน]]
fhhxrdehur3nb560m9gb9d0hez3q3wf
ขจิต
0
17486
5754335
1579481
2026-08-06T01:04:54Z
Alifshinobi
397
5754335
wikitext
text/x-wiki
==ภาษาไทย==
===รากศัพท์===
{{bor+|th|pi|ขจิต}}
===การออกเสียง===
{{th-pron|ขะ-จิด}}
=== คำกริยา ===
{{th-verb}}
# [[ประดับ]], [[ตกแต่ง]]
===อ้างอิง===
* [https://web.archive.org/web/20090303000030/http://rirs3.royin.go.th/dictionary.asp พจนานุกรม ฉบับราชบัณฑิตยสถาน พ.ศ. ๒๕๔๒]
dh0bm8dh4kasjgh86al6bw2p5i1ztoo
guāng
0
18433
5754545
1876495
2026-08-06T09:30:43Z
OctraBot
3198
เก็บกวาด
5754545
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== รูปแบบอื่น ===
* {{alt|cmn|guang||nonstandard}}
* {{alt|cmn|guāŋ||very rare shorthand}}
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|侊}}
# {{cmn-pinyin of|僙}}
# {{cmn-pinyin of|光}}
# {{cmn-pinyin of|咣}}
# {{cmn-pinyin of|垙}}
# {{cmn-pinyin of|姯}}
# {{cmn-pinyin of|樤}}
# {{cmn-pinyin of|洸}}
# {{cmn-pinyin of|潡}}
# {{cmn-pinyin of|灮}}
# {{cmn-pinyin of|炗}}
# {{cmn-pinyin of|炛}}
# {{cmn-pinyin of|烡}}
# {{cmn-pinyin of|珖}}
# {{cmn-pinyin of|胱}}
# {{cmn-pinyin of|茪}}
# {{cmn-pinyin of|輄}}
# {{cmn-pinyin of|銧}}
# {{cmn-pinyin of|黆}}
# {{cmn-pinyin of|炚}}
smmhkwul3nlxoi59up8pjvkgoqk2ify
yù
0
18444
5754511
1878542
2026-08-06T08:32:14Z
OctraBot
3198
เก็บกวาด
5754511
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การออกเสียง ===
* {{audio|cmn|Zh-yù.ogg}}
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|玉}}
# {{cmn-pinyin of|語}}
# {{cmn-pinyin of|與}}
# {{cmn-pinyin of|俼}}
# {{cmn-pinyin of|司}}
# {{cmn-pinyin of|哊}}
# {{cmn-pinyin of|喅}}
# {{cmn-pinyin of|喐}}
# {{cmn-pinyin of|喩|喻|attn=1}}
# {{cmn-pinyin of|噊}}
# {{cmn-pinyin of|圫}}
# {{cmn-pinyin of|域}}
# {{cmn-pinyin of|堉}}
# {{cmn-pinyin of|墺}}
# {{cmn-pinyin of|奧}}
# {{cmn-pinyin of|嫗}}
# {{cmn-pinyin of|寓}}
# {{cmn-pinyin of|專}}
# {{cmn-pinyin of|峪}}
# {{cmn-pinyin of|嶎}}
# {{cmn-pinyin of|庽}}
# {{cmn-pinyin of|彧}}
# {{cmn-pinyin of|御}}
# {{cmn-pinyin of|忬}}
# {{cmn-pinyin of|悆}}
# {{cmn-pinyin of|悇}}
# {{cmn-pinyin of|惋}}
# {{cmn-pinyin of|惐}}
# {{cmn-pinyin of|愈}}
# {{cmn-pinyin of|或}}
# {{cmn-pinyin of|戫}}
# {{cmn-pinyin of|昱}}
# {{cmn-pinyin of|栣}}
# {{cmn-pinyin of|棛}}
# {{cmn-pinyin of|棜}}
# {{cmn-pinyin of|棫}}
# {{cmn-pinyin of|櫲}}
# {{cmn-pinyin of|欥}}
# {{cmn-pinyin of|慾}}
# {{cmn-pinyin of|毓}}
# {{cmn-pinyin of|汩}}
# {{cmn-pinyin of|浴}}
# {{cmn-pinyin of|淢}}
# {{cmn-pinyin of|淯}}
# {{cmn-pinyin of|潏}}
# {{cmn-pinyin of|澦}}
# {{cmn-pinyin of|澯}}
# {{cmn-pinyin of|灪}}
# {{cmn-pinyin of|焴}}
# {{cmn-pinyin of|煜}}
# {{cmn-pinyin of|照}}
# {{cmn-pinyin of|熠}}
# {{cmn-pinyin of|燏}}
# {{cmn-pinyin of|燠}}
# {{cmn-pinyin of|爩}}
# {{cmn-pinyin of|獄}}
# {{cmn-pinyin of|獝}}
# {{cmn-pinyin of|玈}}
# {{cmn-pinyin of|琙}}
# {{cmn-pinyin of|瘉}}
# {{cmn-pinyin of|癒}}
# {{cmn-pinyin of|矞}}
# {{cmn-pinyin of|砡}}
# {{cmn-pinyin of|硲}}
# {{cmn-pinyin of|礇}}
# {{cmn-pinyin of|礖}}
# {{cmn-pinyin of|礜}}
# {{cmn-pinyin of|禦}}
# {{cmn-pinyin of|禱}}
# {{cmn-pinyin of|秗}}
# {{cmn-pinyin of|稢}}
# {{cmn-pinyin of|稶}}
# {{cmn-pinyin of|穥}}
# {{cmn-pinyin of|籞}}
# {{cmn-pinyin of|籨}}
# {{cmn-pinyin of|粤}}
# {{cmn-pinyin of|緎}}
# {{cmn-pinyin of|繘}}
# {{cmn-pinyin of|罭}}
# {{cmn-pinyin of|罸}}
# {{cmn-pinyin of|聿}}
# {{cmn-pinyin of|肀}}
# {{cmn-pinyin of|育}}
# {{cmn-pinyin of|舅}}
# {{cmn-pinyin of|舏}}
# {{cmn-pinyin of|芋}}
# {{cmn-pinyin of|芌}}
# {{cmn-pinyin of|苑}}
# {{cmn-pinyin of|茟}}
# {{cmn-pinyin of|莾}}
# {{cmn-pinyin of|菷}}
# {{cmn-pinyin of|萮}}
# {{cmn-pinyin of|蒮}}
# {{cmn-pinyin of|蓣}}
# {{cmn-pinyin of|蔙}}
# {{cmn-pinyin of|蕷}}
# {{cmn-pinyin of|薁}}
# {{cmn-pinyin of|藄}}
# {{cmn-pinyin of|蜟}}
# {{cmn-pinyin of|蜮}}
# {{cmn-pinyin of|蟇}}
# {{cmn-pinyin of|衖}}
# {{cmn-pinyin of|衙}}
# {{cmn-pinyin of|裕}}
# {{cmn-pinyin of|誚}}
# {{cmn-pinyin of|諭}}
# {{cmn-pinyin of|譽}}
# {{cmn-pinyin of|谰}}
# {{cmn-pinyin of|豫}}
# {{cmn-pinyin of|軉}}
# {{cmn-pinyin of|輍}}
# {{cmn-pinyin of|輿}}
# {{cmn-pinyin of|迂}}
# {{cmn-pinyin of|逳}}
# {{cmn-pinyin of|遇}}
# {{cmn-pinyin of|遹}}
# {{cmn-pinyin of|醧}}
# {{cmn-pinyin of|鈺}}
# {{cmn-pinyin of|銉}}
# {{cmn-pinyin of|鋊}}
# {{cmn-pinyin of|錥}}
# {{cmn-pinyin of|鐭}}
# {{cmn-pinyin of|閼}}
# {{cmn-pinyin of|閾}}
# {{cmn-pinyin of|阏}}
# {{cmn-pinyin of|隩}}
# {{cmn-pinyin of|雤}}
# {{cmn-pinyin of|雩}}
# {{cmn-pinyin of|霱}}
# {{cmn-pinyin of|預}}
# {{cmn-pinyin of|飫}}
# {{cmn-pinyin of|饇}}
# {{cmn-pinyin of|馭}}
# {{cmn-pinyin of|騟}}
# {{cmn-pinyin of|驈}}
# {{cmn-pinyin of|鬰|鬱|欎|欝|郁|attn=1}}
# {{cmn-pinyin of|鬻}}
# {{cmn-pinyin of|魊}}
# {{cmn-pinyin of|鱆}}
# {{cmn-pinyin of|鳿}}
# {{cmn-pinyin of|鴥|鴪|attn=1}}
# {{cmn-pinyin of|鵒}}
# {{cmn-pinyin of|鷸}}
# {{cmn-pinyin of|鸍}}
# {{cmn-pinyin of|黦}}
# {{cmn-pinyin of|龥}}
# {{cmn-pinyin of|䋖}}
# {{cmn-pinyin of|䵥}}
# {{cmn-pinyin of|尉}}
# {{cmn-pinyin of|𠁓}}
# {{cmn-pinyin of|熨}}
2lpq6b0cps2q4ofweboyay47oafgd1v
sǎn
0
21274
5754528
1877834
2026-08-06T09:03:10Z
OctraBot
3198
เก็บกวาด
5754528
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|仐}}
# {{cmn-pinyin of|傘}}
# {{cmn-pinyin of|叁}}
# {{cmn-pinyin of|叄}}
# {{cmn-pinyin of|敜}}
# {{cmn-pinyin of|粣}}
# {{cmn-pinyin of|粿}}
# {{cmn-pinyin of|糂}}
# {{cmn-pinyin of|糝}}
# {{cmn-pinyin of|糣}}
# {{cmn-pinyin of|糤}}
# {{cmn-pinyin of|繖}}
# {{cmn-pinyin of|鏾}}
# {{cmn-pinyin of|饊}}
# {{cmn-pinyin of|散}}
9kmci9b6ue8ixldau5n1k05byundzfh
sàn
0
21275
5754530
1877832
2026-08-06T09:04:07Z
OctraBot
3198
เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754530
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|丈}}
# {{cmn-pinyin of|俕}}
# {{cmn-pinyin of|弊}}
# {{cmn-pinyin of|散}}
# {{cmn-pinyin of|潵}}
# {{cmn-pinyin of|閐}}
== ภาษาลีกูเรีย ==
=== คำกริยา ===
{{head|lij|รูปกริยา}}
# {{inflection of|lij|savéi||3|p|pres|ind}}
== ภาษาเวียดนาม ==
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|mtq|-}} Bi {{m|mtq|khaình}}, {{cog|tou|-}} [Cuối Chăm] ''rɐːn²'', Kri Phong ''nraɲ³⁵''
=== การออกเสียง ===
{{vi-IPA}}
=== คำนาม ===
{{vi-noun|[[常]], [[棧]]}}
# [[แป้ง]] (ทำอาหาร)
#: {{syn|vi|sàn nhà}}
==== ลูกคำ ====
{{col|vi|nhà sàn|sàn chứng khoán|sàn sàn<ll:tulay>|sập sàn}}
==== ดูเพิ่ม ====
* {{l|vi|nền}}
d8errnz61ljv5rwav06dhmj7o7bl6cs
5754531
5754530
2026-08-06T09:06:46Z
OctraBot
3198
/* รากศัพท์ */
5754531
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|丈}}
# {{cmn-pinyin of|俕}}
# {{cmn-pinyin of|弊}}
# {{cmn-pinyin of|散}}
# {{cmn-pinyin of|潵}}
# {{cmn-pinyin of|閐}}
== ภาษาลีกูเรีย ==
=== คำกริยา ===
{{head|lij|รูปกริยา}}
# {{inflection of|lij|savéi||3|p|pres|ind}}
== ภาษาเวียดนาม ==
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|mtq|-}}บี {{m|mtq|khaình}}, {{cog|tou|-}} [Cuối Chăm] ''rɐːn²'', Kri Phong ''nraɲ³⁵''
=== การออกเสียง ===
{{vi-IPA}}
=== คำนาม ===
{{vi-noun|[[常]], [[棧]]}}
# [[แป้ง]] (ทำอาหาร)
#: {{syn|vi|sàn nhà}}
==== ลูกคำ ====
{{col|vi|nhà sàn|sàn chứng khoán|sàn sàn<ll:tulay>|sập sàn}}
==== ดูเพิ่ม ====
* {{l|vi|nền}}
nmn7b8o5fx367614d49qahehjo7yo7i
bù
0
21314
5754551
1875790
2026-08-06T09:33:20Z
OctraBot
3198
เก็บกวาด
5754551
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== รูปแบบอื่น ===
* {{alt|cmn|bu||nonstandard}}
=== การออกเสียง ===
* {{audio|zh|Zh-bu4.ogg}}
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|不}}
# {{cmn-pinyin of|佈}}
# {{cmn-pinyin of|卢}}
# {{cmn-pinyin of|吥}}
# {{cmn-pinyin of|咘}}
# {{cmn-pinyin of|埔}}
# {{cmn-pinyin of|埗}}
# {{cmn-pinyin of|埚}}
# {{cmn-pinyin of|埠}}
# {{cmn-pinyin of|布}}
# {{cmn-pinyin of|怖}}
# {{cmn-pinyin of|悑}}
# {{cmn-pinyin of|捗}}
# {{cmn-pinyin of|步}}
# {{cmn-pinyin of|歨}}
# {{cmn-pinyin of|歩}}
# {{cmn-pinyin of|溡}}
# {{cmn-pinyin of|瓪}}
# {{cmn-pinyin of|篰}}
# {{cmn-pinyin of|簼}}
# {{cmn-pinyin of|荹}}
# {{cmn-pinyin of|菦}}
# {{cmn-pinyin of|蔀}}
# {{cmn-pinyin of|薄}}
# {{cmn-pinyin of|部}}
# {{cmn-pinyin of|郶}}
# {{cmn-pinyin of|鈈|鈽|钚|钸|attn=1}}
# {{cmn-pinyin of|陃}}
# {{cmn-pinyin of|鞭}}
# {{cmn-pinyin of|餢}}
# {{cmn-pinyin of|鮬}}
p2o7b8br0td546e3p4t0jxr06aixcmz
บ่
0
22060
5754562
5029864
2026-08-06T11:07:28Z
Ai Ku Karng
17824
/* ภาษาไทย */
5754562
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== รากศัพท์ ===
{{inh+|th|tai-pro|*boːᴮ||ไม่}}; ร่วมเชื้อสายกับ{{cog|tts|บ่}}, {{cog|lo|ບໍ່}}, {{cog|nod|ᨷᩴ᩵}}, {{cog|kkh|ᨷᩢ}}, {{cog|khb|ᦢᧁᧈ}}, {{cog|blt|ꪹꪚ꪿ꪱ}}, {{cog|shn|မဝ်ႇ}}, {{cog|zzj|mboh}}, {{cog|skb|โบ}}, {{cog|za|mbouj}}; เทียบ{{cog|nan|無||ไม่มี|tr=บ๊อ}}
=== การออกเสียง ===
{{th-pron|บ่อ|เบาะ}}
=== คำกริยาวิเศษณ์ ===
{{th-adv|-}}
# {{lb|th|literary|poetic|dialect}} [[ไม่]], [[มัก]][[ใช้]][[ใน]][[หนังสือ]][[เก่า]][[หรือ]][[กวีนิพนธ์]] [[หรือ]][[บาง]][[ท้องถิ่น]], [[ใน]][[ที่]][[ใช้]] [[บ]] [[เมื่อ]][[ใช้]][[ว่า]] บ่ [[ก็]][[มี]][[ความ]][[เช่น]][[เดียว]][[กัน]]
==== คำเกี่ยวข้อง ====
* [[บมิ]]
==ภาษาคำเมือง==
===รากศัพท์===
ร่วมเชื้อสายกับ{{cog|tts|บ่}}
=== การออกเสียง ===
* {{IPA|nod|/bɔː˨˩/|a=เชียงใหม่}}
===คำกริยาวิเศษณ์===
{{nod-adv|-}}
# {{alternative form of|nod|ᨷᩴ᩵|t=ไม่}}
== ภาษาอีสาน ==
=== รากศัพท์ ===
{{inh+|th|tai-pro|*boːᴮ||ไม่}}; ร่วมเชื้อสายกับ{{cog|th|บ่}}, {{cog|lo|ບໍ່}}, {{cog|nod|ᨷᩴ᩵}}, {{cog|kkh|ᨷᩢ}}, {{cog|khb|ᦢᧁᧈ}}, {{cog|blt|ꪹꪚ꪿ꪱ}}, {{cog|shn|မဝ်ႇ}}, {{cog|zzj|mboh}}, {{cog|za|mbouj}}
=== การออกเสียง ===
* {{IPA|tts|/bɔː˨˨/|a=ขอนแก่น}}
* {{คำอ่านไทย|บอ<sup>ต่ำ-ระดับ</sup>}} (ประมาณ)
=== คำกริยาวิเศษณ์===
{{tts-adv|-}}
# [[ไม่]]
tvj9jziw2flka2t0re0k50usseems8y
gelsomino
0
25159
5754414
4750477
2026-08-06T03:52:45Z
Octahedron80
267
/* รากศัพท์ */
5754414
wikitext
text/x-wiki
== ภาษาอิตาลี ==
=== รูปแบบอื่น ===
* {{alt|it|gesmino||โบราณ|พบได้ยาก}}
=== รากศัพท์ ===
{{etymon|it|id=jasmine|:bor|ar:يَاسَمِين<id:jasmine>|:influence|gelso<id:mulberry>|tree=1}}
{{bor+|it|ar|يَاسَمِين}}, ได้รับอิทธิพลจาก {{m|it|gelso|t=ต้นมัลเบอร์รี}}
=== การออกเสียง ===
{{it-pr|gelsomìno}}
=== คำนาม ===
{{it-noun|m}}
# [[มะลิ]] {{gloss|พืช, น้ำหอม}}
==== ลูกคำ ====
* {{l|it|Gelsomina}}
* {{l|it|Gelsomini}}
* {{l|it|Gelsomino}}
* {{l|it|gelsomino doppio}}
* {{l|it|gelsomino mugherino}}
{{C|it|ดอกไม้|Olive family plants}}
e2lhjt6btf3sviww0r9byl8l995y9si
jīqìrén
0
29629
5754540
1271237
2026-08-06T09:28:53Z
OctraBot
3198
/* ภาษาจีนกลาง */ เก็บกวาด
5754540
wikitext
text/x-wiki
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|機器人}}
ccp3zjbffmn97qtqnujhjbwppiuh2qx
jīxièrén
0
29652
5754539
1271243
2026-08-06T09:28:31Z
OctraBot
3198
/* ภาษาจีนกลาง */ เก็บกวาด
5754539
wikitext
text/x-wiki
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|機械人}}
pnzmu8tjco1a4whm7mc0zkuibe3l1mk
huǒshān
0
29667
5754543
4712190
2026-08-06T09:29:50Z
OctraBot
3198
/* ภาษาจีน */ เก็บกวาด
5754543
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|火山}}
0p35w0d18hoz6nvhyakuns8qu3lwrad
Pǔtōnghuà
0
29670
5754538
4718884
2026-08-06T09:27:47Z
OctraBot
3198
/* ภาษาจีนกลาง */ เก็บกวาด
5754538
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|普通話}}
fpbzz6ww1q36dssfhd4t4d9gnmc92k1
shènglì
0
31698
5754527
4721762
2026-08-06T08:59:13Z
OctraBot
3198
/* ภาษาจีนกลาง */ เก็บกวาด
5754527
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|勝利}}
7vhogx13owyue4odld4gfe4o3ekssxb
abati
0
32792
5754485
5035857
2026-08-06T07:42:20Z
OctraBot
3198
update template use
5754485
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== การออกเสียง ===
* {{ca-IPA}}
=== คำกริยา ===
{{head|ca|รูปกริยา}}
# {{ca-verb form of|abatre}}
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|abater}}
== ภาษาซาร์ดิเนีย ==
=== รากศัพท์ ===
จาก{{bor|sc|it|abate}},<ref>{{R:sc:WagnerDES}}</ref> จาก{{der|sc|LL.|abbās|abbās, abbātem}}, จาก{{der|sc|grc|ἀββᾶς}}, จาก{{der|sc|arc|אבא|tr=’abbā||พ่อ}}; เทียบ{{cog|sc-src|abate}}
=== การออกเสียง ===
* {{IPA|sc|/aˈbati/}}
=== คำนาม ===
{{sc-noun|m|abatis|f=badessa}}
# {{lb|sc|Campidanese}} [[สมภาร]], [[เจ้าอาวาส]], [[เจ้าอธิการ]]
==== คำเกี่ยวข้อง ====
{{col2|sc|abatzia|badia}}
=== อ้างอิง ===
* {{R:sc:Rubattu2006}}
<references/>
{{C|sc|Monasticism}}
== ภาษาตูปีเก่า ==
=== รูปแบบอื่น ===
* {{alt|tpw|abaxi||LGP}}
=== รากศัพท์ ===
{{etymon|tpw|inh|tup-gua-pro>*aβati>maize|id=maize|text=++}}
ร่วมเชื้อสายกับ{{cog|gn|avati}}
=== การออกเสียง ===
* {{IPA|tpw|/a.βaˈti/}}
* {{rhyme|tpw|i|s=3}}
* {{hyph|tpw|a|ba|ti}}
=== คำนาม ===
{{tpw-noun|u}}
# [[ข้าวโพด]] ({{taxfmt|Zea mays|species}})
==== ลูกคำ ====
{{col|tpw
|abati'y
|abatityba
|abatigûasu
|abatiatã
|abatipeba
|abatiúna
|abatieté
|abatitinga
|abati'i
|abatimirĩ
|Abatiposanga
|Abatiúna}}
==== คำสืบทอด ====
* {{desc|yrl|awatí|alts=1}}
* {{desc|kqq|jauatü|bor=1}}
* {{desc|pt|abati|bor=1|alts=1}}
=== อ้างอิง ===
* {{R:tpw:Staden|XVII|56|Abbati|Abati}}
* {{R:tpw:VLB|Milho, gnrl.|38|2|Abati}}
* {{R:pt:Navarro 2013|abati|8|2}}
{{C|tpw|Maize (plant)}}
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA}}
* {{rhyme|pt|i|s=3}}
* {{hyphenation|pt|a|ba|ti}}
=== รากศัพท์ 1 ===
{{etymon|pt|:bor|tpw:abati<id:maize>|id=maize|text=+}}
==== รูปแบบอื่น ====
* {{alt|pt|avati|auati}}
==== คำนาม ====
{{pt-noun|m}}
# {{lb|pt|Brazil}} [[ข้าวโพด]]
#: {{syn|pt|milho}}
#* {{quote-book|pt
|title=O homem cordial
|chapter=Botica da natureza
|isbn=978-85-8086-890-6
|year_published=2012
|year=1936
|location=São Paulo
|publisher=Schwarcz S.A.
|url=https://books.google.com.br/books/about/O_homem_cordial.html?id=4MKnBAAAQBAJ&source=kp_book_description&redir_esc=y
|author=w:Sérgio Buarque de Holanda
|page=65
|text=Assim é que, na mandioca, vinham procurar o honesto pão de trigo, no pinhão da araucária, a castanha europeia; no '''abati''', o milho, milho alvo do reino.}}
===== คำเกี่ยวข้อง =====
{{col|pt|abativi|abatiguera|abatiapé|batité|abatimirim}}
=== รากศัพท์ 2 ===
{{nonlemma}}
==== คำกริยา ====
{{head|pt|รูปกริยา}}
# {{pt-verb form of|abater}}
{{C|pt|Maize (plant)}}
== ภาษาลัตเวีย ==
=== คำนาม ===
{{head|lv|รูปนาม|g=f}}
# {{inflection of|lv|abate||acc//ins|s}}
== ภาษาอิตาลี ==
=== คำนาม ===
{{head|it|รูปนาม|g=m-p}}
# {{plural of|it|abate}}
=== คำนาม ===
{{head|it|รูปนาม|g=m-p}}
# {{plural of|it|abato}}
=== คำสลับอักษร ===
* {{anagrams|it|a=aabit|abita|baita}}
== ภาษาเอเว ==
=== การออกเสียง ===
* {{IPA|ee|/ˈəbʌˌtɪ/}}
* {{audio|ee|ee-abati.ogg}}
=== คำนาม ===
{{head|ee|คำนาม|พหูพจน์|abatiwo}}
# [[เตียง]]
== ภาษาแอลเบเนีย ==
=== คำนาม ===
{{head|sq|รูปนาม}}
# {{inflection of|sq|abat||def|nom|s|;|indef|dat//abl|s}}
6ze4ir0v6nb1bgem9q4rs3t5fvbssfx
5754495
5754485
2026-08-06T07:44:36Z
OctraBot
3198
/* รากศัพท์ */
5754495
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== การออกเสียง ===
* {{ca-IPA}}
=== คำกริยา ===
{{head|ca|รูปกริยา}}
# {{ca-verb form of|abatre}}
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|abater}}
== ภาษาซาร์ดิเนีย ==
=== รากศัพท์ ===
จาก{{bor|sc|it|abate}},<ref>{{R:sc:WagnerDES}}</ref> จาก{{der|sc|LL.|abbās|abbās, abbātem}}, จาก{{der|sc|grc|ἀββᾶς}}, จาก{{der|sc|arc|אבא|tr=’abbā||พ่อ}}; เทียบ{{cog|sc-src|abate}}
=== การออกเสียง ===
* {{IPA|sc|/aˈbati/}}
=== คำนาม ===
{{sc-noun|m|abatis|f=badessa}}
# {{lb|sc|Campidanese}} [[สมภาร]], [[เจ้าอาวาส]], [[เจ้าอธิการ]]
==== คำเกี่ยวข้อง ====
{{col2|sc|abatzia|badia}}
=== อ้างอิง ===
* {{R:sc:Rubattu2006}}
<references/>
{{C|sc|Monasticism}}
== ภาษาตูปีเก่า ==
=== รูปแบบอื่น ===
* {{alt|tpw|abaxi||LGP}}
=== รากศัพท์ ===
{{etymon|tpw|:inh|tup-gua-pro:*aβati<id:maize>|id=maize|text=++}}
ร่วมเชื้อสายกับ{{cog|gn|avati}}
=== การออกเสียง ===
* {{IPA|tpw|/a.βaˈti/}}
* {{rhyme|tpw|i|s=3}}
* {{hyph|tpw|a|ba|ti}}
=== คำนาม ===
{{tpw-noun|u}}
# [[ข้าวโพด]] ({{taxfmt|Zea mays|species}})
==== ลูกคำ ====
{{col|tpw
|abati'y
|abatityba
|abatigûasu
|abatiatã
|abatipeba
|abatiúna
|abatieté
|abatitinga
|abati'i
|abatimirĩ
|Abatiposanga
|Abatiúna}}
==== คำสืบทอด ====
* {{desc|yrl|awatí|alts=1}}
* {{desc|kqq|jauatü|bor=1}}
* {{desc|pt|abati|bor=1|alts=1}}
=== อ้างอิง ===
* {{R:tpw:Staden|XVII|56|Abbati|Abati}}
* {{R:tpw:VLB|Milho, gnrl.|38|2|Abati}}
* {{R:pt:Navarro 2013|abati|8|2}}
{{C|tpw|Maize (plant)}}
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA}}
* {{rhyme|pt|i|s=3}}
* {{hyphenation|pt|a|ba|ti}}
=== รากศัพท์ 1 ===
{{etymon|pt|:bor|tpw:abati<id:maize>|id=maize|text=+}}
==== รูปแบบอื่น ====
* {{alt|pt|avati|auati}}
==== คำนาม ====
{{pt-noun|m}}
# {{lb|pt|Brazil}} [[ข้าวโพด]]
#: {{syn|pt|milho}}
#* {{quote-book|pt
|title=O homem cordial
|chapter=Botica da natureza
|isbn=978-85-8086-890-6
|year_published=2012
|year=1936
|location=São Paulo
|publisher=Schwarcz S.A.
|url=https://books.google.com.br/books/about/O_homem_cordial.html?id=4MKnBAAAQBAJ&source=kp_book_description&redir_esc=y
|author=w:Sérgio Buarque de Holanda
|page=65
|text=Assim é que, na mandioca, vinham procurar o honesto pão de trigo, no pinhão da araucária, a castanha europeia; no '''abati''', o milho, milho alvo do reino.}}
===== คำเกี่ยวข้อง =====
{{col|pt|abativi|abatiguera|abatiapé|batité|abatimirim}}
=== รากศัพท์ 2 ===
{{nonlemma}}
==== คำกริยา ====
{{head|pt|รูปกริยา}}
# {{pt-verb form of|abater}}
{{C|pt|Maize (plant)}}
== ภาษาลัตเวีย ==
=== คำนาม ===
{{head|lv|รูปนาม|g=f}}
# {{inflection of|lv|abate||acc//ins|s}}
== ภาษาอิตาลี ==
=== คำนาม ===
{{head|it|รูปนาม|g=m-p}}
# {{plural of|it|abate}}
=== คำนาม ===
{{head|it|รูปนาม|g=m-p}}
# {{plural of|it|abato}}
=== คำสลับอักษร ===
* {{anagrams|it|a=aabit|abita|baita}}
== ภาษาเอเว ==
=== การออกเสียง ===
* {{IPA|ee|/ˈəbʌˌtɪ/}}
* {{audio|ee|ee-abati.ogg}}
=== คำนาม ===
{{head|ee|คำนาม|พหูพจน์|abatiwo}}
# [[เตียง]]
== ภาษาแอลเบเนีย ==
=== คำนาม ===
{{head|sq|รูปนาม}}
# {{inflection of|sq|abat||def|nom|s|;|indef|dat//abl|s}}
o0zm1ce0off8ifgtpej28rv1r9rthgv
5754496
5754495
2026-08-06T07:45:05Z
OctraBot
3198
/* รากศัพท์ */
5754496
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== การออกเสียง ===
* {{ca-IPA}}
=== คำกริยา ===
{{head|ca|รูปกริยา}}
# {{ca-verb form of|abatre}}
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|abater}}
== ภาษาซาร์ดิเนีย ==
=== รากศัพท์ ===
จาก{{bor|sc|it|abate}},<ref>{{R:sc:WagnerDES}}</ref> จาก{{der|sc|LL.|abbās|abbās, abbātem}}, จาก{{der|sc|grc|ἀββᾶς}}, จาก{{der|sc|arc|אבא|tr=’abbā||พ่อ}}; เทียบ{{cog|sc-src|abate}}
=== การออกเสียง ===
* {{IPA|sc|/aˈbati/}}
=== คำนาม ===
{{sc-noun|m|abatis|f=badessa}}
# {{lb|sc|Campidanese}} [[สมภาร]], [[เจ้าอาวาส]], [[เจ้าอธิการ]]
==== คำเกี่ยวข้อง ====
{{col2|sc|abatzia|badia}}
=== อ้างอิง ===
* {{R:sc:Rubattu2006}}
<references/>
{{C|sc|Monasticism}}
== ภาษาตูปีเก่า ==
=== รูปแบบอื่น ===
* {{alt|tpw|abaxi||LGP}}
=== รากศัพท์ ===
{{etymon|tpw|:inh|tup-gua-pro:*aβati<id:maize>|id=maize|text=++}}
ร่วมเชื้อสายกับ{{cog|gug|avati}}
=== การออกเสียง ===
* {{IPA|tpw|/a.βaˈti/}}
* {{rhyme|tpw|i|s=3}}
* {{hyph|tpw|a|ba|ti}}
=== คำนาม ===
{{tpw-noun|u}}
# [[ข้าวโพด]] ({{taxfmt|Zea mays|species}})
==== ลูกคำ ====
{{col|tpw
|abati'y
|abatityba
|abatigûasu
|abatiatã
|abatipeba
|abatiúna
|abatieté
|abatitinga
|abati'i
|abatimirĩ
|Abatiposanga
|Abatiúna}}
==== คำสืบทอด ====
* {{desc|yrl|awatí|alts=1}}
* {{desc|kqq|jauatü|bor=1}}
* {{desc|pt|abati|bor=1|alts=1}}
=== อ้างอิง ===
* {{R:tpw:Staden|XVII|56|Abbati|Abati}}
* {{R:tpw:VLB|Milho, gnrl.|38|2|Abati}}
* {{R:pt:Navarro 2013|abati|8|2}}
{{C|tpw|Maize (plant)}}
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA}}
* {{rhyme|pt|i|s=3}}
* {{hyphenation|pt|a|ba|ti}}
=== รากศัพท์ 1 ===
{{etymon|pt|:bor|tpw:abati<id:maize>|id=maize|text=+}}
==== รูปแบบอื่น ====
* {{alt|pt|avati|auati}}
==== คำนาม ====
{{pt-noun|m}}
# {{lb|pt|Brazil}} [[ข้าวโพด]]
#: {{syn|pt|milho}}
#* {{quote-book|pt
|title=O homem cordial
|chapter=Botica da natureza
|isbn=978-85-8086-890-6
|year_published=2012
|year=1936
|location=São Paulo
|publisher=Schwarcz S.A.
|url=https://books.google.com.br/books/about/O_homem_cordial.html?id=4MKnBAAAQBAJ&source=kp_book_description&redir_esc=y
|author=w:Sérgio Buarque de Holanda
|page=65
|text=Assim é que, na mandioca, vinham procurar o honesto pão de trigo, no pinhão da araucária, a castanha europeia; no '''abati''', o milho, milho alvo do reino.}}
===== คำเกี่ยวข้อง =====
{{col|pt|abativi|abatiguera|abatiapé|batité|abatimirim}}
=== รากศัพท์ 2 ===
{{nonlemma}}
==== คำกริยา ====
{{head|pt|รูปกริยา}}
# {{pt-verb form of|abater}}
{{C|pt|Maize (plant)}}
== ภาษาลัตเวีย ==
=== คำนาม ===
{{head|lv|รูปนาม|g=f}}
# {{inflection of|lv|abate||acc//ins|s}}
== ภาษาอิตาลี ==
=== คำนาม ===
{{head|it|รูปนาม|g=m-p}}
# {{plural of|it|abate}}
=== คำนาม ===
{{head|it|รูปนาม|g=m-p}}
# {{plural of|it|abato}}
=== คำสลับอักษร ===
* {{anagrams|it|a=aabit|abita|baita}}
== ภาษาเอเว ==
=== การออกเสียง ===
* {{IPA|ee|/ˈəbʌˌtɪ/}}
* {{audio|ee|ee-abati.ogg}}
=== คำนาม ===
{{head|ee|คำนาม|พหูพจน์|abatiwo}}
# [[เตียง]]
== ภาษาแอลเบเนีย ==
=== คำนาม ===
{{head|sq|รูปนาม}}
# {{inflection of|sq|abat||def|nom|s|;|indef|dat//abl|s}}
izrxvf7or37wyv1k3ok228bk7zk8be0
biǎoyǎnchàng
0
32980
5754549
1250998
2026-08-06T09:32:07Z
OctraBot
3198
/* ภาษาจีนกลาง */ เก็บกวาด
5754549
wikitext
text/x-wiki
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|表演唱}}
8r7qxd3jaf8hney21g6nlxu60lswqvz
xǐhuān
0
32986
5754517
1878484
2026-08-06T08:39:41Z
OctraBot
3198
/* ภาษาจีนกลาง */ เก็บกวาด
5754517
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|喜歡}}
h00fifiyei9fe6z90zhxhg5wfyrncl4
bùcuò
0
33046
5754548
1253001
2026-08-06T09:31:49Z
OctraBot
3198
/* ภาษาจีนกลาง */ เก็บกวาด
5754548
wikitext
text/x-wiki
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|不錯}}
g711vcifekcanph4qrvhvpl6jve7hgj
bùyòng
0
33055
5754547
1875812
2026-08-06T09:31:33Z
OctraBot
3198
/* ภาษาจีนกลาง */ เก็บกวาด
5754547
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|不用}}
hp87349d4x0ixzlaqpzqnynkzp9vp9y
huǒchēzhàn
0
36059
5754544
1268577
2026-08-06T09:30:14Z
OctraBot
3198
/* ภาษาจีนกลาง */ เก็บกวาด
5754544
wikitext
text/x-wiki
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|火車站}}
4rol8vvjms0b6dxfx79uw7nw92y2mya
xīnlǐ
0
36061
5754516
4727190
2026-08-06T08:38:30Z
OctraBot
3198
/* ภาษาจีนกลาง */ เก็บกวาด
5754516
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|心理}}
# {{cmn-pinyin of|心裡}}
# {{cmn-pinyin of|心裏}}
rzwlbiv7vjlw8m4iozb58j79g3zzz2h
jǐngfāng
0
36063
5754541
1271264
2026-08-06T09:29:14Z
OctraBot
3198
/* ภาษาจีนกลาง */ เก็บกวาด
5754541
wikitext
text/x-wiki
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|警方}}
6o7ae1dvevqq2749m0m8lg3u7zyxxqn
jǐngchá
0
36065
5754542
4715640
2026-08-06T09:29:31Z
OctraBot
3198
/* ภาษาจีนกลาง */ เก็บกวาด
5754542
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|警察}}
48wus3nqq60s6vzxfzlu5o89u8ykjj2
tíxǐng
0
36067
5754524
4723995
2026-08-06T08:46:49Z
OctraBot
3198
/* ภาษาจีนกลาง */ เก็บกวาด
5754524
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|提醒}}
g8wu1dw0q10eklf79vrdve1d0xp6815
fǎzhì
0
36071
5754546
4710092
2026-08-06T09:31:08Z
OctraBot
3198
/* ภาษาจีนกลาง */ เก็บกวาด
5754546
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|法制}}
# {{cmn-pinyin of|法治}}
el3v4kzglqkaat0nuwhxfmjnbz2srmx
jié
0
36537
5754550
1876700
2026-08-06T09:32:46Z
OctraBot
3198
/* ภาษาจีนกลาง */ เก็บกวาด
5754550
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== รูปแบบอื่น ===
* {{alt|cmn|jie||nonstandard}}
=== การออกเสียง ===
* {{audio|cmn|Zh-jié.ogg}}
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|倢}}
# {{cmn-pinyin of|偈}}
# {{cmn-pinyin of|偼}}
# {{cmn-pinyin of|傑}}
# {{cmn-pinyin of|刦}}
# {{cmn-pinyin of|刧}}
# {{cmn-pinyin of|刼}}
# {{cmn-pinyin of|劫}}
# {{cmn-pinyin of|劼}}
# {{cmn-pinyin of|卩}}
# {{cmn-pinyin of|卪}}
# {{cmn-pinyin of|喼}}
# {{cmn-pinyin of|婕}}
# {{cmn-pinyin of|孑}}
# {{cmn-pinyin of|寀}}
# {{cmn-pinyin of|岊}}
# {{cmn-pinyin of|崨}}
# {{cmn-pinyin of|嵍}}
# {{cmn-pinyin of|嵥}}
# {{cmn-pinyin of|幯}}
# {{cmn-pinyin of|截}}
# {{cmn-pinyin of|扷}}
# {{cmn-pinyin of|抽}}
# {{cmn-pinyin of|拮}}
# {{cmn-pinyin of|捷}}
# {{cmn-pinyin of|搩}}
# {{cmn-pinyin of|擳}}
# {{cmn-pinyin of|昅}}
# {{cmn-pinyin of|杰}}
# {{cmn-pinyin of|栉}}
# {{cmn-pinyin of|栨}}
# {{cmn-pinyin of|桀}}
# {{cmn-pinyin of|桔}}
# {{cmn-pinyin of|楬}}
# {{cmn-pinyin of|楶}}
# {{cmn-pinyin of|楸}}
# {{cmn-pinyin of|榤}}
# {{cmn-pinyin of|櫛}}
# {{cmn-pinyin of|櫭}}
# {{cmn-pinyin of|洁}}
# {{cmn-pinyin of|洯}}
# {{cmn-pinyin of|渴}}
# {{cmn-pinyin of|滐}}
# {{cmn-pinyin of|潔}}
# {{cmn-pinyin of|瀄}}
# {{cmn-pinyin of|犵}}
# {{cmn-pinyin of|癤}}
# {{cmn-pinyin of|睫}}
# {{cmn-pinyin of|砗}}
# {{cmn-pinyin of|碣}}
# {{cmn-pinyin of|竭}}
# {{cmn-pinyin of|箑}}
# {{cmn-pinyin of|節}}
# {{cmn-pinyin of|紇}}
# {{cmn-pinyin of|結}}
# {{cmn-pinyin of|絛}}
# {{cmn-pinyin of|结}}
# {{cmn-pinyin of|羯}}
# {{cmn-pinyin of|脻}}
# {{cmn-pinyin of|节}}
# {{cmn-pinyin of|莭}}
# {{cmn-pinyin of|葜}}
# {{cmn-pinyin of|蓵}}
# {{cmn-pinyin of|蛟}}
# {{cmn-pinyin of|蜐}}
# {{cmn-pinyin of|蠘}}
# {{cmn-pinyin of|蠞}}
# {{cmn-pinyin of|蠽}}
# {{cmn-pinyin of|衱}}
# {{cmn-pinyin of|袴}}
# {{cmn-pinyin of|袺}}
# {{cmn-pinyin of|訐}}
# {{cmn-pinyin of|詰}}
# {{cmn-pinyin of|誱}}
# {{cmn-pinyin of|讦}}
# {{cmn-pinyin of|诘}}
# {{cmn-pinyin of|趌}}
# {{cmn-pinyin of|踕}}
# {{cmn-pinyin of|迼}}
# {{cmn-pinyin of|鉣}}
# {{cmn-pinyin of|鍻}}
# {{cmn-pinyin of|鐑}}
# {{cmn-pinyin of|頡}}
# {{cmn-pinyin of|颉}}
# {{cmn-pinyin of|騔}}
# {{cmn-pinyin of|髻}}
# {{cmn-pinyin of|鮚}}
# {{cmn-pinyin of|㑵}}
# {{cmn-pinyin of|㓗}}
# {{cmn-pinyin of|㓤}}
# {{cmn-pinyin of|㸅}}
# {{cmn-pinyin of|擷}}
ombwjurqbh6eiz00lfacfw2c3g6n8i6
dose
0
41537
5754350
1873979
2026-08-06T02:02:22Z
Octahedron80
267
/* ภาษาอังกฤษ */ เก็บกวาด
5754350
wikitext
text/x-wiki
{{also/auto}}
== ภาษาอังกฤษ ==
=== รากศัพท์ 1 ===
{{root|en|ine-pro|*deh₃-}}
{{bor+|en|frm|dose}}, จาก{{der|en|la-lat|dosis}}, จาก{{der|en|grc|δόσις||ส่วนหนึ่ง(ของยา)ที่สั่งจ่าย|lit=สิ่งที่ให้}}, {{w|กาเลน}}และแพทย์ชาวกรีกคนอื่น ๆ ใช้คำนี้เพื่อหมายถึงปริมาณยา, จาก{{m|grc|δίδωμι||ให้}}; ส่วนใหญ่ถูกแทนที่ด้วย{{noncog|en|drench}}; {{doublet|en|doos}}
==== การออกเสียง ====
* {{IPA|en|/ˈdəʊ̯s/|/ˈdɵ̞ʊ̯s/|a=RP}}
* {{IPA|en|/ˈdoʊ̯s/|/ˈdɔʊ̯s/|a=GA,CA}}
* {{IPA|en|/ˈdoʊ̯s/|[ˈdeʊ̯s]|/ˈdɔʊ̯s/|[ˈdɛʊ̯s]|a=California|q2=California Vowel Shift|q4=California Vowel Shift}}
** {{audio|en|en-us-dose.ogg|a=Southern California|IPA=[dɛɯ̟s]}}
* {{IPA|en|/ˈdəʉ̯s/|/ˈdɐʉ̯s/|a=AU|q2=some speakers}}
* {{IPA|en|/ˈdɐʉ̯s/|a=NZ}}
* {{rhymes|en|əʊs|s=1}}
* {{hyph|en|dose}}
==== คำนาม ====
{{en-noun}}
# [[ปริมาณ]][[ยา]]ที่[[วัด]]หรือ[[ตวง]]ไว้สำหรับ[[รับประทาน]]ในแต่ละครั้ง
#: {{ux|en|Why did he give you only a single 500 mg '''dose'''? The correct dosage of this antibiotic is one 500 mg tablet twice a day for 10 days.}}
# ปริมาณของสารตัวกระทำ (ไม่จำเป็นต้องออกฤทธิ์เสมอไป), สาร, หรือรังสี ที่ได้รับหรือสัมผัสในเวลาใดเวลาหนึ่ง
#* {{quote-journal|en|date=2014-04-21|volume=411|issue=8884|magazine=w:The Economist
|title=[http://www.economist.com/news/science-and-technology/21601233-exploring-link-between-manganese-and-parkinsons-disease-subtle-effects Subtle effects]
|passage=Manganism has been known about since the 19th century, when miners exposed to ores containing manganese{{...}}began to totter, slur their speech and behave like someone inebriated. The poisoning was irreversible, and soon ended in psychosis and death. Nowadays workers are exposed to far lower '''doses''' and manganism is rare.}}
# {{lb|en|figurative|dated}} สิ่งที่[[ไม่พึงประสงค์]]ใด ๆ ที่ต้องกำจัดออกไป
#: {{syn|en|fill<qq:as in have one's fill>}}
# {{lb|en|figurative}} การวัดผลที่ดีหรือประสบการณ์ที่ยาวนานเกี่ยวกับบางสิ่งบางอย่าง
#: {{ux|en|a healthy '''dose''' of skepticism.}}
#* {{RQ:Conrad Heart of Darkness|page=197|passage=“I had then, as you remember, just returned to London after a lot of Indian Ocean, Pacific, China Seas - a regular '''dose''' of the East - six years or so, and I was loafing about, hindering you fellows in your work and invading your homes, just as though I had got a heavenly mission to civilise you.”}}
#* {{quote-book|en|title=Queer Pulp|author=Susan Stryker|year=2001|page=78|text=The prospect of becoming a father is a '''dose''' of reality that threatens to bring his dream world crashing down.}}
#* {{quote-journal|en|journal=w:TIME|title=Your Bedroom Probably Isn't Dark Enough|date=Dec 9 2025|author=Veronique Greenwood
|text=People who don't get their daily '''dose''' of light at the right time of day can end up with worse health.
|url=https://time.com/7339298/dark-bedroom-sleep-night-heart-health/}}
# {{lb|en|dated}} [[โรคติดต่อ]]ทาง[[เพศสัมพันธ์]]
#* {{quote-song|en|year=1972|author=w:Shel Silverstein|title=Don't Give A Dose to the One You Love Most
|passage=Don't give a '''dose''' to the one you love most. / Give her some marmalade... give her some toast.}}
#* {{quote-book|en|year=1978|author=w:Lawrence Durrell|title=Livia|publisher=Faber & Faber|year_published=1992|series=Avignon Quintet|page=382
|passage=It would be very expensive to cure a '''dose''' here, as well as unbelievably painful.}}
# {{lb|en|Ireland|colloquial}} [[หวัด]]; [[โรค]]จาก[ไวรัส]]ที่พบได้ทั่วไปใน[[โพรงจมูก]] บางครั้งอาจมี[[ไข้]]ร่วมด้วย
#: {{ux|en|There's a '''dose''' going round.}}
===== ลูกคำ =====
{{col|en|collapse=n|absorbed dose|dosemeter|dosology|interdose|isodose|macrodose|megadose|multidose|paleodose|postdose|predose|underdose|banana equivalent dose|booster dose|dose of one's own medicine|dose rate|effective dose|elephant dose|flight-time equivalent dose|heroic dose|dose dumping|funny as a dose of the clap|lethal dose|like a dose of salts|black dose|low-dose CT scanning|metered-dose inhaler|radiation dose|semilethal dose|the dose makes the poison|committed dose|dose equivalent|equivalent dose|under-dose|zero-dose|hot dose}}
===== คำเกี่ยวข้อง =====
* {{l|en|dosage}}
===== คำสืบทอด =====
* {{desc|ms|dos|bor=1}}
* {{desc|ta|டோஸ்|bor=1}}
==== คำกริยา ====
{{en-verb}}
# {{lb|en|transitive}} To [[administer]] a dose (of medicine) to.
#* {{quote-book|en|year=1871|author=w:George Meredith|title=w:The Adventures of Harry Richmond|page=270|passage="She thought herself broad awake, and I have '''dosed''' her with an opiate."}}
# To [[prescribe]] a dose.
# {{lb|en|transitive}} To surreptitiously administer a dose of an incapacitating drug (to an unwilling subject); to [[roofie]].
#* {{quote-book|en|year=2016|author=Pamela Donovan|title=Drink Spiking and Predatory Drugging: A Modern History|page=71|passage=The defense never conceded that their clients had administered chloral [hydrate], but Death and Campbell said initially—during their contested station house confessions—that McAlister had '''dosed''' [Jennie Bosschieter's] drink.}}
# {{lb|en|transitive|dated}} To [[transmit]] a venereal disease to.
#* {{quote-text|en|year=1977|author=w:The White Buffalo|title=Wild Bill Hickok
|passage=Sometime back, one of your scarlet sisters '''dosed''' me proper.}}
===== ลูกคำ =====
{{col|en|microdose|doseable}}
=== รากศัพท์ 2 ===
==== คำนาม ====
{{en-noun}}
# {{archaic form of|en|doze}}.
#* {{quote-text|en|year=1839|author=Benjamin Abbott|title=Experience and Gospel Labors of the Rev. Benjamin Abbott
|passage=Just at the dawning of the day, I fell into a '''dose''' more like sleep than any I had during the whole night, in which I dreamed that I saw a river as clear as crystal {{...}}}}
==== คำกริยา ====
{{en-verb}}
# {{archaic form of|en|doze}}.
#* {{quote-book|en|year=1918|author=William Henry Hudson|title=Far Away And Long Ago|passage=It was to me a marvellous experience; to be here, propped up with pillows in a dimly-lighted room, the night-nurse idly '''dosing''' by the fire; the sound of the everlasting wind in my ears, howling outside {{...}}}}
=== คำสลับอักษร ===
* {{anagrams|en|a=deos|Does|SOED|deos|deso|does|odes}}
{{C|en|Medicine|Radioactivity}}
92meqxiexbbjq9zkj3c7pfc50013w01
5754351
5754350
2026-08-06T02:06:02Z
Octahedron80
267
/* คำกริยา */
5754351
wikitext
text/x-wiki
{{also/auto}}
== ภาษาอังกฤษ ==
=== รากศัพท์ 1 ===
{{root|en|ine-pro|*deh₃-}}
{{bor+|en|frm|dose}}, จาก{{der|en|la-lat|dosis}}, จาก{{der|en|grc|δόσις||ส่วนหนึ่ง(ของยา)ที่สั่งจ่าย|lit=สิ่งที่ให้}}, {{w|กาเลน}}และแพทย์ชาวกรีกคนอื่น ๆ ใช้คำนี้เพื่อหมายถึงปริมาณยา, จาก{{m|grc|δίδωμι||ให้}}; ส่วนใหญ่ถูกแทนที่ด้วย{{noncog|en|drench}}; {{doublet|en|doos}}
==== การออกเสียง ====
* {{IPA|en|/ˈdəʊ̯s/|/ˈdɵ̞ʊ̯s/|a=RP}}
* {{IPA|en|/ˈdoʊ̯s/|/ˈdɔʊ̯s/|a=GA,CA}}
* {{IPA|en|/ˈdoʊ̯s/|[ˈdeʊ̯s]|/ˈdɔʊ̯s/|[ˈdɛʊ̯s]|a=California|q2=California Vowel Shift|q4=California Vowel Shift}}
** {{audio|en|en-us-dose.ogg|a=Southern California|IPA=[dɛɯ̟s]}}
* {{IPA|en|/ˈdəʉ̯s/|/ˈdɐʉ̯s/|a=AU|q2=some speakers}}
* {{IPA|en|/ˈdɐʉ̯s/|a=NZ}}
* {{rhymes|en|əʊs|s=1}}
* {{hyph|en|dose}}
==== คำนาม ====
{{en-noun}}
# [[ปริมาณ]][[ยา]]ที่[[วัด]]หรือ[[ตวง]]ไว้สำหรับ[[รับประทาน]]ในแต่ละครั้ง
#: {{ux|en|Why did he give you only a single 500 mg '''dose'''? The correct dosage of this antibiotic is one 500 mg tablet twice a day for 10 days.}}
# ปริมาณของสารตัวกระทำ (ไม่จำเป็นต้องออกฤทธิ์เสมอไป), สาร, หรือรังสี ที่ได้รับหรือสัมผัสในเวลาใดเวลาหนึ่ง
#* {{quote-journal|en|date=2014-04-21|volume=411|issue=8884|magazine=w:The Economist
|title=[http://www.economist.com/news/science-and-technology/21601233-exploring-link-between-manganese-and-parkinsons-disease-subtle-effects Subtle effects]
|passage=Manganism has been known about since the 19th century, when miners exposed to ores containing manganese{{...}}began to totter, slur their speech and behave like someone inebriated. The poisoning was irreversible, and soon ended in psychosis and death. Nowadays workers are exposed to far lower '''doses''' and manganism is rare.}}
# {{lb|en|figurative|dated}} สิ่งที่[[ไม่พึงประสงค์]]ใด ๆ ที่ต้องกำจัดออกไป
#: {{syn|en|fill<qq:as in have one's fill>}}
# {{lb|en|figurative}} การวัดผลที่ดีหรือประสบการณ์ที่ยาวนานเกี่ยวกับบางสิ่งบางอย่าง
#: {{ux|en|a healthy '''dose''' of skepticism.}}
#* {{RQ:Conrad Heart of Darkness|page=197|passage=“I had then, as you remember, just returned to London after a lot of Indian Ocean, Pacific, China Seas - a regular '''dose''' of the East - six years or so, and I was loafing about, hindering you fellows in your work and invading your homes, just as though I had got a heavenly mission to civilise you.”}}
#* {{quote-book|en|title=Queer Pulp|author=Susan Stryker|year=2001|page=78|text=The prospect of becoming a father is a '''dose''' of reality that threatens to bring his dream world crashing down.}}
#* {{quote-journal|en|journal=w:TIME|title=Your Bedroom Probably Isn't Dark Enough|date=Dec 9 2025|author=Veronique Greenwood
|text=People who don't get their daily '''dose''' of light at the right time of day can end up with worse health.
|url=https://time.com/7339298/dark-bedroom-sleep-night-heart-health/}}
# {{lb|en|dated}} [[โรคติดต่อ]]ทาง[[เพศสัมพันธ์]]
#* {{quote-song|en|year=1972|author=w:Shel Silverstein|title=Don't Give A Dose to the One You Love Most
|passage=Don't give a '''dose''' to the one you love most. / Give her some marmalade... give her some toast.}}
#* {{quote-book|en|year=1978|author=w:Lawrence Durrell|title=Livia|publisher=Faber & Faber|year_published=1992|series=Avignon Quintet|page=382
|passage=It would be very expensive to cure a '''dose''' here, as well as unbelievably painful.}}
# {{lb|en|Ireland|colloquial}} [[หวัด]]; [[โรค]]จาก[ไวรัส]]ที่พบได้ทั่วไปใน[[โพรงจมูก]] บางครั้งอาจมี[[ไข้]]ร่วมด้วย
#: {{ux|en|There's a '''dose''' going round.}}
===== ลูกคำ =====
{{col|en|collapse=n|absorbed dose|dosemeter|dosology|interdose|isodose|macrodose|megadose|multidose|paleodose|postdose|predose|underdose|banana equivalent dose|booster dose|dose of one's own medicine|dose rate|effective dose|elephant dose|flight-time equivalent dose|heroic dose|dose dumping|funny as a dose of the clap|lethal dose|like a dose of salts|black dose|low-dose CT scanning|metered-dose inhaler|radiation dose|semilethal dose|the dose makes the poison|committed dose|dose equivalent|equivalent dose|under-dose|zero-dose|hot dose}}
===== คำเกี่ยวข้อง =====
* {{l|en|dosage}}
===== คำสืบทอด =====
* {{desc|ms|dos|bor=1}}
* {{desc|ta|டோஸ்|bor=1}}
==== คำกริยา ====
{{en-verb}}
# {{lb|en|transitive}} [[ให้]]ยาในปริมาณที่วัดหรือตวงมาแล้ว
#* {{quote-book|en|year=1871|author=w:George Meredith|title=w:The Adventures of Harry Richmond|page=270|passage="She thought herself broad awake, and I have '''dosed''' her with an opiate."}}
# [[สั่ง]][[จ่าย]]ยา
# {{lb|en|transitive}} แอบให้ยาที่ทำให้หมดสติ (แก่ผู้ที่ไม่เต็มใจ); ดมยา
#* {{quote-book|en|year=2016|author=Pamela Donovan|title=Drink Spiking and Predatory Drugging: A Modern History|page=71|passage=The defense never conceded that their clients had administered chloral [hydrate], but Death and Campbell said initially—during their contested station house confessions—that McAlister had '''dosed''' [Jennie Bosschieter's] drink.}}
# {{lb|en|transitive|dated}} [[แพร่]]เชื้อโรคติดต่อทางเพศสัมพันธ์
#* {{quote-text|en|year=1977|author=w:The White Buffalo|title=Wild Bill Hickok
|passage=Sometime back, one of your scarlet sisters '''dosed''' me proper.}}
===== ลูกคำ =====
{{col|en|microdose|doseable}}
=== รากศัพท์ 2 ===
==== คำนาม ====
{{en-noun}}
# {{archaic form of|en|doze}}.
#* {{quote-text|en|year=1839|author=Benjamin Abbott|title=Experience and Gospel Labors of the Rev. Benjamin Abbott
|passage=Just at the dawning of the day, I fell into a '''dose''' more like sleep than any I had during the whole night, in which I dreamed that I saw a river as clear as crystal {{...}}}}
==== คำกริยา ====
{{en-verb}}
# {{archaic form of|en|doze}}.
#* {{quote-book|en|year=1918|author=William Henry Hudson|title=Far Away And Long Ago|passage=It was to me a marvellous experience; to be here, propped up with pillows in a dimly-lighted room, the night-nurse idly '''dosing''' by the fire; the sound of the everlasting wind in my ears, howling outside {{...}}}}
=== คำสลับอักษร ===
* {{anagrams|en|a=deos|Does|SOED|deos|deso|does|odes}}
{{C|en|Medicine|Radioactivity}}
ihj5uj4vjucslq8ms9s6txqalc7i9ci
5754352
5754351
2026-08-06T02:06:17Z
Octahedron80
267
/* รากศัพท์ 2 */
5754352
wikitext
text/x-wiki
{{also/auto}}
== ภาษาอังกฤษ ==
=== รากศัพท์ 1 ===
{{root|en|ine-pro|*deh₃-}}
{{bor+|en|frm|dose}}, จาก{{der|en|la-lat|dosis}}, จาก{{der|en|grc|δόσις||ส่วนหนึ่ง(ของยา)ที่สั่งจ่าย|lit=สิ่งที่ให้}}, {{w|กาเลน}}และแพทย์ชาวกรีกคนอื่น ๆ ใช้คำนี้เพื่อหมายถึงปริมาณยา, จาก{{m|grc|δίδωμι||ให้}}; ส่วนใหญ่ถูกแทนที่ด้วย{{noncog|en|drench}}; {{doublet|en|doos}}
==== การออกเสียง ====
* {{IPA|en|/ˈdəʊ̯s/|/ˈdɵ̞ʊ̯s/|a=RP}}
* {{IPA|en|/ˈdoʊ̯s/|/ˈdɔʊ̯s/|a=GA,CA}}
* {{IPA|en|/ˈdoʊ̯s/|[ˈdeʊ̯s]|/ˈdɔʊ̯s/|[ˈdɛʊ̯s]|a=California|q2=California Vowel Shift|q4=California Vowel Shift}}
** {{audio|en|en-us-dose.ogg|a=Southern California|IPA=[dɛɯ̟s]}}
* {{IPA|en|/ˈdəʉ̯s/|/ˈdɐʉ̯s/|a=AU|q2=some speakers}}
* {{IPA|en|/ˈdɐʉ̯s/|a=NZ}}
* {{rhymes|en|əʊs|s=1}}
* {{hyph|en|dose}}
==== คำนาม ====
{{en-noun}}
# [[ปริมาณ]][[ยา]]ที่[[วัด]]หรือ[[ตวง]]ไว้สำหรับ[[รับประทาน]]ในแต่ละครั้ง
#: {{ux|en|Why did he give you only a single 500 mg '''dose'''? The correct dosage of this antibiotic is one 500 mg tablet twice a day for 10 days.}}
# ปริมาณของสารตัวกระทำ (ไม่จำเป็นต้องออกฤทธิ์เสมอไป), สาร, หรือรังสี ที่ได้รับหรือสัมผัสในเวลาใดเวลาหนึ่ง
#* {{quote-journal|en|date=2014-04-21|volume=411|issue=8884|magazine=w:The Economist
|title=[http://www.economist.com/news/science-and-technology/21601233-exploring-link-between-manganese-and-parkinsons-disease-subtle-effects Subtle effects]
|passage=Manganism has been known about since the 19th century, when miners exposed to ores containing manganese{{...}}began to totter, slur their speech and behave like someone inebriated. The poisoning was irreversible, and soon ended in psychosis and death. Nowadays workers are exposed to far lower '''doses''' and manganism is rare.}}
# {{lb|en|figurative|dated}} สิ่งที่[[ไม่พึงประสงค์]]ใด ๆ ที่ต้องกำจัดออกไป
#: {{syn|en|fill<qq:as in have one's fill>}}
# {{lb|en|figurative}} การวัดผลที่ดีหรือประสบการณ์ที่ยาวนานเกี่ยวกับบางสิ่งบางอย่าง
#: {{ux|en|a healthy '''dose''' of skepticism.}}
#* {{RQ:Conrad Heart of Darkness|page=197|passage=“I had then, as you remember, just returned to London after a lot of Indian Ocean, Pacific, China Seas - a regular '''dose''' of the East - six years or so, and I was loafing about, hindering you fellows in your work and invading your homes, just as though I had got a heavenly mission to civilise you.”}}
#* {{quote-book|en|title=Queer Pulp|author=Susan Stryker|year=2001|page=78|text=The prospect of becoming a father is a '''dose''' of reality that threatens to bring his dream world crashing down.}}
#* {{quote-journal|en|journal=w:TIME|title=Your Bedroom Probably Isn't Dark Enough|date=Dec 9 2025|author=Veronique Greenwood
|text=People who don't get their daily '''dose''' of light at the right time of day can end up with worse health.
|url=https://time.com/7339298/dark-bedroom-sleep-night-heart-health/}}
# {{lb|en|dated}} [[โรคติดต่อ]]ทาง[[เพศสัมพันธ์]]
#* {{quote-song|en|year=1972|author=w:Shel Silverstein|title=Don't Give A Dose to the One You Love Most
|passage=Don't give a '''dose''' to the one you love most. / Give her some marmalade... give her some toast.}}
#* {{quote-book|en|year=1978|author=w:Lawrence Durrell|title=Livia|publisher=Faber & Faber|year_published=1992|series=Avignon Quintet|page=382
|passage=It would be very expensive to cure a '''dose''' here, as well as unbelievably painful.}}
# {{lb|en|Ireland|colloquial}} [[หวัด]]; [[โรค]]จาก[ไวรัส]]ที่พบได้ทั่วไปใน[[โพรงจมูก]] บางครั้งอาจมี[[ไข้]]ร่วมด้วย
#: {{ux|en|There's a '''dose''' going round.}}
===== ลูกคำ =====
{{col|en|collapse=n|absorbed dose|dosemeter|dosology|interdose|isodose|macrodose|megadose|multidose|paleodose|postdose|predose|underdose|banana equivalent dose|booster dose|dose of one's own medicine|dose rate|effective dose|elephant dose|flight-time equivalent dose|heroic dose|dose dumping|funny as a dose of the clap|lethal dose|like a dose of salts|black dose|low-dose CT scanning|metered-dose inhaler|radiation dose|semilethal dose|the dose makes the poison|committed dose|dose equivalent|equivalent dose|under-dose|zero-dose|hot dose}}
===== คำเกี่ยวข้อง =====
* {{l|en|dosage}}
===== คำสืบทอด =====
* {{desc|ms|dos|bor=1}}
* {{desc|ta|டோஸ்|bor=1}}
==== คำกริยา ====
{{en-verb}}
# {{lb|en|transitive}} [[ให้]]ยาในปริมาณที่วัดหรือตวงมาแล้ว
#* {{quote-book|en|year=1871|author=w:George Meredith|title=w:The Adventures of Harry Richmond|page=270|passage="She thought herself broad awake, and I have '''dosed''' her with an opiate."}}
# [[สั่ง]][[จ่าย]]ยา
# {{lb|en|transitive}} แอบให้ยาที่ทำให้หมดสติ (แก่ผู้ที่ไม่เต็มใจ); ดมยา
#* {{quote-book|en|year=2016|author=Pamela Donovan|title=Drink Spiking and Predatory Drugging: A Modern History|page=71|passage=The defense never conceded that their clients had administered chloral [hydrate], but Death and Campbell said initially—during their contested station house confessions—that McAlister had '''dosed''' [Jennie Bosschieter's] drink.}}
# {{lb|en|transitive|dated}} [[แพร่]]เชื้อโรคติดต่อทางเพศสัมพันธ์
#* {{quote-text|en|year=1977|author=w:The White Buffalo|title=Wild Bill Hickok
|passage=Sometime back, one of your scarlet sisters '''dosed''' me proper.}}
===== ลูกคำ =====
{{col|en|microdose|doseable}}
=== รากศัพท์ 2 ===
==== คำนาม ====
{{en-noun}}
# {{archaic form of|en|doze}}
#* {{quote-text|en|year=1839|author=Benjamin Abbott|title=Experience and Gospel Labors of the Rev. Benjamin Abbott
|passage=Just at the dawning of the day, I fell into a '''dose''' more like sleep than any I had during the whole night, in which I dreamed that I saw a river as clear as crystal {{...}}}}
==== คำกริยา ====
{{en-verb}}
# {{archaic form of|en|doze}}
#* {{quote-book|en|year=1918|author=William Henry Hudson|title=Far Away And Long Ago|passage=It was to me a marvellous experience; to be here, propped up with pillows in a dimly-lighted room, the night-nurse idly '''dosing''' by the fire; the sound of the everlasting wind in my ears, howling outside {{...}}}}
=== คำสลับอักษร ===
* {{anagrams|en|a=deos|Does|SOED|deos|deso|does|odes}}
{{C|en|Medicine|Radioactivity}}
cqflvrdwala8e7wo19mkoh8helg1rh1
5754356
5754352
2026-08-06T02:13:28Z
Octahedron80
267
/* คำนาม */
5754356
wikitext
text/x-wiki
{{also/auto}}
== ภาษาอังกฤษ ==
=== รากศัพท์ 1 ===
{{root|en|ine-pro|*deh₃-}}
{{bor+|en|frm|dose}}, จาก{{der|en|la-lat|dosis}}, จาก{{der|en|grc|δόσις||ส่วนหนึ่ง(ของยา)ที่สั่งจ่าย|lit=สิ่งที่ให้}}, {{w|กาเลน}}และแพทย์ชาวกรีกคนอื่น ๆ ใช้คำนี้เพื่อหมายถึงปริมาณยา, จาก{{m|grc|δίδωμι||ให้}}; ส่วนใหญ่ถูกแทนที่ด้วย{{noncog|en|drench}}; {{doublet|en|doos}}
==== การออกเสียง ====
* {{IPA|en|/ˈdəʊ̯s/|/ˈdɵ̞ʊ̯s/|a=RP}}
* {{IPA|en|/ˈdoʊ̯s/|/ˈdɔʊ̯s/|a=GA,CA}}
* {{IPA|en|/ˈdoʊ̯s/|[ˈdeʊ̯s]|/ˈdɔʊ̯s/|[ˈdɛʊ̯s]|a=California|q2=California Vowel Shift|q4=California Vowel Shift}}
** {{audio|en|en-us-dose.ogg|a=Southern California|IPA=[dɛɯ̟s]}}
* {{IPA|en|/ˈdəʉ̯s/|/ˈdɐʉ̯s/|a=AU|q2=some speakers}}
* {{IPA|en|/ˈdɐʉ̯s/|a=NZ}}
* {{rhymes|en|əʊs|s=1}}
* {{hyph|en|dose}}
==== คำนาม ====
{{en-noun}}
# [[ปริมาณ]][[ยา]]ที่[[วัด]]หรือ[[ตวง]]ไว้สำหรับ[[รับประทาน]]ในแต่ละครั้ง
#: {{ux|en|Why did he give you only a single 500 mg '''dose'''? The correct dosage of this antibiotic is one 500 mg tablet twice a day for 10 days.|ทำไมเขาถึงให้ยาคุณแค่ขนาด 500 มิลลิกรัมครั้งเดียว? ปริมาณยาปฏิชีวนะที่ถูกต้องคือ ยาเม็ดขนาด 500 มิลลิกรัม วันละสองครั้ง เป็นเวลา 10 วัน}}
# ปริมาณของสารตัวกระทำ (ไม่จำเป็นต้องออกฤทธิ์เสมอไป), สาร, หรือรังสี ที่ได้รับหรือสัมผัสในเวลาใดเวลาหนึ่ง
#* {{quote-journal|en|date=2014-04-21|volume=411|issue=8884|magazine=w:The Economist
|title=[http://www.economist.com/news/science-and-technology/21601233-exploring-link-between-manganese-and-parkinsons-disease-subtle-effects Subtle effects]
|passage=Manganism has been known about since the 19th century, when miners exposed to ores containing manganese{{...}}began to totter, slur their speech and behave like someone inebriated. The poisoning was irreversible, and soon ended in psychosis and death. Nowadays workers are exposed to far lower '''doses''' and manganism is rare.
|t=โรคที่เกิดจากแมงกานีสเป็นที่รู้จักกันมาตั้งแต่ศตวรรษที่ 19 เมื่อคนงานเหมืองที่สัมผัสกับแร่ที่มีแมงกานีสเป็นส่วนประกอบ {{...}} เริ่มมีอาการเซื่องซึม พูดจาไม่ชัด และมีพฤติกรรมเหมือนคนเมาสุรา พิษนี้ไม่สามารถรักษาให้หายได้ และในไม่ช้าก็จะนำไปสู่โรคจิตและเสียชีวิต ปัจจุบันคนงานสัมผัสกับแมงกานีสในปริมาณที่ต่ำกว่ามาก และโรคที่เกิดจากแมงกานีสจึงพบได้ยาก}}
# {{lb|en|figurative|dated}} สิ่งที่[[ไม่พึงประสงค์]]ใด ๆ ที่ต้องกำจัดออกไป
#: {{syn|en|fill<qq:as in have one's fill>}}
# {{lb|en|figurative}} การวัดผลที่ดีหรือประสบการณ์ที่ยาวนานเกี่ยวกับบางสิ่งบางอย่าง
#: {{ux|en|a healthy '''dose''' of skepticism.|ความสงสัยอย่างมีเหตุผล}}
#* {{RQ:Conrad Heart of Darkness|page=197|passage=“I had then, as you remember, just returned to London after a lot of Indian Ocean, Pacific, China Seas - a regular '''dose''' of the East - six years or so, and I was loafing about, hindering you fellows in your work and invading your homes, just as though I had got a heavenly mission to civilise you.”|t=“อย่างที่พวกคุณจำได้ ผมเพิ่งกลับมาลอนดอนหลังจากเดินทางไปทั่วมหาสมุทรอินเดีย มหาสมุทรแปซิฟิก และทะเลจีนมาประมาณหกปี เรียกได้ว่าได้สัมผัสกับตะวันออกอย่างเต็มที่เลย และผมก็เอาแต่เที่ยวเตร่ ขัดขวางการทำงานของพวกคุณ และบุกรุกบ้านของพวกคุณ ราวกับว่าผมได้รับภารกิจจากสวรรค์มาเพื่อทำให้พวกคุณเจริญแล้ว”}}
#* {{quote-book|en|title=Queer Pulp|author=Susan Stryker|year=2001|page=78|text=The prospect of becoming a father is a '''dose''' of reality that threatens to bring his dream world crashing down.|t=โอกาสที่จะได้เป็นพ่อคนนั้นเป็นเหมือนการเผชิญหน้าของความจริงที่คุกคามจะทำให้โลกแห่งความฝันของเขาล่มสลาย}}
#* {{quote-journal|en|journal=w:TIME|title=Your Bedroom Probably Isn't Dark Enough|date=Dec 9 2025|author=Veronique Greenwood
|text=People who don't get their daily '''dose''' of light at the right time of day can end up with worse health.
|url=https://time.com/7339298/dark-bedroom-sleep-night-heart-health/
|t=คนที่ไม่ได้รับแสงแดดในปริมาณที่เพียงพอในเวลาที่เหมาะสมของวัน อาจมีสุขภาพที่แย่ลงได้}}
# {{lb|en|dated}} [[โรคติดต่อ]]ทาง[[เพศสัมพันธ์]]
#* {{quote-song|en|year=1972|author=w:Shel Silverstein|title=Don't Give A Dose to the One You Love Most
|passage=Don't give a '''dose''' to the one you love most. / Give her some marmalade... give her some toast.
|t=อย่าให้โรคติดต่อทางเพศสัมพันธ์แก่คนที่คุณรักมากที่สุด / ให้แยมส้มแก่เธอ... ให้ขนมปังปิ้งแก่เธอ}}
#* {{quote-book|en|year=1978|author=w:Lawrence Durrell|title=Livia|publisher=Faber & Faber|year_published=1992|series=Avignon Quintet|page=382
|passage=It would be very expensive to cure a '''dose''' here, as well as unbelievably painful.
|t=การรักษาโรคติดต่อทางเพศสัมพันธ์ด้วยวิธีนี้จะมีค่าใช้จ่ายสูงมากและเจ็บปวดอย่างเหลือเชื่อ}}
# {{lb|en|Ireland|colloquial}} [[หวัด]]; [[โรค]]จาก[[ไวรัส]]ที่พบได้ทั่วไปใน[[โพรงจมูก]] บางครั้งอาจมี[[ไข้]]ร่วมด้วย
#: {{ux|en|There's a '''dose''' going round.|มีการระบาดของโรคหวัดอยู่}}
===== ลูกคำ =====
{{col|en|collapse=n|absorbed dose|dosemeter|dosology|interdose|isodose|macrodose|megadose|multidose|paleodose|postdose|predose|underdose|banana equivalent dose|booster dose|dose of one's own medicine|dose rate|effective dose|elephant dose|flight-time equivalent dose|heroic dose|dose dumping|funny as a dose of the clap|lethal dose|like a dose of salts|black dose|low-dose CT scanning|metered-dose inhaler|radiation dose|semilethal dose|the dose makes the poison|committed dose|dose equivalent|equivalent dose|under-dose|zero-dose|hot dose}}
===== คำเกี่ยวข้อง =====
* {{l|en|dosage}}
===== คำสืบทอด =====
* {{desc|ms|dos|bor=1}}
* {{desc|ta|டோஸ்|bor=1}}
==== คำกริยา ====
{{en-verb}}
# {{lb|en|transitive}} [[ให้]]ยาในปริมาณที่วัดหรือตวงมาแล้ว
#* {{quote-book|en|year=1871|author=w:George Meredith|title=w:The Adventures of Harry Richmond|page=270|passage="She thought herself broad awake, and I have '''dosed''' her with an opiate."}}
# [[สั่ง]][[จ่าย]]ยา
# {{lb|en|transitive}} แอบให้ยาที่ทำให้หมดสติ (แก่ผู้ที่ไม่เต็มใจ); ดมยา
#* {{quote-book|en|year=2016|author=Pamela Donovan|title=Drink Spiking and Predatory Drugging: A Modern History|page=71|passage=The defense never conceded that their clients had administered chloral [hydrate], but Death and Campbell said initially—during their contested station house confessions—that McAlister had '''dosed''' [Jennie Bosschieter's] drink.}}
# {{lb|en|transitive|dated}} [[แพร่]]เชื้อโรคติดต่อทางเพศสัมพันธ์
#* {{quote-text|en|year=1977|author=w:The White Buffalo|title=Wild Bill Hickok
|passage=Sometime back, one of your scarlet sisters '''dosed''' me proper.}}
===== ลูกคำ =====
{{col|en|microdose|doseable}}
=== รากศัพท์ 2 ===
==== คำนาม ====
{{en-noun}}
# {{archaic form of|en|doze}}
#* {{quote-text|en|year=1839|author=Benjamin Abbott|title=Experience and Gospel Labors of the Rev. Benjamin Abbott
|passage=Just at the dawning of the day, I fell into a '''dose''' more like sleep than any I had during the whole night, in which I dreamed that I saw a river as clear as crystal {{...}}}}
==== คำกริยา ====
{{en-verb}}
# {{archaic form of|en|doze}}
#* {{quote-book|en|year=1918|author=William Henry Hudson|title=Far Away And Long Ago|passage=It was to me a marvellous experience; to be here, propped up with pillows in a dimly-lighted room, the night-nurse idly '''dosing''' by the fire; the sound of the everlasting wind in my ears, howling outside {{...}}}}
=== คำสลับอักษร ===
* {{anagrams|en|a=deos|Does|SOED|deos|deso|does|odes}}
{{C|en|Medicine|Radioactivity}}
9lplw19dimsq5yzwta5dfsb88213ncs
5754358
5754356
2026-08-06T02:18:12Z
Octahedron80
267
/* คำกริยา */
5754358
wikitext
text/x-wiki
{{also/auto}}
== ภาษาอังกฤษ ==
=== รากศัพท์ 1 ===
{{root|en|ine-pro|*deh₃-}}
{{bor+|en|frm|dose}}, จาก{{der|en|la-lat|dosis}}, จาก{{der|en|grc|δόσις||ส่วนหนึ่ง(ของยา)ที่สั่งจ่าย|lit=สิ่งที่ให้}}, {{w|กาเลน}}และแพทย์ชาวกรีกคนอื่น ๆ ใช้คำนี้เพื่อหมายถึงปริมาณยา, จาก{{m|grc|δίδωμι||ให้}}; ส่วนใหญ่ถูกแทนที่ด้วย{{noncog|en|drench}}; {{doublet|en|doos}}
==== การออกเสียง ====
* {{IPA|en|/ˈdəʊ̯s/|/ˈdɵ̞ʊ̯s/|a=RP}}
* {{IPA|en|/ˈdoʊ̯s/|/ˈdɔʊ̯s/|a=GA,CA}}
* {{IPA|en|/ˈdoʊ̯s/|[ˈdeʊ̯s]|/ˈdɔʊ̯s/|[ˈdɛʊ̯s]|a=California|q2=California Vowel Shift|q4=California Vowel Shift}}
** {{audio|en|en-us-dose.ogg|a=Southern California|IPA=[dɛɯ̟s]}}
* {{IPA|en|/ˈdəʉ̯s/|/ˈdɐʉ̯s/|a=AU|q2=some speakers}}
* {{IPA|en|/ˈdɐʉ̯s/|a=NZ}}
* {{rhymes|en|əʊs|s=1}}
* {{hyph|en|dose}}
==== คำนาม ====
{{en-noun}}
# [[ปริมาณ]][[ยา]]ที่[[วัด]]หรือ[[ตวง]]ไว้สำหรับ[[รับประทาน]]ในแต่ละครั้ง
#: {{ux|en|Why did he give you only a single 500 mg '''dose'''? The correct dosage of this antibiotic is one 500 mg tablet twice a day for 10 days.|ทำไมเขาถึงให้ยาคุณแค่ขนาด 500 มิลลิกรัมครั้งเดียว? ปริมาณยาปฏิชีวนะที่ถูกต้องคือ ยาเม็ดขนาด 500 มิลลิกรัม วันละสองครั้ง เป็นเวลา 10 วัน}}
# ปริมาณของสารตัวกระทำ (ไม่จำเป็นต้องออกฤทธิ์เสมอไป), สาร, หรือรังสี ที่ได้รับหรือสัมผัสในเวลาใดเวลาหนึ่ง
#* {{quote-journal|en|date=2014-04-21|volume=411|issue=8884|magazine=w:The Economist
|title=[http://www.economist.com/news/science-and-technology/21601233-exploring-link-between-manganese-and-parkinsons-disease-subtle-effects Subtle effects]
|passage=Manganism has been known about since the 19th century, when miners exposed to ores containing manganese{{...}}began to totter, slur their speech and behave like someone inebriated. The poisoning was irreversible, and soon ended in psychosis and death. Nowadays workers are exposed to far lower '''doses''' and manganism is rare.
|t=โรคที่เกิดจากแมงกานีสเป็นที่รู้จักกันมาตั้งแต่ศตวรรษที่ 19 เมื่อคนงานเหมืองที่สัมผัสกับแร่ที่มีแมงกานีสเป็นส่วนประกอบ {{...}} เริ่มมีอาการเซื่องซึม พูดจาไม่ชัด และมีพฤติกรรมเหมือนคนเมาสุรา พิษนี้ไม่สามารถรักษาให้หายได้ และในไม่ช้าก็จะนำไปสู่โรคจิตและเสียชีวิต ปัจจุบันคนงานสัมผัสกับแมงกานีสในปริมาณที่ต่ำกว่ามาก และโรคที่เกิดจากแมงกานีสจึงพบได้ยาก}}
# {{lb|en|figurative|dated}} สิ่งที่[[ไม่พึงประสงค์]]ใด ๆ ที่ต้องกำจัดออกไป
#: {{syn|en|fill<qq:as in have one's fill>}}
# {{lb|en|figurative}} การวัดผลที่ดีหรือประสบการณ์ที่ยาวนานเกี่ยวกับบางสิ่งบางอย่าง
#: {{ux|en|a healthy '''dose''' of skepticism.|ความสงสัยอย่างมีเหตุผล}}
#* {{RQ:Conrad Heart of Darkness|page=197|passage=“I had then, as you remember, just returned to London after a lot of Indian Ocean, Pacific, China Seas - a regular '''dose''' of the East - six years or so, and I was loafing about, hindering you fellows in your work and invading your homes, just as though I had got a heavenly mission to civilise you.”|t=“อย่างที่พวกคุณจำได้ ผมเพิ่งกลับมาลอนดอนหลังจากเดินทางไปทั่วมหาสมุทรอินเดีย มหาสมุทรแปซิฟิก และทะเลจีนมาประมาณหกปี เรียกได้ว่าได้สัมผัสกับตะวันออกอย่างเต็มที่เลย และผมก็เอาแต่เที่ยวเตร่ ขัดขวางการทำงานของพวกคุณ และบุกรุกบ้านของพวกคุณ ราวกับว่าผมได้รับภารกิจจากสวรรค์มาเพื่อทำให้พวกคุณเจริญแล้ว”}}
#* {{quote-book|en|title=Queer Pulp|author=Susan Stryker|year=2001|page=78|text=The prospect of becoming a father is a '''dose''' of reality that threatens to bring his dream world crashing down.|t=โอกาสที่จะได้เป็นพ่อคนนั้นเป็นเหมือนการเผชิญหน้าของความจริงที่คุกคามจะทำให้โลกแห่งความฝันของเขาล่มสลาย}}
#* {{quote-journal|en|journal=w:TIME|title=Your Bedroom Probably Isn't Dark Enough|date=Dec 9 2025|author=Veronique Greenwood
|text=People who don't get their daily '''dose''' of light at the right time of day can end up with worse health.
|url=https://time.com/7339298/dark-bedroom-sleep-night-heart-health/
|t=คนที่ไม่ได้รับแสงแดดในปริมาณที่เพียงพอในเวลาที่เหมาะสมของวัน อาจมีสุขภาพที่แย่ลงได้}}
# {{lb|en|dated}} [[โรคติดต่อ]]ทาง[[เพศสัมพันธ์]]
#* {{quote-song|en|year=1972|author=w:Shel Silverstein|title=Don't Give A Dose to the One You Love Most
|passage=Don't give a '''dose''' to the one you love most. / Give her some marmalade... give her some toast.
|t=อย่าให้โรคติดต่อทางเพศสัมพันธ์แก่คนที่คุณรักมากที่สุด / ให้แยมส้มแก่เธอ... ให้ขนมปังปิ้งแก่เธอ}}
#* {{quote-book|en|year=1978|author=w:Lawrence Durrell|title=Livia|publisher=Faber & Faber|year_published=1992|series=Avignon Quintet|page=382
|passage=It would be very expensive to cure a '''dose''' here, as well as unbelievably painful.
|t=การรักษาโรคติดต่อทางเพศสัมพันธ์ด้วยวิธีนี้จะมีค่าใช้จ่ายสูงมากและเจ็บปวดอย่างเหลือเชื่อ}}
# {{lb|en|Ireland|colloquial}} [[หวัด]]; [[โรค]]จาก[[ไวรัส]]ที่พบได้ทั่วไปใน[[โพรงจมูก]] บางครั้งอาจมี[[ไข้]]ร่วมด้วย
#: {{ux|en|There's a '''dose''' going round.|มีการระบาดของโรคหวัดอยู่}}
===== ลูกคำ =====
{{col|en|collapse=n|absorbed dose|dosemeter|dosology|interdose|isodose|macrodose|megadose|multidose|paleodose|postdose|predose|underdose|banana equivalent dose|booster dose|dose of one's own medicine|dose rate|effective dose|elephant dose|flight-time equivalent dose|heroic dose|dose dumping|funny as a dose of the clap|lethal dose|like a dose of salts|black dose|low-dose CT scanning|metered-dose inhaler|radiation dose|semilethal dose|the dose makes the poison|committed dose|dose equivalent|equivalent dose|under-dose|zero-dose|hot dose}}
===== คำเกี่ยวข้อง =====
* {{l|en|dosage}}
===== คำสืบทอด =====
* {{desc|ms|dos|bor=1}}
* {{desc|ta|டோஸ்|bor=1}}
==== คำกริยา ====
{{en-verb}}
# {{lb|en|transitive}} [[ให้]]ยาในปริมาณที่วัดหรือตวงมาแล้ว
#* {{quote-book|en|year=1871|author=w:George Meredith|title=w:The Adventures of Harry Richmond|page=270|passage="She thought herself broad awake, and I have '''dosed''' her with an opiate."|t="เธอคิดว่าตัวเองตื่นเต็มที่แล้ว และฉันได้ให้ยาแก้ปวดชนิดฝิ่นแก่เธอ"}}
# [[สั่ง]][[จ่าย]]ยา
# {{lb|en|transitive}} แอบให้ยาที่ทำให้หมดสติ (แก่ผู้ที่ไม่เต็มใจ); ดมยา
#* {{quote-book|en|year=2016|author=Pamela Donovan|title=Drink Spiking and Predatory Drugging: A Modern History|page=71|passage=The defense never conceded that their clients had administered chloral [hydrate], but Death and Campbell said initially—during their contested station house confessions—that McAlister had '''dosed''' [Jennie Bosschieter's] drink.|t=ฝ่ายจำเลยไม่เคยยอมรับว่าลูกความของตนได้ให้คลอรัล[ไฮเดรต]แก่จำเลย แต่เดธและแคมป์เบลกล่าวในตอนแรก—ระหว่างการสารภาพที่สถานีตำรวจซึ่งเป็นที่ถกเถียงกัน—ว่าแมคอลิสเตอร์ได้ใส่ยาลงในเครื่องดื่ม[ของเจนนี่ บอสชีเตอร์]}}
# {{lb|en|transitive|dated}} [[แพร่]]เชื้อโรคติดต่อทางเพศสัมพันธ์
#* {{quote-text|en|year=1977|author=w:The White Buffalo|title=Wild Bill Hickok
|passage=Sometime back, one of your scarlet sisters '''dosed''' me proper.
|t=เมื่อไม่นานมานี้ หนึ่งในพี่น้องสาวสีแดงของคุณแพร่เชื้อโรคติดต่อทางเพศสัมพันธ์ให้ฉันอย่างสาหัส}}
===== ลูกคำ =====
{{col|en|microdose|doseable}}
=== รากศัพท์ 2 ===
==== คำนาม ====
{{en-noun}}
# {{archaic form of|en|doze}}
#* {{quote-text|en|year=1839|author=Benjamin Abbott|title=Experience and Gospel Labors of the Rev. Benjamin Abbott
|passage=Just at the dawning of the day, I fell into a '''dose''' more like sleep than any I had during the whole night, in which I dreamed that I saw a river as clear as crystal {{...}}}}
==== คำกริยา ====
{{en-verb}}
# {{archaic form of|en|doze}}
#* {{quote-book|en|year=1918|author=William Henry Hudson|title=Far Away And Long Ago|passage=It was to me a marvellous experience; to be here, propped up with pillows in a dimly-lighted room, the night-nurse idly '''dosing''' by the fire; the sound of the everlasting wind in my ears, howling outside {{...}}}}
=== คำสลับอักษร ===
* {{anagrams|en|a=deos|Does|SOED|deos|deso|does|odes}}
{{C|en|Medicine|Radioactivity}}
t8eh3lcu799bksk6kgedwnccro2yjid
5754359
5754358
2026-08-06T02:20:24Z
Octahedron80
267
/* รากศัพท์ 2 */
5754359
wikitext
text/x-wiki
{{also/auto}}
== ภาษาอังกฤษ ==
=== รากศัพท์ 1 ===
{{root|en|ine-pro|*deh₃-}}
{{bor+|en|frm|dose}}, จาก{{der|en|la-lat|dosis}}, จาก{{der|en|grc|δόσις||ส่วนหนึ่ง(ของยา)ที่สั่งจ่าย|lit=สิ่งที่ให้}}, {{w|กาเลน}}และแพทย์ชาวกรีกคนอื่น ๆ ใช้คำนี้เพื่อหมายถึงปริมาณยา, จาก{{m|grc|δίδωμι||ให้}}; ส่วนใหญ่ถูกแทนที่ด้วย{{noncog|en|drench}}; {{doublet|en|doos}}
==== การออกเสียง ====
* {{IPA|en|/ˈdəʊ̯s/|/ˈdɵ̞ʊ̯s/|a=RP}}
* {{IPA|en|/ˈdoʊ̯s/|/ˈdɔʊ̯s/|a=GA,CA}}
* {{IPA|en|/ˈdoʊ̯s/|[ˈdeʊ̯s]|/ˈdɔʊ̯s/|[ˈdɛʊ̯s]|a=California|q2=California Vowel Shift|q4=California Vowel Shift}}
** {{audio|en|en-us-dose.ogg|a=Southern California|IPA=[dɛɯ̟s]}}
* {{IPA|en|/ˈdəʉ̯s/|/ˈdɐʉ̯s/|a=AU|q2=some speakers}}
* {{IPA|en|/ˈdɐʉ̯s/|a=NZ}}
* {{rhymes|en|əʊs|s=1}}
* {{hyph|en|dose}}
==== คำนาม ====
{{en-noun}}
# [[ปริมาณ]][[ยา]]ที่[[วัด]]หรือ[[ตวง]]ไว้สำหรับ[[รับประทาน]]ในแต่ละครั้ง
#: {{ux|en|Why did he give you only a single 500 mg '''dose'''? The correct dosage of this antibiotic is one 500 mg tablet twice a day for 10 days.|ทำไมเขาถึงให้ยาคุณแค่ขนาด 500 มิลลิกรัมครั้งเดียว? ปริมาณยาปฏิชีวนะที่ถูกต้องคือ ยาเม็ดขนาด 500 มิลลิกรัม วันละสองครั้ง เป็นเวลา 10 วัน}}
# ปริมาณของสารตัวกระทำ (ไม่จำเป็นต้องออกฤทธิ์เสมอไป), สาร, หรือรังสี ที่ได้รับหรือสัมผัสในเวลาใดเวลาหนึ่ง
#* {{quote-journal|en|date=2014-04-21|volume=411|issue=8884|magazine=w:The Economist
|title=[http://www.economist.com/news/science-and-technology/21601233-exploring-link-between-manganese-and-parkinsons-disease-subtle-effects Subtle effects]
|passage=Manganism has been known about since the 19th century, when miners exposed to ores containing manganese{{...}}began to totter, slur their speech and behave like someone inebriated. The poisoning was irreversible, and soon ended in psychosis and death. Nowadays workers are exposed to far lower '''doses''' and manganism is rare.
|t=โรคที่เกิดจากแมงกานีสเป็นที่รู้จักกันมาตั้งแต่ศตวรรษที่ 19 เมื่อคนงานเหมืองที่สัมผัสกับแร่ที่มีแมงกานีสเป็นส่วนประกอบ {{...}} เริ่มมีอาการเซื่องซึม พูดจาไม่ชัด และมีพฤติกรรมเหมือนคนเมาสุรา พิษนี้ไม่สามารถรักษาให้หายได้ และในไม่ช้าก็จะนำไปสู่โรคจิตและเสียชีวิต ปัจจุบันคนงานสัมผัสกับแมงกานีสในปริมาณที่ต่ำกว่ามาก และโรคที่เกิดจากแมงกานีสจึงพบได้ยาก}}
# {{lb|en|figurative|dated}} สิ่งที่[[ไม่พึงประสงค์]]ใด ๆ ที่ต้องกำจัดออกไป
#: {{syn|en|fill<qq:as in have one's fill>}}
# {{lb|en|figurative}} การวัดผลที่ดีหรือประสบการณ์ที่ยาวนานเกี่ยวกับบางสิ่งบางอย่าง
#: {{ux|en|a healthy '''dose''' of skepticism.|ความสงสัยอย่างมีเหตุผล}}
#* {{RQ:Conrad Heart of Darkness|page=197|passage=“I had then, as you remember, just returned to London after a lot of Indian Ocean, Pacific, China Seas - a regular '''dose''' of the East - six years or so, and I was loafing about, hindering you fellows in your work and invading your homes, just as though I had got a heavenly mission to civilise you.”|t=“อย่างที่พวกคุณจำได้ ผมเพิ่งกลับมาลอนดอนหลังจากเดินทางไปทั่วมหาสมุทรอินเดีย มหาสมุทรแปซิฟิก และทะเลจีนมาประมาณหกปี เรียกได้ว่าได้สัมผัสกับตะวันออกอย่างเต็มที่เลย และผมก็เอาแต่เที่ยวเตร่ ขัดขวางการทำงานของพวกคุณ และบุกรุกบ้านของพวกคุณ ราวกับว่าผมได้รับภารกิจจากสวรรค์มาเพื่อทำให้พวกคุณเจริญแล้ว”}}
#* {{quote-book|en|title=Queer Pulp|author=Susan Stryker|year=2001|page=78|text=The prospect of becoming a father is a '''dose''' of reality that threatens to bring his dream world crashing down.|t=โอกาสที่จะได้เป็นพ่อคนนั้นเป็นเหมือนการเผชิญหน้าของความจริงที่คุกคามจะทำให้โลกแห่งความฝันของเขาล่มสลาย}}
#* {{quote-journal|en|journal=w:TIME|title=Your Bedroom Probably Isn't Dark Enough|date=Dec 9 2025|author=Veronique Greenwood
|text=People who don't get their daily '''dose''' of light at the right time of day can end up with worse health.
|url=https://time.com/7339298/dark-bedroom-sleep-night-heart-health/
|t=คนที่ไม่ได้รับแสงแดดในปริมาณที่เพียงพอในเวลาที่เหมาะสมของวัน อาจมีสุขภาพที่แย่ลงได้}}
# {{lb|en|dated}} [[โรคติดต่อ]]ทาง[[เพศสัมพันธ์]]
#* {{quote-song|en|year=1972|author=w:Shel Silverstein|title=Don't Give A Dose to the One You Love Most
|passage=Don't give a '''dose''' to the one you love most. / Give her some marmalade... give her some toast.
|t=อย่าให้โรคติดต่อทางเพศสัมพันธ์แก่คนที่คุณรักมากที่สุด / ให้แยมส้มแก่เธอ... ให้ขนมปังปิ้งแก่เธอ}}
#* {{quote-book|en|year=1978|author=w:Lawrence Durrell|title=Livia|publisher=Faber & Faber|year_published=1992|series=Avignon Quintet|page=382
|passage=It would be very expensive to cure a '''dose''' here, as well as unbelievably painful.
|t=การรักษาโรคติดต่อทางเพศสัมพันธ์ด้วยวิธีนี้จะมีค่าใช้จ่ายสูงมากและเจ็บปวดอย่างเหลือเชื่อ}}
# {{lb|en|Ireland|colloquial}} [[หวัด]]; [[โรค]]จาก[[ไวรัส]]ที่พบได้ทั่วไปใน[[โพรงจมูก]] บางครั้งอาจมี[[ไข้]]ร่วมด้วย
#: {{ux|en|There's a '''dose''' going round.|มีการระบาดของโรคหวัดอยู่}}
===== ลูกคำ =====
{{col|en|collapse=n|absorbed dose|dosemeter|dosology|interdose|isodose|macrodose|megadose|multidose|paleodose|postdose|predose|underdose|banana equivalent dose|booster dose|dose of one's own medicine|dose rate|effective dose|elephant dose|flight-time equivalent dose|heroic dose|dose dumping|funny as a dose of the clap|lethal dose|like a dose of salts|black dose|low-dose CT scanning|metered-dose inhaler|radiation dose|semilethal dose|the dose makes the poison|committed dose|dose equivalent|equivalent dose|under-dose|zero-dose|hot dose}}
===== คำเกี่ยวข้อง =====
* {{l|en|dosage}}
===== คำสืบทอด =====
* {{desc|ms|dos|bor=1}}
* {{desc|ta|டோஸ்|bor=1}}
==== คำกริยา ====
{{en-verb}}
# {{lb|en|transitive}} [[ให้]]ยาในปริมาณที่วัดหรือตวงมาแล้ว
#* {{quote-book|en|year=1871|author=w:George Meredith|title=w:The Adventures of Harry Richmond|page=270|passage="She thought herself broad awake, and I have '''dosed''' her with an opiate."|t="เธอคิดว่าตัวเองตื่นเต็มที่แล้ว และฉันได้ให้ยาแก้ปวดชนิดฝิ่นแก่เธอ"}}
# [[สั่ง]][[จ่าย]]ยา
# {{lb|en|transitive}} แอบให้ยาที่ทำให้หมดสติ (แก่ผู้ที่ไม่เต็มใจ); ดมยา
#* {{quote-book|en|year=2016|author=Pamela Donovan|title=Drink Spiking and Predatory Drugging: A Modern History|page=71|passage=The defense never conceded that their clients had administered chloral [hydrate], but Death and Campbell said initially—during their contested station house confessions—that McAlister had '''dosed''' [Jennie Bosschieter's] drink.|t=ฝ่ายจำเลยไม่เคยยอมรับว่าลูกความของตนได้ให้คลอรัล[ไฮเดรต]แก่จำเลย แต่เดธและแคมป์เบลกล่าวในตอนแรก—ระหว่างการสารภาพที่สถานีตำรวจซึ่งเป็นที่ถกเถียงกัน—ว่าแมคอลิสเตอร์ได้ใส่ยาลงในเครื่องดื่ม[ของเจนนี่ บอสชีเตอร์]}}
# {{lb|en|transitive|dated}} [[แพร่]]เชื้อโรคติดต่อทางเพศสัมพันธ์
#* {{quote-text|en|year=1977|author=w:The White Buffalo|title=Wild Bill Hickok
|passage=Sometime back, one of your scarlet sisters '''dosed''' me proper.
|t=เมื่อไม่นานมานี้ หนึ่งในพี่น้องสาวสีแดงของคุณแพร่เชื้อโรคติดต่อทางเพศสัมพันธ์ให้ฉันอย่างสาหัส}}
===== ลูกคำ =====
{{col|en|microdose|doseable}}
=== รากศัพท์ 2 ===
==== คำนาม ====
{{en-noun}}
# {{archaic form of|en|doze}}
#* {{quote-text|en|year=1839|author=Benjamin Abbott|title=Experience and Gospel Labors of the Rev. Benjamin Abbott
|passage=Just at the dawning of the day, I fell into a '''dose''' more like sleep than any I had during the whole night, in which I dreamed that I saw a river as clear as crystal {{...}}
|t=เมื่อรุ่งเช้ามาถึง ฉันก็หลับไปอย่างสนิท ซึ่งเป็นการหลับที่มากกว่าการหลับใด ๆ ตลอดทั้งคืน ในฝันฉันได้เห็นแม่น้ำที่ใสราวกับคริสตัล {{...}}}}
==== คำกริยา ====
{{en-verb}}
# {{archaic form of|en|doze}}
#* {{quote-book|en|year=1918|author=William Henry Hudson|title=Far Away And Long Ago|passage=It was to me a marvellous experience; to be here, propped up with pillows in a dimly-lighted room, the night-nurse idly '''dosing''' by the fire; the sound of the everlasting wind in my ears, howling outside {{...}}|t=สำหรับฉันแล้ว มันเป็นประสบการณ์ที่วิเศษมาก การได้มาอยู่ที่นี่ พิงหมอนอยู่ในห้องที่แสงสลัว พยาบาลกลางคืนงีบหลับอยู่ข้างเตาผิง เสียงลมที่พัดไม่หยุดหย่อนดังแว่วมาแต่หู และเสียงหอนอยู่ข้างนอก {{...}}}}
=== คำสลับอักษร ===
* {{anagrams|en|a=deos|Does|SOED|deos|deso|does|odes}}
{{C|en|Medicine|Radioactivity}}
6g3cam404ebf3q21063rin55pszx84h
5754360
5754359
2026-08-06T02:26:20Z
Octahedron80
267
/* เก็บกวาด */ ส่วนใหม่
5754360
wikitext
text/x-wiki
{{also/auto}}
== ภาษาอังกฤษ ==
=== รากศัพท์ 1 ===
{{root|en|ine-pro|*deh₃-}}
{{bor+|en|frm|dose}}, จาก{{der|en|la-lat|dosis}}, จาก{{der|en|grc|δόσις||ส่วนหนึ่ง(ของยา)ที่สั่งจ่าย|lit=สิ่งที่ให้}}, {{w|กาเลน}}และแพทย์ชาวกรีกคนอื่น ๆ ใช้คำนี้เพื่อหมายถึงปริมาณยา, จาก{{m|grc|δίδωμι||ให้}}; ส่วนใหญ่ถูกแทนที่ด้วย{{noncog|en|drench}}; {{doublet|en|doos}}
==== การออกเสียง ====
* {{IPA|en|/ˈdəʊ̯s/|/ˈdɵ̞ʊ̯s/|a=RP}}
* {{IPA|en|/ˈdoʊ̯s/|/ˈdɔʊ̯s/|a=GA,CA}}
* {{IPA|en|/ˈdoʊ̯s/|[ˈdeʊ̯s]|/ˈdɔʊ̯s/|[ˈdɛʊ̯s]|a=California|q2=California Vowel Shift|q4=California Vowel Shift}}
** {{audio|en|en-us-dose.ogg|a=Southern California|IPA=[dɛɯ̟s]}}
* {{IPA|en|/ˈdəʉ̯s/|/ˈdɐʉ̯s/|a=AU|q2=some speakers}}
* {{IPA|en|/ˈdɐʉ̯s/|a=NZ}}
* {{rhymes|en|əʊs|s=1}}
* {{hyph|en|dose}}
==== คำนาม ====
{{en-noun}}
# [[ปริมาณ]][[ยา]]ที่[[วัด]]หรือ[[ตวง]]ไว้สำหรับ[[รับประทาน]]ในแต่ละครั้ง
#: {{ux|en|Why did he give you only a single 500 mg '''dose'''? The correct dosage of this antibiotic is one 500 mg tablet twice a day for 10 days.|ทำไมเขาถึงให้ยาคุณแค่ขนาด 500 มิลลิกรัมครั้งเดียว? ปริมาณยาปฏิชีวนะที่ถูกต้องคือ ยาเม็ดขนาด 500 มิลลิกรัม วันละสองครั้ง เป็นเวลา 10 วัน}}
# ปริมาณของสารตัวกระทำ (ไม่จำเป็นต้องออกฤทธิ์เสมอไป), สาร, หรือรังสี ที่ได้รับหรือสัมผัสในเวลาใดเวลาหนึ่ง
#* {{quote-journal|en|date=2014-04-21|volume=411|issue=8884|magazine=w:The Economist
|title=[http://www.economist.com/news/science-and-technology/21601233-exploring-link-between-manganese-and-parkinsons-disease-subtle-effects Subtle effects]
|passage=Manganism has been known about since the 19th century, when miners exposed to ores containing manganese{{...}}began to totter, slur their speech and behave like someone inebriated. The poisoning was irreversible, and soon ended in psychosis and death. Nowadays workers are exposed to far lower '''doses''' and manganism is rare.
|t=โรคที่เกิดจากแมงกานีสเป็นที่รู้จักกันมาตั้งแต่ศตวรรษที่ 19 เมื่อคนงานเหมืองที่สัมผัสกับแร่ที่มีแมงกานีสเป็นส่วนประกอบ {{...}} เริ่มมีอาการเซื่องซึม พูดจาไม่ชัด และมีพฤติกรรมเหมือนคนเมาสุรา พิษนี้ไม่สามารถรักษาให้หายได้ และในไม่ช้าก็จะนำไปสู่โรคจิตและเสียชีวิต ปัจจุบันคนงานสัมผัสกับแมงกานีสในปริมาณที่ต่ำกว่ามาก และโรคที่เกิดจากแมงกานีสจึงพบได้ยาก}}
# {{lb|en|figurative|dated}} สิ่งที่[[ไม่พึงประสงค์]]ใด ๆ ที่ต้องกำจัดออกไป
#: {{syn|en|fill<qq:as in have one's fill>}}
# {{lb|en|figurative}} การวัดผลที่ดีหรือประสบการณ์ที่ยาวนานเกี่ยวกับบางสิ่งบางอย่าง
#: {{ux|en|a healthy '''dose''' of skepticism.|ความสงสัยอย่างมีเหตุผล}}
#* {{RQ:Conrad Heart of Darkness|page=197|passage=“I had then, as you remember, just returned to London after a lot of Indian Ocean, Pacific, China Seas - a regular '''dose''' of the East - six years or so, and I was loafing about, hindering you fellows in your work and invading your homes, just as though I had got a heavenly mission to civilise you.”|t=“อย่างที่พวกคุณจำได้ ผมเพิ่งกลับมาลอนดอนหลังจากเดินทางไปทั่วมหาสมุทรอินเดีย มหาสมุทรแปซิฟิก และทะเลจีนมาประมาณหกปี เรียกได้ว่าได้สัมผัสกับตะวันออกอย่างเต็มที่เลย และผมก็เอาแต่เที่ยวเตร่ ขัดขวางการทำงานของพวกคุณ และบุกรุกบ้านของพวกคุณ ราวกับว่าผมได้รับภารกิจจากสวรรค์มาเพื่อทำให้พวกคุณเจริญแล้ว”}}
#* {{quote-book|en|title=Queer Pulp|author=Susan Stryker|year=2001|page=78|text=The prospect of becoming a father is a '''dose''' of reality that threatens to bring his dream world crashing down.|t=โอกาสที่จะได้เป็นพ่อคนนั้นเป็นเหมือนการเผชิญหน้าของความจริงที่คุกคามจะทำให้โลกแห่งความฝันของเขาล่มสลาย}}
#* {{quote-journal|en|journal=w:TIME|title=Your Bedroom Probably Isn't Dark Enough|date=Dec 9 2025|author=Veronique Greenwood
|text=People who don't get their daily '''dose''' of light at the right time of day can end up with worse health.
|url=https://time.com/7339298/dark-bedroom-sleep-night-heart-health/
|t=คนที่ไม่ได้รับแสงแดดในปริมาณที่เพียงพอในเวลาที่เหมาะสมของวัน อาจมีสุขภาพที่แย่ลงได้}}
# {{lb|en|dated}} [[โรคติดต่อ]]ทาง[[เพศสัมพันธ์]]
#* {{quote-song|en|year=1972|author=w:Shel Silverstein|title=Don't Give A Dose to the One You Love Most
|passage=Don't give a '''dose''' to the one you love most. / Give her some marmalade... give her some toast.
|t=อย่าให้โรคติดต่อทางเพศสัมพันธ์แก่คนที่คุณรักมากที่สุด / ให้แยมส้มแก่เธอ... ให้ขนมปังปิ้งแก่เธอ}}
#* {{quote-book|en|year=1978|author=w:Lawrence Durrell|title=Livia|publisher=Faber & Faber|year_published=1992|series=Avignon Quintet|page=382
|passage=It would be very expensive to cure a '''dose''' here, as well as unbelievably painful.
|t=การรักษาโรคติดต่อทางเพศสัมพันธ์ด้วยวิธีนี้จะมีค่าใช้จ่ายสูงมากและเจ็บปวดอย่างเหลือเชื่อ}}
# {{lb|en|Ireland|colloquial}} [[หวัด]]; [[โรค]]จาก[[ไวรัส]]ที่พบได้ทั่วไปใน[[โพรงจมูก]] บางครั้งอาจมี[[ไข้]]ร่วมด้วย
#: {{ux|en|There's a '''dose''' going round.|มีการระบาดของโรคหวัดอยู่}}
===== ลูกคำ =====
{{col|en|collapse=n|absorbed dose|dosemeter|dosology|interdose|isodose|macrodose|megadose|multidose|paleodose|postdose|predose|underdose|banana equivalent dose|booster dose|dose of one's own medicine|dose rate|effective dose|elephant dose|flight-time equivalent dose|heroic dose|dose dumping|funny as a dose of the clap|lethal dose|like a dose of salts|black dose|low-dose CT scanning|metered-dose inhaler|radiation dose|semilethal dose|the dose makes the poison|committed dose|dose equivalent|equivalent dose|under-dose|zero-dose|hot dose}}
===== คำเกี่ยวข้อง =====
* {{l|en|dosage}}
===== คำสืบทอด =====
* {{desc|ms|dos|bor=1}}
* {{desc|ta|டோஸ்|bor=1}}
==== คำกริยา ====
{{en-verb}}
# {{lb|en|transitive}} [[ให้]]ยาในปริมาณที่วัดหรือตวงมาแล้ว
#* {{quote-book|en|year=1871|author=w:George Meredith|title=w:The Adventures of Harry Richmond|page=270|passage="She thought herself broad awake, and I have '''dosed''' her with an opiate."|t="เธอคิดว่าตัวเองตื่นเต็มที่แล้ว และฉันได้ให้ยาแก้ปวดชนิดฝิ่นแก่เธอ"}}
# [[สั่ง]][[จ่าย]]ยา
# {{lb|en|transitive}} แอบให้ยาที่ทำให้หมดสติ (แก่ผู้ที่ไม่เต็มใจ); ดมยา
#* {{quote-book|en|year=2016|author=Pamela Donovan|title=Drink Spiking and Predatory Drugging: A Modern History|page=71|passage=The defense never conceded that their clients had administered chloral [hydrate], but Death and Campbell said initially—during their contested station house confessions—that McAlister had '''dosed''' [Jennie Bosschieter's] drink.|t=ฝ่ายจำเลยไม่เคยยอมรับว่าลูกความของตนได้ให้คลอรัล[ไฮเดรต]แก่จำเลย แต่เดธและแคมป์เบลกล่าวในตอนแรก—ระหว่างการสารภาพที่สถานีตำรวจซึ่งเป็นที่ถกเถียงกัน—ว่าแมคอลิสเตอร์ได้ใส่ยาลงในเครื่องดื่ม[ของเจนนี่ บอสชีเตอร์]}}
# {{lb|en|transitive|dated}} [[แพร่]]เชื้อโรคติดต่อทางเพศสัมพันธ์
#* {{quote-text|en|year=1977|author=w:The White Buffalo|title=Wild Bill Hickok
|passage=Sometime back, one of your scarlet sisters '''dosed''' me proper.
|t=เมื่อไม่นานมานี้ หนึ่งในพี่น้องสาวสีแดงของคุณแพร่เชื้อโรคติดต่อทางเพศสัมพันธ์ให้ฉันอย่างสาหัส}}
===== ลูกคำ =====
{{col|en|microdose|doseable}}
=== รากศัพท์ 2 ===
==== คำนาม ====
{{en-noun}}
# {{archaic form of|en|doze}}
#* {{quote-text|en|year=1839|author=Benjamin Abbott|title=Experience and Gospel Labors of the Rev. Benjamin Abbott
|passage=Just at the dawning of the day, I fell into a '''dose''' more like sleep than any I had during the whole night, in which I dreamed that I saw a river as clear as crystal {{...}}
|t=เมื่อรุ่งเช้ามาถึง ฉันก็หลับไปอย่างสนิท ซึ่งเป็นการหลับที่มากกว่าการหลับใด ๆ ตลอดทั้งคืน ในฝันฉันได้เห็นแม่น้ำที่ใสราวกับคริสตัล {{...}}}}
==== คำกริยา ====
{{en-verb}}
# {{archaic form of|en|doze}}
#* {{quote-book|en|year=1918|author=William Henry Hudson|title=Far Away And Long Ago|passage=It was to me a marvellous experience; to be here, propped up with pillows in a dimly-lighted room, the night-nurse idly '''dosing''' by the fire; the sound of the everlasting wind in my ears, howling outside {{...}}|t=สำหรับฉันแล้ว มันเป็นประสบการณ์ที่วิเศษมาก การได้มาอยู่ที่นี่ พิงหมอนอยู่ในห้องที่แสงสลัว พยาบาลกลางคืนงีบหลับอยู่ข้างเตาผิง เสียงลมที่พัดไม่หยุดหย่อนดังแว่วมาแต่หู และเสียงหอนอยู่ข้างนอก {{...}}}}
=== คำสลับอักษร ===
* {{anagrams|en|a=deos|Does|SOED|deos|deso|does|odes}}
{{C|en|Medicine|Radioactivity}}
== เก็บกวาด ==
== ภาษาอาฟรีกานส์ ==
=== คำนาม ===
{{head|af|รูปนาม}}
# {{plural of|af|doos}}
== ภาษาเซบัวโน ==
{{number box|ceb}}
=== รากศัพท์ ===
{{bor+|ceb|es|doce}}
=== การออกเสียง ===
* {{ceb-IPA}}
* {{hyph|ceb|do|se}}
=== เลข ===
{{ceb-num|dóse|b=+}}
# [[สิบสอง]]
{{cln|ceb|cardinal numbers}}
== ภาษาบีโคลตอนกลาง ==
{{number box|bcl}}
=== รากศัพท์ ===
{{bor+|bcl|es|doce}}
=== การออกเสียง ===
* {{bcl-IPA}}
* {{hyph|bcl|do|se}}
=== เลข ===
{{bcl-head|numeral|dóse|b=+}}
# [[สิบสอง]]
#: {{syn|bcl|kagduwa}}
==== คำเกี่ยวข้อง ====
{{col|bcl|dos|beynte}}
== ภาษาฝรั่งเศส ==
=== การออกเสียง ===
* {{fr-IPA}}
* {{audio|fr|Fr-dose.ogg|a=France}}
* {{audio|fr|LL-Q150 (fra)-DSwissK-dose.wav|a=<<Switzerland>> (<<Valais>>)}}
* {{audio|fr|LL-Q150 (fra)-Poslovitch-dose.wav|a=<<France>> (<<Vosges>>)}}
=== รากศัพท์ 1 ===
จาก{{der|fr|la|dosis}}, จาก{{der|fr|grc|δόσις}}; {{doublet|fr|dot}}
==== คำนาม ====
{{fr-noun|f}}
# [[สัดส่วน]]
# {{l|en|dose}}
===== ลูกคำ =====
* {{l|fr|dose de cheval}}
* {{l|fr|en avoir sa dose}}
===== คำเกี่ยวข้อง =====
* {{l|fr|doser}}
===== คำสืบทอด =====
{{top2}}
* {{desc|lv|doza}}
* {{desc|lt|dozė}}
* {{desc|mk|доза}}
* {{desc|no|-}} {{l|nb|dose}}
* {{desc|pl|doza}}
* {{desc|ro|doză}}
* {{desc|ru|доза}}
** {{desc|be|доза|bor=1}}
** {{desc|bg|доза|bor=1}}
** {{desc|kk|доза|bor=1}}
* {{desc|sh|doza|доза}}
* {{desc|sl|doza}}
* {{desc|tr|doz}}
* {{desc|fa|دز|tr=doz}}
* {{desc|uk|доза}}
* {{desc|fy|doaze}}
{{bottom}}
=== รากศัพท์ 2 ===
{{nonlemma}}
==== คำกริยา ====
{{head|fr|รูปกริยา}}
# {{inflection of|fr|doser||1//3|s|pres|ind//sub|;|2|s|impr}}
=== อ่านเพิ่ม ===
* {{R:fr:TLFi}}
== ภาษาอีโลกาโน ==
=== รูปแบบอื่น ===
* {{alt|ilo|doce||obsolete|Abecedario orthography}}
=== รากศัพท์ ===
{{bor+|ilo|es|doce}}
=== การออกเสียง ===
* {{ilo-IPA}}
* {{hyph|ilo|do|se}}
=== เลข ===
{{ilo-head|numeral|b=+}}
# {{cln|ilo|cardinal numbers}} [[สิบสอง]]
#: {{syn|ilo|sangapulo ket dua}}
== ภาษาอิตาลี ==
=== การออกเสียง ===
{{it-pr|dòse}}
=== คำนาม ===
{{it-noun|f}}
# ปริมาณ[[ยา]]
# [[ปริมาณ]], [[จำนวน]], [[ขนาด]]
# [[ข้อเสนอ]] (ที่ดีหรือดีมาก) (gran dose-buona dose)
==== ลูกคำ ====
* {{l|it|dosare}}
=== คำสลับอักษร ===
* {{anagrams|it|a=deos|sedo|sedò|sode}}
== ภาษานอร์เวย์แบบบุ๊กมอล ==
=== รากศัพท์ ===
จาก{{der|nb|grc|δόσις}}
=== คำนาม ===
{{nb-noun-m1}}
# [[ปริมาณ]][[ยา]]
=== อ้างอิง ===
* {{R:nb:OB}}
* {{R:nb:NAOB|dose_2}}
== ภาษานอร์เวย์แบบนือนอสก์ ==
=== รากศัพท์ ===
จาก{{der|nn|grc|δόσις}}
=== คำนาม ===
{{nn-noun-m1}}
# [[ปริมาณ]][[ยา]]
=== อ้างอิง ===
* {{R:nn:OB}}
== ภาษาบาลี ==
=== รูปแบบอื่น ===
{{pi-alt|Thai=โทเส}}
=== คำนาม ===
{{head|pi|รูปนาม}}
# {{inflection of|pi|dosa||loc|s}}
# {{inflection of|pi|dosa||acc|p}}
== ภาษาโปรตุเกส ==
=== รากศัพท์ 1 ===
{{der|pt|la|dosis}}, จาก{{der|pt|grc|δόσις}}
==== การออกเสียง ====
* {{rhymes|pt|ɔzi|s=2}}
{{pt-IPA|dóse}}
==== คำนาม ====
{{pt-noun|f}}
# [[ปริมาณ]][[ยา]]
# {{lb|pt|Portugal}} [[ส่วน]] {{gloss|ของอาหาร}}
#: {{syn|pt|porção}}
#: {{ux|pt|Uma meia '''dose''' de sardinhas assadas.|Half a '''portion''' of grilled sardines.}}
# {{lb|pt|informal}} [[ฟิกซ์]] {{gloss|ยาเสพติดชนิดออกฤทธิ์ครั้งเดียว}}
==== อ่านเพิ่ม ====
* {{R:pt:Priberam}}
=== รากศัพท์ 2 ===
==== คำกริยา ====
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dosar}}
==== อ่านเพิ่ม ====
* {{R:pt:Aulete}}
== ภาษาตากาล็อก ==
{{number box|tl}}
=== รากศัพท์ ===
{{ety|tl|:bor|es:doce<t:twelve>|text=+|tree=1}}
=== การออกเสียง ===
{{tl-pr|audio=LL-Q34057 (tgl)-Geoffjop0908-dose.wav}}
=== เลข ===
{{tl-num|b=+}}
# [[สิบสอง]]
#: {{syn|tl|labindalawa}}
==== คำเกี่ยวข้อง ====
{{col3|tl|alas-dose|dose mil|dosena|dos|a-dose|dosyentos}}
=== อ่านเพิ่ม ===
* {{R:Pambansang Diksiyonaryo}}
{{C|tl|สิบสอง}}
izt5sp0acredamnafi54h1xyg6l32cz
5754361
5754360
2026-08-06T02:26:35Z
Octahedron80
267
/* เก็บกวาด */
5754361
wikitext
text/x-wiki
{{also/auto}}
== ภาษาอังกฤษ ==
=== รากศัพท์ 1 ===
{{root|en|ine-pro|*deh₃-}}
{{bor+|en|frm|dose}}, จาก{{der|en|la-lat|dosis}}, จาก{{der|en|grc|δόσις||ส่วนหนึ่ง(ของยา)ที่สั่งจ่าย|lit=สิ่งที่ให้}}, {{w|กาเลน}}และแพทย์ชาวกรีกคนอื่น ๆ ใช้คำนี้เพื่อหมายถึงปริมาณยา, จาก{{m|grc|δίδωμι||ให้}}; ส่วนใหญ่ถูกแทนที่ด้วย{{noncog|en|drench}}; {{doublet|en|doos}}
==== การออกเสียง ====
* {{IPA|en|/ˈdəʊ̯s/|/ˈdɵ̞ʊ̯s/|a=RP}}
* {{IPA|en|/ˈdoʊ̯s/|/ˈdɔʊ̯s/|a=GA,CA}}
* {{IPA|en|/ˈdoʊ̯s/|[ˈdeʊ̯s]|/ˈdɔʊ̯s/|[ˈdɛʊ̯s]|a=California|q2=California Vowel Shift|q4=California Vowel Shift}}
** {{audio|en|en-us-dose.ogg|a=Southern California|IPA=[dɛɯ̟s]}}
* {{IPA|en|/ˈdəʉ̯s/|/ˈdɐʉ̯s/|a=AU|q2=some speakers}}
* {{IPA|en|/ˈdɐʉ̯s/|a=NZ}}
* {{rhymes|en|əʊs|s=1}}
* {{hyph|en|dose}}
==== คำนาม ====
{{en-noun}}
# [[ปริมาณ]][[ยา]]ที่[[วัด]]หรือ[[ตวง]]ไว้สำหรับ[[รับประทาน]]ในแต่ละครั้ง
#: {{ux|en|Why did he give you only a single 500 mg '''dose'''? The correct dosage of this antibiotic is one 500 mg tablet twice a day for 10 days.|ทำไมเขาถึงให้ยาคุณแค่ขนาด 500 มิลลิกรัมครั้งเดียว? ปริมาณยาปฏิชีวนะที่ถูกต้องคือ ยาเม็ดขนาด 500 มิลลิกรัม วันละสองครั้ง เป็นเวลา 10 วัน}}
# ปริมาณของสารตัวกระทำ (ไม่จำเป็นต้องออกฤทธิ์เสมอไป), สาร, หรือรังสี ที่ได้รับหรือสัมผัสในเวลาใดเวลาหนึ่ง
#* {{quote-journal|en|date=2014-04-21|volume=411|issue=8884|magazine=w:The Economist
|title=[http://www.economist.com/news/science-and-technology/21601233-exploring-link-between-manganese-and-parkinsons-disease-subtle-effects Subtle effects]
|passage=Manganism has been known about since the 19th century, when miners exposed to ores containing manganese{{...}}began to totter, slur their speech and behave like someone inebriated. The poisoning was irreversible, and soon ended in psychosis and death. Nowadays workers are exposed to far lower '''doses''' and manganism is rare.
|t=โรคที่เกิดจากแมงกานีสเป็นที่รู้จักกันมาตั้งแต่ศตวรรษที่ 19 เมื่อคนงานเหมืองที่สัมผัสกับแร่ที่มีแมงกานีสเป็นส่วนประกอบ {{...}} เริ่มมีอาการเซื่องซึม พูดจาไม่ชัด และมีพฤติกรรมเหมือนคนเมาสุรา พิษนี้ไม่สามารถรักษาให้หายได้ และในไม่ช้าก็จะนำไปสู่โรคจิตและเสียชีวิต ปัจจุบันคนงานสัมผัสกับแมงกานีสในปริมาณที่ต่ำกว่ามาก และโรคที่เกิดจากแมงกานีสจึงพบได้ยาก}}
# {{lb|en|figurative|dated}} สิ่งที่[[ไม่พึงประสงค์]]ใด ๆ ที่ต้องกำจัดออกไป
#: {{syn|en|fill<qq:as in have one's fill>}}
# {{lb|en|figurative}} การวัดผลที่ดีหรือประสบการณ์ที่ยาวนานเกี่ยวกับบางสิ่งบางอย่าง
#: {{ux|en|a healthy '''dose''' of skepticism.|ความสงสัยอย่างมีเหตุผล}}
#* {{RQ:Conrad Heart of Darkness|page=197|passage=“I had then, as you remember, just returned to London after a lot of Indian Ocean, Pacific, China Seas - a regular '''dose''' of the East - six years or so, and I was loafing about, hindering you fellows in your work and invading your homes, just as though I had got a heavenly mission to civilise you.”|t=“อย่างที่พวกคุณจำได้ ผมเพิ่งกลับมาลอนดอนหลังจากเดินทางไปทั่วมหาสมุทรอินเดีย มหาสมุทรแปซิฟิก และทะเลจีนมาประมาณหกปี เรียกได้ว่าได้สัมผัสกับตะวันออกอย่างเต็มที่เลย และผมก็เอาแต่เที่ยวเตร่ ขัดขวางการทำงานของพวกคุณ และบุกรุกบ้านของพวกคุณ ราวกับว่าผมได้รับภารกิจจากสวรรค์มาเพื่อทำให้พวกคุณเจริญแล้ว”}}
#* {{quote-book|en|title=Queer Pulp|author=Susan Stryker|year=2001|page=78|text=The prospect of becoming a father is a '''dose''' of reality that threatens to bring his dream world crashing down.|t=โอกาสที่จะได้เป็นพ่อคนนั้นเป็นเหมือนการเผชิญหน้าของความจริงที่คุกคามจะทำให้โลกแห่งความฝันของเขาล่มสลาย}}
#* {{quote-journal|en|journal=w:TIME|title=Your Bedroom Probably Isn't Dark Enough|date=Dec 9 2025|author=Veronique Greenwood
|text=People who don't get their daily '''dose''' of light at the right time of day can end up with worse health.
|url=https://time.com/7339298/dark-bedroom-sleep-night-heart-health/
|t=คนที่ไม่ได้รับแสงแดดในปริมาณที่เพียงพอในเวลาที่เหมาะสมของวัน อาจมีสุขภาพที่แย่ลงได้}}
# {{lb|en|dated}} [[โรคติดต่อ]]ทาง[[เพศสัมพันธ์]]
#* {{quote-song|en|year=1972|author=w:Shel Silverstein|title=Don't Give A Dose to the One You Love Most
|passage=Don't give a '''dose''' to the one you love most. / Give her some marmalade... give her some toast.
|t=อย่าให้โรคติดต่อทางเพศสัมพันธ์แก่คนที่คุณรักมากที่สุด / ให้แยมส้มแก่เธอ... ให้ขนมปังปิ้งแก่เธอ}}
#* {{quote-book|en|year=1978|author=w:Lawrence Durrell|title=Livia|publisher=Faber & Faber|year_published=1992|series=Avignon Quintet|page=382
|passage=It would be very expensive to cure a '''dose''' here, as well as unbelievably painful.
|t=การรักษาโรคติดต่อทางเพศสัมพันธ์ด้วยวิธีนี้จะมีค่าใช้จ่ายสูงมากและเจ็บปวดอย่างเหลือเชื่อ}}
# {{lb|en|Ireland|colloquial}} [[หวัด]]; [[โรค]]จาก[[ไวรัส]]ที่พบได้ทั่วไปใน[[โพรงจมูก]] บางครั้งอาจมี[[ไข้]]ร่วมด้วย
#: {{ux|en|There's a '''dose''' going round.|มีการระบาดของโรคหวัดอยู่}}
===== ลูกคำ =====
{{col|en|collapse=n|absorbed dose|dosemeter|dosology|interdose|isodose|macrodose|megadose|multidose|paleodose|postdose|predose|underdose|banana equivalent dose|booster dose|dose of one's own medicine|dose rate|effective dose|elephant dose|flight-time equivalent dose|heroic dose|dose dumping|funny as a dose of the clap|lethal dose|like a dose of salts|black dose|low-dose CT scanning|metered-dose inhaler|radiation dose|semilethal dose|the dose makes the poison|committed dose|dose equivalent|equivalent dose|under-dose|zero-dose|hot dose}}
===== คำเกี่ยวข้อง =====
* {{l|en|dosage}}
===== คำสืบทอด =====
* {{desc|ms|dos|bor=1}}
* {{desc|ta|டோஸ்|bor=1}}
==== คำกริยา ====
{{en-verb}}
# {{lb|en|transitive}} [[ให้]]ยาในปริมาณที่วัดหรือตวงมาแล้ว
#* {{quote-book|en|year=1871|author=w:George Meredith|title=w:The Adventures of Harry Richmond|page=270|passage="She thought herself broad awake, and I have '''dosed''' her with an opiate."|t="เธอคิดว่าตัวเองตื่นเต็มที่แล้ว และฉันได้ให้ยาแก้ปวดชนิดฝิ่นแก่เธอ"}}
# [[สั่ง]][[จ่าย]]ยา
# {{lb|en|transitive}} แอบให้ยาที่ทำให้หมดสติ (แก่ผู้ที่ไม่เต็มใจ); ดมยา
#* {{quote-book|en|year=2016|author=Pamela Donovan|title=Drink Spiking and Predatory Drugging: A Modern History|page=71|passage=The defense never conceded that their clients had administered chloral [hydrate], but Death and Campbell said initially—during their contested station house confessions—that McAlister had '''dosed''' [Jennie Bosschieter's] drink.|t=ฝ่ายจำเลยไม่เคยยอมรับว่าลูกความของตนได้ให้คลอรัล[ไฮเดรต]แก่จำเลย แต่เดธและแคมป์เบลกล่าวในตอนแรก—ระหว่างการสารภาพที่สถานีตำรวจซึ่งเป็นที่ถกเถียงกัน—ว่าแมคอลิสเตอร์ได้ใส่ยาลงในเครื่องดื่ม[ของเจนนี่ บอสชีเตอร์]}}
# {{lb|en|transitive|dated}} [[แพร่]]เชื้อโรคติดต่อทางเพศสัมพันธ์
#* {{quote-text|en|year=1977|author=w:The White Buffalo|title=Wild Bill Hickok
|passage=Sometime back, one of your scarlet sisters '''dosed''' me proper.
|t=เมื่อไม่นานมานี้ หนึ่งในพี่น้องสาวสีแดงของคุณแพร่เชื้อโรคติดต่อทางเพศสัมพันธ์ให้ฉันอย่างสาหัส}}
===== ลูกคำ =====
{{col|en|microdose|doseable}}
=== รากศัพท์ 2 ===
==== คำนาม ====
{{en-noun}}
# {{archaic form of|en|doze}}
#* {{quote-text|en|year=1839|author=Benjamin Abbott|title=Experience and Gospel Labors of the Rev. Benjamin Abbott
|passage=Just at the dawning of the day, I fell into a '''dose''' more like sleep than any I had during the whole night, in which I dreamed that I saw a river as clear as crystal {{...}}
|t=เมื่อรุ่งเช้ามาถึง ฉันก็หลับไปอย่างสนิท ซึ่งเป็นการหลับที่มากกว่าการหลับใด ๆ ตลอดทั้งคืน ในฝันฉันได้เห็นแม่น้ำที่ใสราวกับคริสตัล {{...}}}}
==== คำกริยา ====
{{en-verb}}
# {{archaic form of|en|doze}}
#* {{quote-book|en|year=1918|author=William Henry Hudson|title=Far Away And Long Ago|passage=It was to me a marvellous experience; to be here, propped up with pillows in a dimly-lighted room, the night-nurse idly '''dosing''' by the fire; the sound of the everlasting wind in my ears, howling outside {{...}}|t=สำหรับฉันแล้ว มันเป็นประสบการณ์ที่วิเศษมาก การได้มาอยู่ที่นี่ พิงหมอนอยู่ในห้องที่แสงสลัว พยาบาลกลางคืนงีบหลับอยู่ข้างเตาผิง เสียงลมที่พัดไม่หยุดหย่อนดังแว่วมาแต่หู และเสียงหอนอยู่ข้างนอก {{...}}}}
=== คำสลับอักษร ===
* {{anagrams|en|a=deos|Does|SOED|deos|deso|does|odes}}
{{C|en|Medicine|Radioactivity}}
== ภาษาอาฟรีกานส์ ==
=== คำนาม ===
{{head|af|รูปนาม}}
# {{plural of|af|doos}}
== ภาษาเซบัวโน ==
{{number box|ceb}}
=== รากศัพท์ ===
{{bor+|ceb|es|doce}}
=== การออกเสียง ===
* {{ceb-IPA}}
* {{hyph|ceb|do|se}}
=== เลข ===
{{ceb-num|dóse|b=+}}
# [[สิบสอง]]
{{cln|ceb|cardinal numbers}}
== ภาษาบีโคลตอนกลาง ==
{{number box|bcl}}
=== รากศัพท์ ===
{{bor+|bcl|es|doce}}
=== การออกเสียง ===
* {{bcl-IPA}}
* {{hyph|bcl|do|se}}
=== เลข ===
{{bcl-head|numeral|dóse|b=+}}
# [[สิบสอง]]
#: {{syn|bcl|kagduwa}}
==== คำเกี่ยวข้อง ====
{{col|bcl|dos|beynte}}
== ภาษาฝรั่งเศส ==
=== การออกเสียง ===
* {{fr-IPA}}
* {{audio|fr|Fr-dose.ogg|a=France}}
* {{audio|fr|LL-Q150 (fra)-DSwissK-dose.wav|a=<<Switzerland>> (<<Valais>>)}}
* {{audio|fr|LL-Q150 (fra)-Poslovitch-dose.wav|a=<<France>> (<<Vosges>>)}}
=== รากศัพท์ 1 ===
จาก{{der|fr|la|dosis}}, จาก{{der|fr|grc|δόσις}}; {{doublet|fr|dot}}
==== คำนาม ====
{{fr-noun|f}}
# [[สัดส่วน]]
# {{l|en|dose}}
===== ลูกคำ =====
* {{l|fr|dose de cheval}}
* {{l|fr|en avoir sa dose}}
===== คำเกี่ยวข้อง =====
* {{l|fr|doser}}
===== คำสืบทอด =====
{{top2}}
* {{desc|lv|doza}}
* {{desc|lt|dozė}}
* {{desc|mk|доза}}
* {{desc|no|-}} {{l|nb|dose}}
* {{desc|pl|doza}}
* {{desc|ro|doză}}
* {{desc|ru|доза}}
** {{desc|be|доза|bor=1}}
** {{desc|bg|доза|bor=1}}
** {{desc|kk|доза|bor=1}}
* {{desc|sh|doza|доза}}
* {{desc|sl|doza}}
* {{desc|tr|doz}}
* {{desc|fa|دز|tr=doz}}
* {{desc|uk|доза}}
* {{desc|fy|doaze}}
{{bottom}}
=== รากศัพท์ 2 ===
{{nonlemma}}
==== คำกริยา ====
{{head|fr|รูปกริยา}}
# {{inflection of|fr|doser||1//3|s|pres|ind//sub|;|2|s|impr}}
=== อ่านเพิ่ม ===
* {{R:fr:TLFi}}
== ภาษาอีโลกาโน ==
=== รูปแบบอื่น ===
* {{alt|ilo|doce||obsolete|Abecedario orthography}}
=== รากศัพท์ ===
{{bor+|ilo|es|doce}}
=== การออกเสียง ===
* {{ilo-IPA}}
* {{hyph|ilo|do|se}}
=== เลข ===
{{ilo-head|numeral|b=+}}
# {{cln|ilo|cardinal numbers}} [[สิบสอง]]
#: {{syn|ilo|sangapulo ket dua}}
== ภาษาอิตาลี ==
=== การออกเสียง ===
{{it-pr|dòse}}
=== คำนาม ===
{{it-noun|f}}
# ปริมาณ[[ยา]]
# [[ปริมาณ]], [[จำนวน]], [[ขนาด]]
# [[ข้อเสนอ]] (ที่ดีหรือดีมาก) (gran dose-buona dose)
==== ลูกคำ ====
* {{l|it|dosare}}
=== คำสลับอักษร ===
* {{anagrams|it|a=deos|sedo|sedò|sode}}
== ภาษานอร์เวย์แบบบุ๊กมอล ==
=== รากศัพท์ ===
จาก{{der|nb|grc|δόσις}}
=== คำนาม ===
{{nb-noun-m1}}
# [[ปริมาณ]][[ยา]]
=== อ้างอิง ===
* {{R:nb:OB}}
* {{R:nb:NAOB|dose_2}}
== ภาษานอร์เวย์แบบนือนอสก์ ==
=== รากศัพท์ ===
จาก{{der|nn|grc|δόσις}}
=== คำนาม ===
{{nn-noun-m1}}
# [[ปริมาณ]][[ยา]]
=== อ้างอิง ===
* {{R:nn:OB}}
== ภาษาบาลี ==
=== รูปแบบอื่น ===
{{pi-alt|Thai=โทเส}}
=== คำนาม ===
{{head|pi|รูปนาม}}
# {{inflection of|pi|dosa||loc|s}}
# {{inflection of|pi|dosa||acc|p}}
== ภาษาโปรตุเกส ==
=== รากศัพท์ 1 ===
{{der|pt|la|dosis}}, จาก{{der|pt|grc|δόσις}}
==== การออกเสียง ====
* {{rhymes|pt|ɔzi|s=2}}
{{pt-IPA|dóse}}
==== คำนาม ====
{{pt-noun|f}}
# [[ปริมาณ]][[ยา]]
# {{lb|pt|Portugal}} [[ส่วน]] {{gloss|ของอาหาร}}
#: {{syn|pt|porção}}
#: {{ux|pt|Uma meia '''dose''' de sardinhas assadas.|Half a '''portion''' of grilled sardines.}}
# {{lb|pt|informal}} [[ฟิกซ์]] {{gloss|ยาเสพติดชนิดออกฤทธิ์ครั้งเดียว}}
==== อ่านเพิ่ม ====
* {{R:pt:Priberam}}
=== รากศัพท์ 2 ===
==== คำกริยา ====
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dosar}}
==== อ่านเพิ่ม ====
* {{R:pt:Aulete}}
== ภาษาตากาล็อก ==
{{number box|tl}}
=== รากศัพท์ ===
{{ety|tl|:bor|es:doce<t:twelve>|text=+|tree=1}}
=== การออกเสียง ===
{{tl-pr|audio=LL-Q34057 (tgl)-Geoffjop0908-dose.wav}}
=== เลข ===
{{tl-num|b=+}}
# [[สิบสอง]]
#: {{syn|tl|labindalawa}}
==== คำเกี่ยวข้อง ====
{{col3|tl|alas-dose|dose mil|dosena|dos|a-dose|dosyentos}}
=== อ่านเพิ่ม ===
* {{R:Pambansang Diksiyonaryo}}
{{C|tl|สิบสอง}}
rkajyaztrtfb8wdpf9pgm8ymmtw93zr
5754362
5754361
2026-08-06T02:27:15Z
Octahedron80
267
/* */
5754362
wikitext
text/x-wiki
{{also/auto}}
{{minitoc}}
== ภาษาอังกฤษ ==
=== รากศัพท์ 1 ===
{{root|en|ine-pro|*deh₃-}}
{{bor+|en|frm|dose}}, จาก{{der|en|la-lat|dosis}}, จาก{{der|en|grc|δόσις||ส่วนหนึ่ง(ของยา)ที่สั่งจ่าย|lit=สิ่งที่ให้}}, {{w|กาเลน}}และแพทย์ชาวกรีกคนอื่น ๆ ใช้คำนี้เพื่อหมายถึงปริมาณยา, จาก{{m|grc|δίδωμι||ให้}}; ส่วนใหญ่ถูกแทนที่ด้วย{{noncog|en|drench}}; {{doublet|en|doos}}
==== การออกเสียง ====
* {{IPA|en|/ˈdəʊ̯s/|/ˈdɵ̞ʊ̯s/|a=RP}}
* {{IPA|en|/ˈdoʊ̯s/|/ˈdɔʊ̯s/|a=GA,CA}}
* {{IPA|en|/ˈdoʊ̯s/|[ˈdeʊ̯s]|/ˈdɔʊ̯s/|[ˈdɛʊ̯s]|a=California|q2=California Vowel Shift|q4=California Vowel Shift}}
** {{audio|en|en-us-dose.ogg|a=Southern California|IPA=[dɛɯ̟s]}}
* {{IPA|en|/ˈdəʉ̯s/|/ˈdɐʉ̯s/|a=AU|q2=some speakers}}
* {{IPA|en|/ˈdɐʉ̯s/|a=NZ}}
* {{rhymes|en|əʊs|s=1}}
* {{hyph|en|dose}}
==== คำนาม ====
{{en-noun}}
# [[ปริมาณ]][[ยา]]ที่[[วัด]]หรือ[[ตวง]]ไว้สำหรับ[[รับประทาน]]ในแต่ละครั้ง
#: {{ux|en|Why did he give you only a single 500 mg '''dose'''? The correct dosage of this antibiotic is one 500 mg tablet twice a day for 10 days.|ทำไมเขาถึงให้ยาคุณแค่ขนาด 500 มิลลิกรัมครั้งเดียว? ปริมาณยาปฏิชีวนะที่ถูกต้องคือ ยาเม็ดขนาด 500 มิลลิกรัม วันละสองครั้ง เป็นเวลา 10 วัน}}
# ปริมาณของสารตัวกระทำ (ไม่จำเป็นต้องออกฤทธิ์เสมอไป), สาร, หรือรังสี ที่ได้รับหรือสัมผัสในเวลาใดเวลาหนึ่ง
#* {{quote-journal|en|date=2014-04-21|volume=411|issue=8884|magazine=w:The Economist
|title=[http://www.economist.com/news/science-and-technology/21601233-exploring-link-between-manganese-and-parkinsons-disease-subtle-effects Subtle effects]
|passage=Manganism has been known about since the 19th century, when miners exposed to ores containing manganese{{...}}began to totter, slur their speech and behave like someone inebriated. The poisoning was irreversible, and soon ended in psychosis and death. Nowadays workers are exposed to far lower '''doses''' and manganism is rare.
|t=โรคที่เกิดจากแมงกานีสเป็นที่รู้จักกันมาตั้งแต่ศตวรรษที่ 19 เมื่อคนงานเหมืองที่สัมผัสกับแร่ที่มีแมงกานีสเป็นส่วนประกอบ {{...}} เริ่มมีอาการเซื่องซึม พูดจาไม่ชัด และมีพฤติกรรมเหมือนคนเมาสุรา พิษนี้ไม่สามารถรักษาให้หายได้ และในไม่ช้าก็จะนำไปสู่โรคจิตและเสียชีวิต ปัจจุบันคนงานสัมผัสกับแมงกานีสในปริมาณที่ต่ำกว่ามาก และโรคที่เกิดจากแมงกานีสจึงพบได้ยาก}}
# {{lb|en|figurative|dated}} สิ่งที่[[ไม่พึงประสงค์]]ใด ๆ ที่ต้องกำจัดออกไป
#: {{syn|en|fill<qq:as in have one's fill>}}
# {{lb|en|figurative}} การวัดผลที่ดีหรือประสบการณ์ที่ยาวนานเกี่ยวกับบางสิ่งบางอย่าง
#: {{ux|en|a healthy '''dose''' of skepticism.|ความสงสัยอย่างมีเหตุผล}}
#* {{RQ:Conrad Heart of Darkness|page=197|passage=“I had then, as you remember, just returned to London after a lot of Indian Ocean, Pacific, China Seas - a regular '''dose''' of the East - six years or so, and I was loafing about, hindering you fellows in your work and invading your homes, just as though I had got a heavenly mission to civilise you.”|t=“อย่างที่พวกคุณจำได้ ผมเพิ่งกลับมาลอนดอนหลังจากเดินทางไปทั่วมหาสมุทรอินเดีย มหาสมุทรแปซิฟิก และทะเลจีนมาประมาณหกปี เรียกได้ว่าได้สัมผัสกับตะวันออกอย่างเต็มที่เลย และผมก็เอาแต่เที่ยวเตร่ ขัดขวางการทำงานของพวกคุณ และบุกรุกบ้านของพวกคุณ ราวกับว่าผมได้รับภารกิจจากสวรรค์มาเพื่อทำให้พวกคุณเจริญแล้ว”}}
#* {{quote-book|en|title=Queer Pulp|author=Susan Stryker|year=2001|page=78|text=The prospect of becoming a father is a '''dose''' of reality that threatens to bring his dream world crashing down.|t=โอกาสที่จะได้เป็นพ่อคนนั้นเป็นเหมือนการเผชิญหน้าของความจริงที่คุกคามจะทำให้โลกแห่งความฝันของเขาล่มสลาย}}
#* {{quote-journal|en|journal=w:TIME|title=Your Bedroom Probably Isn't Dark Enough|date=Dec 9 2025|author=Veronique Greenwood
|text=People who don't get their daily '''dose''' of light at the right time of day can end up with worse health.
|url=https://time.com/7339298/dark-bedroom-sleep-night-heart-health/
|t=คนที่ไม่ได้รับแสงแดดในปริมาณที่เพียงพอในเวลาที่เหมาะสมของวัน อาจมีสุขภาพที่แย่ลงได้}}
# {{lb|en|dated}} [[โรคติดต่อ]]ทาง[[เพศสัมพันธ์]]
#* {{quote-song|en|year=1972|author=w:Shel Silverstein|title=Don't Give A Dose to the One You Love Most
|passage=Don't give a '''dose''' to the one you love most. / Give her some marmalade... give her some toast.
|t=อย่าให้โรคติดต่อทางเพศสัมพันธ์แก่คนที่คุณรักมากที่สุด / ให้แยมส้มแก่เธอ... ให้ขนมปังปิ้งแก่เธอ}}
#* {{quote-book|en|year=1978|author=w:Lawrence Durrell|title=Livia|publisher=Faber & Faber|year_published=1992|series=Avignon Quintet|page=382
|passage=It would be very expensive to cure a '''dose''' here, as well as unbelievably painful.
|t=การรักษาโรคติดต่อทางเพศสัมพันธ์ด้วยวิธีนี้จะมีค่าใช้จ่ายสูงมากและเจ็บปวดอย่างเหลือเชื่อ}}
# {{lb|en|Ireland|colloquial}} [[หวัด]]; [[โรค]]จาก[[ไวรัส]]ที่พบได้ทั่วไปใน[[โพรงจมูก]] บางครั้งอาจมี[[ไข้]]ร่วมด้วย
#: {{ux|en|There's a '''dose''' going round.|มีการระบาดของโรคหวัดอยู่}}
===== ลูกคำ =====
{{col|en|collapse=n|absorbed dose|dosemeter|dosology|interdose|isodose|macrodose|megadose|multidose|paleodose|postdose|predose|underdose|banana equivalent dose|booster dose|dose of one's own medicine|dose rate|effective dose|elephant dose|flight-time equivalent dose|heroic dose|dose dumping|funny as a dose of the clap|lethal dose|like a dose of salts|black dose|low-dose CT scanning|metered-dose inhaler|radiation dose|semilethal dose|the dose makes the poison|committed dose|dose equivalent|equivalent dose|under-dose|zero-dose|hot dose}}
===== คำเกี่ยวข้อง =====
* {{l|en|dosage}}
===== คำสืบทอด =====
* {{desc|ms|dos|bor=1}}
* {{desc|ta|டோஸ்|bor=1}}
==== คำกริยา ====
{{en-verb}}
# {{lb|en|transitive}} [[ให้]]ยาในปริมาณที่วัดหรือตวงมาแล้ว
#* {{quote-book|en|year=1871|author=w:George Meredith|title=w:The Adventures of Harry Richmond|page=270|passage="She thought herself broad awake, and I have '''dosed''' her with an opiate."|t="เธอคิดว่าตัวเองตื่นเต็มที่แล้ว และฉันได้ให้ยาแก้ปวดชนิดฝิ่นแก่เธอ"}}
# [[สั่ง]][[จ่าย]]ยา
# {{lb|en|transitive}} แอบให้ยาที่ทำให้หมดสติ (แก่ผู้ที่ไม่เต็มใจ); ดมยา
#* {{quote-book|en|year=2016|author=Pamela Donovan|title=Drink Spiking and Predatory Drugging: A Modern History|page=71|passage=The defense never conceded that their clients had administered chloral [hydrate], but Death and Campbell said initially—during their contested station house confessions—that McAlister had '''dosed''' [Jennie Bosschieter's] drink.|t=ฝ่ายจำเลยไม่เคยยอมรับว่าลูกความของตนได้ให้คลอรัล[ไฮเดรต]แก่จำเลย แต่เดธและแคมป์เบลกล่าวในตอนแรก—ระหว่างการสารภาพที่สถานีตำรวจซึ่งเป็นที่ถกเถียงกัน—ว่าแมคอลิสเตอร์ได้ใส่ยาลงในเครื่องดื่ม[ของเจนนี่ บอสชีเตอร์]}}
# {{lb|en|transitive|dated}} [[แพร่]]เชื้อโรคติดต่อทางเพศสัมพันธ์
#* {{quote-text|en|year=1977|author=w:The White Buffalo|title=Wild Bill Hickok
|passage=Sometime back, one of your scarlet sisters '''dosed''' me proper.
|t=เมื่อไม่นานมานี้ หนึ่งในพี่น้องสาวสีแดงของคุณแพร่เชื้อโรคติดต่อทางเพศสัมพันธ์ให้ฉันอย่างสาหัส}}
===== ลูกคำ =====
{{col|en|microdose|doseable}}
=== รากศัพท์ 2 ===
==== คำนาม ====
{{en-noun}}
# {{archaic form of|en|doze}}
#* {{quote-text|en|year=1839|author=Benjamin Abbott|title=Experience and Gospel Labors of the Rev. Benjamin Abbott
|passage=Just at the dawning of the day, I fell into a '''dose''' more like sleep than any I had during the whole night, in which I dreamed that I saw a river as clear as crystal {{...}}
|t=เมื่อรุ่งเช้ามาถึง ฉันก็หลับไปอย่างสนิท ซึ่งเป็นการหลับที่มากกว่าการหลับใด ๆ ตลอดทั้งคืน ในฝันฉันได้เห็นแม่น้ำที่ใสราวกับคริสตัล {{...}}}}
==== คำกริยา ====
{{en-verb}}
# {{archaic form of|en|doze}}
#* {{quote-book|en|year=1918|author=William Henry Hudson|title=Far Away And Long Ago|passage=It was to me a marvellous experience; to be here, propped up with pillows in a dimly-lighted room, the night-nurse idly '''dosing''' by the fire; the sound of the everlasting wind in my ears, howling outside {{...}}|t=สำหรับฉันแล้ว มันเป็นประสบการณ์ที่วิเศษมาก การได้มาอยู่ที่นี่ พิงหมอนอยู่ในห้องที่แสงสลัว พยาบาลกลางคืนงีบหลับอยู่ข้างเตาผิง เสียงลมที่พัดไม่หยุดหย่อนดังแว่วมาแต่หู และเสียงหอนอยู่ข้างนอก {{...}}}}
=== คำสลับอักษร ===
* {{anagrams|en|a=deos|Does|SOED|deos|deso|does|odes}}
{{C|en|Medicine|Radioactivity}}
== ภาษาอาฟรีกานส์ ==
=== คำนาม ===
{{head|af|รูปนาม}}
# {{plural of|af|doos}}
== ภาษาเซบัวโน ==
{{number box|ceb}}
=== รากศัพท์ ===
{{bor+|ceb|es|doce}}
=== การออกเสียง ===
* {{ceb-IPA}}
* {{hyph|ceb|do|se}}
=== เลข ===
{{ceb-num|dóse|b=+}}
# [[สิบสอง]]
{{cln|ceb|cardinal numbers}}
== ภาษาบีโคลตอนกลาง ==
{{number box|bcl}}
=== รากศัพท์ ===
{{bor+|bcl|es|doce}}
=== การออกเสียง ===
* {{bcl-IPA}}
* {{hyph|bcl|do|se}}
=== เลข ===
{{bcl-head|numeral|dóse|b=+}}
# [[สิบสอง]]
#: {{syn|bcl|kagduwa}}
==== คำเกี่ยวข้อง ====
{{col|bcl|dos|beynte}}
== ภาษาฝรั่งเศส ==
=== การออกเสียง ===
* {{fr-IPA}}
* {{audio|fr|Fr-dose.ogg|a=France}}
* {{audio|fr|LL-Q150 (fra)-DSwissK-dose.wav|a=<<Switzerland>> (<<Valais>>)}}
* {{audio|fr|LL-Q150 (fra)-Poslovitch-dose.wav|a=<<France>> (<<Vosges>>)}}
=== รากศัพท์ 1 ===
จาก{{der|fr|la|dosis}}, จาก{{der|fr|grc|δόσις}}; {{doublet|fr|dot}}
==== คำนาม ====
{{fr-noun|f}}
# [[สัดส่วน]]
# {{l|en|dose}}
===== ลูกคำ =====
* {{l|fr|dose de cheval}}
* {{l|fr|en avoir sa dose}}
===== คำเกี่ยวข้อง =====
* {{l|fr|doser}}
===== คำสืบทอด =====
{{top2}}
* {{desc|lv|doza}}
* {{desc|lt|dozė}}
* {{desc|mk|доза}}
* {{desc|no|-}} {{l|nb|dose}}
* {{desc|pl|doza}}
* {{desc|ro|doză}}
* {{desc|ru|доза}}
** {{desc|be|доза|bor=1}}
** {{desc|bg|доза|bor=1}}
** {{desc|kk|доза|bor=1}}
* {{desc|sh|doza|доза}}
* {{desc|sl|doza}}
* {{desc|tr|doz}}
* {{desc|fa|دز|tr=doz}}
* {{desc|uk|доза}}
* {{desc|fy|doaze}}
{{bottom}}
=== รากศัพท์ 2 ===
{{nonlemma}}
==== คำกริยา ====
{{head|fr|รูปกริยา}}
# {{inflection of|fr|doser||1//3|s|pres|ind//sub|;|2|s|impr}}
=== อ่านเพิ่ม ===
* {{R:fr:TLFi}}
== ภาษาอีโลกาโน ==
=== รูปแบบอื่น ===
* {{alt|ilo|doce||obsolete|Abecedario orthography}}
=== รากศัพท์ ===
{{bor+|ilo|es|doce}}
=== การออกเสียง ===
* {{ilo-IPA}}
* {{hyph|ilo|do|se}}
=== เลข ===
{{ilo-head|numeral|b=+}}
# {{cln|ilo|cardinal numbers}} [[สิบสอง]]
#: {{syn|ilo|sangapulo ket dua}}
== ภาษาอิตาลี ==
=== การออกเสียง ===
{{it-pr|dòse}}
=== คำนาม ===
{{it-noun|f}}
# ปริมาณ[[ยา]]
# [[ปริมาณ]], [[จำนวน]], [[ขนาด]]
# [[ข้อเสนอ]] (ที่ดีหรือดีมาก) (gran dose-buona dose)
==== ลูกคำ ====
* {{l|it|dosare}}
=== คำสลับอักษร ===
* {{anagrams|it|a=deos|sedo|sedò|sode}}
== ภาษานอร์เวย์แบบบุ๊กมอล ==
=== รากศัพท์ ===
จาก{{der|nb|grc|δόσις}}
=== คำนาม ===
{{nb-noun-m1}}
# [[ปริมาณ]][[ยา]]
=== อ้างอิง ===
* {{R:nb:OB}}
* {{R:nb:NAOB|dose_2}}
== ภาษานอร์เวย์แบบนือนอสก์ ==
=== รากศัพท์ ===
จาก{{der|nn|grc|δόσις}}
=== คำนาม ===
{{nn-noun-m1}}
# [[ปริมาณ]][[ยา]]
=== อ้างอิง ===
* {{R:nn:OB}}
== ภาษาบาลี ==
=== รูปแบบอื่น ===
{{pi-alt|Thai=โทเส}}
=== คำนาม ===
{{head|pi|รูปนาม}}
# {{inflection of|pi|dosa||loc|s}}
# {{inflection of|pi|dosa||acc|p}}
== ภาษาโปรตุเกส ==
=== รากศัพท์ 1 ===
{{der|pt|la|dosis}}, จาก{{der|pt|grc|δόσις}}
==== การออกเสียง ====
* {{rhymes|pt|ɔzi|s=2}}
{{pt-IPA|dóse}}
==== คำนาม ====
{{pt-noun|f}}
# [[ปริมาณ]][[ยา]]
# {{lb|pt|Portugal}} [[ส่วน]] {{gloss|ของอาหาร}}
#: {{syn|pt|porção}}
#: {{ux|pt|Uma meia '''dose''' de sardinhas assadas.|Half a '''portion''' of grilled sardines.}}
# {{lb|pt|informal}} [[ฟิกซ์]] {{gloss|ยาเสพติดชนิดออกฤทธิ์ครั้งเดียว}}
==== อ่านเพิ่ม ====
* {{R:pt:Priberam}}
=== รากศัพท์ 2 ===
==== คำกริยา ====
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dosar}}
==== อ่านเพิ่ม ====
* {{R:pt:Aulete}}
== ภาษาตากาล็อก ==
{{number box|tl}}
=== รากศัพท์ ===
{{ety|tl|:bor|es:doce<t:twelve>|text=+|tree=1}}
=== การออกเสียง ===
{{tl-pr|audio=LL-Q34057 (tgl)-Geoffjop0908-dose.wav}}
=== เลข ===
{{tl-num|b=+}}
# [[สิบสอง]]
#: {{syn|tl|labindalawa}}
==== คำเกี่ยวข้อง ====
{{col3|tl|alas-dose|dose mil|dosena|dos|a-dose|dosyentos}}
=== อ่านเพิ่ม ===
* {{R:Pambansang Diksiyonaryo}}
{{C|tl|สิบสอง}}
m1skijv1v8y1yc2r00xhoi5yzb3bww2
5754363
5754362
2026-08-06T02:27:35Z
Octahedron80
267
เรียงลำดับหัวเรื่องภาษา
5754363
wikitext
text/x-wiki
{{also/auto}}
{{minitoc}}
== ภาษาเซบัวโน ==
{{number box|ceb}}
=== รากศัพท์ ===
{{bor+|ceb|es|doce}}
=== การออกเสียง ===
* {{ceb-IPA}}
* {{hyph|ceb|do|se}}
=== เลข ===
{{ceb-num|dóse|b=+}}
# [[สิบสอง]]
{{cln|ceb|cardinal numbers}}
== ภาษาตากาล็อก ==
{{number box|tl}}
=== รากศัพท์ ===
{{ety|tl|:bor|es:doce<t:twelve>|text=+|tree=1}}
=== การออกเสียง ===
{{tl-pr|audio=LL-Q34057 (tgl)-Geoffjop0908-dose.wav}}
=== เลข ===
{{tl-num|b=+}}
# [[สิบสอง]]
#: {{syn|tl|labindalawa}}
==== คำเกี่ยวข้อง ====
{{col3|tl|alas-dose|dose mil|dosena|dos|a-dose|dosyentos}}
=== อ่านเพิ่ม ===
* {{R:Pambansang Diksiyonaryo}}
{{C|tl|สิบสอง}}
== ภาษานอร์เวย์แบบนือนอสก์ ==
=== รากศัพท์ ===
จาก{{der|nn|grc|δόσις}}
=== คำนาม ===
{{nn-noun-m1}}
# [[ปริมาณ]][[ยา]]
=== อ้างอิง ===
* {{R:nn:OB}}
== ภาษานอร์เวย์แบบบุ๊กมอล ==
=== รากศัพท์ ===
จาก{{der|nb|grc|δόσις}}
=== คำนาม ===
{{nb-noun-m1}}
# [[ปริมาณ]][[ยา]]
=== อ้างอิง ===
* {{R:nb:OB}}
* {{R:nb:NAOB|dose_2}}
== ภาษาบาลี ==
=== รูปแบบอื่น ===
{{pi-alt|Thai=โทเส}}
=== คำนาม ===
{{head|pi|รูปนาม}}
# {{inflection of|pi|dosa||loc|s}}
# {{inflection of|pi|dosa||acc|p}}
== ภาษาบีโคลตอนกลาง ==
{{number box|bcl}}
=== รากศัพท์ ===
{{bor+|bcl|es|doce}}
=== การออกเสียง ===
* {{bcl-IPA}}
* {{hyph|bcl|do|se}}
=== เลข ===
{{bcl-head|numeral|dóse|b=+}}
# [[สิบสอง]]
#: {{syn|bcl|kagduwa}}
==== คำเกี่ยวข้อง ====
{{col|bcl|dos|beynte}}
== ภาษาโปรตุเกส ==
=== รากศัพท์ 1 ===
{{der|pt|la|dosis}}, จาก{{der|pt|grc|δόσις}}
==== การออกเสียง ====
* {{rhymes|pt|ɔzi|s=2}}
{{pt-IPA|dóse}}
==== คำนาม ====
{{pt-noun|f}}
# [[ปริมาณ]][[ยา]]
# {{lb|pt|Portugal}} [[ส่วน]] {{gloss|ของอาหาร}}
#: {{syn|pt|porção}}
#: {{ux|pt|Uma meia '''dose''' de sardinhas assadas.|Half a '''portion''' of grilled sardines.}}
# {{lb|pt|informal}} [[ฟิกซ์]] {{gloss|ยาเสพติดชนิดออกฤทธิ์ครั้งเดียว}}
==== อ่านเพิ่ม ====
* {{R:pt:Priberam}}
=== รากศัพท์ 2 ===
==== คำกริยา ====
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dosar}}
==== อ่านเพิ่ม ====
* {{R:pt:Aulete}}
== ภาษาฝรั่งเศส ==
=== การออกเสียง ===
* {{fr-IPA}}
* {{audio|fr|Fr-dose.ogg|a=France}}
* {{audio|fr|LL-Q150 (fra)-DSwissK-dose.wav|a=<<Switzerland>> (<<Valais>>)}}
* {{audio|fr|LL-Q150 (fra)-Poslovitch-dose.wav|a=<<France>> (<<Vosges>>)}}
=== รากศัพท์ 1 ===
จาก{{der|fr|la|dosis}}, จาก{{der|fr|grc|δόσις}}; {{doublet|fr|dot}}
==== คำนาม ====
{{fr-noun|f}}
# [[สัดส่วน]]
# {{l|en|dose}}
===== ลูกคำ =====
* {{l|fr|dose de cheval}}
* {{l|fr|en avoir sa dose}}
===== คำเกี่ยวข้อง =====
* {{l|fr|doser}}
===== คำสืบทอด =====
{{top2}}
* {{desc|lv|doza}}
* {{desc|lt|dozė}}
* {{desc|mk|доза}}
* {{desc|no|-}} {{l|nb|dose}}
* {{desc|pl|doza}}
* {{desc|ro|doză}}
* {{desc|ru|доза}}
** {{desc|be|доза|bor=1}}
** {{desc|bg|доза|bor=1}}
** {{desc|kk|доза|bor=1}}
* {{desc|sh|doza|доза}}
* {{desc|sl|doza}}
* {{desc|tr|doz}}
* {{desc|fa|دز|tr=doz}}
* {{desc|uk|доза}}
* {{desc|fy|doaze}}
{{bottom}}
=== รากศัพท์ 2 ===
{{nonlemma}}
==== คำกริยา ====
{{head|fr|รูปกริยา}}
# {{inflection of|fr|doser||1//3|s|pres|ind//sub|;|2|s|impr}}
=== อ่านเพิ่ม ===
* {{R:fr:TLFi}}
== ภาษาอังกฤษ ==
=== รากศัพท์ 1 ===
{{root|en|ine-pro|*deh₃-}}
{{bor+|en|frm|dose}}, จาก{{der|en|la-lat|dosis}}, จาก{{der|en|grc|δόσις||ส่วนหนึ่ง(ของยา)ที่สั่งจ่าย|lit=สิ่งที่ให้}}, {{w|กาเลน}}และแพทย์ชาวกรีกคนอื่น ๆ ใช้คำนี้เพื่อหมายถึงปริมาณยา, จาก{{m|grc|δίδωμι||ให้}}; ส่วนใหญ่ถูกแทนที่ด้วย{{noncog|en|drench}}; {{doublet|en|doos}}
==== การออกเสียง ====
* {{IPA|en|/ˈdəʊ̯s/|/ˈdɵ̞ʊ̯s/|a=RP}}
* {{IPA|en|/ˈdoʊ̯s/|/ˈdɔʊ̯s/|a=GA,CA}}
* {{IPA|en|/ˈdoʊ̯s/|[ˈdeʊ̯s]|/ˈdɔʊ̯s/|[ˈdɛʊ̯s]|a=California|q2=California Vowel Shift|q4=California Vowel Shift}}
** {{audio|en|en-us-dose.ogg|a=Southern California|IPA=[dɛɯ̟s]}}
* {{IPA|en|/ˈdəʉ̯s/|/ˈdɐʉ̯s/|a=AU|q2=some speakers}}
* {{IPA|en|/ˈdɐʉ̯s/|a=NZ}}
* {{rhymes|en|əʊs|s=1}}
* {{hyph|en|dose}}
==== คำนาม ====
{{en-noun}}
# [[ปริมาณ]][[ยา]]ที่[[วัด]]หรือ[[ตวง]]ไว้สำหรับ[[รับประทาน]]ในแต่ละครั้ง
#: {{ux|en|Why did he give you only a single 500 mg '''dose'''? The correct dosage of this antibiotic is one 500 mg tablet twice a day for 10 days.|ทำไมเขาถึงให้ยาคุณแค่ขนาด 500 มิลลิกรัมครั้งเดียว? ปริมาณยาปฏิชีวนะที่ถูกต้องคือ ยาเม็ดขนาด 500 มิลลิกรัม วันละสองครั้ง เป็นเวลา 10 วัน}}
# ปริมาณของสารตัวกระทำ (ไม่จำเป็นต้องออกฤทธิ์เสมอไป), สาร, หรือรังสี ที่ได้รับหรือสัมผัสในเวลาใดเวลาหนึ่ง
#* {{quote-journal|en|date=2014-04-21|volume=411|issue=8884|magazine=w:The Economist
|title=[http://www.economist.com/news/science-and-technology/21601233-exploring-link-between-manganese-and-parkinsons-disease-subtle-effects Subtle effects]
|passage=Manganism has been known about since the 19th century, when miners exposed to ores containing manganese{{...}}began to totter, slur their speech and behave like someone inebriated. The poisoning was irreversible, and soon ended in psychosis and death. Nowadays workers are exposed to far lower '''doses''' and manganism is rare.
|t=โรคที่เกิดจากแมงกานีสเป็นที่รู้จักกันมาตั้งแต่ศตวรรษที่ 19 เมื่อคนงานเหมืองที่สัมผัสกับแร่ที่มีแมงกานีสเป็นส่วนประกอบ {{...}} เริ่มมีอาการเซื่องซึม พูดจาไม่ชัด และมีพฤติกรรมเหมือนคนเมาสุรา พิษนี้ไม่สามารถรักษาให้หายได้ และในไม่ช้าก็จะนำไปสู่โรคจิตและเสียชีวิต ปัจจุบันคนงานสัมผัสกับแมงกานีสในปริมาณที่ต่ำกว่ามาก และโรคที่เกิดจากแมงกานีสจึงพบได้ยาก}}
# {{lb|en|figurative|dated}} สิ่งที่[[ไม่พึงประสงค์]]ใด ๆ ที่ต้องกำจัดออกไป
#: {{syn|en|fill<qq:as in have one's fill>}}
# {{lb|en|figurative}} การวัดผลที่ดีหรือประสบการณ์ที่ยาวนานเกี่ยวกับบางสิ่งบางอย่าง
#: {{ux|en|a healthy '''dose''' of skepticism.|ความสงสัยอย่างมีเหตุผล}}
#* {{RQ:Conrad Heart of Darkness|page=197|passage=“I had then, as you remember, just returned to London after a lot of Indian Ocean, Pacific, China Seas - a regular '''dose''' of the East - six years or so, and I was loafing about, hindering you fellows in your work and invading your homes, just as though I had got a heavenly mission to civilise you.”|t=“อย่างที่พวกคุณจำได้ ผมเพิ่งกลับมาลอนดอนหลังจากเดินทางไปทั่วมหาสมุทรอินเดีย มหาสมุทรแปซิฟิก และทะเลจีนมาประมาณหกปี เรียกได้ว่าได้สัมผัสกับตะวันออกอย่างเต็มที่เลย และผมก็เอาแต่เที่ยวเตร่ ขัดขวางการทำงานของพวกคุณ และบุกรุกบ้านของพวกคุณ ราวกับว่าผมได้รับภารกิจจากสวรรค์มาเพื่อทำให้พวกคุณเจริญแล้ว”}}
#* {{quote-book|en|title=Queer Pulp|author=Susan Stryker|year=2001|page=78|text=The prospect of becoming a father is a '''dose''' of reality that threatens to bring his dream world crashing down.|t=โอกาสที่จะได้เป็นพ่อคนนั้นเป็นเหมือนการเผชิญหน้าของความจริงที่คุกคามจะทำให้โลกแห่งความฝันของเขาล่มสลาย}}
#* {{quote-journal|en|journal=w:TIME|title=Your Bedroom Probably Isn't Dark Enough|date=Dec 9 2025|author=Veronique Greenwood
|text=People who don't get their daily '''dose''' of light at the right time of day can end up with worse health.
|url=https://time.com/7339298/dark-bedroom-sleep-night-heart-health/
|t=คนที่ไม่ได้รับแสงแดดในปริมาณที่เพียงพอในเวลาที่เหมาะสมของวัน อาจมีสุขภาพที่แย่ลงได้}}
# {{lb|en|dated}} [[โรคติดต่อ]]ทาง[[เพศสัมพันธ์]]
#* {{quote-song|en|year=1972|author=w:Shel Silverstein|title=Don't Give A Dose to the One You Love Most
|passage=Don't give a '''dose''' to the one you love most. / Give her some marmalade... give her some toast.
|t=อย่าให้โรคติดต่อทางเพศสัมพันธ์แก่คนที่คุณรักมากที่สุด / ให้แยมส้มแก่เธอ... ให้ขนมปังปิ้งแก่เธอ}}
#* {{quote-book|en|year=1978|author=w:Lawrence Durrell|title=Livia|publisher=Faber & Faber|year_published=1992|series=Avignon Quintet|page=382
|passage=It would be very expensive to cure a '''dose''' here, as well as unbelievably painful.
|t=การรักษาโรคติดต่อทางเพศสัมพันธ์ด้วยวิธีนี้จะมีค่าใช้จ่ายสูงมากและเจ็บปวดอย่างเหลือเชื่อ}}
# {{lb|en|Ireland|colloquial}} [[หวัด]]; [[โรค]]จาก[[ไวรัส]]ที่พบได้ทั่วไปใน[[โพรงจมูก]] บางครั้งอาจมี[[ไข้]]ร่วมด้วย
#: {{ux|en|There's a '''dose''' going round.|มีการระบาดของโรคหวัดอยู่}}
===== ลูกคำ =====
{{col|en|collapse=n|absorbed dose|dosemeter|dosology|interdose|isodose|macrodose|megadose|multidose|paleodose|postdose|predose|underdose|banana equivalent dose|booster dose|dose of one's own medicine|dose rate|effective dose|elephant dose|flight-time equivalent dose|heroic dose|dose dumping|funny as a dose of the clap|lethal dose|like a dose of salts|black dose|low-dose CT scanning|metered-dose inhaler|radiation dose|semilethal dose|the dose makes the poison|committed dose|dose equivalent|equivalent dose|under-dose|zero-dose|hot dose}}
===== คำเกี่ยวข้อง =====
* {{l|en|dosage}}
===== คำสืบทอด =====
* {{desc|ms|dos|bor=1}}
* {{desc|ta|டோஸ்|bor=1}}
==== คำกริยา ====
{{en-verb}}
# {{lb|en|transitive}} [[ให้]]ยาในปริมาณที่วัดหรือตวงมาแล้ว
#* {{quote-book|en|year=1871|author=w:George Meredith|title=w:The Adventures of Harry Richmond|page=270|passage="She thought herself broad awake, and I have '''dosed''' her with an opiate."|t="เธอคิดว่าตัวเองตื่นเต็มที่แล้ว และฉันได้ให้ยาแก้ปวดชนิดฝิ่นแก่เธอ"}}
# [[สั่ง]][[จ่าย]]ยา
# {{lb|en|transitive}} แอบให้ยาที่ทำให้หมดสติ (แก่ผู้ที่ไม่เต็มใจ); ดมยา
#* {{quote-book|en|year=2016|author=Pamela Donovan|title=Drink Spiking and Predatory Drugging: A Modern History|page=71|passage=The defense never conceded that their clients had administered chloral [hydrate], but Death and Campbell said initially—during their contested station house confessions—that McAlister had '''dosed''' [Jennie Bosschieter's] drink.|t=ฝ่ายจำเลยไม่เคยยอมรับว่าลูกความของตนได้ให้คลอรัล[ไฮเดรต]แก่จำเลย แต่เดธและแคมป์เบลกล่าวในตอนแรก—ระหว่างการสารภาพที่สถานีตำรวจซึ่งเป็นที่ถกเถียงกัน—ว่าแมคอลิสเตอร์ได้ใส่ยาลงในเครื่องดื่ม[ของเจนนี่ บอสชีเตอร์]}}
# {{lb|en|transitive|dated}} [[แพร่]]เชื้อโรคติดต่อทางเพศสัมพันธ์
#* {{quote-text|en|year=1977|author=w:The White Buffalo|title=Wild Bill Hickok
|passage=Sometime back, one of your scarlet sisters '''dosed''' me proper.
|t=เมื่อไม่นานมานี้ หนึ่งในพี่น้องสาวสีแดงของคุณแพร่เชื้อโรคติดต่อทางเพศสัมพันธ์ให้ฉันอย่างสาหัส}}
===== ลูกคำ =====
{{col|en|microdose|doseable}}
=== รากศัพท์ 2 ===
==== คำนาม ====
{{en-noun}}
# {{archaic form of|en|doze}}
#* {{quote-text|en|year=1839|author=Benjamin Abbott|title=Experience and Gospel Labors of the Rev. Benjamin Abbott
|passage=Just at the dawning of the day, I fell into a '''dose''' more like sleep than any I had during the whole night, in which I dreamed that I saw a river as clear as crystal {{...}}
|t=เมื่อรุ่งเช้ามาถึง ฉันก็หลับไปอย่างสนิท ซึ่งเป็นการหลับที่มากกว่าการหลับใด ๆ ตลอดทั้งคืน ในฝันฉันได้เห็นแม่น้ำที่ใสราวกับคริสตัล {{...}}}}
==== คำกริยา ====
{{en-verb}}
# {{archaic form of|en|doze}}
#* {{quote-book|en|year=1918|author=William Henry Hudson|title=Far Away And Long Ago|passage=It was to me a marvellous experience; to be here, propped up with pillows in a dimly-lighted room, the night-nurse idly '''dosing''' by the fire; the sound of the everlasting wind in my ears, howling outside {{...}}|t=สำหรับฉันแล้ว มันเป็นประสบการณ์ที่วิเศษมาก การได้มาอยู่ที่นี่ พิงหมอนอยู่ในห้องที่แสงสลัว พยาบาลกลางคืนงีบหลับอยู่ข้างเตาผิง เสียงลมที่พัดไม่หยุดหย่อนดังแว่วมาแต่หู และเสียงหอนอยู่ข้างนอก {{...}}}}
=== คำสลับอักษร ===
* {{anagrams|en|a=deos|Does|SOED|deos|deso|does|odes}}
{{C|en|Medicine|Radioactivity}}
== ภาษาอาฟรีกานส์ ==
=== คำนาม ===
{{head|af|รูปนาม}}
# {{plural of|af|doos}}
== ภาษาอิตาลี ==
=== การออกเสียง ===
{{it-pr|dòse}}
=== คำนาม ===
{{it-noun|f}}
# ปริมาณ[[ยา]]
# [[ปริมาณ]], [[จำนวน]], [[ขนาด]]
# [[ข้อเสนอ]] (ที่ดีหรือดีมาก) (gran dose-buona dose)
==== ลูกคำ ====
* {{l|it|dosare}}
=== คำสลับอักษร ===
* {{anagrams|it|a=deos|sedo|sedò|sode}}
== ภาษาอีโลกาโน ==
=== รูปแบบอื่น ===
* {{alt|ilo|doce||obsolete|Abecedario orthography}}
=== รากศัพท์ ===
{{bor+|ilo|es|doce}}
=== การออกเสียง ===
* {{ilo-IPA}}
* {{hyph|ilo|do|se}}
=== เลข ===
{{ilo-head|numeral|b=+}}
# {{cln|ilo|cardinal numbers}} [[สิบสอง]]
#: {{syn|ilo|sangapulo ket dua}}
65exqto9xqxlkyqrp10ff6oxom8f3ox
5754364
5754363
2026-08-06T02:27:57Z
Octahedron80
267
/* รากศัพท์ */
5754364
wikitext
text/x-wiki
{{also/auto}}
{{minitoc}}
== ภาษาเซบัวโน ==
{{number box|ceb}}
=== รากศัพท์ ===
{{bor+|ceb|es|doce}}
=== การออกเสียง ===
* {{ceb-IPA}}
* {{hyph|ceb|do|se}}
=== เลข ===
{{ceb-num|dóse|b=+}}
# [[สิบสอง]]
{{cln|ceb|cardinal numbers}}
== ภาษาตากาล็อก ==
{{number box|tl}}
=== รากศัพท์ ===
{{ety|tl|:bor|es:doce<t:สิบสอง>|text=+|tree=1}}
=== การออกเสียง ===
{{tl-pr|audio=LL-Q34057 (tgl)-Geoffjop0908-dose.wav}}
=== เลข ===
{{tl-num|b=+}}
# [[สิบสอง]]
#: {{syn|tl|labindalawa}}
==== คำเกี่ยวข้อง ====
{{col3|tl|alas-dose|dose mil|dosena|dos|a-dose|dosyentos}}
=== อ่านเพิ่ม ===
* {{R:Pambansang Diksiyonaryo}}
{{C|tl|สิบสอง}}
== ภาษานอร์เวย์แบบนือนอสก์ ==
=== รากศัพท์ ===
จาก{{der|nn|grc|δόσις}}
=== คำนาม ===
{{nn-noun-m1}}
# [[ปริมาณ]][[ยา]]
=== อ้างอิง ===
* {{R:nn:OB}}
== ภาษานอร์เวย์แบบบุ๊กมอล ==
=== รากศัพท์ ===
จาก{{der|nb|grc|δόσις}}
=== คำนาม ===
{{nb-noun-m1}}
# [[ปริมาณ]][[ยา]]
=== อ้างอิง ===
* {{R:nb:OB}}
* {{R:nb:NAOB|dose_2}}
== ภาษาบาลี ==
=== รูปแบบอื่น ===
{{pi-alt|Thai=โทเส}}
=== คำนาม ===
{{head|pi|รูปนาม}}
# {{inflection of|pi|dosa||loc|s}}
# {{inflection of|pi|dosa||acc|p}}
== ภาษาบีโคลตอนกลาง ==
{{number box|bcl}}
=== รากศัพท์ ===
{{bor+|bcl|es|doce}}
=== การออกเสียง ===
* {{bcl-IPA}}
* {{hyph|bcl|do|se}}
=== เลข ===
{{bcl-head|numeral|dóse|b=+}}
# [[สิบสอง]]
#: {{syn|bcl|kagduwa}}
==== คำเกี่ยวข้อง ====
{{col|bcl|dos|beynte}}
== ภาษาโปรตุเกส ==
=== รากศัพท์ 1 ===
{{der|pt|la|dosis}}, จาก{{der|pt|grc|δόσις}}
==== การออกเสียง ====
* {{rhymes|pt|ɔzi|s=2}}
{{pt-IPA|dóse}}
==== คำนาม ====
{{pt-noun|f}}
# [[ปริมาณ]][[ยา]]
# {{lb|pt|Portugal}} [[ส่วน]] {{gloss|ของอาหาร}}
#: {{syn|pt|porção}}
#: {{ux|pt|Uma meia '''dose''' de sardinhas assadas.|Half a '''portion''' of grilled sardines.}}
# {{lb|pt|informal}} [[ฟิกซ์]] {{gloss|ยาเสพติดชนิดออกฤทธิ์ครั้งเดียว}}
==== อ่านเพิ่ม ====
* {{R:pt:Priberam}}
=== รากศัพท์ 2 ===
==== คำกริยา ====
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dosar}}
==== อ่านเพิ่ม ====
* {{R:pt:Aulete}}
== ภาษาฝรั่งเศส ==
=== การออกเสียง ===
* {{fr-IPA}}
* {{audio|fr|Fr-dose.ogg|a=France}}
* {{audio|fr|LL-Q150 (fra)-DSwissK-dose.wav|a=<<Switzerland>> (<<Valais>>)}}
* {{audio|fr|LL-Q150 (fra)-Poslovitch-dose.wav|a=<<France>> (<<Vosges>>)}}
=== รากศัพท์ 1 ===
จาก{{der|fr|la|dosis}}, จาก{{der|fr|grc|δόσις}}; {{doublet|fr|dot}}
==== คำนาม ====
{{fr-noun|f}}
# [[สัดส่วน]]
# {{l|en|dose}}
===== ลูกคำ =====
* {{l|fr|dose de cheval}}
* {{l|fr|en avoir sa dose}}
===== คำเกี่ยวข้อง =====
* {{l|fr|doser}}
===== คำสืบทอด =====
{{top2}}
* {{desc|lv|doza}}
* {{desc|lt|dozė}}
* {{desc|mk|доза}}
* {{desc|no|-}} {{l|nb|dose}}
* {{desc|pl|doza}}
* {{desc|ro|doză}}
* {{desc|ru|доза}}
** {{desc|be|доза|bor=1}}
** {{desc|bg|доза|bor=1}}
** {{desc|kk|доза|bor=1}}
* {{desc|sh|doza|доза}}
* {{desc|sl|doza}}
* {{desc|tr|doz}}
* {{desc|fa|دز|tr=doz}}
* {{desc|uk|доза}}
* {{desc|fy|doaze}}
{{bottom}}
=== รากศัพท์ 2 ===
{{nonlemma}}
==== คำกริยา ====
{{head|fr|รูปกริยา}}
# {{inflection of|fr|doser||1//3|s|pres|ind//sub|;|2|s|impr}}
=== อ่านเพิ่ม ===
* {{R:fr:TLFi}}
== ภาษาอังกฤษ ==
=== รากศัพท์ 1 ===
{{root|en|ine-pro|*deh₃-}}
{{bor+|en|frm|dose}}, จาก{{der|en|la-lat|dosis}}, จาก{{der|en|grc|δόσις||ส่วนหนึ่ง(ของยา)ที่สั่งจ่าย|lit=สิ่งที่ให้}}, {{w|กาเลน}}และแพทย์ชาวกรีกคนอื่น ๆ ใช้คำนี้เพื่อหมายถึงปริมาณยา, จาก{{m|grc|δίδωμι||ให้}}; ส่วนใหญ่ถูกแทนที่ด้วย{{noncog|en|drench}}; {{doublet|en|doos}}
==== การออกเสียง ====
* {{IPA|en|/ˈdəʊ̯s/|/ˈdɵ̞ʊ̯s/|a=RP}}
* {{IPA|en|/ˈdoʊ̯s/|/ˈdɔʊ̯s/|a=GA,CA}}
* {{IPA|en|/ˈdoʊ̯s/|[ˈdeʊ̯s]|/ˈdɔʊ̯s/|[ˈdɛʊ̯s]|a=California|q2=California Vowel Shift|q4=California Vowel Shift}}
** {{audio|en|en-us-dose.ogg|a=Southern California|IPA=[dɛɯ̟s]}}
* {{IPA|en|/ˈdəʉ̯s/|/ˈdɐʉ̯s/|a=AU|q2=some speakers}}
* {{IPA|en|/ˈdɐʉ̯s/|a=NZ}}
* {{rhymes|en|əʊs|s=1}}
* {{hyph|en|dose}}
==== คำนาม ====
{{en-noun}}
# [[ปริมาณ]][[ยา]]ที่[[วัด]]หรือ[[ตวง]]ไว้สำหรับ[[รับประทาน]]ในแต่ละครั้ง
#: {{ux|en|Why did he give you only a single 500 mg '''dose'''? The correct dosage of this antibiotic is one 500 mg tablet twice a day for 10 days.|ทำไมเขาถึงให้ยาคุณแค่ขนาด 500 มิลลิกรัมครั้งเดียว? ปริมาณยาปฏิชีวนะที่ถูกต้องคือ ยาเม็ดขนาด 500 มิลลิกรัม วันละสองครั้ง เป็นเวลา 10 วัน}}
# ปริมาณของสารตัวกระทำ (ไม่จำเป็นต้องออกฤทธิ์เสมอไป), สาร, หรือรังสี ที่ได้รับหรือสัมผัสในเวลาใดเวลาหนึ่ง
#* {{quote-journal|en|date=2014-04-21|volume=411|issue=8884|magazine=w:The Economist
|title=[http://www.economist.com/news/science-and-technology/21601233-exploring-link-between-manganese-and-parkinsons-disease-subtle-effects Subtle effects]
|passage=Manganism has been known about since the 19th century, when miners exposed to ores containing manganese{{...}}began to totter, slur their speech and behave like someone inebriated. The poisoning was irreversible, and soon ended in psychosis and death. Nowadays workers are exposed to far lower '''doses''' and manganism is rare.
|t=โรคที่เกิดจากแมงกานีสเป็นที่รู้จักกันมาตั้งแต่ศตวรรษที่ 19 เมื่อคนงานเหมืองที่สัมผัสกับแร่ที่มีแมงกานีสเป็นส่วนประกอบ {{...}} เริ่มมีอาการเซื่องซึม พูดจาไม่ชัด และมีพฤติกรรมเหมือนคนเมาสุรา พิษนี้ไม่สามารถรักษาให้หายได้ และในไม่ช้าก็จะนำไปสู่โรคจิตและเสียชีวิต ปัจจุบันคนงานสัมผัสกับแมงกานีสในปริมาณที่ต่ำกว่ามาก และโรคที่เกิดจากแมงกานีสจึงพบได้ยาก}}
# {{lb|en|figurative|dated}} สิ่งที่[[ไม่พึงประสงค์]]ใด ๆ ที่ต้องกำจัดออกไป
#: {{syn|en|fill<qq:as in have one's fill>}}
# {{lb|en|figurative}} การวัดผลที่ดีหรือประสบการณ์ที่ยาวนานเกี่ยวกับบางสิ่งบางอย่าง
#: {{ux|en|a healthy '''dose''' of skepticism.|ความสงสัยอย่างมีเหตุผล}}
#* {{RQ:Conrad Heart of Darkness|page=197|passage=“I had then, as you remember, just returned to London after a lot of Indian Ocean, Pacific, China Seas - a regular '''dose''' of the East - six years or so, and I was loafing about, hindering you fellows in your work and invading your homes, just as though I had got a heavenly mission to civilise you.”|t=“อย่างที่พวกคุณจำได้ ผมเพิ่งกลับมาลอนดอนหลังจากเดินทางไปทั่วมหาสมุทรอินเดีย มหาสมุทรแปซิฟิก และทะเลจีนมาประมาณหกปี เรียกได้ว่าได้สัมผัสกับตะวันออกอย่างเต็มที่เลย และผมก็เอาแต่เที่ยวเตร่ ขัดขวางการทำงานของพวกคุณ และบุกรุกบ้านของพวกคุณ ราวกับว่าผมได้รับภารกิจจากสวรรค์มาเพื่อทำให้พวกคุณเจริญแล้ว”}}
#* {{quote-book|en|title=Queer Pulp|author=Susan Stryker|year=2001|page=78|text=The prospect of becoming a father is a '''dose''' of reality that threatens to bring his dream world crashing down.|t=โอกาสที่จะได้เป็นพ่อคนนั้นเป็นเหมือนการเผชิญหน้าของความจริงที่คุกคามจะทำให้โลกแห่งความฝันของเขาล่มสลาย}}
#* {{quote-journal|en|journal=w:TIME|title=Your Bedroom Probably Isn't Dark Enough|date=Dec 9 2025|author=Veronique Greenwood
|text=People who don't get their daily '''dose''' of light at the right time of day can end up with worse health.
|url=https://time.com/7339298/dark-bedroom-sleep-night-heart-health/
|t=คนที่ไม่ได้รับแสงแดดในปริมาณที่เพียงพอในเวลาที่เหมาะสมของวัน อาจมีสุขภาพที่แย่ลงได้}}
# {{lb|en|dated}} [[โรคติดต่อ]]ทาง[[เพศสัมพันธ์]]
#* {{quote-song|en|year=1972|author=w:Shel Silverstein|title=Don't Give A Dose to the One You Love Most
|passage=Don't give a '''dose''' to the one you love most. / Give her some marmalade... give her some toast.
|t=อย่าให้โรคติดต่อทางเพศสัมพันธ์แก่คนที่คุณรักมากที่สุด / ให้แยมส้มแก่เธอ... ให้ขนมปังปิ้งแก่เธอ}}
#* {{quote-book|en|year=1978|author=w:Lawrence Durrell|title=Livia|publisher=Faber & Faber|year_published=1992|series=Avignon Quintet|page=382
|passage=It would be very expensive to cure a '''dose''' here, as well as unbelievably painful.
|t=การรักษาโรคติดต่อทางเพศสัมพันธ์ด้วยวิธีนี้จะมีค่าใช้จ่ายสูงมากและเจ็บปวดอย่างเหลือเชื่อ}}
# {{lb|en|Ireland|colloquial}} [[หวัด]]; [[โรค]]จาก[[ไวรัส]]ที่พบได้ทั่วไปใน[[โพรงจมูก]] บางครั้งอาจมี[[ไข้]]ร่วมด้วย
#: {{ux|en|There's a '''dose''' going round.|มีการระบาดของโรคหวัดอยู่}}
===== ลูกคำ =====
{{col|en|collapse=n|absorbed dose|dosemeter|dosology|interdose|isodose|macrodose|megadose|multidose|paleodose|postdose|predose|underdose|banana equivalent dose|booster dose|dose of one's own medicine|dose rate|effective dose|elephant dose|flight-time equivalent dose|heroic dose|dose dumping|funny as a dose of the clap|lethal dose|like a dose of salts|black dose|low-dose CT scanning|metered-dose inhaler|radiation dose|semilethal dose|the dose makes the poison|committed dose|dose equivalent|equivalent dose|under-dose|zero-dose|hot dose}}
===== คำเกี่ยวข้อง =====
* {{l|en|dosage}}
===== คำสืบทอด =====
* {{desc|ms|dos|bor=1}}
* {{desc|ta|டோஸ்|bor=1}}
==== คำกริยา ====
{{en-verb}}
# {{lb|en|transitive}} [[ให้]]ยาในปริมาณที่วัดหรือตวงมาแล้ว
#* {{quote-book|en|year=1871|author=w:George Meredith|title=w:The Adventures of Harry Richmond|page=270|passage="She thought herself broad awake, and I have '''dosed''' her with an opiate."|t="เธอคิดว่าตัวเองตื่นเต็มที่แล้ว และฉันได้ให้ยาแก้ปวดชนิดฝิ่นแก่เธอ"}}
# [[สั่ง]][[จ่าย]]ยา
# {{lb|en|transitive}} แอบให้ยาที่ทำให้หมดสติ (แก่ผู้ที่ไม่เต็มใจ); ดมยา
#* {{quote-book|en|year=2016|author=Pamela Donovan|title=Drink Spiking and Predatory Drugging: A Modern History|page=71|passage=The defense never conceded that their clients had administered chloral [hydrate], but Death and Campbell said initially—during their contested station house confessions—that McAlister had '''dosed''' [Jennie Bosschieter's] drink.|t=ฝ่ายจำเลยไม่เคยยอมรับว่าลูกความของตนได้ให้คลอรัล[ไฮเดรต]แก่จำเลย แต่เดธและแคมป์เบลกล่าวในตอนแรก—ระหว่างการสารภาพที่สถานีตำรวจซึ่งเป็นที่ถกเถียงกัน—ว่าแมคอลิสเตอร์ได้ใส่ยาลงในเครื่องดื่ม[ของเจนนี่ บอสชีเตอร์]}}
# {{lb|en|transitive|dated}} [[แพร่]]เชื้อโรคติดต่อทางเพศสัมพันธ์
#* {{quote-text|en|year=1977|author=w:The White Buffalo|title=Wild Bill Hickok
|passage=Sometime back, one of your scarlet sisters '''dosed''' me proper.
|t=เมื่อไม่นานมานี้ หนึ่งในพี่น้องสาวสีแดงของคุณแพร่เชื้อโรคติดต่อทางเพศสัมพันธ์ให้ฉันอย่างสาหัส}}
===== ลูกคำ =====
{{col|en|microdose|doseable}}
=== รากศัพท์ 2 ===
==== คำนาม ====
{{en-noun}}
# {{archaic form of|en|doze}}
#* {{quote-text|en|year=1839|author=Benjamin Abbott|title=Experience and Gospel Labors of the Rev. Benjamin Abbott
|passage=Just at the dawning of the day, I fell into a '''dose''' more like sleep than any I had during the whole night, in which I dreamed that I saw a river as clear as crystal {{...}}
|t=เมื่อรุ่งเช้ามาถึง ฉันก็หลับไปอย่างสนิท ซึ่งเป็นการหลับที่มากกว่าการหลับใด ๆ ตลอดทั้งคืน ในฝันฉันได้เห็นแม่น้ำที่ใสราวกับคริสตัล {{...}}}}
==== คำกริยา ====
{{en-verb}}
# {{archaic form of|en|doze}}
#* {{quote-book|en|year=1918|author=William Henry Hudson|title=Far Away And Long Ago|passage=It was to me a marvellous experience; to be here, propped up with pillows in a dimly-lighted room, the night-nurse idly '''dosing''' by the fire; the sound of the everlasting wind in my ears, howling outside {{...}}|t=สำหรับฉันแล้ว มันเป็นประสบการณ์ที่วิเศษมาก การได้มาอยู่ที่นี่ พิงหมอนอยู่ในห้องที่แสงสลัว พยาบาลกลางคืนงีบหลับอยู่ข้างเตาผิง เสียงลมที่พัดไม่หยุดหย่อนดังแว่วมาแต่หู และเสียงหอนอยู่ข้างนอก {{...}}}}
=== คำสลับอักษร ===
* {{anagrams|en|a=deos|Does|SOED|deos|deso|does|odes}}
{{C|en|Medicine|Radioactivity}}
== ภาษาอาฟรีกานส์ ==
=== คำนาม ===
{{head|af|รูปนาม}}
# {{plural of|af|doos}}
== ภาษาอิตาลี ==
=== การออกเสียง ===
{{it-pr|dòse}}
=== คำนาม ===
{{it-noun|f}}
# ปริมาณ[[ยา]]
# [[ปริมาณ]], [[จำนวน]], [[ขนาด]]
# [[ข้อเสนอ]] (ที่ดีหรือดีมาก) (gran dose-buona dose)
==== ลูกคำ ====
* {{l|it|dosare}}
=== คำสลับอักษร ===
* {{anagrams|it|a=deos|sedo|sedò|sode}}
== ภาษาอีโลกาโน ==
=== รูปแบบอื่น ===
* {{alt|ilo|doce||obsolete|Abecedario orthography}}
=== รากศัพท์ ===
{{bor+|ilo|es|doce}}
=== การออกเสียง ===
* {{ilo-IPA}}
* {{hyph|ilo|do|se}}
=== เลข ===
{{ilo-head|numeral|b=+}}
# {{cln|ilo|cardinal numbers}} [[สิบสอง]]
#: {{syn|ilo|sangapulo ket dua}}
pk2f4dfb17a4nem36b8xpsjhdlm6v2n
ชม
0
43596
5754332
5375522
2026-08-06T00:27:15Z
Alifshinobi
397
/* ภาษาไทย */
5754332
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== รากศัพท์ 1 ===
เทียบ{{cog|ltc|-}} {{ltc-l|諂|id=1}}; ร่วมเชื้อสายกับ{{cog|nod|ᨩᩫ᩠ᨾ}}, {{cog|kkh|ᨩᩫ᩠ᨾ}}, {{cog|lo|ຊົມ}}, {{cog|khb|ᦋᦳᧄ}}, {{cog|shn|ၸူမ်း}}
==== การออกเสียง ====
{{th-pron}}
==== คำกริยา ====
{{th-verb}}
# {{lb|th|สกรรม}} [[สรรเสริญ]], [[ยกย่อง]]
#: {{syn|th|ชมเชย}}
=== รากศัพท์ 2 ===
ร่วมเชื้อสายกับ{{cog|nod|ᨩᩫ᩠ᨾ}}, {{cog|lo|ຊົມ}}
==== การออกเสียง ====
{{th-pron}}
==== คำกริยา ====
{{th-verb}}
# {{lb|th|สกรรม}} [[ดู]] ([[ใช้]][[ใน]][[ที่]][[สุภาพ]])
#: {{ux|th|เชิญ'''ชม'''ของในร้าน}}
# {{lb|th|สกรรม}} [[ดู]][[เพื่อ]][[ให้]][[เกิด]][[ความ]][[เพลิดเพลินใจ]][[หรือ]][[ชื่นใจ]]
#: {{ux|th|'''ชม'''สวน}}
#: {{ux|th|'''ชม'''นกชมไม้}}
==== คำนาม ====
{{th-noun}}
# [[ชื่อ]][[เพลง]][[ไทย]][[จำพวก]][[หนึ่ง]] [[มี]][[ชื่อ]][[ขึ้น]][[ต้น]][[ด้วย]][[คำ]][[ว่า]] ชม
#: {{ux|th|'''ชม'''ดง}}
#: {{ux|th|'''ชม'''ตลาด}}
=== รากศัพท์ 3 ===
==== การออกเสียง ====
{{th-pron|ชอ-มอ}}
==== คำวิสามานยนาม ====
{{th-proper noun}}
# {{initialism of|th|เชียงใหม่}}
==== ดูเพิ่ม ====
{{col4|th|ชม.}}
{{topics|th|เชียงใหม่}}
5oalj4t8gvf0hufn4989s7r7mc9x9xz
คั่ง
0
45438
5754330
5030611
2026-08-05T21:16:41Z
Alifshinobi
397
/* ภาษาไทย */
5754330
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|lo|ຄັ່ງ}}, {{cog|nod|ᨣᩢ᩠᩵ᨦ}}, {{cog|kkh|ᨣᩢ᩠᩵ᨦ}}, {{cog|khb|ᦅᧂᧈ}}
=== การออกเสียง ===
{{th-pron}}
=== คำกริยา ===
{{th-verb}}
# {{lb|th|อกรรม}} [[ออ]][[กัน]], [[ประดัง]]กัน
# {{lb|th|อกรรม}} [[ตก]][[ค้าง]][[อยู่]]
#: {{ux|th|เลือด'''คั่ง'''ในสมอง}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/xaŋ˦˨/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun}}
# {{alternative form of|nod|ᨣᩕᩢ᩠᩵ᨦ}}
banf5zn00p76mckiisjpanc6egtlyyy
qu
0
47505
5754532
1877616
2026-08-06T09:10:44Z
OctraBot
3198
เก็บกวาด
5754532
wikitext
text/x-wiki
{{also/auto}}
== ภาษาร่วม ==
=== รากศัพท์ ===
{{clip|mul|en:'''Qu'''echua,es:'''qu'''echua}}, จาก{{der|mul|qu|qhichwa}}.
=== สัญลักษณ์ ===
{{mul-symbol}}
# {{ISO 639|1}}
=== ดูเพิ่ม ===
* {{langcat}}
== ภาษาอังกฤษ ==
{{wp|[[District (China)|Districts in China]]}}
=== รากศัพท์ ===
จาก{{bor|en|cmn-pinyin|-}}การถอดเป็นอักษรโรมันของ {{bor|en|cmn|區}}
=== คำนาม ===
{{en-noun}}
# {{lb|en|China}} หน่วยการปกครองย่อยของ[[จีน]] เทียบเท่ากับ[[เขต]] (district) ซึ่งแตกต่างจาก[[เทศมณฑล]] (county, [[xian]])
#* {{quote-book
|en
|year=1973
|title=Survey of China Mainland Press
|url=https://books.google.com/books?id=q5xDAQAAIAAJ
|issue=5308-5345
|ISSN=0499-0390
|OCLC=1695580
|page=52
|text={{...}}the Party committee of Peiyuanmen<!--北院門--> commune of Lienhu '''ch'u''' in Sian municipality has since the year before last set up outside-school cultural activity centers in the commune headquarters and in various neighborhood committees.
|brackets=on}}
#* {{quote-book
|en
|year=1990
|author=Barrett L. McCormick
|chapter=Elections to Local People's Congresses
|title=Political Reform in Post-Mao China: Democracy and Bureaucracy in a Leninist State
|url=https://archive.org/details/politicalreformi0000mcco/
|publisher=w:University of California Press
|ISBN=0-520-06765-7
|LCCN=89-20440
|OCLC=20526428
|page=138
|pageurl=https://archive.org/details/politicalreformi0000mcco/page/138/
|text=At the time of the elections (1980) Nanjing was subdivided into three suburban counties (''xian'') and nine urban districts ('''''qu''''').}}
#* {{quote-book
|en
|year=2009
|author=Roger Des Forges
|chapter=Tales of Three City Walls in China's Central Plain
|title=Chinese Walls in Time and Space: A Multidisciplinary Perspective
|url=
|ISBN=978-1-933947-14-3
|ISSN=1050-2955
|LCCN=2009925854
|OCLC=762303701
|pages=60–61
|pageurl=https://books.google.com/books?id=s4WDEAAAQBAJ&pg=PA60
|text=As we have seen, the people of Guide/Shangqiu have traced the history of their city back well before the Ming and especially to the Han period. The People's Republic has recognized that heritage by naming the district subordinate to Shangqiu city the Liangyuan '''qu''' (Liang Garden District) and the district subordinate to Guide the Suiyang '''qu''' (Suiyang District) (see Map 3).}}
== ภาษาอาเซอร์ไบจาน ==
{{az-variant|гу|قو}}
=== รากศัพท์ ===
จาก{{inh|az|trk-cmn-pro|*quɣu|t=หงส์}}, จาก{{inh|az|trk-pro|*kugu|t=หงส์}}
=== การออกเสียง ===
* {{IPA|az|[ɡu]}}
* {{hyphenation|az|qu}}
=== คำนาม ===
{{az-noun}}
# [[หงส์]]
#: {{syn|az|qu quşu}}
==== การผันรูป ====
{{az-decl-noun|u}}
=== อ้างอิง ===
* {{R:az:ADIL}}
== ภาษาฝรั่งเศส ==
=== การออกเสียง ===
* {{fr-IPA}}
=== คำนาม ===
{{fr-noun|m}}
# {{alternative spelling of|fr|ku}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|戌}}
{{cmn-pinyin|notr=1}}
# {{nonstandard spelling of|cmn|sc=Latn|qū}}
# {{nonstandard spelling of|cmn|sc=Latn|qú}}
# {{nonstandard spelling of|cmn|sc=Latn|qǔ}}
# {{nonstandard spelling of|cmn|sc=Latn|qù}}
==== หมายเหตุการใช้ ====
* {{cmn-toneless-note}}
== ภาษาสเปน ==
=== ตัวอักษร ===
{{head|es|ตัวอักษร|lower case||upper case|QU|mixed case|Qu}}
# [[ทวิอักษร]]ที่ประกอบขึ้นจาก {{l|es|q}} และ {{l|es|u}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
t119pmow2v7171av43fkutkdml3mm56
5754533
5754532
2026-08-06T09:11:39Z
OctraBot
3198
/* รากศัพท์ */
5754533
wikitext
text/x-wiki
{{also/auto}}
== ภาษาร่วม ==
=== รากศัพท์ ===
{{clip|mul|en:'''Qu'''echua,es:'''qu'''echua}}, จาก{{der|mul|qu|qhichwa}}.
=== สัญลักษณ์ ===
{{mul-symbol}}
# {{ISO 639|1}}
=== ดูเพิ่ม ===
* {{langcat}}
== ภาษาอังกฤษ ==
{{wp|[[District (China)|Districts in China]]}}
=== รากศัพท์ ===
จาก{{bor|en|cmn-pinyin|-}}ของ {{bor|en|cmn|區}}
=== คำนาม ===
{{en-noun}}
# {{lb|en|China}} หน่วยการปกครองย่อยของ[[จีน]] เทียบเท่ากับ[[เขต]] (district) ซึ่งแตกต่างจาก[[เทศมณฑล]] (county, [[xian]])
#* {{quote-book
|en
|year=1973
|title=Survey of China Mainland Press
|url=https://books.google.com/books?id=q5xDAQAAIAAJ
|issue=5308-5345
|ISSN=0499-0390
|OCLC=1695580
|page=52
|text={{...}}the Party committee of Peiyuanmen<!--北院門--> commune of Lienhu '''ch'u''' in Sian municipality has since the year before last set up outside-school cultural activity centers in the commune headquarters and in various neighborhood committees.
|brackets=on}}
#* {{quote-book
|en
|year=1990
|author=Barrett L. McCormick
|chapter=Elections to Local People's Congresses
|title=Political Reform in Post-Mao China: Democracy and Bureaucracy in a Leninist State
|url=https://archive.org/details/politicalreformi0000mcco/
|publisher=w:University of California Press
|ISBN=0-520-06765-7
|LCCN=89-20440
|OCLC=20526428
|page=138
|pageurl=https://archive.org/details/politicalreformi0000mcco/page/138/
|text=At the time of the elections (1980) Nanjing was subdivided into three suburban counties (''xian'') and nine urban districts ('''''qu''''').}}
#* {{quote-book
|en
|year=2009
|author=Roger Des Forges
|chapter=Tales of Three City Walls in China's Central Plain
|title=Chinese Walls in Time and Space: A Multidisciplinary Perspective
|url=
|ISBN=978-1-933947-14-3
|ISSN=1050-2955
|LCCN=2009925854
|OCLC=762303701
|pages=60–61
|pageurl=https://books.google.com/books?id=s4WDEAAAQBAJ&pg=PA60
|text=As we have seen, the people of Guide/Shangqiu have traced the history of their city back well before the Ming and especially to the Han period. The People's Republic has recognized that heritage by naming the district subordinate to Shangqiu city the Liangyuan '''qu''' (Liang Garden District) and the district subordinate to Guide the Suiyang '''qu''' (Suiyang District) (see Map 3).}}
== ภาษาอาเซอร์ไบจาน ==
{{az-variant|гу|قو}}
=== รากศัพท์ ===
จาก{{inh|az|trk-cmn-pro|*quɣu|t=หงส์}}, จาก{{inh|az|trk-pro|*kugu|t=หงส์}}
=== การออกเสียง ===
* {{IPA|az|[ɡu]}}
* {{hyphenation|az|qu}}
=== คำนาม ===
{{az-noun}}
# [[หงส์]]
#: {{syn|az|qu quşu}}
==== การผันรูป ====
{{az-decl-noun|u}}
=== อ้างอิง ===
* {{R:az:ADIL}}
== ภาษาฝรั่งเศส ==
=== การออกเสียง ===
* {{fr-IPA}}
=== คำนาม ===
{{fr-noun|m}}
# {{alternative spelling of|fr|ku}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|戌}}
{{cmn-pinyin|notr=1}}
# {{nonstandard spelling of|cmn|sc=Latn|qū}}
# {{nonstandard spelling of|cmn|sc=Latn|qú}}
# {{nonstandard spelling of|cmn|sc=Latn|qǔ}}
# {{nonstandard spelling of|cmn|sc=Latn|qù}}
==== หมายเหตุการใช้ ====
* {{cmn-toneless-note}}
== ภาษาสเปน ==
=== ตัวอักษร ===
{{head|es|ตัวอักษร|lower case||upper case|QU|mixed case|Qu}}
# [[ทวิอักษร]]ที่ประกอบขึ้นจาก {{l|es|q}} และ {{l|es|u}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
bfgykqqpx5d27rm6w29nmvrux4zjvs2
5754535
5754533
2026-08-06T09:12:56Z
OctraBot
3198
เรียงลำดับหัวเรื่องภาษา
5754535
wikitext
text/x-wiki
{{also/auto}}
== ภาษาร่วม ==
=== รากศัพท์ ===
{{clip|mul|en:'''Qu'''echua,es:'''qu'''echua}}, จาก{{der|mul|qu|qhichwa}}.
=== สัญลักษณ์ ===
{{mul-symbol}}
# {{ISO 639|1}}
=== ดูเพิ่ม ===
* {{langcat}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|戌}}
{{cmn-pinyin|notr=1}}
# {{nonstandard spelling of|cmn|sc=Latn|qū}}
# {{nonstandard spelling of|cmn|sc=Latn|qú}}
# {{nonstandard spelling of|cmn|sc=Latn|qǔ}}
# {{nonstandard spelling of|cmn|sc=Latn|qù}}
==== หมายเหตุการใช้ ====
* {{cmn-toneless-note}}
== ภาษาฝรั่งเศส ==
=== การออกเสียง ===
* {{fr-IPA}}
=== คำนาม ===
{{fr-noun|m}}
# {{alternative spelling of|fr|ku}}
== ภาษาสเปน ==
=== ตัวอักษร ===
{{head|es|ตัวอักษร|lower case||upper case|QU|mixed case|Qu}}
# [[ทวิอักษร]]ที่ประกอบขึ้นจาก {{l|es|q}} และ {{l|es|u}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
== ภาษาอังกฤษ ==
{{wp|[[District (China)|Districts in China]]}}
=== รากศัพท์ ===
จาก{{bor|en|cmn-pinyin|-}}ของ {{bor|en|cmn|區}}
=== คำนาม ===
{{en-noun}}
# {{lb|en|China}} หน่วยการปกครองย่อยของ[[จีน]] เทียบเท่ากับ[[เขต]] (district) ซึ่งแตกต่างจาก[[เทศมณฑล]] (county, [[xian]])
#* {{quote-book
|en
|year=1973
|title=Survey of China Mainland Press
|url=https://books.google.com/books?id=q5xDAQAAIAAJ
|issue=5308-5345
|ISSN=0499-0390
|OCLC=1695580
|page=52
|text={{...}}the Party committee of Peiyuanmen<!--北院門--> commune of Lienhu '''ch'u''' in Sian municipality has since the year before last set up outside-school cultural activity centers in the commune headquarters and in various neighborhood committees.
|brackets=on}}
#* {{quote-book
|en
|year=1990
|author=Barrett L. McCormick
|chapter=Elections to Local People's Congresses
|title=Political Reform in Post-Mao China: Democracy and Bureaucracy in a Leninist State
|url=https://archive.org/details/politicalreformi0000mcco/
|publisher=w:University of California Press
|ISBN=0-520-06765-7
|LCCN=89-20440
|OCLC=20526428
|page=138
|pageurl=https://archive.org/details/politicalreformi0000mcco/page/138/
|text=At the time of the elections (1980) Nanjing was subdivided into three suburban counties (''xian'') and nine urban districts ('''''qu''''').}}
#* {{quote-book
|en
|year=2009
|author=Roger Des Forges
|chapter=Tales of Three City Walls in China's Central Plain
|title=Chinese Walls in Time and Space: A Multidisciplinary Perspective
|url=
|ISBN=978-1-933947-14-3
|ISSN=1050-2955
|LCCN=2009925854
|OCLC=762303701
|pages=60–61
|pageurl=https://books.google.com/books?id=s4WDEAAAQBAJ&pg=PA60
|text=As we have seen, the people of Guide/Shangqiu have traced the history of their city back well before the Ming and especially to the Han period. The People's Republic has recognized that heritage by naming the district subordinate to Shangqiu city the Liangyuan '''qu''' (Liang Garden District) and the district subordinate to Guide the Suiyang '''qu''' (Suiyang District) (see Map 3).}}
== ภาษาอาเซอร์ไบจาน ==
{{az-variant|гу|قو}}
=== รากศัพท์ ===
จาก{{inh|az|trk-cmn-pro|*quɣu|t=หงส์}}, จาก{{inh|az|trk-pro|*kugu|t=หงส์}}
=== การออกเสียง ===
* {{IPA|az|[ɡu]}}
* {{hyphenation|az|qu}}
=== คำนาม ===
{{az-noun}}
# [[หงส์]]
#: {{syn|az|qu quşu}}
==== การผันรูป ====
{{az-decl-noun|u}}
=== อ้างอิง ===
* {{R:az:ADIL}}
jr64z686yo1ews5sqhspedk0yhkte5x
5754536
5754535
2026-08-06T09:13:27Z
OctraBot
3198
5754536
wikitext
text/x-wiki
{{also/auto}}
== ภาษาร่วม ==
=== รากศัพท์ ===
{{clip|mul|en:'''Qu'''echua,es:'''qu'''echua}}, จาก{{der|mul|qu|qhichwa}}
=== สัญลักษณ์ ===
{{mul-symbol}}
# {{ISO 639|1}}
=== ดูเพิ่ม ===
* {{langcat}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|戌}}
{{cmn-pinyin|notr=1}}
# {{nonstandard spelling of|cmn|sc=Latn|qū}}
# {{nonstandard spelling of|cmn|sc=Latn|qú}}
# {{nonstandard spelling of|cmn|sc=Latn|qǔ}}
# {{nonstandard spelling of|cmn|sc=Latn|qù}}
==== หมายเหตุการใช้ ====
* {{cmn-toneless-note}}
== ภาษาฝรั่งเศส ==
=== การออกเสียง ===
* {{fr-IPA}}
=== คำนาม ===
{{fr-noun|m}}
# {{alternative spelling of|fr|ku}}
== ภาษาสเปน ==
=== ตัวอักษร ===
{{head|es|ตัวอักษร|lower case||upper case|QU|mixed case|Qu}}
# [[ทวิอักษร]]ที่ประกอบขึ้นจาก {{l|es|q}} และ {{l|es|u}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
== ภาษาอังกฤษ ==
{{wp|[[en:District (China)|Districts in China]]}}
=== รากศัพท์ ===
จาก{{bor|en|cmn-pinyin|-}}ของ {{bor|en|cmn|區}}
=== คำนาม ===
{{en-noun}}
# {{lb|en|China}} หน่วยการปกครองย่อยของ[[จีน]] เทียบเท่ากับ[[เขต]] (district) ซึ่งแตกต่างจาก[[เทศมณฑล]] (county, [[xian]])
#* {{quote-book
|en
|year=1973
|title=Survey of China Mainland Press
|url=https://books.google.com/books?id=q5xDAQAAIAAJ
|issue=5308-5345
|ISSN=0499-0390
|OCLC=1695580
|page=52
|text={{...}}the Party committee of Peiyuanmen<!--北院門--> commune of Lienhu '''ch'u''' in Sian municipality has since the year before last set up outside-school cultural activity centers in the commune headquarters and in various neighborhood committees.
|brackets=on}}
#* {{quote-book
|en
|year=1990
|author=Barrett L. McCormick
|chapter=Elections to Local People's Congresses
|title=Political Reform in Post-Mao China: Democracy and Bureaucracy in a Leninist State
|url=https://archive.org/details/politicalreformi0000mcco/
|publisher=w:University of California Press
|ISBN=0-520-06765-7
|LCCN=89-20440
|OCLC=20526428
|page=138
|pageurl=https://archive.org/details/politicalreformi0000mcco/page/138/
|text=At the time of the elections (1980) Nanjing was subdivided into three suburban counties (''xian'') and nine urban districts ('''''qu''''').}}
#* {{quote-book
|en
|year=2009
|author=Roger Des Forges
|chapter=Tales of Three City Walls in China's Central Plain
|title=Chinese Walls in Time and Space: A Multidisciplinary Perspective
|url=
|ISBN=978-1-933947-14-3
|ISSN=1050-2955
|LCCN=2009925854
|OCLC=762303701
|pages=60–61
|pageurl=https://books.google.com/books?id=s4WDEAAAQBAJ&pg=PA60
|text=As we have seen, the people of Guide/Shangqiu have traced the history of their city back well before the Ming and especially to the Han period. The People's Republic has recognized that heritage by naming the district subordinate to Shangqiu city the Liangyuan '''qu''' (Liang Garden District) and the district subordinate to Guide the Suiyang '''qu''' (Suiyang District) (see Map 3).}}
== ภาษาอาเซอร์ไบจาน ==
{{az-variant|гу|قو}}
=== รากศัพท์ ===
จาก{{inh|az|trk-cmn-pro|*quɣu|t=หงส์}}, จาก{{inh|az|trk-pro|*kugu|t=หงส์}}
=== การออกเสียง ===
* {{IPA|az|[ɡu]}}
* {{hyphenation|az|qu}}
=== คำนาม ===
{{az-noun}}
# [[หงส์]]
#: {{syn|az|qu quşu}}
==== การผันรูป ====
{{az-decl-noun|u}}
=== อ้างอิง ===
* {{R:az:ADIL}}
jp27e6eaf7s3pt4eic47di63d6txtyi
5754537
5754536
2026-08-06T09:13:50Z
OctraBot
3198
/* ภาษาอังกฤษ */
5754537
wikitext
text/x-wiki
{{also/auto}}
== ภาษาร่วม ==
=== รากศัพท์ ===
{{clip|mul|en:'''Qu'''echua,es:'''qu'''echua}}, จาก{{der|mul|qu|qhichwa}}
=== สัญลักษณ์ ===
{{mul-symbol}}
# {{ISO 639|1}}
=== ดูเพิ่ม ===
* {{langcat}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|戌}}
{{cmn-pinyin|notr=1}}
# {{nonstandard spelling of|cmn|sc=Latn|qū}}
# {{nonstandard spelling of|cmn|sc=Latn|qú}}
# {{nonstandard spelling of|cmn|sc=Latn|qǔ}}
# {{nonstandard spelling of|cmn|sc=Latn|qù}}
==== หมายเหตุการใช้ ====
* {{cmn-toneless-note}}
== ภาษาฝรั่งเศส ==
=== การออกเสียง ===
* {{fr-IPA}}
=== คำนาม ===
{{fr-noun|m}}
# {{alternative spelling of|fr|ku}}
== ภาษาสเปน ==
=== ตัวอักษร ===
{{head|es|ตัวอักษร|lower case||upper case|QU|mixed case|Qu}}
# [[ทวิอักษร]]ที่ประกอบขึ้นจาก {{l|es|q}} และ {{l|es|u}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
== ภาษาอังกฤษ ==
{{wp|en:[[District (China)|Districts in China]]}}
=== รากศัพท์ ===
จาก{{bor|en|cmn-pinyin|-}}ของ {{bor|en|cmn|區}}
=== คำนาม ===
{{en-noun}}
# {{lb|en|China}} หน่วยการปกครองย่อยของ[[จีน]] เทียบเท่ากับ[[เขต]] (district) ซึ่งแตกต่างจาก[[เทศมณฑล]] (county, [[xian]])
#* {{quote-book
|en
|year=1973
|title=Survey of China Mainland Press
|url=https://books.google.com/books?id=q5xDAQAAIAAJ
|issue=5308-5345
|ISSN=0499-0390
|OCLC=1695580
|page=52
|text={{...}}the Party committee of Peiyuanmen<!--北院門--> commune of Lienhu '''ch'u''' in Sian municipality has since the year before last set up outside-school cultural activity centers in the commune headquarters and in various neighborhood committees.
|brackets=on}}
#* {{quote-book
|en
|year=1990
|author=Barrett L. McCormick
|chapter=Elections to Local People's Congresses
|title=Political Reform in Post-Mao China: Democracy and Bureaucracy in a Leninist State
|url=https://archive.org/details/politicalreformi0000mcco/
|publisher=w:University of California Press
|ISBN=0-520-06765-7
|LCCN=89-20440
|OCLC=20526428
|page=138
|pageurl=https://archive.org/details/politicalreformi0000mcco/page/138/
|text=At the time of the elections (1980) Nanjing was subdivided into three suburban counties (''xian'') and nine urban districts ('''''qu''''').}}
#* {{quote-book
|en
|year=2009
|author=Roger Des Forges
|chapter=Tales of Three City Walls in China's Central Plain
|title=Chinese Walls in Time and Space: A Multidisciplinary Perspective
|url=
|ISBN=978-1-933947-14-3
|ISSN=1050-2955
|LCCN=2009925854
|OCLC=762303701
|pages=60–61
|pageurl=https://books.google.com/books?id=s4WDEAAAQBAJ&pg=PA60
|text=As we have seen, the people of Guide/Shangqiu have traced the history of their city back well before the Ming and especially to the Han period. The People's Republic has recognized that heritage by naming the district subordinate to Shangqiu city the Liangyuan '''qu''' (Liang Garden District) and the district subordinate to Guide the Suiyang '''qu''' (Suiyang District) (see Map 3).}}
== ภาษาอาเซอร์ไบจาน ==
{{az-variant|гу|قو}}
=== รากศัพท์ ===
จาก{{inh|az|trk-cmn-pro|*quɣu|t=หงส์}}, จาก{{inh|az|trk-pro|*kugu|t=หงส์}}
=== การออกเสียง ===
* {{IPA|az|[ɡu]}}
* {{hyphenation|az|qu}}
=== คำนาม ===
{{az-noun}}
# [[หงส์]]
#: {{syn|az|qu quşu}}
==== การผันรูป ====
{{az-decl-noun|u}}
=== อ้างอิง ===
* {{R:az:ADIL}}
cmakcdq0gngceo3151grarj7ct0cvco
โบ
0
135121
5754561
4918384
2026-08-06T10:55:28Z
Ai Ku Karng
17824
5754561
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== การออกเสียง ===
{{th-pron}}
=== รากศัพท์ 1 ===
{{bor+|th|en|bow}}
==== รูปแบบอื่น ====
* {{alt|th|โบว์||คำทับศัพท์}}
==== คำนาม ====
{{th-noun}}
# [[เชือก]][[หรือ]][[ริบบิ้น]][[ทำ]][[เป็น]][[ห่วง]] 2 ห่วง[[คล้าย]][[หูกระต่าย]][[แล้ว]][[ผูก]][[ไขว้]][[กัน]]เป็น[[เงื่อน]][[กระทก]]
=== รากศัพท์ 2 ===
ตัดมาจาก {{m|th|โบราณ}}
==== คำกริยา ====
{{th-verb|-}}
# {{lb|th|ปาก|สแลง|jocular}} [[ดู]]โบราณ, [[ไม่]][[ทันสมัย]]
#: {{ux|th|ดูน้องคนนั้นซิ โบจังเลย นุ่งกระโปรงพลี้ตยาวคลุมเข่าเชียว}}
=== รากศัพท์ 3 ===
ตัดมาจาก {{m|th|โบท็อกซ์}}
==== คำนาม ====
{{th-noun|-}}
# {{lb|th|สแลง|jocular}} [[โบท็อกซ์]]
==== อ้างอิง ====
{{พคม|2|74}}
== ภาษาทะวืง ==
=== รากศัพท์ ===
{{inh+|thm|mkh-vie-pro|*ɓoː}}
=== คำนาม ===
{{thm-noun}}
# [[นกฮูก]]
== ภาษาแสก ==
=== การออกเสียง ===
* {{IPA|skb|/boː˧/|a=บ้านบะหว้า}}
=== รากศัพท์ ===
{{inh+|skb|tai-pro|*boːᴮ||ไม่}}; ร่วมเชื้อสายกับ{{cog|th|บ่}}, {{cog|tts|บ่}}, {{cog|lo|ບໍ່}}, {{cog|nod|ᨷᩴ᩵}}, {{cog|zzj|mboh}}
=== คำกริยาวิเศษณ์ ===
{{skb-adv}}
# [[ไม่]], [[มิ]]
074yq6yuvolycvnzlhf35ovz07uyy3i
huo
0
141526
5754554
1876642
2026-08-06T09:36:42Z
OctraBot
3198
/* ภาษาจีนกลาง */ เก็บกวาด
5754554
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|和}}
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin|notr=1}}
# {{nonstandard spelling of|cmn|huō}}
# {{nonstandard spelling of|cmn|huó}}
# {{nonstandard spelling of|cmn|huǒ}}
# {{nonstandard spelling of|cmn|huò}}
==== หมายเหตุการใช้ ====
* {{cmn-toneless-note}}
qgwpns4w7s398s1lz80vq6kn1b930f5
5754555
5754554
2026-08-06T09:37:38Z
OctraBot
3198
5754555
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|和}}
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin|notr=1}}
# {{nonstandard spelling of|cmn|huō}}
# {{nonstandard spelling of|cmn|huó}}
# {{nonstandard spelling of|cmn|huǒ}}
# {{nonstandard spelling of|cmn|huò}}
==== หมายเหตุการใช้ ====
* {{cmn-toneless-note}}
== ภาษาตากาล็อก ==
=== การออกเสียง ===
{{tl-pr|hu7o}}
=== คำอุทาน ===
{{tl-head|interjection|b=+}} {{tlb|tl|dialectal|Rizal|western|_|Marinduque}}
# {{alternative form of|tl|oo}}: [[ใช่]]
m2tsw7dx0lv1y2lystvaxrdtzi0viaz
5754556
5754555
2026-08-06T09:38:01Z
OctraBot
3198
5754556
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|和}}
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin|notr=1}}
# {{nonstandard spelling of|cmn|huō}}
# {{nonstandard spelling of|cmn|huó}}
# {{nonstandard spelling of|cmn|huǒ}}
# {{nonstandard spelling of|cmn|huò}}
==== หมายเหตุการใช้ ====
* {{cmn-toneless-note}}
== ภาษาตากาล็อก ==
=== การออกเสียง ===
{{tl-pr|hu7o}}
=== คำอุทาน ===
{{tl-head|interjection|b=+}} {{tlb|tl|dialectal|Rizal|western|_|Marinduque}}
# {{alternative form of|tl|oo}}: [[ใช่]]
== ภาษาสวาฮีลี ==
=== คำคุณศัพท์ ===
{{head|sw|รูปคุณศัพท์}}
# {{sw-adj form of|3|hiyo||no-}}
7hmv2bjkvl00hriv2ottsfjkhjfvcfi
ng
0
142251
5754552
5376022
2026-08-06T09:34:09Z
OctraBot
3198
/* ภาษาจีนกลาง */ เก็บกวาด
5754552
wikitext
text/x-wiki
{{also/auto}}
== ภาษาร่วม ==
=== สัญลักษณ์ ===
{{head|mul|สัญลักษณ์}}
# {{SI-unit-abb|นาโน|กรัม|[[มวล]]}}
# {{ISO 639|1}}
=== ดูเพิ่ม ===
* {{l|mul|ŋ}}
== ภาษาจีนกลาง ==
=== รูปแบบอื่น ===
* {{alt|cmn|ŋ||very rare shorthand}}
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|唵}}
{{cmn-pinyin|notr=1}}
# {{nonstandard spelling of|cmn|ńg}}
# {{nonstandard spelling of|cmn|ňg}}
# {{nonstandard spelling of|cmn|ǹg}}
==== หมายเหตุการใช้ ====
* {{cmn-toneless-note}}
== ภาษาอังกฤษ ==
=== คำนาม ===
{{en-noun|?}}
# {{lb|en|Internet}} {{initialism of|en|newsgroup}}; {{n-g|และยังมี {{m|en|NG}}}}
=== คำสลับอักษร ===
* {{anagrams|en|a=gn|gn|gn.|GN}}
{{C|en|ยูสเน็ต}}
jbj40f53iznh5m01qa9iledphf3fkmo
5754553
5754552
2026-08-06T09:35:16Z
OctraBot
3198
/* ภาษาร่วม */ เก็บกวาด
5754553
wikitext
text/x-wiki
{{also/auto}}
== ภาษาร่วม ==
=== รากศัพท์ 1 ===
จาก{{affix|mul|n|t1=นาโน|g|t2=กรัม}}
==== สัญลักษณ์ ====
{{mul-symbol}}
# {{SI-unit-abb|นาโน|กรัม|[[มวล]]}}
=== รากศัพท์ 2 ===
{{abbrev|mul|en:'''N'''don'''g'''a}}
==== สัญลักษณ์ ====
{{mul-symbol}}
# {{ISO 639|1}}
==== ดูเพิ่ม ====
* {{langcat}}
=== ดูเพิ่ม ===
* {{l|mul|ŋ}}
== ภาษาจีนกลาง ==
=== รูปแบบอื่น ===
* {{alt|cmn|ŋ||very rare shorthand}}
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|唵}}
{{cmn-pinyin|notr=1}}
# {{nonstandard spelling of|cmn|ńg}}
# {{nonstandard spelling of|cmn|ňg}}
# {{nonstandard spelling of|cmn|ǹg}}
==== หมายเหตุการใช้ ====
* {{cmn-toneless-note}}
== ภาษาอังกฤษ ==
=== คำนาม ===
{{en-noun|?}}
# {{lb|en|Internet}} {{initialism of|en|newsgroup}}; {{n-g|และยังมี {{m|en|NG}}}}
=== คำสลับอักษร ===
* {{anagrams|en|a=gn|gn|gn.|GN}}
{{C|en|ยูสเน็ต}}
d7zpsgbfdzwqc5sfuw0kmtdbytotfaw
shi
0
142555
5754525
1917038
2026-08-06T08:57:00Z
OctraBot
3198
5754525
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|匙}}
# {{cmn-pinyin of|殖}}
# {{cmn-pinyin of|𥫽}}
{{head|cmn|พินอิน}}
# {{nonstandard spelling of|cmn|shī|sc=Latn}}
# {{nonstandard spelling of|cmn|shí|sc=Latn}}
# {{nonstandard spelling of|cmn|shǐ|sc=Latn}}
# {{nonstandard spelling of|cmn|shì|sc=Latn}}
== ภาษาญี่ปุ่น ==
=== การถอดเป็นอักษรโรมัน ===
{{ja-romaji}}
# {{Latn-def|ja|syllable|し|シ|shi}}
== ภาษาเอสเปรันโต ==
=== คำสรรพนาม ===
{{head|eo|คำสรรพนาม}}
# {{eo-spel}}
p2djt9hlv5d1goxmrk8l2b386iib6wg
5754526
5754525
2026-08-06T08:57:22Z
OctraBot
3198
/* ภาษาจีนกลาง */ เก็บกวาด
5754526
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|匙}}
# {{cmn-pinyin of|殖}}
# {{cmn-pinyin of|𥫽}}
{{cmn-pinyin|notr=1}}
# {{nonstandard spelling of|cmn|shī|sc=Latn}}
# {{nonstandard spelling of|cmn|shí|sc=Latn}}
# {{nonstandard spelling of|cmn|shǐ|sc=Latn}}
# {{nonstandard spelling of|cmn|shì|sc=Latn}}
==== หมายเหตุการใช้ ====
* {{cmn-toneless-note}}
== ภาษาญี่ปุ่น ==
=== การถอดเป็นอักษรโรมัน ===
{{ja-romaji}}
# {{Latn-def|ja|syllable|し|シ|shi}}
== ภาษาเอสเปรันโต ==
=== คำสรรพนาม ===
{{head|eo|คำสรรพนาม}}
# {{eo-spel}}
t78306qle3dvh5b9g7hngwgdoah8x6y
xu
0
142669
5754512
1878452
2026-08-06T08:33:08Z
OctraBot
3198
/* ภาษาจีนกลาง */ เก็บกวาด
5754512
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|蓿}}
{{cmn-pinyin|notr=1}}
# {{nonstandard spelling of|cmn|sc=Latn|xū}}
# {{nonstandard spelling of|cmn|sc=Latn|xú}}
# {{nonstandard spelling of|cmn|sc=Latn|xǔ}}
# {{nonstandard spelling of|cmn|sc=Latn|xù}}
==== หมายเหตุการใช้ ====
* {{cmn-toneless-note}}
hwqj9iwiaoybqlfv1zc5812sy3wahny
5754513
5754512
2026-08-06T08:35:12Z
OctraBot
3198
5754513
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|蓿}}
{{cmn-pinyin|notr=1}}
# {{nonstandard spelling of|cmn|sc=Latn|xū}}
# {{nonstandard spelling of|cmn|sc=Latn|xú}}
# {{nonstandard spelling of|cmn|sc=Latn|xǔ}}
# {{nonstandard spelling of|cmn|sc=Latn|xù}}
==== หมายเหตุการใช้ ====
* {{cmn-toneless-note}}
== ภาษาม้งขาว ==
=== รากศัพท์ ===
{{rfe|mww|Not mentioned by Ratliff at all. Looks possibly like a Chinese borrowing; some candidates include {{ltc-l|違|to violate, be apart}}, {{ltc-l|錯|mistake}}, {{ltc-l|虛|empty, hollow}}.}}
=== การออกเสียง ===
{{mww-pron}}
=== คำกริยา ===
{{head|mww|คำกริยา}}
# [[พลาด]] (เป้า)
==== ลูกคำ ====
{{col2|mww
|xu siab<t:undesirable>
}}
=== อ้างอิง ===
* {{R:mww:Heimbach|page=411}}
f3i13cz5yey80u3rvldl6miobm2m9p8
5754514
5754513
2026-08-06T08:36:47Z
OctraBot
3198
5754514
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|蓿}}
{{cmn-pinyin|notr=1}}
# {{nonstandard spelling of|cmn|sc=Latn|xū}}
# {{nonstandard spelling of|cmn|sc=Latn|xú}}
# {{nonstandard spelling of|cmn|sc=Latn|xǔ}}
# {{nonstandard spelling of|cmn|sc=Latn|xù}}
==== หมายเหตุการใช้ ====
* {{cmn-toneless-note}}
== ภาษาม้งขาว ==
=== รากศัพท์ ===
{{rfe|mww|Not mentioned by Ratliff at all. Looks possibly like a Chinese borrowing; some candidates include {{ltc-l|違|to violate, be apart}}, {{ltc-l|錯|mistake}}, {{ltc-l|虛|empty, hollow}}.}}
=== การออกเสียง ===
{{mww-pron}}
=== คำกริยา ===
{{head|mww|คำกริยา}}
# [[พลาด]] (เป้า)
==== ลูกคำ ====
{{col2|mww
|xu siab<t:undesirable>
}}
=== อ้างอิง ===
* {{R:mww:Heimbach|page=411}}
== ภาษาเวียดนาม ==
=== รากศัพท์ ===
จาก{{bor|vi|fr|sou}}
=== การออกเสียง ===
{{vi-IPA}}
=== คำนาม ===
{{vi-noun}}
# [[ซู]] {{gloss|หน่วยเงิน 1/100 ของ[[ด่ง]]}}
==== ลูกคำ ====
{{col3|vi|đồng xu|ba xu}}
5kjxpz01o0iv5gob0hovi2ms57arkbg
5754515
5754514
2026-08-06T08:37:29Z
OctraBot
3198
/* */ เก็บกวาด
5754515
wikitext
text/x-wiki
{{also/auto}}
== ภาษากอท ==
=== การถอดเป็นอักษรโรมัน ===
{{got-rom}}
# {{romanization of|got|𐍇𐌿}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|蓿}}
{{cmn-pinyin|notr=1}}
# {{nonstandard spelling of|cmn|sc=Latn|xū}}
# {{nonstandard spelling of|cmn|sc=Latn|xú}}
# {{nonstandard spelling of|cmn|sc=Latn|xǔ}}
# {{nonstandard spelling of|cmn|sc=Latn|xù}}
==== หมายเหตุการใช้ ====
* {{cmn-toneless-note}}
== ภาษาม้งขาว ==
=== รากศัพท์ ===
{{rfe|mww|Not mentioned by Ratliff at all. Looks possibly like a Chinese borrowing; some candidates include {{ltc-l|違|to violate, be apart}}, {{ltc-l|錯|mistake}}, {{ltc-l|虛|empty, hollow}}.}}
=== การออกเสียง ===
{{mww-pron}}
=== คำกริยา ===
{{head|mww|คำกริยา}}
# [[พลาด]] (เป้า)
==== ลูกคำ ====
{{col2|mww
|xu siab<t:undesirable>
}}
=== อ้างอิง ===
* {{R:mww:Heimbach|page=411}}
== ภาษาเวียดนาม ==
=== รากศัพท์ ===
จาก{{bor|vi|fr|sou}}
=== การออกเสียง ===
{{vi-IPA}}
=== คำนาม ===
{{vi-noun}}
# [[ซู]] {{gloss|หน่วยเงิน 1/100 ของ[[ด่ง]]}}
==== ลูกคำ ====
{{col3|vi|đồng xu|ba xu}}
pknlzby8hqfcy47m8e4o7a695sfvh2b
zan
0
142705
5754510
1878573
2026-08-06T08:27:47Z
OctraBot
3198
/* ภาษาจีนกลาง */ เก็บกวาด
5754510
wikitext
text/x-wiki
{{also/auto}}
== ภาษาจีนกลาง ==
=== การถอดเป็นอักษรโรมัน ===
{{cmn-pinyin}}
# {{cmn-pinyin of|喒|偺}}
{{cmn-pinyin|notr=1}}
# {{nonstandard spelling of|cmn|sc=Latn|zān}}
# {{nonstandard spelling of|cmn|sc=Latn|zán}}
# {{nonstandard spelling of|cmn|sc=Latn|zǎn}}
# {{nonstandard spelling of|cmn|sc=Latn|zàn}}
==== หมายเหตุการใช้ ====
* {{cmn-toneless-note}}
9vbkw4pohs7bg68unsjderf7fvgqz7p
มอดูล:number list
828
167589
5754343
5754318
2026-08-06T01:34:24Z
Octahedron80
267
5754343
Scribunto
text/plain
local m_links = require("Module:links")
local m_str_utils = require("Module:string utilities")
local char = string.char
local concat = table.concat
local gsub = m_str_utils.gsub
local insert = table.insert
local list_to_set = require("Module:table").listToSet
local sort = table.sort
local split = m_str_utils.split
local u = m_str_utils.char
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local upper = string.upper
local export = {}
local decimal_strategy
--[=[
Terminology:
Number = a bare number; a mathematical entity which has different form types (e.g. cardinal, ordinal)
Form type = a category of the forms that represent a number; examples are cardinal, ordinal, distributive, fractional
Form = a word or expression that represents a number in a given language
Tag = an identifier attached to a form that allows different logical subtypes of forms from the same form type to be
identified; e.g. 'vuitanta-vuit<tag:Central>' vs. 'huitanta-huit<tag:Valencian>' to identify variants of
Catalan cardinal number 88 for different dialectal standards; there can be multiple tags per form, e.g.
'tair ar ddeg<tag:vigesimal><tag:feminine>' for the Welsh number 13 where there are both decimal/vigesimal and
masculine/feminine variants of this number
Tag list = a list of tags in the order they are specified in the data, e.g. {"vigesimal", "feminine"} for the example
above
Combined tag = the string representation of a tag list, using ||| to separate individual tags
]=]
local default_form_types = {
{key = "cardinal", display = "[[จำนวนเชิงการนับ|เชิงการนับ]]"},
{key = "ordinal", display = "[[จำนวนเชิงอันดับที่|เชิงอันดับที่]]"},
{key = "ordinal_abbr", display = "[[ตัวย่อ]][[จำนวนเชิงอันดับที่|เชิงอันดับที่]]"},
{key = "adverbial", display = "[[จำนวนเชิงกริยาวิเศษณ์|เชิงกริยาวิเศษณ์]]"},
{key = "multiplier", display = "[[ตัวคูณ]]"},
{key = "distributive", display = "[[จำนวนเชิงแจกแจง|เชิงแจกแจง]]"},
{key = "collective", display = "[[จำนวนเชิงรวบรวม|เชิงรวบรวม]]"},
{key = "fractional", display = "[[เศษส่วน]] (⅟…)"},
}
-- Keys in a `numbers` entry that aren't form types.
local non_form_types = {
numeral = true,
wplink = true,
next = true,
prev = true,
next_outer = true,
prev_outer = true,
upper = true,
lower = true,
}
local function track(page)
require("Module:debug/track")("number list/" .. page)
return true
end
--[=[
--
-- General set intersection
local function set_intersection(sets)
local intersection = {}
for key, _ in pairs(sets[1]) do
intersection[key] = true
end
for i = 2, #sets do
local this_set = sets[i]
for key, _ in pairs(intersection) do
if not this_set[key] then
-- See https://stackoverflow.com/questions/6167555/how-can-i-safely-iterate-a-lua-table-while-keys-are-being-removed
-- It is safe to modify or remove a key while iterating over the table.
intersection[key] = nil
end
end
end
return intersection
end
]=]
local function set_intersection(set1, set2)
local intersection = {}
for key, _ in pairs(set1) do
intersection[key] = true
end
for key, _ in pairs(intersection) do
if not set2[key] then
-- See https://stackoverflow.com/questions/6167555/how-can-i-safely-iterate-a-lua-table-while-keys-are-being-removed
-- It is safe to modify or remove a key while iterating over the table.
intersection[key] = nil
end
end
return intersection
end
-- Count keys in a set table (never use `#` on these; it is not the set cardinality).
local function set_size(set)
local n = 0
for _ in pairs(set) do
n = n + 1
end
return n
end
function export.get_data_module_name(langcode)
return "Module:number list/data/" .. langcode
end
-- Format a number (either a Lua number or a string) in fixed point without any decimal point or scientific notation.
-- `tostring()` doesn't work because it converts large numbers such as 1000000000000000 to "1e+15".
function export.format_fixed(number)
if type(number) == "string" then
return number
else
return ("%.0f"):format(number)
end
end
-- Parse a form with modifiers such as 'vuitanta-vuit<tag:Central>' or 'سیزده<tr:sizdah>'
-- or 'سیزده<tr:sizdah><tag:Iranian>' into its component parts. Return a form object, i.e. an object with fields
-- `form` for the form, and `tr`, `tag`, `q`, `qq`, `g` or `link` for the modifiers. The `tag` field is a tag list
-- (see above).
function export.parse_form_and_modifiers(form_with_modifiers)
local retval = {}
local form
form = form_with_modifiers
while true do
local new_form, angle_bracketed = form:match("^(.-)(%b<>)$")
if not new_form then
break
end
local prefix, content = angle_bracketed:match "^<(%w+):(.+)>$"
if not prefix then
break
end
if prefix == "tag" then
if retval.tag then
insert(retval.tag, content)
else
retval.tag = {content}
end
elseif prefix == "q" or prefix == "qq" or prefix == "tr" or prefix == "link" or prefix == "id" or prefix == "g" or prefix == "alt" then
if retval[prefix] then
error(("Duplicate modifier '%s' in data module form, already saw value '%s': %s"):format(prefix,
retval[prefix], form_with_modifiers))
else
retval[prefix] = content
end
else
error(("Unrecognized modifier '%s' in data module form: %s"):format(prefix, form_with_modifiers))
end
form = new_form
end
retval.form = form
return retval
end
-- Find the `numbers` object for a given number (which should be in string representation).
function export.lookup_data(m_data, numstr)
-- Don't try to convert very large numbers to Lua numbers because they may overflow.
-- Powers of 10 >= 10^22 cannot be represented exactly as a Lua number.
return m_data.numbers[numstr] or #numstr < 22 and m_data.numbers[tonumber(numstr)] or nil
end
-- Return true if a < b, where either may be a Lua number or the string representation of a number.
function export.numbers_less_than(a, b)
a, b = export.format_fixed(a), export.format_fixed(b)
local alen = #a
local blen = #b
if alen < blen then
return true
end
if alen > blen then
return false
end
return a < b
end
-- Return true if a > b, where either may be a Lua number or the string representation of a number.
function export.numbers_greater_than(a, b)
return export.numbers_less_than(b, a)
end
local POSITIONAL_DIGITS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
local MAX_SAFE_INTEGER = 9007199254740991
local function get_digit_maps(base, digit_alphabet)
digit_alphabet = digit_alphabet or POSITIONAL_DIGITS
if #digit_alphabet < base then
error(("Number system base %s exceeds available digits in digit alphabet"):format(base))
end
local digit_to_value = {}
local value_to_digit = {}
for i = 1, base do
local digit = digit_alphabet:sub(i, i)
digit_to_value[digit] = i - 1
value_to_digit[i - 1] = digit
end
return digit_to_value, value_to_digit
end
local function decimal_to_base(num, base, value_to_digit)
if num == 0 then
return value_to_digit[0]
end
local parts = {}
while num > 0 do
insert(parts, 1, value_to_digit[num % base])
num = math.floor(num / base)
end
return concat(parts)
end
local function parse_positional_to_number(key, base, digit_to_value)
local n = 0
for i = 1, #key do
local value = digit_to_value[key:sub(i, i)]
if not value then
return nil
end
n = n * base + value
if n > MAX_SAFE_INTEGER then
return nil
end
end
return n
end
local function safe_integer_power(base, exp)
local result = 1
for _ = 1, exp do
if result > MAX_SAFE_INTEGER / base then
return nil
end
result = result * base
end
return result
end
local function normalize_positional_key(raw_number, opts)
local base = opts.base
local case_insensitive = opts.case_insensitive
local digit_to_value = opts.digit_to_value
local value_to_digit = opts.value_to_digit
local strip_separator = opts.strip_separator
local interpret_plain_decimal = opts.interpret_plain_decimal
local zero_digit = opts.zero_digit
local key
if type(raw_number) == "number" then
if raw_number < 0 or raw_number % 1 ~= 0 then
error(("Non-negative integer expected for positional number system, got '%s'"):format(raw_number))
end
key = decimal_to_base(raw_number, base, value_to_digit)
else
key = tostring(raw_number)
if strip_separator and strip_separator ~= "" then
key = gsub(key, strip_separator, "")
end
-- For compatibility with existing data/modules, plain decimal-digit *input* can be interpreted
-- as decimal and then converted into the configured positional key space.
if interpret_plain_decimal and key:find("^%d+$") then
key = decimal_to_base(tonumber(key), base, value_to_digit)
end
end
if case_insensitive then
key = upper(key)
end
if key == "" then
return zero_digit
end
for i = 1, #key do
local digit = key:sub(i, i)
if not digit_to_value[digit] then
error(("Extraneous characters in number: '%s'"):format(key))
end
end
key = key:gsub("^" .. zero_digit .. "+", "")
return key == "" and zero_digit or key
end
-- Given a number form, convert it to its independent (un-affixed) form. This only makes sense for certain languages
-- where there is a difference between independent and affixed forms of numerals. Currently the only such language
-- is Swahili, where e.g. the cardinal number form for 3 is affixed [[-tatu]], independent [[tatu]], and the ordinal
-- number form is [[-a tatu]], independent [[tatu]]. We rely on a set of Lua pattern substitutions to convert from
-- affixed to independent form.
--
-- FIXME: This needs major rethinking in a way that isn't specific to Swahili.
local function maybe_unaffix(m_data, form)
if not m_data.unaffix then
return form
end
for _, entry in ipairs(m_data.unaffix) do
local from, to = unpack(entry)
form = gsub(form, from, to)
end
return form
end
-- Convert the given number form (taken from the data for `lang`, after parsing the form for modifiers and stripping
-- the modifiers) to the stripped-text version of the form. The form may have links and/or accent/length marks that need
-- to be stripped.
local function form_to_stripped_form(form, lang)
return lang:stripDiacritics(m_links.remove_links(form))
end
-- Return true if the given number form object (taken from the data for `lang`, after parsing the form for modifiers)
-- matches `pagename`. If there is a <link:...> modifier, we check against it. Otherwise, we check against the form
-- itself. In this case, the form may have links and/or accent/length marks that need to be stripped, and we may need
-- to convert the form to its independent (un-affixed) form, if there is a difference between independent and affixed
-- forms (as in Swahili).
local function form_equals_pagename(formobj, pagename, m_data, lang)
if formobj.link == pagename then
return true
end
local stripped_form = form_to_stripped_form(formobj.form, lang)
if stripped_form == pagename or maybe_unaffix(m_data, stripped_form) == pagename then
return true
end
if formobj.alt then
local stripped_alt = form_to_stripped_form(formobj.alt, lang)
if stripped_alt == pagename or maybe_unaffix(m_data, stripped_alt) == pagename then
return true
end
end
return false
end
-- Given the data for a language and a number (which should be in string representation), find the next and previous
-- numbers to display (in string representation).
local function get_next_and_prev_keys(m_data, numstr, strategy, lookup_data)
local numdata = lookup_data(numstr)
if not numdata then
return nil, nil
end
local nextnum = numdata.next
local prevnum = numdata.prev
if not nextnum or not prevnum then
-- Find the next/previous numbers by sorting all the keys and locating the number in question among them.
local sorted_list = {}
local seen = {}
local index = 1
for key, _ in pairs(m_data.numbers) do
local normalized_key = strategy.normalize_data_key(key)
if not seen[normalized_key] then
seen[normalized_key] = true
sorted_list[index] = normalized_key
index = index + 1
end
end
sort(sorted_list, strategy.compare_keys)
-- We could binary search to save time, but given that we already sort, which is supra-linear, it won't
-- matter to search linearly.
for i, key in ipairs(sorted_list) do
if key == numstr then
nextnum = nextnum or sorted_list[i + 1]
prevnum = prevnum or sorted_list[i - 1]
break
end
end
end
if nextnum then
nextnum = strategy.normalize_data_key(nextnum)
end
if prevnum then
prevnum = strategy.normalize_data_key(prevnum)
end
return nextnum, prevnum
end
-- Find the "description objects" (a two-element list {NUMBER, TYPE}, where NUMBER is either a Lua number or a string,
-- depending on how it appears in the underlying data) that matches `pagename` and (if given) `matching_type`.
-- Return a list of such objects.
local function lookup_number_by_form(lang, m_data, pagename, matching_type)
local retval = {}
local function check_form(form, num, typ)
local formobj = export.parse_form_and_modifiers(form)
if form_equals_pagename(formobj, pagename, m_data, lang) and (not matching_type or typ == matching_type) then
-- It's possible the same pagename occurs multiply for a given type and number, e.g. with different length
-- or accent marks. The calling code is OK with multiple entries for a given number (which can also occur
-- with different types, e.g. the ordinal and fractional forms for a given number are the same), but will
-- throw an error if different numbers are seen.
insert(retval, {num, typ})
end
end
for num, numdata in pairs(m_data.numbers) do
for numtype, forms in pairs(numdata) do
if non_form_types[numtype] then
-- do nothing
elseif type(forms) == "table" then
for _, form in ipairs(forms) do
check_form(form, num, numtype)
end
else
check_form(forms, num, numtype)
end
end
end
return retval
end
-- additional_types is an array of tables like form_types,
-- but each table can contain the keys "before" or "after", which specify
-- the numeral type that the form should appear before or after.
-- The transformations are applied in order.
local function add_form_types(form_types, additional_types)
local types = require("Module:table").deepCopy(form_types)
for _, additional_type in ipairs(additional_types) do
if not (additional_type.before or additional_type.after) then
insert(types, additional_type)
else
if additional_type.before and additional_type.after then
error("The form type '" .. additional_type.key .. "' is specifying both before and after, which is not allowed")
end
local anchor, index = additional_type.before or additional_type.after
for i, another_type in ipairs(types) do
if another_type.key == anchor then
index = i
break
end
end
if index and additional_type.after then
index = index + 1
end
additional_type = require("Module:table").shallowCopy(additional_type)
additional_type.before, additional_type.after = nil, nil
if not index then
mw.log("Number type "
.. (additional_type.before or additional_type.after)
.. " was not found.")
insert(types, additional_type)
else
insert(types, index, additional_type)
end
end
end
return types
end
-- Return all form types for the language in question, in order.
function export.get_number_types(m_data)
local form_types = default_form_types
if m_data.additional_number_types then
return add_form_types(form_types, m_data.additional_number_types)
else
return form_types
end
end
-- Convert a number type object (an object with `display` and `key` fields) to its displayed form.
function export.display_number_type(number_type)
if number_type.display then
return number_type.display
else
return (number_type.key:gsub("^.", upper):gsub("_", " "))
end
end
-- Group digits with a separator, such as a comma or a period. See [[w:Digit grouping]].
local function add_separator(numstr, separator, group, start)
start = start or group
if start >= #numstr then
return numstr
end
local parts = { numstr:sub(-start) }
for i = start + 1, #numstr, group do
insert(parts, 1, numstr:sub(-(i + group - 1), -i))
end
return concat(parts, separator)
end
function export.add_thousands_separator(numstr, separator)
if #numstr < 4 then -- < 1000
return numstr
end
return add_separator(numstr, separator or ",", 3)
end
local function add_Indic_separator(numstr, separator)
return add_separator(numstr, separator, 2, 3)
end
-- Convert a number (represented as a string) to non-Arabic form based on the specs in `numeral_config`.
-- This is used, for example, to display the Hindu, Eastern Arabic or Roman form of a number along with the standard
-- Arabic form. Most of the code below assumes that the non-Arabic numerals are decimal, and the digits map one-to-one
-- with Arabic numerals. If this is not the case (e.g. for Roman numerals), a special module function is called to do
-- the conversion.
function export.generate_non_arabic_numeral(numeral_config, numstr)
-- `numstr` is a number represented as a string. See comment near top of show_box().
if numeral_config.module and numeral_config.func then
return require("Module:" .. numeral_config.module)[numeral_config.func](numstr)
end
local thousands_separator, Indic_separator, zero_codepoint =
numeral_config.thousands_separator,
numeral_config.Indic_separator,
numeral_config.zero_codepoint
if not zero_codepoint then
return nil
end
if thousands_separator then
numstr = export.add_thousands_separator(numstr, thousands_separator)
elseif Indic_separator then
numstr = add_Indic_separator(numstr, Indic_separator)
end
return numstr:gsub("%d", function (digit)
return u(zero_codepoint + tonumber(digit))
end)
end
-- Format a number (either a Lua number or a string) for display. Sufficiently small numbers are displayed in fixed
-- point with thousands separators. Larger numbers are displayed in both fixed point and scientific notation using
-- superscripts, and sufficiently large numbers are displayed only in scientific notation.
function export.format_number_for_display(number)
local MAX_NUM_DIGITS_FOR_FIXED_ONLY = 6
local MIN_NUM_DIGITS_FOR_SCIENTIFIC_ONLY = 13
local numstr = export.format_fixed(number)
local fixed = export.add_thousands_separator(numstr)
if #numstr <= MAX_NUM_DIGITS_FOR_FIXED_ONLY then
return fixed
end
local kstr = numstr:match("^([0-9]*[1-9])0*$")
if not kstr then
error("Internal error: Unable to match number '" .. numstr .. "'")
end
local exponent = ("10<sup>%s</sup>"):format(#numstr - 1)
local mantissa
if kstr == "1" then
mantissa = ""
elseif #kstr == 1 then
mantissa = kstr .. " × "
else
mantissa = kstr:gsub("^([0-9])", "%1.") .. " × "
end
local scientific = mantissa .. exponent
if #numstr >= MIN_NUM_DIGITS_FOR_SCIENTIFIC_ONLY then
return scientific
else
return fixed .. " (" .. scientific .. ")"
end
end
local function derive_related_numbers_decimal(cur_num, cur_data, next_num, prev_num, lookup_data)
local k, m
if cur_num == "0" then
k = 0
m = 1
else
local kstr, mstr = cur_num:match("^([0-9]*[1-9])(0*)$")
if not kstr then
error("Internal error: Unable to match number '" .. cur_num .. "'")
elseif #kstr > 15 then
error("Can't handle number with more than 15 digits before the trailing zeros: '" .. cur_num .. "'")
end
k = tonumber(kstr)
m = #mstr
end
local function make_greater_power_of_ten(power)
return cur_num .. ("0"):rep(power)
end
local function make_lesser_power_of_ten(power)
local desired_zeros = m - power
if desired_zeros < 0 then
return nil
end
return k .. ("0"):rep(desired_zeros)
end
local next_outer_data, prev_outer_data
local next_outer_num, prev_outer_num = cur_data.next_outer, cur_data.prev_outer
local power_of_10_sequence = { 1, 3, 2, 6 }
if next_outer_num then
next_outer_data = lookup_data(next_outer_num, "next outer")
else
local function try(num)
local data = (not next_num or export.numbers_greater_than(num, next_num)) and lookup_data(num) or nil
if data then
next_outer_num = num
next_outer_data = data
end
return data
end
if not try((k + 1) .. ("0"):rep(m)) and k == 1 then
for _, power_of_10 in ipairs(power_of_10_sequence) do
if try(make_greater_power_of_ten(power_of_10)) then
break
end
end
end
end
if prev_outer_num then
prev_outer_data = lookup_data(prev_outer_num, "previous outer")
else
local function try(num)
local data = (not prev_num or export.numbers_less_than(num, prev_num)) and lookup_data(num) or nil
if data then
prev_outer_num = num
prev_outer_data = data
end
return data
end
if not (k == 0 or m == 0) then
local num_to_try
if k == 1 then
num_to_try = "9" .. ("0"):rep(m - 1)
else
num_to_try = (k - 1) .. ("0"):rep(m)
end
if not try(num_to_try) and k == 1 then
for _, power_of_10 in ipairs(power_of_10_sequence) do
local power_num_to_try = make_lesser_power_of_ten(power_of_10)
if power_num_to_try and try(power_num_to_try) then
break
end
end
end
end
end
local upper_data, lower_data
local upper_num, lower_num = cur_data.upper, cur_data.lower
if upper_num then
upper_data = lookup_data(upper_num, "upper")
else
upper_num = make_greater_power_of_ten(1)
if upper_num == next_num or cur_num == "0" then
upper_num = nil
else
upper_data = lookup_data(upper_num)
end
end
if lower_num then
lower_data = lookup_data(lower_num, "lower")
elseif not (k == 0 or m == 0) then
lower_num = make_lesser_power_of_ten(1)
if lower_num == prev_num then
lower_num = nil
else
lower_data = lookup_data(lower_num)
end
end
return next_outer_num, next_outer_data, prev_outer_num, prev_outer_data, upper_num, upper_data, lower_num, lower_data
end
local function derive_related_numbers_positional(strategy, cur_num, cur_data, next_num, prev_num, lookup_data)
local zero_digit = strategy.zero_digit
local base = strategy.base
local power_base = strategy.power_base
local value_to_digit = strategy.value_to_digit
local digit_to_value = strategy.digit_to_value
local power_sequence = strategy.power_sequence
local significant = cur_num:gsub(zero_digit .. "+$", "")
local m = #cur_num - #significant
local kstr = significant == "" and zero_digit or significant
local k_value = parse_positional_to_number(kstr, base, digit_to_value)
local next_outer_data, prev_outer_data
local next_outer_num, prev_outer_num = cur_data.next_outer, cur_data.prev_outer
local function value_to_key(value)
return decimal_to_base(value, base, value_to_digit)
end
local function make_greater_power(power)
if not k_value then
return nil
end
local factor = safe_integer_power(power_base, power)
if not factor then
return nil
end
local cur_value = parse_positional_to_number(cur_num, base, digit_to_value)
if not cur_value or cur_value > MAX_SAFE_INTEGER / factor then
return nil
end
return value_to_key(cur_value * factor)
end
local function make_lesser_power(power)
local factor = safe_integer_power(power_base, power)
if not factor then
return nil
end
local cur_value = parse_positional_to_number(cur_num, base, digit_to_value)
if not cur_value or cur_value % factor ~= 0 then
return nil
end
return value_to_key(cur_value / factor)
end
if next_outer_num then
next_outer_data = lookup_data(next_outer_num, "next outer")
else
local function try(num)
local data = (not next_num or strategy.compare_keys(next_num, num)) and lookup_data(num) or nil
if data then
next_outer_num = num
next_outer_data = data
end
return data
end
if k_value then
if not try(decimal_to_base(k_value + 1, base, value_to_digit) .. zero_digit:rep(m)) and k_value == 1 then
for _, power in ipairs(power_sequence) do
if try(make_greater_power(power)) then
break
end
end
end
end
end
if prev_outer_num then
prev_outer_data = lookup_data(prev_outer_num, "previous outer")
else
local function try(num)
local data = (not prev_num or strategy.compare_keys(num, prev_num)) and lookup_data(num) or nil
if data then
prev_outer_num = num
prev_outer_data = data
end
return data
end
if not (cur_num == zero_digit or m == 0) and k_value then
local num_to_try
if k_value == 1 then
num_to_try = value_to_digit[base - 1] .. zero_digit:rep(m - 1)
else
num_to_try = decimal_to_base(k_value - 1, base, value_to_digit) .. zero_digit:rep(m)
end
if not try(num_to_try) and k_value == 1 then
for _, power in ipairs(power_sequence) do
local power_num_to_try = make_lesser_power(power)
if power_num_to_try and try(power_num_to_try) then
break
end
end
end
end
end
local upper_data, lower_data
local upper_num, lower_num = cur_data.upper, cur_data.lower
if upper_num then
upper_data = lookup_data(upper_num, "upper")
else
upper_num = make_greater_power(1)
if upper_num == next_num or cur_num == zero_digit then
upper_num = nil
else
upper_data = lookup_data(upper_num)
end
end
if lower_num then
lower_data = lookup_data(lower_num, "lower")
elseif not (cur_num == zero_digit or m == 0) then
lower_num = make_lesser_power(1)
if lower_num == prev_num then
lower_num = nil
else
lower_data = lookup_data(lower_num)
end
end
return next_outer_num, next_outer_data, prev_outer_num, prev_outer_data, upper_num, upper_data, lower_num, lower_data
end
local function create_positional_strategy(config)
local base = config.base
local digit_alphabet = config.digit_alphabet or POSITIONAL_DIGITS
local case_insensitive = config.case_insensitive
if case_insensitive == nil then
case_insensitive = base <= 36
end
local strip_separator = config.strip_separator or ","
local digit_to_value, value_to_digit = get_digit_maps(base, digit_alphabet)
local zero_digit = value_to_digit[0]
local display_separator = config.display_separator
local display_group = config.display_group
local display_group_start = config.display_group_start
local display_indic = config.display_indic
local display_keys_as_decimal = config.display_keys_as_decimal
if display_keys_as_decimal == nil then
display_keys_as_decimal = true
end
local power_sequence = config.power_sequence or {1, 3, 2, 6}
local power_base = config.power_base or 10
local strategy = {
id = config.id or ("base" .. base),
base = base,
power_base = power_base,
digit_to_value = digit_to_value,
value_to_digit = value_to_digit,
zero_digit = zero_digit,
power_sequence = power_sequence,
}
function strategy.normalize_data_key(raw_number)
return normalize_positional_key(raw_number, {
base = base,
case_insensitive = case_insensitive,
digit_to_value = digit_to_value,
value_to_digit = value_to_digit,
strip_separator = nil,
interpret_plain_decimal = false,
zero_digit = zero_digit,
})
end
function strategy.normalize_input(raw_number)
return normalize_positional_key(raw_number, {
base = base,
case_insensitive = case_insensitive,
digit_to_value = digit_to_value,
value_to_digit = value_to_digit,
strip_separator = strip_separator,
interpret_plain_decimal = true,
zero_digit = zero_digit,
})
end
function strategy.normalize_input_candidates(raw_number)
local key_as_system = normalize_positional_key(raw_number, {
base = base,
case_insensitive = case_insensitive,
digit_to_value = digit_to_value,
value_to_digit = value_to_digit,
strip_separator = strip_separator,
interpret_plain_decimal = false,
zero_digit = zero_digit,
})
local key_as_decimal = normalize_positional_key(raw_number, {
base = base,
case_insensitive = case_insensitive,
digit_to_value = digit_to_value,
value_to_digit = value_to_digit,
strip_separator = strip_separator,
interpret_plain_decimal = true,
zero_digit = zero_digit,
})
if key_as_system == key_as_decimal then
return {key_as_system}
end
return {key_as_system, key_as_decimal}
end
function strategy.lookup_data(m_data, key)
key = strategy.normalize_data_key(key)
local direct = m_data.numbers[key]
if direct then
return direct
end
local parsed = parse_positional_to_number(key, base, digit_to_value)
return parsed and m_data.numbers[parsed] or nil
end
function strategy.compare_keys(a, b)
a = strategy.normalize_data_key(a)
b = strategy.normalize_data_key(b)
if #a ~= #b then
return #a < #b
end
return a < b
end
function strategy.format_key_for_display(key)
key = strategy.normalize_data_key(key)
if display_keys_as_decimal then
local decimal_value = parse_positional_to_number(key, base, digit_to_value)
if decimal_value then
return export.format_number_for_display(decimal_value)
end
end
if display_separator then
if display_indic then
return add_separator(key, display_separator, 2, 3)
end
return add_separator(key, display_separator, display_group or 3, display_group_start)
end
return key
end
function strategy.derive_related_numbers(cur_num, cur_data, next_num, prev_num, lookup_data)
return derive_related_numbers_positional(strategy, cur_num, cur_data, next_num, prev_num, lookup_data)
end
return strategy
end
decimal_strategy = {
id = "decimal",
base = 10,
zero_digit = "0",
power_sequence = {1, 3, 2, 6},
}
function decimal_strategy.normalize_data_key(raw_number)
return export.format_fixed(raw_number)
end
function decimal_strategy.normalize_input(raw_number)
local normalized = tostring(raw_number):gsub(",", "")
if not normalized:find("^%d+$") then
error("Extraneous characters in parameter 2: should be decimal number (integer): '" .. normalized .. "'")
end
return normalized
end
function decimal_strategy.normalize_input_candidates(raw_number)
return {decimal_strategy.normalize_input(raw_number)}
end
function decimal_strategy.lookup_data(m_data, key)
return export.lookup_data(m_data, key)
end
function decimal_strategy.compare_keys(a, b)
return export.numbers_less_than(a, b)
end
function decimal_strategy.format_key_for_display(key)
return export.format_number_for_display(key)
end
function decimal_strategy.derive_related_numbers(cur_num, cur_data, next_num, prev_num, lookup_data)
return derive_related_numbers_decimal(cur_num, cur_data, next_num, prev_num, lookup_data)
end
local function resolve_number_system(m_data)
local config = m_data.number_system
if not config then
return decimal_strategy
end
if type(config) == "string" then
config = {id = config}
end
if config.id == "decimal" then
return decimal_strategy
end
if config.id == "base20" then
config.base = config.base or 20
elseif config.id == "base60" then
config.base = config.base or 60
elseif config.id == "positional" then
-- base should be explicitly given or derived below.
elseif config.id == "custom" then
if not (config.module and config.func) then
error("custom number_system requires both module and func")
end
local custom_strategy = require("Module:" .. config.module)[config.func](config)
return custom_strategy
end
config.base = config.base or tonumber(config.id and config.id:match("^base(%d+)$"))
if not config.base then
error("Unsupported number_system id '" .. tostring(config.id) .. "'")
end
if config.base < 2 then
error("number_system base must be >= 2")
end
return create_positional_strategy(config)
end
-- Map a list of tags to a single string that is equivalent. We need to do this because we can't easily put lists in the
-- keys of tables.
local function tag_list_to_combined_tag(tag_list)
return concat(tag_list, "|||")
end
-- Given a list of forms with attached inline modifiers (e.g. 'huitanta-huit<tag:Valencian>' or
-- 'tair ar ddeg<tag:vigesimal><tag:feminine>'), parse the forms into form objects (the return value of
-- parse_form_and_modifiers()) and group by the tag. Three values are returned:
-- `seen_forms`, `forms_by_tag`, `seen_tags` where:
-- (1) `seen_forms` is the list of parsed form objects;
-- (2) `forms_by_tag` is a table grouping the form objects by combined tag, where the key is the tag and the value is
-- a list of the form objects seen with that tag (forms without tag are grouped under the empty-string tag);
-- (3) `seen_tags` is a list of the combined tags encountered, in the order they were encountered;
-- (4) `combined_tags_to_tag_lists` is a map from combined tags to the corresponding tag lists.
function export.group_numeral_forms_by_tag(forms)
local seen_forms = {}
local forms_by_tag = {}
local seen_tags = {}
local combined_tags_to_tag_lists = {}
for _, form in ipairs(forms) do
local formobj = export.parse_form_and_modifiers(form)
insert(seen_forms, formobj)
local combined_tag = formobj.tag and tag_list_to_combined_tag(formobj.tag) or ""
if not forms_by_tag[combined_tag] then
insert(seen_tags, combined_tag)
forms_by_tag[combined_tag] = {}
combined_tags_to_tag_lists[combined_tag] = formobj.tag or {}
end
insert(forms_by_tag[combined_tag], formobj)
end
return seen_forms, forms_by_tag, seen_tags, combined_tags_to_tag_lists
end
-- Given a form object (as returned by parse_form_and_modifiers()), format as appropriate for the current language.
function export.format_formobj(formobj, m_data, lang)
local left_q = formobj.q and require("Module:qualifier").format_qualifier(formobj.q) .. " " or ""
local right_q = ((formobj.g and " " .. require("Module:gender and number").format_genders(split(formobj.g, ",")) or "")
.. (formobj.qq and " " .. require("Module:qualifier").format_qualifier(formobj.qq) or ""))
local term = maybe_unaffix(m_data, formobj.form)
local alt = formobj.alt
if not alt and term ~= formobj.form then
alt = formobj.form
end
return left_q .. m_links.full_link{
lang = lang, term = term, alt = alt, tr = formobj.tr, id = formobj.id,
} .. right_q
end
-- Implementation of {{number box}}.
function export.show_box(frame)
local full_link = m_links.full_link
local params = {
[1] = {required = true, type = "language", default = "und"},
[2] = true,
["pagename"] = true,
["type"] = true,
}
local parent_args = frame:getParent().args
if parent_args.pagename then
track("show-box-pagename")
end
local args = require("Module:parameters").process(parent_args, params, nil, "number list", "show_box")
local lang = args[1]
local langcode = lang:getCode()
-- Get the data from the data module. Some modules (e.g. currently [[Module:number list/data/ka]]) have to be
-- loaded with require() because the exported numbers table has a metatable.
local module_name = export.get_data_module_name(langcode)
local m_data = require(module_name)
local number_system = resolve_number_system(m_data)
local pagename = args.pagename or (mw.title.getCurrentTitle().nsText == "การสืบสร้าง" and "*" or "") .. mw.loadData("Module:headword/data").pagename
local cur_type = args.type
-- We represent all numbers as strings in this function to deal with the limited precision inherent in Lua numbers.
-- These large numbers do occur, such as 100 trillion ([[རབ་བཀྲམ་ཆེན་པོ]]), 1 sextillion, etc. Lua represents all
-- numbers as 64-bit floats, meaning that some numbers above 2^53 cannot be represented exactly. The first power of
-- 10 that cannot be represented exactly is 10^22 (ten sextillion in short scale, ten thousand trillion in long
-- scale), but the first power of ten whose neighboring numbers cannot be represented exactly is 10^16 (ten
-- quadrillion or ten thousand billion). Ideally we would use a big integer library of some kind, but unfortunately
-- Wiktionary does not seem to have any such library installed. MediaWiki docs make mention of bcmath, but
-- mw.bcmath.new() throws an error.
--
-- In module data, we allow numbers to be indexed as Lua numbers or as strings. See lookup_data() above.
local cur_num = args[2] or langcode == "und" and mw.title.getCurrentTitle().nsText == "แม่แบบ" and "2" or nil
-- If a current number wasn't specified, find it by looking through the data for the current language and matching
-- forms against the pagename.
if not cur_num then
local nums_and_types = lookup_number_by_form(lang, m_data, pagename, cur_type)
if #nums_and_types == 0 then
error("The current page name '" .. pagename .. "' does not match the spelling of any known number in [[" ..
module_name .. "]]. Check the data module or the spelling of the page.")
end
for _, num_and_type in ipairs(nums_and_types) do
local num = num_and_type[1]
num = number_system.normalize_data_key(num)
if cur_num and num ~= cur_num then
local errparts = {}
for _, num_and_type in ipairs(nums_and_types) do
local num, typ = unpack(num_and_type)
num = number_system.normalize_data_key(num)
insert(errparts, ("%s (%s)"):format(num, typ))
end
error("The current page name '" .. pagename .. "' matches the spelling of multiple numbers in [[" ..
module_name .. "]]: " .. concat(errparts, ",") .. ". Please specify the number explicitly.")
else
cur_num = num
end
end
end
local function candidate_matches_pagename(candidate_num)
local candidate_data = number_system.lookup_data(m_data, candidate_num)
if not candidate_data then
return false
end
for numtype, forms in pairs(candidate_data) do
if not non_form_types[numtype] and (not cur_type or numtype == cur_type) then
local form_list = type(forms) == "table" and forms or {forms}
for _, form in ipairs(form_list) do
local formobj = export.parse_form_and_modifiers(form)
if form_equals_pagename(formobj, pagename, m_data, lang) then
return true
end
end
end
end
return false
end
local cur_num_candidates = number_system.normalize_input_candidates and
number_system.normalize_input_candidates(cur_num) or
{number_system.normalize_input(cur_num)}
cur_num = cur_num_candidates[1]
if #cur_num_candidates > 1 then
for _, candidate in ipairs(cur_num_candidates) do
if candidate_matches_pagename(candidate) then
cur_num = candidate
break
end
end
end
-- Wrapper around `export.lookup_data` that may throw an error if the number can't be found (specifically if
-- param_for_error is given).
local function lookup_data(numstr, param_for_error)
numstr = number_system.normalize_data_key(numstr)
local retval = number_system.lookup_data(m_data, numstr)
if not retval and param_for_error then
error(('The %s number "%s" specified in the "numbers" table entry for "%s" cannot be found in '
.. "[[%s]]; please fix the module."):format(param_for_error, numstr, cur_num, module_name))
end
return retval
end
local cur_data = lookup_data(cur_num)
if not cur_data then
error('The number "' .. cur_num .. '" is not found in the "numbers" table in [[' .. module_name .. "]].")
end
local formatted_forms = {}
if cur_type and not cur_data[cur_type] then
error("The numeral type " .. cur_type .. " for " .. cur_num .. " is not found in [[" .. module_name .. "]].")
end
-- See above for the definition of "combined tag" and "tag list". The combined tag is just the concatenation of the
-- tag list with ||| between the tags.
local cur_tag_list, cur_combined_tag
local form_types = export.get_number_types(m_data)
-- LONG COMMENT EXPLAINING TAG HANDLING:
--
-- For each form type (see `form_types` at top of file), group the entries for that form type by tag and figure out
-- what the current form type and tag is, i.e. the form type and tag for the form matching the pagename. Tags are
-- e.g. as in 'vuitanta-vuit<tag:Central>' or 'huitanta-huit<tag:Valencian>' for Catalan and allow different
-- logical sets of numbers for the same form type to be identified. There can potentially be multiple tags per
-- form, e.g. 'tair ar ddeg<tag:vigesimal><tag:feminine>' for the Welsh number 13 where there are both decimal/
-- vigesimal and masculine/feminine variants of this number.
--
-- We need to do two passes over all form types. In the first pass, for each form type we parse all the forms,
-- group them by tag, and store the results in a per-form-type table. In the second pass, we then format all forms
-- for all form types. The reason for doing two passes is because we need to know the current tag in order to
-- display a form type correctly (because we display the forms for the current tag before the forms for any other
-- tags), but we won't know the current tag until we have done a pass over all form types and forms of those form
-- types in order to determine which one matches the pagename.
--
-- We use the current tag in two ways:
-- 1. When displaying all the forms for a given number, we group both by form type and tag, and display the forms
-- for a given form type/tag combination on a single line. For a given form type, we display the forms for each
-- tag in the order the tags were specified in the data, except that the forms for the current tag are placed
-- before all others (so e.g. for Catalan, if the current tag is "Valencian", we list the Valencian form(s)
-- first even if the Central form(s) are listed first in the data file).
-- 2. When displaying links to adjacent numbers in display_adjacent_number_links(), if there aren't form(s) for the
-- current type, we don't display any links; but if there are mutiple tagged forms for the current type, we only
-- display links for the forms for the current tag if there are any such forms, otherwise we display links for
-- all forms of all tags.
--
-- In the presence of multiple tags, things get a bit more complicated:
-- 1. When displaying links to adjacent numbers, say the current tag is vigesimal+feminine, we want to prefer an
-- adjacent-number form that's both vigesimal and feminine, but otherwise we prefer one that's vigesimal or
-- feminine over one that's neither. Say the current tag is just vigesimal; we of course prefer an
-- adjacent-number form that's just vigesimal, but otherwise we prefer a tag that's vigesimal + either masculine
-- or feminine to a tag that's not vigesimal. So it seems we want the form(s) that have the maximum intersection
-- of tags, and if there are two different tag lists with the same number of intersecting tags (e.g. the current
-- tag is vigesimal+feminine and we have a choice of decimal+feminine or just vigesimal), we should prefer the
-- form that has fewer non-matching tags, hence we prefer the just-vigesimal form.
-- 2. By the same logic, when displaying all the forms for a given number, we should order by the size of the
-- intersection of the tag list in question with the current tag list, then inversely by the size of the tag list
-- (so we prefer tag lists with fewer non-matching tags), then by the order of the tag lists in the data file.
local forms_by_tag_per_form_type = {}
local seen_tags_per_form_type = {}
local combined_tags_to_tag_lists_per_form_type = {}
for _, form_type in ipairs(form_types) do
local numeral = cur_data[form_type.key]
if numeral then
local seen_forms, forms_by_tag, seen_tags, combined_tags_to_tag_lists = export.group_numeral_forms_by_tag(
type(numeral) == "table" and numeral or {numeral}
)
forms_by_tag_per_form_type[form_type] = forms_by_tag
seen_tags_per_form_type[form_type] = seen_tags
combined_tags_to_tag_lists_per_form_type[form_type] = combined_tags_to_tag_lists
for _, formobj in ipairs(seen_forms) do
if not cur_tag_list and form_equals_pagename(formobj, pagename, m_data, lang) then
cur_tag_list = formobj.tag or {}
cur_combined_tag = tag_list_to_combined_tag(cur_tag_list)
cur_type = cur_type or form_type.key
end
end
end
end
-- Error if we couldn't locate the pagename among the forms for the current number. This only happens if the
-- number if given explicitly in 2=.
if not cur_type and mw.title.getCurrentTitle().nsText ~= "แม่แบบ" then
error("The current page name '" .. pagename .. "' does not match any of the numbers listed in [[" ..
module_name .. "]] for " .. cur_num .. ". Check the data module or the spelling of the page.")
end
-- Now, format all the forms for all form types for the current number.
local function sort_combined_tags(combined_tags, seen_tags, combined_tags_to_tag_lists)
-- cur_tag_list should normally never be nil, but can be so in template space
local cur_tag_set = list_to_set(cur_tag_list or {})
local tags_to_order = {}
for i, tag in ipairs(seen_tags) do
tags_to_order[tag] = i
end
local function compare_tags(tag1, tag2)
-- See long comment above.
-- First compare by number of tags in common with the current tag list.
local tag_list1 = combined_tags_to_tag_lists[tag1]
local tag_list2 = combined_tags_to_tag_lists[tag2]
local common1 = set_intersection(cur_tag_set, list_to_set(tag_list1))
local common2 = set_intersection(cur_tag_set, list_to_set(tag_list2))
local n_common1, n_common2 = set_size(common1), set_size(common2)
if n_common1 ~= n_common2 then
return n_common1 > n_common2 -- larger overlap with current tag list first
end
-- When overlap ties, shorter tag lists first (untagged default before explicit <tag:...> rows).
if #tag_list1 ~= #tag_list2 then
return #tag_list1 < #tag_list2
end
-- Finally, compare by the original ordering in the number data, but if a tag is the same as the current
-- tag, put it first, and if somehow we encounter a tag that's not in the original ordering, put it last.
local index1 = tag1 == cur_combined_tag and 0 or tags_to_order[tag1] or #seen_tags + 1
local index2 = tag2 == cur_combined_tag and 0 or tags_to_order[tag2] or #seen_tags + 1
return index1 < index2
end
sort(combined_tags, compare_tags)
end
for _, form_type in ipairs(form_types) do
local forms_by_tag = forms_by_tag_per_form_type[form_type]
local seen_tags = seen_tags_per_form_type[form_type]
local combined_tags_to_tag_lists = combined_tags_to_tag_lists_per_form_type[form_type]
if forms_by_tag then
local function insert_forms_by_tag(tag)
local formatted_tag_forms = {}
local pagename_among_forms = false
for _, formobj in ipairs(forms_by_tag[tag]) do
insert(formatted_tag_forms, export.format_formobj(formobj, m_data, lang))
if form_equals_pagename(formobj, pagename, m_data, lang) then
pagename_among_forms = true
end
end
if tag ~= "" then
local tag_list = combined_tags_to_tag_lists[tag]
tag = concat(tag_list, " / ")
end
local displayed_number_type = export.display_number_type(form_type) .. (tag == "" and "" or (" (%s)"):format(tag))
if pagename_among_forms then
displayed_number_type = "'''" .. displayed_number_type .. "'''"
end
insert(formatted_forms, " ''" .. displayed_number_type .. "'': " ..
concat(formatted_tag_forms, ", "))
end
sort_combined_tags(seen_tags, seen_tags, combined_tags_to_tag_lists)
for _, tag in ipairs(seen_tags) do
insert_forms_by_tag(tag)
end
end
end
-- Current number in header
local cur_display = number_system.format_key_for_display(cur_num)
local numeral
if m_data.numeral_config then
numeral = export.generate_non_arabic_numeral(m_data.numeral_config, cur_num)
elseif cur_data["numeral"] then
numeral = number_system.normalize_data_key(cur_data["numeral"])
end
if numeral then
cur_display = full_link{lang = lang, alt = numeral, tr = "-"} .. "<br/><span style=\"font-size: smaller;\">" .. cur_display .. "</span>"
end
--------------------- Determine next/prev, next/prev outer, and upper/lower numbers. ----------------------
-- We have three series of numbers to determine:
--
-- 1. The next/previous numbers, which are always those in the sorted series of available numbers unless overridden
-- by `next`/`prev` specs in an individual number.
-- 2. The next/previous outer numbers, which are displayed to the outside of the next/previous numbers. These can
-- be overridden for an individual number using `next_outer`/`prev_outer`. Otherwise, we try according to an
-- algorithm described below in the code for computing the outer numbers.
-- 3. The upper/lower numbers, which are displayed above or below the central number box. These can be overridden
-- for an individual number using `upper`/`lower`. These are always 10x greater or less than the number in
-- question, number not considering a number if it's the same as the next/previous number.
local next_num, prev_num = get_next_and_prev_keys(m_data, cur_num, number_system, lookup_data)
local next_data = next_num and lookup_data(next_num, "next")
local prev_data = prev_num and lookup_data(prev_num, "previous")
local next_outer_num, next_outer_data, prev_outer_num, prev_outer_data, upper_num, upper_data, lower_num, lower_data =
number_system.derive_related_numbers(cur_num, cur_data, next_num, prev_num, lookup_data)
-- For a number `num` (an "adjacent" number to the current number, i.e. either next, previous, next/previous outer,
-- or upper/lower) with corresponding entry data `num_data`, display link(s) to the form(s) for this number that
-- are associated with the current type and tag. If there is a single form to be linked to, the form is linked
-- using the number itself as the display text; otherwise, the multiple forms are linked with superscripted [a],
-- [b], etc. and the number it displayed adjacent to the links. In either case, beside the number there may be an
-- arrow. If `arrow` == "rarrow", the format is like this:
-- if multiple entries:
-- <numeral> → <sup>[a], [b], ...</sup>
-- else
-- <numeral> →
-- If `arrow` == "larrow", the format is like this:
-- if multiple entries:
-- <sup>[a], [b], ...</sup> ← <numeral>
-- else
-- ← <numeral>
-- Otherwise, the format is like this:
-- if multiple entries:
-- <numeral><sup>[a], [b], ...</sup>
-- else
-- <numeral>
--
-- Returns nil if `num_data` is nil or there is no entry in `num_data` for the current number type.
--
-- For the handling of tags in this function, see the "LONG COMMENT EXPLAINING TAG HANDLING" above.
local function display_adjacent_number_links(num, num_data, arrow)
if not num_data then
return nil
end
local forms = num_data[cur_type]
if not forms then
return nil
elseif type(forms) ~= "table" then
forms = {forms}
end
local seen_forms, forms_by_tag = export.group_numeral_forms_by_tag(forms)
-- FIXME: `cur_tag` is not defined. This seems to have been missed when multiple tag handling was added in [[Special:Diff/68978046]].
local forms_to_display
if cur_tag and forms_by_tag[cur_tag] then
forms_to_display = forms_by_tag[cur_tag]
else
forms_to_display = seen_forms
end
for i, form_to_display in ipairs(forms_to_display) do
forms_to_display[i] = form_to_display.link or maybe_unaffix(m_data,
form_to_stripped_form(form_to_display.form, lang))
end
local seen_pagenames = {}
local pagenames_to_display = {}
for _, form in ipairs(forms_to_display) do
if not seen_pagenames[form] then
insert(pagenames_to_display, form)
seen_pagenames[form] = true
end
end
if #pagenames_to_display == 0 then
return nil
end
num = number_system.format_key_for_display(num)
local num_arrow =
arrow == "rarrow" and num .. " → " or
arrow == "larrow" and " ← " .. num or
num
if #pagenames_to_display > 1 then
local a = ("a"):byte()
local links = {}
for i, term in ipairs(pagenames_to_display) do
links[i] = m_links.language_link{lang = lang, term = term, alt = "[" .. char(a + i - 1) .. "]"}
end
links = "<sup>" .. concat(links, ", ") .. "</sup>"
return arrow == "larrow" and links .. num_arrow or num_arrow .. links
else
return m_links.language_link {
lang = lang,
term = pagenames_to_display[1],
alt = num_arrow,
}
end
end
-- Display links to previous/next numbers
local prev_display = display_adjacent_number_links(prev_num, prev_data, "larrow") or ""
local next_display = display_adjacent_number_links(next_num, next_data, "rarrow") or ""
-- Display links to previous/next outer numbers
local prev_outer_display = display_adjacent_number_links(prev_outer_num, prev_outer_data, "larrow")
local next_outer_display = display_adjacent_number_links(next_outer_num, next_outer_data, "rarrow")
-- Display links to upper/lower numbers
local upper_display = display_adjacent_number_links(upper_num, upper_data)
local lower_display = display_adjacent_number_links(lower_num, lower_data)
local canonical_name = lang:getCategoryName() --th
local appendix1 = "เลข" .. canonical_name
local appendix2 = "จำนวน" .. canonical_name
local appendix
local title
if mw.title.new(appendix1, "ภาคผนวก"):getContent() then
appendix = appendix1
elseif mw.title.new(appendix2, "ภาคผนวก"):getContent() then
appendix = appendix2
end
if appendix then
--title = "[[ภาคผนวก:" .. appendix .. "|" .. appendix2 .. "]]"
title = "[[ภาคผนวก:" .. appendix .. "|เลข-จำนวนใน" .. canonical_name .. "]]"
else
--title = appendix2
title = "เลข-จำนวนใน" .. canonical_name
end
local function format_cell(contents, class_name, colspan, bold)
class_name = class_name and (" " .. class_name) or ""
colspan = colspan and ('colspan="%s" '):format(colspan) or ""
bold = bold and "!" or "|"
return ('%s %sclass="table-cell %s | %s\n'):format(bold, colspan, class_name, contents)
end
local has_outer_display = not not (prev_outer_display or next_outer_display)
local function format_upper_lower_display_row(display)
local blank_cell
if has_outer_display then
blank_cell = '| colspan="2" |\n'
else
blank_cell = "|\n"
end
local parts = {'|- class="adjacent-panel"\n'}
insert(parts, blank_cell)
insert(parts, format_cell(display, "adjacent-number"))
insert(parts, blank_cell)
return concat(parts)
end
upper_display = upper_display and format_upper_lower_display_row(upper_display) or ""
lower_display = lower_display and format_upper_lower_display_row(lower_display) or ""
local function format_display_cell(display)
return format_cell(display, "adjacent-number")
end
prev_display = format_display_cell(prev_display)
next_display = format_display_cell(next_display)
prev_outer_display = has_outer_display and format_display_cell(prev_outer_display or "") or ""
next_outer_display = has_outer_display and format_display_cell(next_outer_display or "") or ""
cur_display = format_cell(cur_display, "current-number", nil, "bold")
local forms_display = ('| colspan="%s" style="text-align: center;" | %s\n'):format(
has_outer_display and 5 or 3, concat(formatted_forms, "<br/>"))
local footer_display
if cur_data.wplink then
local footer =
--"[[w:" .. lang:getCode() .. ":|" .. lang:getCanonicalName() .. " Wikipedia]] article on " ..
"[[w:" .. lang:getCode() .. ":|วิกิพีเดีย" .. lang:getCanonicalName() .. "]]มีบทความเกี่ยวกับ " ..
m_links.full_link{lang = lang, term = "w:" .. lang:getCode() .. ":" .. cur_data.wplink,
alt = number_system.format_key_for_display(cur_num)}
footer_display = '|- style="text-align: center;"\n' .. format_cell(footer, "footer-cell", has_outer_display and 5 or 3)
else
footer_display = ""
end
local edit_link = ' <sup>(<span class="plainlinks">[' ..
tostring(mw.uri.fullUrl(module_name, { action = "edit" })) ..
" แก้ไข]</span>)</sup>"
return [=[{| class="floatright number-box" cellpadding="5" cellspacing="0" style="background: var(--wikt-palette-white, #ffffff); color: inherit; border: 1px var(--border-color-base,#aaa) solid; border-collapse: collapse; margin-top: .5em;" rules="all"
|+ ''']=] .. title .. edit_link .. "'''\n" ..
upper_display .. '|- style="text-align: center;"\n' ..
prev_outer_display .. prev_display .. cur_display .. next_display .. next_outer_display .. "|-\n" ..
lower_display .. "|-\n" ..
forms_display .. footer_display .. "|}" ..
require("Module:TemplateStyles")("Template:number box/styles.css")
end
function export.show_box_manual(frame)
local m_links = require("Module:links")
local num_type = frame.args["type"]
local args = require("Module:parameters").process(frame:getParent().args, {
[1] = {required = true, type = "language", default = "und"},
sc = {type = "script"},
headlink = true,
wplink = true,
alt = true,
tr = true,
[2] = true, -- prev_symbol
[3] = true, -- cur_symbol
[4] = true, -- next_symbol
[5] = true, -- prev_term
[6] = true, -- next_term
card = true, cardalt = true, cardtr = true,
ord = true, ordalt = true, ordtr = true,
adv = true, advalt = true, advtr = true,
mult = true, multalt = true, multtr = true,
dis = true, disalt = true, distr = true,
coll = true, collalt = true, colltr = true,
frac = true, fracalt = true, fractr = true,
opt = true, optx = true, optxalt = true, optxtr = true,
opt2 = true, opt2x = true, opt2xalt = true, opt2xtr = true,
})
local lang = args[1]
local sc = args.sc
local headlink = args.headlink
local wplink = args.wplink
local alt = args.alt
local tr = args.tr
local prev_symbol = args[2]
local cur_symbol = args[3]
local next_symbol = args[4]
local prev_term = args[5]
local next_term = args[6]
local cardinal_term = args.card; local cardinal_alt = args.cardalt; local cardinal_tr = args.cardtr
local ordinal_term = args.ord; local ordinal_alt = args.ordalt; local ordinal_tr = args.ordtr
local adverbial_term = args.adv; local adverbial_alt = args.advalt; local adverbial_tr = args.advtr
local multiplier_term = args.mult; local multiplier_alt = args.multalt; local multiplier_tr = args.multtr
local distributive_term = args.dis; local distributive_alt = args.disalt; local distributive_tr = args.distr
local collective_term = args.coll; local collective_alt = args.collalt; local collective_tr = args.colltr
local fractional_term = args.frac; local fractional_alt = args.fracalt; local fractional_tr = args.fractr
local optional1_title = args.opt
local optional1_term = args.optx; local optional1_alt = args.optxalt; local optional1_tr = args.optxtr
local optional2_title = args.opt2
local optional2_term = args.opt2x; local optional2_alt = args.opt2xalt; local optional2_tr = args.opt2xtr
track(lang:getCode())
if sc then
track("sc")
end
if headlink then
track("headlink")
end
if wplink then
track("wplink")
end
if alt then
track("alt")
end
if cardinal_alt or ordinal_alt or adverbial_alt or multiplier_alt or distributive_alt or collective_alt or fractional_alt or optional1_alt or optional2_alt then
track("xalt")
end
local subpage = mw.loadData("Module:headword/data").pagename
local is_reconstructed = lang:hasType("reconstructed") or mw.title.getCurrentTitle().nsText == "การสืบสร้าง"
-- Commenting out this line prevents passing redundant alts to full_link;
-- however, there may have been a purpose to it.
-- alt = alt or (is_reconstructed and "*" or "") .. subpage
if num_type == "เชิงการนับ" then
cardinal_term = cardinal_term or (is_reconstructed and "*" or "") .. subpage
cardinal_alt = cardinal_alt or alt
cardinal_tr = cardinal_tr or tr
elseif num_type == "เชิงอันดับที่" then
ordinal_term = ordinal_term or (is_reconstructed and "*" or "") .. subpage
ordinal_alt = ordinal_alt or alt
ordinal_tr = ordinal_tr or tr
end
local header = "จำนวน" .. num_type .. lang:getCategoryName()
if headlink then
header = "[[" .. headlink .. "|" .. header .. "]]"
end
local previous = ""
if prev_term or prev_symbol then
previous = m_links.full_link{lang = lang, sc = sc, term = prev_term, alt = " < " .. prev_symbol, tr = "-", no_alt_ast = true}
end
local current = m_links.full_link{lang = lang, sc = sc, alt = cur_symbol, tr = "-", no_alt_ast = true}
local next = ""
if next_term or next_symbol then
next = m_links.full_link{lang = lang, sc = sc, term = next_term, alt = next_symbol .. " > ", tr = "-", no_alt_ast = true}
end
local forms = {}
if cardinal_term then
insert(forms, " ''[[จำนวนเชิงการนับ|เชิงการนับ]]'' : " .. m_links.full_link{lang = lang, sc = sc, term = cardinal_term, alt = cardinal_alt, tr = cardinal_tr})
end
if ordinal_term then
insert(forms, " ''[[จำนวนเชิงอันดับที่|เชิงอันดับที่]]'' : " .. m_links.full_link{lang = lang, sc = sc, term = ordinal_term, alt = ordinal_alt, tr = ordinal_tr})
end
if adverbial_term then
insert(forms, " ''[[จำนวนเชิงกริยาวิเศษณ์|เชิงกริยาวิเศษณ์]]'' : " .. m_links.full_link{lang = lang, sc = sc, term = adverbial_term, alt = adverbial_alt, tr = adverbial_tr})
end
if multiplier_term then
insert(forms, " ''[[ตัวคูณ]]'' : " .. m_links.full_link{lang = lang, sc = sc, term = multiplier_term, alt = multiplier_alt, tr = multiplier_tr})
end
if distributive_term then
insert(forms, " ''[[จำนวนเชิงแจกแจง|เชิงแจกแจง]]'' : " .. m_links.full_link{lang = lang, sc = sc, term = distributive_term, alt = distributive_alt, tr = distributive_tr})
end
if collective_term then
insert(forms, " ''[[จำนวนเชิงรวบรวม|เชิงรวบรวม]]'' : " .. m_links.full_link{lang = lang, sc = sc, term = collective_term, alt = collective_alt, tr = collective_tr})
end
if fractional_term then
insert(forms, " ''[[เศษส่วน]]'' : " .. m_links.full_link{lang = lang, sc = sc, term = fractional_term, alt = fractional_alt, tr = fractional_tr})
end
if optional1_title then
insert(forms, " ''" .. optional1_title .. "'' : " .. m_links.full_link{lang = lang, sc = sc, term = optional1_term, alt = optional1_alt, tr = optional1_tr})
end
if optional2_title then
insert(forms, " ''" .. optional2_title .. "'' : " .. m_links.full_link{lang = lang, sc = sc, term = optional2_term, alt = optional2_alt, tr = optional2_tr})
end
local footer = ""
if wplink then
footer =
--"[[w:" .. lang:getCode() .. ":|" .. lang:getCanonicalName() .. " Wikipedia]] article on " ..
"[[w:" .. lang:getCode() .. ":|วิกิพีเดีย" .. lang:getCanonicalName() .. "]]มีบทความเกี่ยวกับ " ..
m_links.full_link{lang = lang, sc = sc, term = "w:" .. lang:getCode() .. ":" .. wplink, alt = alt, tr = tr}
end
return [=[{| class="floatright number-box" cellpadding="5" cellspacing="0" rules="all"
|+ ''']=] .. header .. [=['''
|-
| class="adjacent-slot" | ]=] .. previous .. [=[
! class="current-slot" | ]=] .. current .. [=[
| class="adjacent-slot" | ]=] .. next .. [=[
|-
| colspan="3" class="form-slot" | ]=] .. concat(forms, "<br/>") .. [=[
|-
| colspan="3" class="footer-slot" | ]=] .. footer .. [=[
|}]=] .. require("Module:TemplateStyles")("Template:number box/styles.css")
end
return export
6teaeicibfld60nbxpkeh8lso4jf6xk
ยอ
0
170749
5754333
5686341
2026-08-06T00:31:46Z
Alifshinobi
397
/* รากศัพท์ 3 */
5754333
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
[[ไฟล์:P Morc D1252.JPG|thumb|ยอ (ไม้ต้น)]]
[[ไฟล์:Thookku Valai.jpg|thumb|ยอ (เครื่องจับปลา)]]
[[ไฟล์:Gio lua 2.jpg|thumb|หมูยอ]]
=== การออกเสียง ===
{{th-pron}}
=== รากศัพท์ 1 ===
==== คำนาม ====
{{th-noun}}
# [[ชื่อ]][[ไม้ต้น]][[ชนิด]] ''Morinda citrifolia'' L. [[ใน]][[วงศ์]] Rubiaceae [[แก่น]][[และ]][[ราก]][[สี]][[เหลือง]][[ใช้]][[ย้อม]][[ผ้า]] [[ผล]]และ[[ใบ]][[กิน]][[ได้]]
=== รากศัพท์ 2 ===
เทียบ{{cog|ltc|-}} {{ltc-l|諛}}; ร่วมเชื้อสายกับ{{cog|nod|ᨿᩬᩴ}}, {{cog|lo|ຍໍ}}, {{cog|khb|ᦍᦸ}}, {{cog|blt|ꪑꪷ}}, {{cog|twh|ꪑꪮ}}, {{cog|shn|ယေႃး}}, {{cog|phk|ယေႃ}}, {{cog|za|yoj}}
==== คำกริยา ====
{{th-verb}}
# [[กล่าว]][[คำ]][[เพื่อ]][[เชิดชู]] [[หรือ]]เพื่อ[[ให้]][[ชอบใจ]]
#: {{ux|th|ยอพระเกียรติ}}
#: {{ux|th|เด็กชอบให้ยอ}}
# [[ยก]]
#: {{ux|th|ยอกร}}
# ยกเพื่อ[[กระแทก]]
#: {{ux|th|ยอด้วยเข่า}}
=== รากศัพท์ 3 ===
เทียบ{{cog|za|hoj|tr=ห้อ|t=บอกใหควายหยุด}}
==== คำกริยา ====
{{th-verb}}
# [[บอก]]ให้[[หยุด]] (ใช้[[แก่]][[วัว]][[ควาย]])
# ให้หยุด, หยุด
#: {{ux|th|ยอทัพ}}
# {{lb|th|โดยปริยาย}} [[เหนี่ยวรั้ง]][[ไม่]][[ไหว]]
#: {{ux|th|ยอไม่หยุด}}
=== รากศัพท์ 4 ===
==== คำนาม ====
{{th-noun}}
# [[เครื่อง]][[จับ]][[ปลา]]ชนิด[[หนึ่ง]] [[เป็น]][[ร่างแห]][[สี่เหลี่ยม]][[มี]][[คัน]][[สำหรับ]]ยก
===== ดูเพิ่ม =====
* {{l|th|ลอบ}}
* {{l|th|สวิง}}
* {{l|th|แห}}
* {{l|th|อวน}}
=== รากศัพท์ 5 ===
{{bor+|th|vi|giò||เนื้อบด}} สำเนียงเว้ว่า ''ยอ'' สำเนียงโฮจิมินห์ว่า ''หย่อ''
==== คำนาม ====
{{th-noun}}
# [[ของกิน]][[ทำ]][[ด้วย]][[เนื้อ]][[หมู]]หรือเนื้อ[[ไก่]][[ผสม]][[เครื่องปรุง]][[บด]][[แล้ว]][[อัด]]เป็น[[แท่ง]] และ[[นึ่ง]]ให้[[สุก]] [[เรียก]]ว่า หมูยอ ไก่ยอ
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/ɲɔː˧˧/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb|tl=1}}
# {{lb|nod|สกรรม}} {{alt|nod|ᨿᩬᩴ}}
3yjzl0efxg3sevjzu03vdawmtr3pjpb
5754334
5754333
2026-08-06T00:32:29Z
Alifshinobi
397
/* ภาษาไทย */
5754334
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
[[ไฟล์:P Morc D1252.JPG|thumb|ยอ (ไม้ต้น)]]
[[ไฟล์:Thookku Valai.jpg|thumb|ยอ (เครื่องจับปลา)]]
[[ไฟล์:Gio lua 2.jpg|thumb|หมูยอ]]
=== การออกเสียง ===
{{th-pron}}
=== รากศัพท์ 1 ===
เทียบ{{cog|ltc|-}} {{ltc-l|諛}}; ร่วมเชื้อสายกับ{{cog|nod|ᨿᩬᩴ}}, {{cog|lo|ຍໍ}}, {{cog|khb|ᦍᦸ}}, {{cog|blt|ꪑꪷ}}, {{cog|twh|ꪑꪮ}}, {{cog|shn|ယေႃး}}, {{cog|phk|ယေႃ}}, {{cog|za|yoj}}
==== คำกริยา ====
{{th-verb}}
# [[กล่าว]][[คำ]][[เพื่อ]][[เชิดชู]] [[หรือ]]เพื่อ[[ให้]][[ชอบใจ]]
#: {{ux|th|ยอพระเกียรติ}}
#: {{ux|th|เด็กชอบให้ยอ}}
# [[ยก]]
#: {{ux|th|ยอกร}}
# ยกเพื่อ[[กระแทก]]
#: {{ux|th|ยอด้วยเข่า}}
=== รากศัพท์ 2 ===
==== คำนาม ====
{{th-noun}}
# [[ชื่อ]][[ไม้ต้น]][[ชนิด]] ''Morinda citrifolia'' L. [[ใน]][[วงศ์]] Rubiaceae [[แก่น]][[และ]][[ราก]][[สี]][[เหลือง]][[ใช้]][[ย้อม]][[ผ้า]] [[ผล]]และ[[ใบ]][[กิน]][[ได้]]
=== รากศัพท์ 3 ===
เทียบ{{cog|za|hoj|tr=ห้อ|t=บอกใหควายหยุด}}
==== คำกริยา ====
{{th-verb}}
# [[บอก]]ให้[[หยุด]] (ใช้[[แก่]][[วัว]][[ควาย]])
# ให้หยุด, หยุด
#: {{ux|th|ยอทัพ}}
# {{lb|th|โดยปริยาย}} [[เหนี่ยวรั้ง]][[ไม่]][[ไหว]]
#: {{ux|th|ยอไม่หยุด}}
=== รากศัพท์ 4 ===
==== คำนาม ====
{{th-noun}}
# [[เครื่อง]][[จับ]][[ปลา]]ชนิด[[หนึ่ง]] [[เป็น]][[ร่างแห]][[สี่เหลี่ยม]][[มี]][[คัน]][[สำหรับ]]ยก
===== ดูเพิ่ม =====
* {{l|th|ลอบ}}
* {{l|th|สวิง}}
* {{l|th|แห}}
* {{l|th|อวน}}
=== รากศัพท์ 5 ===
{{bor+|th|vi|giò||เนื้อบด}} สำเนียงเว้ว่า ''ยอ'' สำเนียงโฮจิมินห์ว่า ''หย่อ''
==== คำนาม ====
{{th-noun}}
# [[ของกิน]][[ทำ]][[ด้วย]][[เนื้อ]][[หมู]]หรือเนื้อ[[ไก่]][[ผสม]][[เครื่องปรุง]][[บด]][[แล้ว]][[อัด]]เป็น[[แท่ง]] และ[[นึ่ง]]ให้[[สุก]] [[เรียก]]ว่า หมูยอ ไก่ยอ
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/ɲɔː˧˧/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb|tl=1}}
# {{lb|nod|สกรรม}} {{alt|nod|ᨿᩬᩴ}}
35mkm5gzhe9e9v76ed62r51eblz2kp7
5754407
5754334
2026-08-06T03:14:46Z
Alifshinobi
397
/* รากศัพท์ 1 */
5754407
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
[[ไฟล์:P Morc D1252.JPG|thumb|ยอ (ไม้ต้น)]]
[[ไฟล์:Thookku Valai.jpg|thumb|ยอ (เครื่องจับปลา)]]
[[ไฟล์:Gio lua 2.jpg|thumb|หมูยอ]]
=== การออกเสียง ===
{{th-pron}}
=== รากศัพท์ 1 ===
เทียบ{{cog|ltc|-}} {{ltc-l|諛}}; ร่วมเชื้อสายกับ{{cog|lo|ຍໍ}}, {{cog|nod|ᨿᩬᩴ}}, {{cog|kkh|ᨿᩳ}}, {{cog|khb|ᦍᦸ}}, {{cog|blt|ꪑꪷ}}, {{cog|twh|ꪑꪮ}}, {{cog|shn|ယေႃး}}, {{cog|phk|ယေႃ}}, {{cog|za|yoj}}
==== คำกริยา ====
{{th-verb}}
# [[กล่าว]][[คำ]][[เพื่อ]][[เชิดชู]] [[หรือ]]เพื่อ[[ให้]][[ชอบใจ]]
#: {{ux|th|ยอพระเกียรติ}}
#: {{ux|th|เด็กชอบให้ยอ}}
# [[ยก]]
#: {{ux|th|ยอกร}}
# ยกเพื่อ[[กระแทก]]
#: {{ux|th|ยอด้วยเข่า}}
=== รากศัพท์ 2 ===
==== คำนาม ====
{{th-noun}}
# [[ชื่อ]][[ไม้ต้น]][[ชนิด]] ''Morinda citrifolia'' L. [[ใน]][[วงศ์]] Rubiaceae [[แก่น]][[และ]][[ราก]][[สี]][[เหลือง]][[ใช้]][[ย้อม]][[ผ้า]] [[ผล]]และ[[ใบ]][[กิน]][[ได้]]
=== รากศัพท์ 3 ===
เทียบ{{cog|za|hoj|tr=ห้อ|t=บอกใหควายหยุด}}
==== คำกริยา ====
{{th-verb}}
# [[บอก]]ให้[[หยุด]] (ใช้[[แก่]][[วัว]][[ควาย]])
# ให้หยุด, หยุด
#: {{ux|th|ยอทัพ}}
# {{lb|th|โดยปริยาย}} [[เหนี่ยวรั้ง]][[ไม่]][[ไหว]]
#: {{ux|th|ยอไม่หยุด}}
=== รากศัพท์ 4 ===
==== คำนาม ====
{{th-noun}}
# [[เครื่อง]][[จับ]][[ปลา]]ชนิด[[หนึ่ง]] [[เป็น]][[ร่างแห]][[สี่เหลี่ยม]][[มี]][[คัน]][[สำหรับ]]ยก
===== ดูเพิ่ม =====
* {{l|th|ลอบ}}
* {{l|th|สวิง}}
* {{l|th|แห}}
* {{l|th|อวน}}
=== รากศัพท์ 5 ===
{{bor+|th|vi|giò||เนื้อบด}} สำเนียงเว้ว่า ''ยอ'' สำเนียงโฮจิมินห์ว่า ''หย่อ''
==== คำนาม ====
{{th-noun}}
# [[ของกิน]][[ทำ]][[ด้วย]][[เนื้อ]][[หมู]]หรือเนื้อ[[ไก่]][[ผสม]][[เครื่องปรุง]][[บด]][[แล้ว]][[อัด]]เป็น[[แท่ง]] และ[[นึ่ง]]ให้[[สุก]] [[เรียก]]ว่า หมูยอ ไก่ยอ
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/ɲɔː˧˧/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb|tl=1}}
# {{lb|nod|สกรรม}} {{alt|nod|ᨿᩬᩴ}}
j6wasmfiwyk47feutnalkxan15fkthj
onse
0
175042
5754336
1349644
2026-08-06T01:24:51Z
Octahedron80
267
/* ภาษาตากาล็อก */ เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754336
wikitext
text/x-wiki
== ภาษาเซบัวโน ==
{{number box|ceb}}
=== รากศัพท์ ===
{{bor+|ceb|es|once}}
=== การออกเสียง ===
* {{ceb-IPA}}
* {{hyph|ceb|on|se}}
=== เลข ===
{{ceb-num|ónse|b=+}}
# {{cln|ceb|cardinal numbers}} [[สิบเอ็ด]]
==== ลูกคำ ====
{{col|ceb|onseonse}}
== ภาษาดัตช์กลาง ==
=== รากศัพท์ ===
จาก{{inh|dum|odt|unsa}}, จาก{{inh|dum|gem-pro|*unseraz}}
=== การออกเสียง ===
* {{IPA|dum|/ˈonzə/}}
=== ตัวกำหนด ===
{{head|dum|ตัวกำหนด}}
# [[ของ]][[พวกเรา]]
#* {{RQ:dum:Schepenbrief|Descepenen van bochouta quedden alle degene die dese lettren sien selen i(n) '''onsen''' here.|The aldermen of Bochoute address all who will see this letter by '''our''' lord.}}
==== คำสืบทอด ====
* {{desc|nl|ons}}
* {{desc|li|ós}}
== ภาษาตากาล็อก ==
{{number box|tl}}
=== การออกเสียง ===
{{tl-pr|audio=LL-Q34057 (tgl)-Geoffjop0908-onse.wav}}
=== รากศัพท์ 1 ===
{{ety|tl|id=eleven|:bor|es:once|tree=1}}
{{bor+|tl|es|once}}, จาก{{der|tl|osp|onze}}, {{m|osp|ondze}}, จาก{{der|tl|la|ūndecim}}
==== เลข ====
{{tl-num|b=+}}
# [[สิบเอ็ด]]
#: {{syn|tl|labing-isa}}
===== ลูกคำ =====
{{col|tl|onse-onse|onsehin|ikaonse|onsehan}}
===== คำเกี่ยวข้อง =====
{{col3|tl|alas-onse|a-onse|uno}}
=== รากศัพท์ 2 ===
{{ety|tl|id=cheating}}
According to Zorc (1993), the word is possibly either:
* A Spanish-esque pronunciation pun sounding like {{der|tl|es|once||eleven}} (see etymology 1), จาก{{der|tl|en|once||one time}}, a loose calque of {{m|tl|makaisa||to get one of something; to be able to score a point; to fool someone}}. See also {{m|tl|wans}}.
* Related to the double line visuals of the written number 11, possibly about [[double-dealing]]. The sense can also be possibly about having a [[one up]] (an advantage) above a common arbitrary number 10.
See also {{m|tl|maisahan||to be able to get one-upped}}.
==== คำนาม ====
{{tl-noun|b=+}} {{tlb|tl|slang}}
# [[cheating]]; [[duping]]; [[swindling]]; [[fooling]]
#: {{syn|tl|daya|panlalamang|gulang|loko|wans<q:slang, dated>}}
===== ลูกคำ =====
{{col3|tl|onsehan|maonse|onsehin}}
=== อ่านเพิ่ม ===
* {{R:Pambansang Diksiyonaryo}}
* {{R:Tagalog Slang Dictionary|103}}
* {{R:Vicassan's Pilipino-English Dictionary 1978|page=1370}}
{{C|tl|สิบเอ็ด}}
== ภาษาบีโคลตอนกลาง ==
{{number box|bcl}}
=== รากศัพท์ ===
{{bor+|bcl|es|once}}
=== การออกเสียง ===
* {{bcl-IPA}}
* {{hyph|bcl|on|se}}
=== เลข ===
{{bcl-head|numeral|ónse|b=+}}
# [[สิบเอ็ด]]
#: {{syn|bcl|kagsaro}}
==== คำเกี่ยวข้อง ====
{{col|bcl|uno|una}}
{{cln|bcl|cardinal numbers}}
== ภาษาอาฟรีกานส์ ==
=== รากศัพท์ ===
จาก{{inh|af|nl|onze||ของพวกเรา}}, แต่ภายหลังตีความว่า เป็นไปได้ว่าเป็น {{m|af|ons}} {{m|af|se}}, to which attests the pronoun form ''ons'' {{m|af|s'n|s’n}} (“ours”), as well as dialectal Afrikaans {{m|af|julle}} ''se'' (“your”) and {{m|af|hulle}} ''se'' (“their”).
=== การออกเสียง ===
* {{IPA|af|/ˈɔnsə/}}
* {{audio|af|LL-Q14196 (afr)-Oesjaar-onse.wav}}
=== ตัวกำหนด ===
{{head|af|ตัวกำหนด}}
# {{lb|af|dialectal|otherwise|_|archaic}} {{alternative form of|af|ons}}: {{non-gloss|first-person plural possessive determiner.}}
==== ดูเพิ่ม ====
{{af-personal pronouns}}
== ภาษาอีโลกาโน ==
=== รูปแบบอื่น ===
* {{alt|ilo|once||obsolete|Abecedario orthography}}
=== รากศัพท์ ===
{{bor+|ilo|es|once}}
=== การออกเสียง ===
* {{ilo-IPA}}
* {{hyph|ilo|on|se}}
=== เลข ===
{{ilo-head|numeral|ónse|b=+}}
# เป็นไปได้ว่า
#: {{syn|ilo|sangapulo ket maysa}}
{{cln|ilo|cardinal numbers}}
8kfspe7z3kbbow5qcivhzim5ld72j2m
5754337
5754336
2026-08-06T01:25:42Z
Octahedron80
267
/* คำนาม */
5754337
wikitext
text/x-wiki
== ภาษาเซบัวโน ==
{{number box|ceb}}
=== รากศัพท์ ===
{{bor+|ceb|es|once}}
=== การออกเสียง ===
* {{ceb-IPA}}
* {{hyph|ceb|on|se}}
=== เลข ===
{{ceb-num|ónse|b=+}}
# {{cln|ceb|cardinal numbers}} [[สิบเอ็ด]]
==== ลูกคำ ====
{{col|ceb|onseonse}}
== ภาษาดัตช์กลาง ==
=== รากศัพท์ ===
จาก{{inh|dum|odt|unsa}}, จาก{{inh|dum|gem-pro|*unseraz}}
=== การออกเสียง ===
* {{IPA|dum|/ˈonzə/}}
=== ตัวกำหนด ===
{{head|dum|ตัวกำหนด}}
# [[ของ]][[พวกเรา]]
#* {{RQ:dum:Schepenbrief|Descepenen van bochouta quedden alle degene die dese lettren sien selen i(n) '''onsen''' here.|The aldermen of Bochoute address all who will see this letter by '''our''' lord.}}
==== คำสืบทอด ====
* {{desc|nl|ons}}
* {{desc|li|ós}}
== ภาษาตากาล็อก ==
{{number box|tl}}
=== การออกเสียง ===
{{tl-pr|audio=LL-Q34057 (tgl)-Geoffjop0908-onse.wav}}
=== รากศัพท์ 1 ===
{{ety|tl|id=eleven|:bor|es:once|tree=1}}
{{bor+|tl|es|once}}, จาก{{der|tl|osp|onze}}, {{m|osp|ondze}}, จาก{{der|tl|la|ūndecim}}
==== เลข ====
{{tl-num|b=+}}
# [[สิบเอ็ด]]
#: {{syn|tl|labing-isa}}
===== ลูกคำ =====
{{col|tl|onse-onse|onsehin|ikaonse|onsehan}}
===== คำเกี่ยวข้อง =====
{{col3|tl|alas-onse|a-onse|uno}}
=== รากศัพท์ 2 ===
{{ety|tl|id=cheating}}
According to Zorc (1993), the word is possibly either:
* A Spanish-esque pronunciation pun sounding like {{der|tl|es|once||eleven}} (see etymology 1), จาก{{der|tl|en|once||one time}}, a loose calque of {{m|tl|makaisa||to get one of something; to be able to score a point; to fool someone}}. See also {{m|tl|wans}}.
* Related to the double line visuals of the written number 11, possibly about [[double-dealing]]. The sense can also be possibly about having a [[one up]] (an advantage) above a common arbitrary number 10.
See also {{m|tl|maisahan||to be able to get one-upped}}.
==== คำนาม ====
{{tl-noun|b=+}} {{tlb|tl|slang}}
# [[การโกง]]; [[การหลอกลวง]]; [[การฉ้อโกง]]; [[การหลอกล่อ]]
#: {{syn|tl|daya|panlalamang|gulang|loko|wans<q:slang, dated>}}
===== ลูกคำ =====
{{col3|tl|onsehan|maonse|onsehin}}
=== อ่านเพิ่ม ===
* {{R:Pambansang Diksiyonaryo}}
* {{R:Tagalog Slang Dictionary|103}}
* {{R:Vicassan's Pilipino-English Dictionary 1978|page=1370}}
{{C|tl|สิบเอ็ด}}
== ภาษาบีโคลตอนกลาง ==
{{number box|bcl}}
=== รากศัพท์ ===
{{bor+|bcl|es|once}}
=== การออกเสียง ===
* {{bcl-IPA}}
* {{hyph|bcl|on|se}}
=== เลข ===
{{bcl-head|numeral|ónse|b=+}}
# [[สิบเอ็ด]]
#: {{syn|bcl|kagsaro}}
==== คำเกี่ยวข้อง ====
{{col|bcl|uno|una}}
{{cln|bcl|cardinal numbers}}
== ภาษาอาฟรีกานส์ ==
=== รากศัพท์ ===
จาก{{inh|af|nl|onze||ของพวกเรา}}, แต่ภายหลังตีความว่า เป็นไปได้ว่าเป็น {{m|af|ons}} {{m|af|se}}, to which attests the pronoun form ''ons'' {{m|af|s'n|s’n}} (“ours”), as well as dialectal Afrikaans {{m|af|julle}} ''se'' (“your”) and {{m|af|hulle}} ''se'' (“their”).
=== การออกเสียง ===
* {{IPA|af|/ˈɔnsə/}}
* {{audio|af|LL-Q14196 (afr)-Oesjaar-onse.wav}}
=== ตัวกำหนด ===
{{head|af|ตัวกำหนด}}
# {{lb|af|dialectal|otherwise|_|archaic}} {{alternative form of|af|ons}}: {{non-gloss|first-person plural possessive determiner.}}
==== ดูเพิ่ม ====
{{af-personal pronouns}}
== ภาษาอีโลกาโน ==
=== รูปแบบอื่น ===
* {{alt|ilo|once||obsolete|Abecedario orthography}}
=== รากศัพท์ ===
{{bor+|ilo|es|once}}
=== การออกเสียง ===
* {{ilo-IPA}}
* {{hyph|ilo|on|se}}
=== เลข ===
{{ilo-head|numeral|ónse|b=+}}
# เป็นไปได้ว่า
#: {{syn|ilo|sangapulo ket maysa}}
{{cln|ilo|cardinal numbers}}
48vw32mvicddmbx1o56aemfqeslvr4k
5754338
5754337
2026-08-06T01:26:01Z
Octahedron80
267
/* คำนาม */
5754338
wikitext
text/x-wiki
== ภาษาเซบัวโน ==
{{number box|ceb}}
=== รากศัพท์ ===
{{bor+|ceb|es|once}}
=== การออกเสียง ===
* {{ceb-IPA}}
* {{hyph|ceb|on|se}}
=== เลข ===
{{ceb-num|ónse|b=+}}
# {{cln|ceb|cardinal numbers}} [[สิบเอ็ด]]
==== ลูกคำ ====
{{col|ceb|onseonse}}
== ภาษาดัตช์กลาง ==
=== รากศัพท์ ===
จาก{{inh|dum|odt|unsa}}, จาก{{inh|dum|gem-pro|*unseraz}}
=== การออกเสียง ===
* {{IPA|dum|/ˈonzə/}}
=== ตัวกำหนด ===
{{head|dum|ตัวกำหนด}}
# [[ของ]][[พวกเรา]]
#* {{RQ:dum:Schepenbrief|Descepenen van bochouta quedden alle degene die dese lettren sien selen i(n) '''onsen''' here.|The aldermen of Bochoute address all who will see this letter by '''our''' lord.}}
==== คำสืบทอด ====
* {{desc|nl|ons}}
* {{desc|li|ós}}
== ภาษาตากาล็อก ==
{{number box|tl}}
=== การออกเสียง ===
{{tl-pr|audio=LL-Q34057 (tgl)-Geoffjop0908-onse.wav}}
=== รากศัพท์ 1 ===
{{ety|tl|id=eleven|:bor|es:once|tree=1}}
{{bor+|tl|es|once}}, จาก{{der|tl|osp|onze}}, {{m|osp|ondze}}, จาก{{der|tl|la|ūndecim}}
==== เลข ====
{{tl-num|b=+}}
# [[สิบเอ็ด]]
#: {{syn|tl|labing-isa}}
===== ลูกคำ =====
{{col|tl|onse-onse|onsehin|ikaonse|onsehan}}
===== คำเกี่ยวข้อง =====
{{col3|tl|alas-onse|a-onse|uno}}
=== รากศัพท์ 2 ===
{{ety|tl|id=cheating}}
According to Zorc (1993), the word is possibly either:
* A Spanish-esque pronunciation pun sounding like {{der|tl|es|once||eleven}} (see etymology 1), จาก{{der|tl|en|once||one time}}, a loose calque of {{m|tl|makaisa||to get one of something; to be able to score a point; to fool someone}}. See also {{m|tl|wans}}.
* Related to the double line visuals of the written number 11, possibly about [[double-dealing]]. The sense can also be possibly about having a [[one up]] (an advantage) above a common arbitrary number 10.
See also {{m|tl|maisahan||to be able to get one-upped}}.
==== คำนาม ====
{{tl-noun|b=+}} {{tlb|tl|slang}}
# [[การโกง]]; [[การหลอกลวง]]; [[การฉ้อโกง]]; [[การหลอกล่อ]]
#: {{syn|tl|daya|panlalamang|gulang|loko|wans<q:สแลง, ล้าสมัย>}}
===== ลูกคำ =====
{{col3|tl|onsehan|maonse|onsehin}}
=== อ่านเพิ่ม ===
* {{R:Pambansang Diksiyonaryo}}
* {{R:Tagalog Slang Dictionary|103}}
* {{R:Vicassan's Pilipino-English Dictionary 1978|page=1370}}
{{C|tl|สิบเอ็ด}}
== ภาษาบีโคลตอนกลาง ==
{{number box|bcl}}
=== รากศัพท์ ===
{{bor+|bcl|es|once}}
=== การออกเสียง ===
* {{bcl-IPA}}
* {{hyph|bcl|on|se}}
=== เลข ===
{{bcl-head|numeral|ónse|b=+}}
# [[สิบเอ็ด]]
#: {{syn|bcl|kagsaro}}
==== คำเกี่ยวข้อง ====
{{col|bcl|uno|una}}
{{cln|bcl|cardinal numbers}}
== ภาษาอาฟรีกานส์ ==
=== รากศัพท์ ===
จาก{{inh|af|nl|onze||ของพวกเรา}}, แต่ภายหลังตีความว่า เป็นไปได้ว่าเป็น {{m|af|ons}} {{m|af|se}}, to which attests the pronoun form ''ons'' {{m|af|s'n|s’n}} (“ours”), as well as dialectal Afrikaans {{m|af|julle}} ''se'' (“your”) and {{m|af|hulle}} ''se'' (“their”).
=== การออกเสียง ===
* {{IPA|af|/ˈɔnsə/}}
* {{audio|af|LL-Q14196 (afr)-Oesjaar-onse.wav}}
=== ตัวกำหนด ===
{{head|af|ตัวกำหนด}}
# {{lb|af|dialectal|otherwise|_|archaic}} {{alternative form of|af|ons}}: {{non-gloss|first-person plural possessive determiner.}}
==== ดูเพิ่ม ====
{{af-personal pronouns}}
== ภาษาอีโลกาโน ==
=== รูปแบบอื่น ===
* {{alt|ilo|once||obsolete|Abecedario orthography}}
=== รากศัพท์ ===
{{bor+|ilo|es|once}}
=== การออกเสียง ===
* {{ilo-IPA}}
* {{hyph|ilo|on|se}}
=== เลข ===
{{ilo-head|numeral|ónse|b=+}}
# เป็นไปได้ว่า
#: {{syn|ilo|sangapulo ket maysa}}
{{cln|ilo|cardinal numbers}}
8efetsvv12z8pkyipluppm8ghbc451y
5754339
5754338
2026-08-06T01:28:11Z
Octahedron80
267
/* รากศัพท์ */
5754339
wikitext
text/x-wiki
== ภาษาเซบัวโน ==
{{number box|ceb}}
=== รากศัพท์ ===
{{bor+|ceb|es|once}}
=== การออกเสียง ===
* {{ceb-IPA}}
* {{hyph|ceb|on|se}}
=== เลข ===
{{ceb-num|ónse|b=+}}
# {{cln|ceb|cardinal numbers}} [[สิบเอ็ด]]
==== ลูกคำ ====
{{col|ceb|onseonse}}
== ภาษาดัตช์กลาง ==
=== รากศัพท์ ===
จาก{{inh|dum|odt|unsa}}, จาก{{inh|dum|gem-pro|*unseraz}}
=== การออกเสียง ===
* {{IPA|dum|/ˈonzə/}}
=== ตัวกำหนด ===
{{head|dum|ตัวกำหนด}}
# [[ของ]][[พวกเรา]]
#* {{RQ:dum:Schepenbrief|Descepenen van bochouta quedden alle degene die dese lettren sien selen i(n) '''onsen''' here.|The aldermen of Bochoute address all who will see this letter by '''our''' lord.}}
==== คำสืบทอด ====
* {{desc|nl|ons}}
* {{desc|li|ós}}
== ภาษาตากาล็อก ==
{{number box|tl}}
=== การออกเสียง ===
{{tl-pr|audio=LL-Q34057 (tgl)-Geoffjop0908-onse.wav}}
=== รากศัพท์ 1 ===
{{ety|tl|id=eleven|:bor|es:once|tree=1}}
{{bor+|tl|es|once}}, จาก{{der|tl|osp|onze}}, {{m|osp|ondze}}, จาก{{der|tl|la|ūndecim}}
==== เลข ====
{{tl-num|b=+}}
# [[สิบเอ็ด]]
#: {{syn|tl|labing-isa}}
===== ลูกคำ =====
{{col|tl|onse-onse|onsehin|ikaonse|onsehan}}
===== คำเกี่ยวข้อง =====
{{col3|tl|alas-onse|a-onse|uno}}
=== รากศัพท์ 2 ===
{{ety|tl|id=cheating}}
According to Zorc (1993), the word is possibly either:
* A Spanish-esque pronunciation pun sounding like {{der|tl|es|once||eleven}} (see etymology 1), จาก{{der|tl|en|once||one time}}, a loose calque of {{m|tl|makaisa||to get one of something; to be able to score a point; to fool someone}}. See also {{m|tl|wans}}.
* Related to the double line visuals of the written number 11, possibly about [[double-dealing]]. The sense can also be possibly about having a [[one up]] (an advantage) above a common arbitrary number 10.
See also {{m|tl|maisahan||to be able to get one-upped}}.
==== คำนาม ====
{{tl-noun|b=+}} {{tlb|tl|slang}}
# [[การโกง]]; [[การหลอกลวง]]; [[การฉ้อโกง]]; [[การหลอกล่อ]]
#: {{syn|tl|daya|panlalamang|gulang|loko|wans<q:สแลง, ล้าสมัย>}}
===== ลูกคำ =====
{{col3|tl|onsehan|maonse|onsehin}}
=== อ่านเพิ่ม ===
* {{R:Pambansang Diksiyonaryo}}
* {{R:Tagalog Slang Dictionary|103}}
* {{R:Vicassan's Pilipino-English Dictionary 1978|page=1370}}
{{C|tl|สิบเอ็ด}}
== ภาษาบีโคลตอนกลาง ==
{{number box|bcl}}
=== รากศัพท์ ===
{{bor+|bcl|es|once}}
=== การออกเสียง ===
* {{bcl-IPA}}
* {{hyph|bcl|on|se}}
=== เลข ===
{{bcl-head|numeral|ónse|b=+}}
# [[สิบเอ็ด]]
#: {{syn|bcl|kagsaro}}
==== คำเกี่ยวข้อง ====
{{col|bcl|uno|una}}
{{cln|bcl|cardinal numbers}}
== ภาษาอาฟรีกานส์ ==
=== รากศัพท์ ===
จาก{{inh|af|nl|onze||ของพวกเรา}}, แต่ภายหลังตีความว่า เป็นไปได้ว่าเป็น {{m|af|ons}} {{m|af|se}}, ซึ่งเห็นได้จากรูปสรรพนาม ''ons'' {{m|af|s'n|s’n}} (“ของพวกเรา (กรรม)”) เช่นเดียวกับคำอาฟรีกานส์ถิ่น {{m|af|julle}} ''se'' (“ของคุณ”) และ {{m|af|hulle}} ''se'' (“ของพวกเขา”)
=== การออกเสียง ===
* {{IPA|af|/ˈɔnsə/}}
* {{audio|af|LL-Q14196 (afr)-Oesjaar-onse.wav}}
=== ตัวกำหนด ===
{{head|af|ตัวกำหนด}}
# {{lb|af|dialectal|otherwise|_|archaic}} {{alternative form of|af|ons}}: {{non-gloss|first-person plural possessive determiner.}}
==== ดูเพิ่ม ====
{{af-personal pronouns}}
== ภาษาอีโลกาโน ==
=== รูปแบบอื่น ===
* {{alt|ilo|once||obsolete|Abecedario orthography}}
=== รากศัพท์ ===
{{bor+|ilo|es|once}}
=== การออกเสียง ===
* {{ilo-IPA}}
* {{hyph|ilo|on|se}}
=== เลข ===
{{ilo-head|numeral|ónse|b=+}}
# เป็นไปได้ว่า
#: {{syn|ilo|sangapulo ket maysa}}
{{cln|ilo|cardinal numbers}}
p52u7dvdyw89zbtafedrym6kjmqdw33
5754340
5754339
2026-08-06T01:29:15Z
Octahedron80
267
/* ตัวกำหนด */
5754340
wikitext
text/x-wiki
== ภาษาเซบัวโน ==
{{number box|ceb}}
=== รากศัพท์ ===
{{bor+|ceb|es|once}}
=== การออกเสียง ===
* {{ceb-IPA}}
* {{hyph|ceb|on|se}}
=== เลข ===
{{ceb-num|ónse|b=+}}
# {{cln|ceb|cardinal numbers}} [[สิบเอ็ด]]
==== ลูกคำ ====
{{col|ceb|onseonse}}
== ภาษาดัตช์กลาง ==
=== รากศัพท์ ===
จาก{{inh|dum|odt|unsa}}, จาก{{inh|dum|gem-pro|*unseraz}}
=== การออกเสียง ===
* {{IPA|dum|/ˈonzə/}}
=== ตัวกำหนด ===
{{head|dum|ตัวกำหนด}}
# [[ของ]][[พวกเรา]]
#* {{RQ:dum:Schepenbrief|Descepenen van bochouta quedden alle degene die dese lettren sien selen i(n) '''onsen''' here.|The aldermen of Bochoute address all who will see this letter by '''our''' lord.}}
==== คำสืบทอด ====
* {{desc|nl|ons}}
* {{desc|li|ós}}
== ภาษาตากาล็อก ==
{{number box|tl}}
=== การออกเสียง ===
{{tl-pr|audio=LL-Q34057 (tgl)-Geoffjop0908-onse.wav}}
=== รากศัพท์ 1 ===
{{ety|tl|id=eleven|:bor|es:once|tree=1}}
{{bor+|tl|es|once}}, จาก{{der|tl|osp|onze}}, {{m|osp|ondze}}, จาก{{der|tl|la|ūndecim}}
==== เลข ====
{{tl-num|b=+}}
# [[สิบเอ็ด]]
#: {{syn|tl|labing-isa}}
===== ลูกคำ =====
{{col|tl|onse-onse|onsehin|ikaonse|onsehan}}
===== คำเกี่ยวข้อง =====
{{col3|tl|alas-onse|a-onse|uno}}
=== รากศัพท์ 2 ===
{{ety|tl|id=cheating}}
According to Zorc (1993), the word is possibly either:
* A Spanish-esque pronunciation pun sounding like {{der|tl|es|once||eleven}} (see etymology 1), จาก{{der|tl|en|once||one time}}, a loose calque of {{m|tl|makaisa||to get one of something; to be able to score a point; to fool someone}}. See also {{m|tl|wans}}.
* Related to the double line visuals of the written number 11, possibly about [[double-dealing]]. The sense can also be possibly about having a [[one up]] (an advantage) above a common arbitrary number 10.
See also {{m|tl|maisahan||to be able to get one-upped}}.
==== คำนาม ====
{{tl-noun|b=+}} {{tlb|tl|slang}}
# [[การโกง]]; [[การหลอกลวง]]; [[การฉ้อโกง]]; [[การหลอกล่อ]]
#: {{syn|tl|daya|panlalamang|gulang|loko|wans<q:สแลง, ล้าสมัย>}}
===== ลูกคำ =====
{{col3|tl|onsehan|maonse|onsehin}}
=== อ่านเพิ่ม ===
* {{R:Pambansang Diksiyonaryo}}
* {{R:Tagalog Slang Dictionary|103}}
* {{R:Vicassan's Pilipino-English Dictionary 1978|page=1370}}
{{C|tl|สิบเอ็ด}}
== ภาษาบีโคลตอนกลาง ==
{{number box|bcl}}
=== รากศัพท์ ===
{{bor+|bcl|es|once}}
=== การออกเสียง ===
* {{bcl-IPA}}
* {{hyph|bcl|on|se}}
=== เลข ===
{{bcl-head|numeral|ónse|b=+}}
# [[สิบเอ็ด]]
#: {{syn|bcl|kagsaro}}
==== คำเกี่ยวข้อง ====
{{col|bcl|uno|una}}
{{cln|bcl|cardinal numbers}}
== ภาษาอาฟรีกานส์ ==
=== รากศัพท์ ===
จาก{{inh|af|nl|onze||ของพวกเรา}}, แต่ภายหลังตีความว่า เป็นไปได้ว่าเป็น {{m|af|ons}} {{m|af|se}}, ซึ่งเห็นได้จากรูปสรรพนาม ''ons'' {{m|af|s'n|s’n}} (“ของพวกเรา (กรรม)”) เช่นเดียวกับคำอาฟรีกานส์ถิ่น {{m|af|julle}} ''se'' (“ของคุณ”) และ {{m|af|hulle}} ''se'' (“ของพวกเขา”)
=== การออกเสียง ===
* {{IPA|af|/ˈɔnsə/}}
* {{audio|af|LL-Q14196 (afr)-Oesjaar-onse.wav}}
=== ตัวกำหนด ===
{{head|af|ตัวกำหนด}}
# {{lb|af|dialectal|otherwise|_|archaic}} {{alternative form of|af|ons}}: {{non-gloss|ตัวกำหนดบอกเจ้าของบุรุษที่หนึ่งพหูพจน์}}
==== ดูเพิ่ม ====
{{af-personal pronouns}}
== ภาษาอีโลกาโน ==
=== รูปแบบอื่น ===
* {{alt|ilo|once||obsolete|Abecedario orthography}}
=== รากศัพท์ ===
{{bor+|ilo|es|once}}
=== การออกเสียง ===
* {{ilo-IPA}}
* {{hyph|ilo|on|se}}
=== เลข ===
{{ilo-head|numeral|ónse|b=+}}
# เป็นไปได้ว่า
#: {{syn|ilo|sangapulo ket maysa}}
{{cln|ilo|cardinal numbers}}
0lja0oavwh54tkkwggbg160xqkracua
5754341
5754340
2026-08-06T01:31:12Z
Octahedron80
267
/* ตัวกำหนด */
5754341
wikitext
text/x-wiki
== ภาษาเซบัวโน ==
{{number box|ceb}}
=== รากศัพท์ ===
{{bor+|ceb|es|once}}
=== การออกเสียง ===
* {{ceb-IPA}}
* {{hyph|ceb|on|se}}
=== เลข ===
{{ceb-num|ónse|b=+}}
# {{cln|ceb|cardinal numbers}} [[สิบเอ็ด]]
==== ลูกคำ ====
{{col|ceb|onseonse}}
== ภาษาดัตช์กลาง ==
=== รากศัพท์ ===
จาก{{inh|dum|odt|unsa}}, จาก{{inh|dum|gem-pro|*unseraz}}
=== การออกเสียง ===
* {{IPA|dum|/ˈonzə/}}
=== ตัวกำหนด ===
{{head|dum|ตัวกำหนด}}
# [[ของ]][[พวกเรา]]
#* {{RQ:dum:Schepenbrief|Descepenen van bochouta quedden alle degene die dese lettren sien selen i(n) '''onsen''' here.|The aldermen of Bochoute address all who will see this letter by '''our''' lord.}}
==== คำสืบทอด ====
* {{desc|nl|ons}}
* {{desc|li|ós}}
== ภาษาตากาล็อก ==
{{number box|tl}}
=== การออกเสียง ===
{{tl-pr|audio=LL-Q34057 (tgl)-Geoffjop0908-onse.wav}}
=== รากศัพท์ 1 ===
{{ety|tl|id=eleven|:bor|es:once|tree=1}}
{{bor+|tl|es|once}}, จาก{{der|tl|osp|onze}}, {{m|osp|ondze}}, จาก{{der|tl|la|ūndecim}}
==== เลข ====
{{tl-num|b=+}}
# [[สิบเอ็ด]]
#: {{syn|tl|labing-isa}}
===== ลูกคำ =====
{{col|tl|onse-onse|onsehin|ikaonse|onsehan}}
===== คำเกี่ยวข้อง =====
{{col3|tl|alas-onse|a-onse|uno}}
=== รากศัพท์ 2 ===
{{ety|tl|id=cheating}}
According to Zorc (1993), the word is possibly either:
* A Spanish-esque pronunciation pun sounding like {{der|tl|es|once||eleven}} (see etymology 1), จาก{{der|tl|en|once||one time}}, a loose calque of {{m|tl|makaisa||to get one of something; to be able to score a point; to fool someone}}. See also {{m|tl|wans}}.
* Related to the double line visuals of the written number 11, possibly about [[double-dealing]]. The sense can also be possibly about having a [[one up]] (an advantage) above a common arbitrary number 10.
See also {{m|tl|maisahan||to be able to get one-upped}}.
==== คำนาม ====
{{tl-noun|b=+}} {{tlb|tl|slang}}
# [[การโกง]]; [[การหลอกลวง]]; [[การฉ้อโกง]]; [[การหลอกล่อ]]
#: {{syn|tl|daya|panlalamang|gulang|loko|wans<q:สแลง, ล้าสมัย>}}
===== ลูกคำ =====
{{col3|tl|onsehan|maonse|onsehin}}
=== อ่านเพิ่ม ===
* {{R:Pambansang Diksiyonaryo}}
* {{R:Tagalog Slang Dictionary|103}}
* {{R:Vicassan's Pilipino-English Dictionary 1978|page=1370}}
{{C|tl|สิบเอ็ด}}
== ภาษาบีโคลตอนกลาง ==
{{number box|bcl}}
=== รากศัพท์ ===
{{bor+|bcl|es|once}}
=== การออกเสียง ===
* {{bcl-IPA}}
* {{hyph|bcl|on|se}}
=== เลข ===
{{bcl-head|numeral|ónse|b=+}}
# [[สิบเอ็ด]]
#: {{syn|bcl|kagsaro}}
==== คำเกี่ยวข้อง ====
{{col|bcl|uno|una}}
{{cln|bcl|cardinal numbers}}
== ภาษาอาฟรีกานส์ ==
=== รากศัพท์ ===
จาก{{inh|af|nl|onze||ของพวกเรา}}, แต่ภายหลังตีความว่า เป็นไปได้ว่าเป็น {{m|af|ons}} {{m|af|se}}, ซึ่งเห็นได้จากรูปสรรพนาม ''ons'' {{m|af|s'n|s’n}} (“ของพวกเรา (กรรม)”) เช่นเดียวกับคำอาฟรีกานส์ถิ่น {{m|af|julle}} ''se'' (“ของคุณ”) และ {{m|af|hulle}} ''se'' (“ของพวกเขา”)
=== การออกเสียง ===
* {{IPA|af|/ˈɔnsə/}}
* {{audio|af|LL-Q14196 (afr)-Oesjaar-onse.wav}}
=== ตัวกำหนด ===
{{head|af|ตัวกำหนด}}
# {{lb|af|dialectal|มิฉะนั้น|_|archaic}} {{alternative form of|af|ons}}: {{non-gloss|ตัวกำหนดบอกเจ้าของบุรุษที่หนึ่งพหูพจน์}}
==== ดูเพิ่ม ====
{{af-personal pronouns}}
== ภาษาอีโลกาโน ==
=== รูปแบบอื่น ===
* {{alt|ilo|once||obsolete|Abecedario orthography}}
=== รากศัพท์ ===
{{bor+|ilo|es|once}}
=== การออกเสียง ===
* {{ilo-IPA}}
* {{hyph|ilo|on|se}}
=== เลข ===
{{ilo-head|numeral|ónse|b=+}}
# เป็นไปได้ว่า
#: {{syn|ilo|sangapulo ket maysa}}
{{cln|ilo|cardinal numbers}}
qowms14jy1if1pnv6nrflqfulvhc3f1
5754342
5754341
2026-08-06T01:32:07Z
Octahedron80
267
/* เลข */
5754342
wikitext
text/x-wiki
== ภาษาเซบัวโน ==
{{number box|ceb}}
=== รากศัพท์ ===
{{bor+|ceb|es|once}}
=== การออกเสียง ===
* {{ceb-IPA}}
* {{hyph|ceb|on|se}}
=== เลข ===
{{ceb-num|ónse|b=+}}
# {{cln|ceb|cardinal numbers}} [[สิบเอ็ด]]
==== ลูกคำ ====
{{col|ceb|onseonse}}
== ภาษาดัตช์กลาง ==
=== รากศัพท์ ===
จาก{{inh|dum|odt|unsa}}, จาก{{inh|dum|gem-pro|*unseraz}}
=== การออกเสียง ===
* {{IPA|dum|/ˈonzə/}}
=== ตัวกำหนด ===
{{head|dum|ตัวกำหนด}}
# [[ของ]][[พวกเรา]]
#* {{RQ:dum:Schepenbrief|Descepenen van bochouta quedden alle degene die dese lettren sien selen i(n) '''onsen''' here.|The aldermen of Bochoute address all who will see this letter by '''our''' lord.}}
==== คำสืบทอด ====
* {{desc|nl|ons}}
* {{desc|li|ós}}
== ภาษาตากาล็อก ==
{{number box|tl}}
=== การออกเสียง ===
{{tl-pr|audio=LL-Q34057 (tgl)-Geoffjop0908-onse.wav}}
=== รากศัพท์ 1 ===
{{ety|tl|id=eleven|:bor|es:once|tree=1}}
{{bor+|tl|es|once}}, จาก{{der|tl|osp|onze}}, {{m|osp|ondze}}, จาก{{der|tl|la|ūndecim}}
==== เลข ====
{{tl-num|b=+}}
# [[สิบเอ็ด]]
#: {{syn|tl|labing-isa}}
===== ลูกคำ =====
{{col|tl|onse-onse|onsehin|ikaonse|onsehan}}
===== คำเกี่ยวข้อง =====
{{col3|tl|alas-onse|a-onse|uno}}
=== รากศัพท์ 2 ===
{{ety|tl|id=cheating}}
According to Zorc (1993), the word is possibly either:
* A Spanish-esque pronunciation pun sounding like {{der|tl|es|once||eleven}} (see etymology 1), จาก{{der|tl|en|once||one time}}, a loose calque of {{m|tl|makaisa||to get one of something; to be able to score a point; to fool someone}}. See also {{m|tl|wans}}.
* Related to the double line visuals of the written number 11, possibly about [[double-dealing]]. The sense can also be possibly about having a [[one up]] (an advantage) above a common arbitrary number 10.
See also {{m|tl|maisahan||to be able to get one-upped}}.
==== คำนาม ====
{{tl-noun|b=+}} {{tlb|tl|slang}}
# [[การโกง]]; [[การหลอกลวง]]; [[การฉ้อโกง]]; [[การหลอกล่อ]]
#: {{syn|tl|daya|panlalamang|gulang|loko|wans<q:สแลง, ล้าสมัย>}}
===== ลูกคำ =====
{{col3|tl|onsehan|maonse|onsehin}}
=== อ่านเพิ่ม ===
* {{R:Pambansang Diksiyonaryo}}
* {{R:Tagalog Slang Dictionary|103}}
* {{R:Vicassan's Pilipino-English Dictionary 1978|page=1370}}
{{C|tl|สิบเอ็ด}}
== ภาษาบีโคลตอนกลาง ==
{{number box|bcl}}
=== รากศัพท์ ===
{{bor+|bcl|es|once}}
=== การออกเสียง ===
* {{bcl-IPA}}
* {{hyph|bcl|on|se}}
=== เลข ===
{{bcl-head|numeral|ónse|b=+}}
# [[สิบเอ็ด]]
#: {{syn|bcl|kagsaro}}
==== คำเกี่ยวข้อง ====
{{col|bcl|uno|una}}
{{cln|bcl|cardinal numbers}}
== ภาษาอาฟรีกานส์ ==
=== รากศัพท์ ===
จาก{{inh|af|nl|onze||ของพวกเรา}}, แต่ภายหลังตีความว่า เป็นไปได้ว่าเป็น {{m|af|ons}} {{m|af|se}}, ซึ่งเห็นได้จากรูปสรรพนาม ''ons'' {{m|af|s'n|s’n}} (“ของพวกเรา (กรรม)”) เช่นเดียวกับคำอาฟรีกานส์ถิ่น {{m|af|julle}} ''se'' (“ของคุณ”) และ {{m|af|hulle}} ''se'' (“ของพวกเขา”)
=== การออกเสียง ===
* {{IPA|af|/ˈɔnsə/}}
* {{audio|af|LL-Q14196 (afr)-Oesjaar-onse.wav}}
=== ตัวกำหนด ===
{{head|af|ตัวกำหนด}}
# {{lb|af|dialectal|มิฉะนั้น|_|archaic}} {{alternative form of|af|ons}}: {{non-gloss|ตัวกำหนดบอกเจ้าของบุรุษที่หนึ่งพหูพจน์}}
==== ดูเพิ่ม ====
{{af-personal pronouns}}
== ภาษาอีโลกาโน ==
=== รูปแบบอื่น ===
* {{alt|ilo|once||obsolete|Abecedario orthography}}
=== รากศัพท์ ===
{{bor+|ilo|es|once}}
=== การออกเสียง ===
* {{ilo-IPA}}
* {{hyph|ilo|on|se}}
=== เลข ===
{{ilo-head|numeral|ónse|b=+}}
# [[สิบเอ็ด]]
#: {{syn|ilo|sangapulo ket maysa}}
{{cln|ilo|cardinal numbers}}
1xoozzovr7l9ahdaihgdvlrntg1jcfz
5754345
5754342
2026-08-06T01:44:37Z
Octahedron80
267
/* รากศัพท์ 2 */
5754345
wikitext
text/x-wiki
== ภาษาเซบัวโน ==
{{number box|ceb}}
=== รากศัพท์ ===
{{bor+|ceb|es|once}}
=== การออกเสียง ===
* {{ceb-IPA}}
* {{hyph|ceb|on|se}}
=== เลข ===
{{ceb-num|ónse|b=+}}
# {{cln|ceb|cardinal numbers}} [[สิบเอ็ด]]
==== ลูกคำ ====
{{col|ceb|onseonse}}
== ภาษาดัตช์กลาง ==
=== รากศัพท์ ===
จาก{{inh|dum|odt|unsa}}, จาก{{inh|dum|gem-pro|*unseraz}}
=== การออกเสียง ===
* {{IPA|dum|/ˈonzə/}}
=== ตัวกำหนด ===
{{head|dum|ตัวกำหนด}}
# [[ของ]][[พวกเรา]]
#* {{RQ:dum:Schepenbrief|Descepenen van bochouta quedden alle degene die dese lettren sien selen i(n) '''onsen''' here.|The aldermen of Bochoute address all who will see this letter by '''our''' lord.}}
==== คำสืบทอด ====
* {{desc|nl|ons}}
* {{desc|li|ós}}
== ภาษาตากาล็อก ==
{{number box|tl}}
=== การออกเสียง ===
{{tl-pr|audio=LL-Q34057 (tgl)-Geoffjop0908-onse.wav}}
=== รากศัพท์ 1 ===
{{ety|tl|id=eleven|:bor|es:once|tree=1}}
{{bor+|tl|es|once}}, จาก{{der|tl|osp|onze}}, {{m|osp|ondze}}, จาก{{der|tl|la|ūndecim}}
==== เลข ====
{{tl-num|b=+}}
# [[สิบเอ็ด]]
#: {{syn|tl|labing-isa}}
===== ลูกคำ =====
{{col|tl|onse-onse|onsehin|ikaonse|onsehan}}
===== คำเกี่ยวข้อง =====
{{col3|tl|alas-onse|a-onse|uno}}
=== รากศัพท์ 2 ===
{{ety|tl|id=cheating}}
According to Zorc (1993), the word is possibly either:
* A Spanish-esque pronunciation pun sounding like {{der|tl|es|once||eleven}} (see etymology 1), จาก{{der|tl|en|once||one time}}, a loose calque of {{m|tl|makaisa||to get one of something; to be able to score a point; to fool someone}}. See also {{m|tl|wans}}.
* Related to the double line visuals of the written number 11, possibly about [[double-dealing]]. The sense can also be possibly about having a [[one up]] (an advantage) above a common arbitrary number 10.
See also {{m|tl|maisahan||to be able to get one-upped}}.
ตามที่ Zorc (1993) ระบุ คำนี้เป็นไปได้ว่า:
* เป็นการเล่นคำที่ออกเสียงแบบภาษาสเปนคล้ายกับคำว่า {{der|tl|es|once||สิบเอ็ด}} (รากศัพท์ 1), จาก{{der|tl|en|once||หนึ่งครั้ง}}, ซึ่งเป็นการแปลตรงตัวอย่างหลวม ๆ จาก {{m|tl|makaisa||ได้เปรียบ; สามารถทำคะแนนได้; หลอกลวงผู้อื่น”); ดูเพิ่มที่ {{m|tl|wans}}
* เกี่ยวข้องกับภาพเส้นตรงคู่ของตัวเลข 11 ที่เขียน อาจหมายถึงการเสแสร้งกับทั้งสองฝ่าย ([[double-dealing]]) ความหมายอีกอย่างหนึ่งอาจหมายถึงการมีข้อได้เปรียบ ([[one up]]) เหนือกว่าตัวเลข 10 ทั่วไป
ดูเพิ่มที่ {{m|tl|maisahan||สามารถถูกเอาชนะได้}}
==== คำนาม ====
{{tl-noun|b=+}} {{tlb|tl|slang}}
# [[การโกง]]; [[การหลอกลวง]]; [[การฉ้อโกง]]; [[การหลอกล่อ]]
#: {{syn|tl|daya|panlalamang|gulang|loko|wans<q:สแลง, ล้าสมัย>}}
===== ลูกคำ =====
{{col3|tl|onsehan|maonse|onsehin}}
=== อ่านเพิ่ม ===
* {{R:Pambansang Diksiyonaryo}}
* {{R:Tagalog Slang Dictionary|103}}
* {{R:Vicassan's Pilipino-English Dictionary 1978|page=1370}}
{{C|tl|สิบเอ็ด}}
== ภาษาบีโคลตอนกลาง ==
{{number box|bcl}}
=== รากศัพท์ ===
{{bor+|bcl|es|once}}
=== การออกเสียง ===
* {{bcl-IPA}}
* {{hyph|bcl|on|se}}
=== เลข ===
{{bcl-head|numeral|ónse|b=+}}
# [[สิบเอ็ด]]
#: {{syn|bcl|kagsaro}}
==== คำเกี่ยวข้อง ====
{{col|bcl|uno|una}}
{{cln|bcl|cardinal numbers}}
== ภาษาอาฟรีกานส์ ==
=== รากศัพท์ ===
จาก{{inh|af|nl|onze||ของพวกเรา}}, แต่ภายหลังตีความว่า เป็นไปได้ว่าเป็น {{m|af|ons}} {{m|af|se}}, ซึ่งเห็นได้จากรูปสรรพนาม ''ons'' {{m|af|s'n|s’n}} (“ของพวกเรา (กรรม)”) เช่นเดียวกับคำอาฟรีกานส์ถิ่น {{m|af|julle}} ''se'' (“ของคุณ”) และ {{m|af|hulle}} ''se'' (“ของพวกเขา”)
=== การออกเสียง ===
* {{IPA|af|/ˈɔnsə/}}
* {{audio|af|LL-Q14196 (afr)-Oesjaar-onse.wav}}
=== ตัวกำหนด ===
{{head|af|ตัวกำหนด}}
# {{lb|af|dialectal|มิฉะนั้น|_|archaic}} {{alternative form of|af|ons}}: {{non-gloss|ตัวกำหนดบอกเจ้าของบุรุษที่หนึ่งพหูพจน์}}
==== ดูเพิ่ม ====
{{af-personal pronouns}}
== ภาษาอีโลกาโน ==
=== รูปแบบอื่น ===
* {{alt|ilo|once||obsolete|Abecedario orthography}}
=== รากศัพท์ ===
{{bor+|ilo|es|once}}
=== การออกเสียง ===
* {{ilo-IPA}}
* {{hyph|ilo|on|se}}
=== เลข ===
{{ilo-head|numeral|ónse|b=+}}
# [[สิบเอ็ด]]
#: {{syn|ilo|sangapulo ket maysa}}
{{cln|ilo|cardinal numbers}}
7s5jcumcv8y0oayqrlm9h3smjy1vs5x
5754346
5754345
2026-08-06T01:45:18Z
Octahedron80
267
/* รากศัพท์ 2 */
5754346
wikitext
text/x-wiki
== ภาษาเซบัวโน ==
{{number box|ceb}}
=== รากศัพท์ ===
{{bor+|ceb|es|once}}
=== การออกเสียง ===
* {{ceb-IPA}}
* {{hyph|ceb|on|se}}
=== เลข ===
{{ceb-num|ónse|b=+}}
# {{cln|ceb|cardinal numbers}} [[สิบเอ็ด]]
==== ลูกคำ ====
{{col|ceb|onseonse}}
== ภาษาดัตช์กลาง ==
=== รากศัพท์ ===
จาก{{inh|dum|odt|unsa}}, จาก{{inh|dum|gem-pro|*unseraz}}
=== การออกเสียง ===
* {{IPA|dum|/ˈonzə/}}
=== ตัวกำหนด ===
{{head|dum|ตัวกำหนด}}
# [[ของ]][[พวกเรา]]
#* {{RQ:dum:Schepenbrief|Descepenen van bochouta quedden alle degene die dese lettren sien selen i(n) '''onsen''' here.|The aldermen of Bochoute address all who will see this letter by '''our''' lord.}}
==== คำสืบทอด ====
* {{desc|nl|ons}}
* {{desc|li|ós}}
== ภาษาตากาล็อก ==
{{number box|tl}}
=== การออกเสียง ===
{{tl-pr|audio=LL-Q34057 (tgl)-Geoffjop0908-onse.wav}}
=== รากศัพท์ 1 ===
{{ety|tl|id=eleven|:bor|es:once|tree=1}}
{{bor+|tl|es|once}}, จาก{{der|tl|osp|onze}}, {{m|osp|ondze}}, จาก{{der|tl|la|ūndecim}}
==== เลข ====
{{tl-num|b=+}}
# [[สิบเอ็ด]]
#: {{syn|tl|labing-isa}}
===== ลูกคำ =====
{{col|tl|onse-onse|onsehin|ikaonse|onsehan}}
===== คำเกี่ยวข้อง =====
{{col3|tl|alas-onse|a-onse|uno}}
=== รากศัพท์ 2 ===
{{ety|tl|id=cheating}}
ตามที่ Zorc (1993) ระบุ คำนี้เป็นไปได้ว่า:
* เป็นการเล่นคำที่ออกเสียงแบบภาษาสเปนคล้ายกับคำว่า {{der|tl|es|once||สิบเอ็ด}} (รากศัพท์ 1), จาก{{der|tl|en|once||หนึ่งครั้ง}}, ซึ่งเป็นการแปลตรงตัวอย่างหลวม ๆ จาก {{m|tl|makaisa||ได้เปรียบ; สามารถทำคะแนนได้; หลอกลวงผู้อื่น”); ดูเพิ่มที่ {{m|tl|wans}}
* เกี่ยวข้องกับภาพเส้นตรงคู่ของตัวเลข 11 ที่เขียน อาจหมายถึงการเสแสร้งกับทั้งสองฝ่าย ([[double-dealing]]) ความหมายอีกอย่างหนึ่งอาจหมายถึงการมีข้อได้เปรียบ ([[one up]]) เหนือกว่าตัวเลข 10 ทั่วไป
ดูเพิ่มที่ {{m|tl|maisahan||สามารถถูกเอาชนะได้}}
==== คำนาม ====
{{tl-noun|b=+}} {{tlb|tl|slang}}
# [[การโกง]]; [[การหลอกลวง]]; [[การฉ้อโกง]]; [[การหลอกล่อ]]
#: {{syn|tl|daya|panlalamang|gulang|loko|wans<q:สแลง, ล้าสมัย>}}
===== ลูกคำ =====
{{col3|tl|onsehan|maonse|onsehin}}
=== อ่านเพิ่ม ===
* {{R:Pambansang Diksiyonaryo}}
* {{R:Tagalog Slang Dictionary|103}}
* {{R:Vicassan's Pilipino-English Dictionary 1978|page=1370}}
{{C|tl|สิบเอ็ด}}
== ภาษาบีโคลตอนกลาง ==
{{number box|bcl}}
=== รากศัพท์ ===
{{bor+|bcl|es|once}}
=== การออกเสียง ===
* {{bcl-IPA}}
* {{hyph|bcl|on|se}}
=== เลข ===
{{bcl-head|numeral|ónse|b=+}}
# [[สิบเอ็ด]]
#: {{syn|bcl|kagsaro}}
==== คำเกี่ยวข้อง ====
{{col|bcl|uno|una}}
{{cln|bcl|cardinal numbers}}
== ภาษาอาฟรีกานส์ ==
=== รากศัพท์ ===
จาก{{inh|af|nl|onze||ของพวกเรา}}, แต่ภายหลังตีความว่า เป็นไปได้ว่าเป็น {{m|af|ons}} {{m|af|se}}, ซึ่งเห็นได้จากรูปสรรพนาม ''ons'' {{m|af|s'n|s’n}} (“ของพวกเรา (กรรม)”) เช่นเดียวกับคำอาฟรีกานส์ถิ่น {{m|af|julle}} ''se'' (“ของคุณ”) และ {{m|af|hulle}} ''se'' (“ของพวกเขา”)
=== การออกเสียง ===
* {{IPA|af|/ˈɔnsə/}}
* {{audio|af|LL-Q14196 (afr)-Oesjaar-onse.wav}}
=== ตัวกำหนด ===
{{head|af|ตัวกำหนด}}
# {{lb|af|dialectal|มิฉะนั้น|_|archaic}} {{alternative form of|af|ons}}: {{non-gloss|ตัวกำหนดบอกเจ้าของบุรุษที่หนึ่งพหูพจน์}}
==== ดูเพิ่ม ====
{{af-personal pronouns}}
== ภาษาอีโลกาโน ==
=== รูปแบบอื่น ===
* {{alt|ilo|once||obsolete|Abecedario orthography}}
=== รากศัพท์ ===
{{bor+|ilo|es|once}}
=== การออกเสียง ===
* {{ilo-IPA}}
* {{hyph|ilo|on|se}}
=== เลข ===
{{ilo-head|numeral|ónse|b=+}}
# [[สิบเอ็ด]]
#: {{syn|ilo|sangapulo ket maysa}}
{{cln|ilo|cardinal numbers}}
azqlv72aa2b7is21ypw1lwswk6iogvx
5754347
5754346
2026-08-06T01:45:34Z
Octahedron80
267
/* รากศัพท์ 2 */
5754347
wikitext
text/x-wiki
== ภาษาเซบัวโน ==
{{number box|ceb}}
=== รากศัพท์ ===
{{bor+|ceb|es|once}}
=== การออกเสียง ===
* {{ceb-IPA}}
* {{hyph|ceb|on|se}}
=== เลข ===
{{ceb-num|ónse|b=+}}
# {{cln|ceb|cardinal numbers}} [[สิบเอ็ด]]
==== ลูกคำ ====
{{col|ceb|onseonse}}
== ภาษาดัตช์กลาง ==
=== รากศัพท์ ===
จาก{{inh|dum|odt|unsa}}, จาก{{inh|dum|gem-pro|*unseraz}}
=== การออกเสียง ===
* {{IPA|dum|/ˈonzə/}}
=== ตัวกำหนด ===
{{head|dum|ตัวกำหนด}}
# [[ของ]][[พวกเรา]]
#* {{RQ:dum:Schepenbrief|Descepenen van bochouta quedden alle degene die dese lettren sien selen i(n) '''onsen''' here.|The aldermen of Bochoute address all who will see this letter by '''our''' lord.}}
==== คำสืบทอด ====
* {{desc|nl|ons}}
* {{desc|li|ós}}
== ภาษาตากาล็อก ==
{{number box|tl}}
=== การออกเสียง ===
{{tl-pr|audio=LL-Q34057 (tgl)-Geoffjop0908-onse.wav}}
=== รากศัพท์ 1 ===
{{ety|tl|id=eleven|:bor|es:once|tree=1}}
{{bor+|tl|es|once}}, จาก{{der|tl|osp|onze}}, {{m|osp|ondze}}, จาก{{der|tl|la|ūndecim}}
==== เลข ====
{{tl-num|b=+}}
# [[สิบเอ็ด]]
#: {{syn|tl|labing-isa}}
===== ลูกคำ =====
{{col|tl|onse-onse|onsehin|ikaonse|onsehan}}
===== คำเกี่ยวข้อง =====
{{col3|tl|alas-onse|a-onse|uno}}
=== รากศัพท์ 2 ===
{{ety|tl|id=cheating}}
ตามที่ Zorc (1993) ระบุไว้ คำนี้เป็นไปได้ว่า:
* เป็นการเล่นคำที่ออกเสียงแบบภาษาสเปนคล้ายกับคำว่า {{der|tl|es|once||สิบเอ็ด}} (รากศัพท์ 1), จาก{{der|tl|en|once||หนึ่งครั้ง}}, ซึ่งเป็นการแปลตรงตัวอย่างหลวม ๆ จาก {{m|tl|makaisa||ได้เปรียบ; สามารถทำคะแนนได้; หลอกลวงผู้อื่น”); ดูเพิ่มที่ {{m|tl|wans}}
* เกี่ยวข้องกับภาพเส้นตรงคู่ของตัวเลข 11 ที่เขียน อาจหมายถึงการเสแสร้งกับทั้งสองฝ่าย ([[double-dealing]]) ความหมายอีกอย่างหนึ่งอาจหมายถึงการมีข้อได้เปรียบ ([[one up]]) เหนือกว่าตัวเลข 10 ทั่วไป
ดูเพิ่มที่ {{m|tl|maisahan||สามารถถูกเอาชนะได้}}
==== คำนาม ====
{{tl-noun|b=+}} {{tlb|tl|slang}}
# [[การโกง]]; [[การหลอกลวง]]; [[การฉ้อโกง]]; [[การหลอกล่อ]]
#: {{syn|tl|daya|panlalamang|gulang|loko|wans<q:สแลง, ล้าสมัย>}}
===== ลูกคำ =====
{{col3|tl|onsehan|maonse|onsehin}}
=== อ่านเพิ่ม ===
* {{R:Pambansang Diksiyonaryo}}
* {{R:Tagalog Slang Dictionary|103}}
* {{R:Vicassan's Pilipino-English Dictionary 1978|page=1370}}
{{C|tl|สิบเอ็ด}}
== ภาษาบีโคลตอนกลาง ==
{{number box|bcl}}
=== รากศัพท์ ===
{{bor+|bcl|es|once}}
=== การออกเสียง ===
* {{bcl-IPA}}
* {{hyph|bcl|on|se}}
=== เลข ===
{{bcl-head|numeral|ónse|b=+}}
# [[สิบเอ็ด]]
#: {{syn|bcl|kagsaro}}
==== คำเกี่ยวข้อง ====
{{col|bcl|uno|una}}
{{cln|bcl|cardinal numbers}}
== ภาษาอาฟรีกานส์ ==
=== รากศัพท์ ===
จาก{{inh|af|nl|onze||ของพวกเรา}}, แต่ภายหลังตีความว่า เป็นไปได้ว่าเป็น {{m|af|ons}} {{m|af|se}}, ซึ่งเห็นได้จากรูปสรรพนาม ''ons'' {{m|af|s'n|s’n}} (“ของพวกเรา (กรรม)”) เช่นเดียวกับคำอาฟรีกานส์ถิ่น {{m|af|julle}} ''se'' (“ของคุณ”) และ {{m|af|hulle}} ''se'' (“ของพวกเขา”)
=== การออกเสียง ===
* {{IPA|af|/ˈɔnsə/}}
* {{audio|af|LL-Q14196 (afr)-Oesjaar-onse.wav}}
=== ตัวกำหนด ===
{{head|af|ตัวกำหนด}}
# {{lb|af|dialectal|มิฉะนั้น|_|archaic}} {{alternative form of|af|ons}}: {{non-gloss|ตัวกำหนดบอกเจ้าของบุรุษที่หนึ่งพหูพจน์}}
==== ดูเพิ่ม ====
{{af-personal pronouns}}
== ภาษาอีโลกาโน ==
=== รูปแบบอื่น ===
* {{alt|ilo|once||obsolete|Abecedario orthography}}
=== รากศัพท์ ===
{{bor+|ilo|es|once}}
=== การออกเสียง ===
* {{ilo-IPA}}
* {{hyph|ilo|on|se}}
=== เลข ===
{{ilo-head|numeral|ónse|b=+}}
# [[สิบเอ็ด]]
#: {{syn|ilo|sangapulo ket maysa}}
{{cln|ilo|cardinal numbers}}
3ofpq9jmsslri8d5ech65414d0zlmu2
5754348
5754347
2026-08-06T01:45:53Z
Octahedron80
267
/* รากศัพท์ 2 */
5754348
wikitext
text/x-wiki
== ภาษาเซบัวโน ==
{{number box|ceb}}
=== รากศัพท์ ===
{{bor+|ceb|es|once}}
=== การออกเสียง ===
* {{ceb-IPA}}
* {{hyph|ceb|on|se}}
=== เลข ===
{{ceb-num|ónse|b=+}}
# {{cln|ceb|cardinal numbers}} [[สิบเอ็ด]]
==== ลูกคำ ====
{{col|ceb|onseonse}}
== ภาษาดัตช์กลาง ==
=== รากศัพท์ ===
จาก{{inh|dum|odt|unsa}}, จาก{{inh|dum|gem-pro|*unseraz}}
=== การออกเสียง ===
* {{IPA|dum|/ˈonzə/}}
=== ตัวกำหนด ===
{{head|dum|ตัวกำหนด}}
# [[ของ]][[พวกเรา]]
#* {{RQ:dum:Schepenbrief|Descepenen van bochouta quedden alle degene die dese lettren sien selen i(n) '''onsen''' here.|The aldermen of Bochoute address all who will see this letter by '''our''' lord.}}
==== คำสืบทอด ====
* {{desc|nl|ons}}
* {{desc|li|ós}}
== ภาษาตากาล็อก ==
{{number box|tl}}
=== การออกเสียง ===
{{tl-pr|audio=LL-Q34057 (tgl)-Geoffjop0908-onse.wav}}
=== รากศัพท์ 1 ===
{{ety|tl|id=eleven|:bor|es:once|tree=1}}
{{bor+|tl|es|once}}, จาก{{der|tl|osp|onze}}, {{m|osp|ondze}}, จาก{{der|tl|la|ūndecim}}
==== เลข ====
{{tl-num|b=+}}
# [[สิบเอ็ด]]
#: {{syn|tl|labing-isa}}
===== ลูกคำ =====
{{col|tl|onse-onse|onsehin|ikaonse|onsehan}}
===== คำเกี่ยวข้อง =====
{{col3|tl|alas-onse|a-onse|uno}}
=== รากศัพท์ 2 ===
{{ety|tl|id=cheating}}
ตามที่ Zorc (1993) ระบุไว้ คำนี้เป็นไปได้ว่า:
* เป็นการเล่นคำที่ออกเสียงแบบภาษาสเปนคล้ายกับคำว่า {{der|tl|es|once||สิบเอ็ด}} (รากศัพท์ 1), จาก{{der|tl|en|once||หนึ่งครั้ง}}, ซึ่งเป็นการแปลตรงตัวอย่างหลวม ๆ จาก {{m|tl|makaisa||ได้เปรียบ; สามารถทำคะแนนได้; หลอกลวงผู้อื่น}}; ดูเพิ่มที่ {{m|tl|wans}}
* เกี่ยวข้องกับภาพเส้นตรงคู่ของตัวเลข 11 ที่เขียน อาจหมายถึงการเสแสร้งกับทั้งสองฝ่าย ([[double-dealing]]) ความหมายอีกอย่างหนึ่งอาจหมายถึงการมีข้อได้เปรียบ ([[one up]]) เหนือกว่าตัวเลข 10 ทั่วไป
ดูเพิ่มที่ {{m|tl|maisahan||สามารถถูกเอาชนะได้}}
==== คำนาม ====
{{tl-noun|b=+}} {{tlb|tl|slang}}
# [[การโกง]]; [[การหลอกลวง]]; [[การฉ้อโกง]]; [[การหลอกล่อ]]
#: {{syn|tl|daya|panlalamang|gulang|loko|wans<q:สแลง, ล้าสมัย>}}
===== ลูกคำ =====
{{col3|tl|onsehan|maonse|onsehin}}
=== อ่านเพิ่ม ===
* {{R:Pambansang Diksiyonaryo}}
* {{R:Tagalog Slang Dictionary|103}}
* {{R:Vicassan's Pilipino-English Dictionary 1978|page=1370}}
{{C|tl|สิบเอ็ด}}
== ภาษาบีโคลตอนกลาง ==
{{number box|bcl}}
=== รากศัพท์ ===
{{bor+|bcl|es|once}}
=== การออกเสียง ===
* {{bcl-IPA}}
* {{hyph|bcl|on|se}}
=== เลข ===
{{bcl-head|numeral|ónse|b=+}}
# [[สิบเอ็ด]]
#: {{syn|bcl|kagsaro}}
==== คำเกี่ยวข้อง ====
{{col|bcl|uno|una}}
{{cln|bcl|cardinal numbers}}
== ภาษาอาฟรีกานส์ ==
=== รากศัพท์ ===
จาก{{inh|af|nl|onze||ของพวกเรา}}, แต่ภายหลังตีความว่า เป็นไปได้ว่าเป็น {{m|af|ons}} {{m|af|se}}, ซึ่งเห็นได้จากรูปสรรพนาม ''ons'' {{m|af|s'n|s’n}} (“ของพวกเรา (กรรม)”) เช่นเดียวกับคำอาฟรีกานส์ถิ่น {{m|af|julle}} ''se'' (“ของคุณ”) และ {{m|af|hulle}} ''se'' (“ของพวกเขา”)
=== การออกเสียง ===
* {{IPA|af|/ˈɔnsə/}}
* {{audio|af|LL-Q14196 (afr)-Oesjaar-onse.wav}}
=== ตัวกำหนด ===
{{head|af|ตัวกำหนด}}
# {{lb|af|dialectal|มิฉะนั้น|_|archaic}} {{alternative form of|af|ons}}: {{non-gloss|ตัวกำหนดบอกเจ้าของบุรุษที่หนึ่งพหูพจน์}}
==== ดูเพิ่ม ====
{{af-personal pronouns}}
== ภาษาอีโลกาโน ==
=== รูปแบบอื่น ===
* {{alt|ilo|once||obsolete|Abecedario orthography}}
=== รากศัพท์ ===
{{bor+|ilo|es|once}}
=== การออกเสียง ===
* {{ilo-IPA}}
* {{hyph|ilo|on|se}}
=== เลข ===
{{ilo-head|numeral|ónse|b=+}}
# [[สิบเอ็ด]]
#: {{syn|ilo|sangapulo ket maysa}}
{{cln|ilo|cardinal numbers}}
jmmq88paw8dmbof2s1ri9nmhonq3b1i
5754349
5754348
2026-08-06T01:50:23Z
Octahedron80
267
/* รากศัพท์ 2 */
5754349
wikitext
text/x-wiki
== ภาษาเซบัวโน ==
{{number box|ceb}}
=== รากศัพท์ ===
{{bor+|ceb|es|once}}
=== การออกเสียง ===
* {{ceb-IPA}}
* {{hyph|ceb|on|se}}
=== เลข ===
{{ceb-num|ónse|b=+}}
# {{cln|ceb|cardinal numbers}} [[สิบเอ็ด]]
==== ลูกคำ ====
{{col|ceb|onseonse}}
== ภาษาดัตช์กลาง ==
=== รากศัพท์ ===
จาก{{inh|dum|odt|unsa}}, จาก{{inh|dum|gem-pro|*unseraz}}
=== การออกเสียง ===
* {{IPA|dum|/ˈonzə/}}
=== ตัวกำหนด ===
{{head|dum|ตัวกำหนด}}
# [[ของ]][[พวกเรา]]
#* {{RQ:dum:Schepenbrief|Descepenen van bochouta quedden alle degene die dese lettren sien selen i(n) '''onsen''' here.|The aldermen of Bochoute address all who will see this letter by '''our''' lord.}}
==== คำสืบทอด ====
* {{desc|nl|ons}}
* {{desc|li|ós}}
== ภาษาตากาล็อก ==
{{number box|tl}}
=== การออกเสียง ===
{{tl-pr|audio=LL-Q34057 (tgl)-Geoffjop0908-onse.wav}}
=== รากศัพท์ 1 ===
{{ety|tl|id=eleven|:bor|es:once|tree=1}}
{{bor+|tl|es|once}}, จาก{{der|tl|osp|onze}}, {{m|osp|ondze}}, จาก{{der|tl|la|ūndecim}}
==== เลข ====
{{tl-num|b=+}}
# [[สิบเอ็ด]]
#: {{syn|tl|labing-isa}}
===== ลูกคำ =====
{{col|tl|onse-onse|onsehin|ikaonse|onsehan}}
===== คำเกี่ยวข้อง =====
{{col3|tl|alas-onse|a-onse|uno}}
=== รากศัพท์ 2 ===
{{ety|tl|id=cheating}}
ตามที่ Zorc (1993) ระบุไว้ คำนี้เป็นไปได้ว่า:
* เป็นการเล่นคำที่ออกเสียงแบบภาษาสเปนคล้ายกับคำว่า {{der|tl|es|once||สิบเอ็ด}} (รากศัพท์ 1), จาก{{der|tl|en|once||หนึ่งครั้ง}}, ซึ่งเป็นการแปลตรงตัวอย่างหลวม ๆ จาก {{m|tl|makaisa||ได้เปรียบ; สามารถทำคะแนนได้; หลอกลวงผู้อื่น}}; ดูเพิ่มที่ {{m|tl|wans}}
* เกี่ยวข้องกับภาพเส้นตรงคู่ของตัวเลข 11 ที่เขียน อาจหมายถึงการเสแสร้ง ([[double-dealing]]) ความหมายอีกอย่างหนึ่งอาจหมายถึงการมีข้อได้เปรียบ ([[one up]]) เหนือกว่าตัวเลข 10 ทั่วไป
ดูเพิ่มที่ {{m|tl|maisahan||สามารถถูกเอาชนะได้}}
==== คำนาม ====
{{tl-noun|b=+}} {{tlb|tl|slang}}
# [[การโกง]]; [[การหลอกลวง]]; [[การฉ้อโกง]]; [[การหลอกล่อ]]
#: {{syn|tl|daya|panlalamang|gulang|loko|wans<q:สแลง, ล้าสมัย>}}
===== ลูกคำ =====
{{col3|tl|onsehan|maonse|onsehin}}
=== อ่านเพิ่ม ===
* {{R:Pambansang Diksiyonaryo}}
* {{R:Tagalog Slang Dictionary|103}}
* {{R:Vicassan's Pilipino-English Dictionary 1978|page=1370}}
{{C|tl|สิบเอ็ด}}
== ภาษาบีโคลตอนกลาง ==
{{number box|bcl}}
=== รากศัพท์ ===
{{bor+|bcl|es|once}}
=== การออกเสียง ===
* {{bcl-IPA}}
* {{hyph|bcl|on|se}}
=== เลข ===
{{bcl-head|numeral|ónse|b=+}}
# [[สิบเอ็ด]]
#: {{syn|bcl|kagsaro}}
==== คำเกี่ยวข้อง ====
{{col|bcl|uno|una}}
{{cln|bcl|cardinal numbers}}
== ภาษาอาฟรีกานส์ ==
=== รากศัพท์ ===
จาก{{inh|af|nl|onze||ของพวกเรา}}, แต่ภายหลังตีความว่า เป็นไปได้ว่าเป็น {{m|af|ons}} {{m|af|se}}, ซึ่งเห็นได้จากรูปสรรพนาม ''ons'' {{m|af|s'n|s’n}} (“ของพวกเรา (กรรม)”) เช่นเดียวกับคำอาฟรีกานส์ถิ่น {{m|af|julle}} ''se'' (“ของคุณ”) และ {{m|af|hulle}} ''se'' (“ของพวกเขา”)
=== การออกเสียง ===
* {{IPA|af|/ˈɔnsə/}}
* {{audio|af|LL-Q14196 (afr)-Oesjaar-onse.wav}}
=== ตัวกำหนด ===
{{head|af|ตัวกำหนด}}
# {{lb|af|dialectal|มิฉะนั้น|_|archaic}} {{alternative form of|af|ons}}: {{non-gloss|ตัวกำหนดบอกเจ้าของบุรุษที่หนึ่งพหูพจน์}}
==== ดูเพิ่ม ====
{{af-personal pronouns}}
== ภาษาอีโลกาโน ==
=== รูปแบบอื่น ===
* {{alt|ilo|once||obsolete|Abecedario orthography}}
=== รากศัพท์ ===
{{bor+|ilo|es|once}}
=== การออกเสียง ===
* {{ilo-IPA}}
* {{hyph|ilo|on|se}}
=== เลข ===
{{ilo-head|numeral|ónse|b=+}}
# [[สิบเอ็ด]]
#: {{syn|ilo|sangapulo ket maysa}}
{{cln|ilo|cardinal numbers}}
2mntk8og9i8zdaca9edvyebcr5etpe0
า
0
239374
5754438
5648311
2026-08-06T04:29:04Z
~2026-43346-75
19333
ย้อนรุ่นแก้ไข [[Special:Diff/1884808|1884808]] ของ [[Special:Contr มฝทททททใททฝทใทฝทมท.ฝฝทท.ท. ทืใทใ ฝทใใ.ใ ททททททฝทใใ.ใทฝท .ใน ททใใฝทใ. ทททททฝฝทท ททท ท ใ.ใ ใใ.ใ.ทใ.ททฝท ททฝท.ททใใทใ .ททใทฝท .มฝ ใท.ทใใท ท มทใทท.ทใทใทใ ใททใ.ibutions/Octahedron80|Octahedron80]] ([[User talk:Octahedron80|คุย]])
5754438
wikitext
text/x-wiki
{{character info}}
== ภาษาไทย ==
{{wp}}
=== รูปแบบอื่น ===
* {{q|ลายสือไทย}} [[ไฟล์:กา.png|x24px|text-bottom|class=skin-invert-image|alt=กา]] (ก + า)
* {{alt|th|.-||รหัสมอร์ส}}
* {{q|อักษรเบรลล์}} {{l|mul|⠡}}
=== ตัวอักษร ===
{{th-letter}}
# [[ลากข้าง]]; [[สระ]]ที่ออกเสียง อา
==== หมายเหตุการใช้ ====
# สามารถใช้ร่วมกับ [[◌ํ]] [[เ]] [[ะ]] เป็นสระ อำ เอา เอาะ
==== ดูเพิ่ม ====
* {{q|อักษรเบรลล์}} {{l|mul|⠵||สระ อำ}}, {{l|mul|⠖||สระ เอา}}, {{l|mul|⠕⠁||สระ เอาะ}}
ime54en61pyqd08g33i8aae1vcs8ycz
5754440
5754438
2026-08-06T04:30:49Z
Octahedron80
267
ย้อนรุ่นแก้ไข [[Special:Diff/5754438|5754438]] ของ [[Special:Contributions/~2026-43346-75|~2026-43346-75]] ([[User talk:~2026-43346-75|คุย]])
5754440
wikitext
text/x-wiki
{{character info}}
{{also/auto}}
== ภาษาไทย ==
{{wp}}
=== รูปแบบอื่น ===
* {{q|ลายสือไทย}} [[ไฟล์:กา.png|x24px|text-bottom|class=skin-invert-image|alt=กา]] (ก + า)
* {{alt|th|.-||รหัสมอร์ส}}
* {{q|อักษรเบรลล์}} {{l|mul|⠡}}
=== ตัวอักษร ===
{{th-letter}}
# [[ลากข้าง]]; [[สระ]]ที่ออกเสียง อา
==== หมายเหตุการใช้ ====
# สามารถใช้ร่วมกับ [[◌ํ]] [[เ]] [[ะ]] เป็นสระ อำ เอา เอาะ
==== ดูเพิ่ม ====
* {{q|อักษรเบรลล์}} {{l|mul|⠵||สระ อำ}}, {{l|mul|⠖||สระ เอา}}, {{l|mul|⠕⠁||สระ เอาะ}}
cut6q6u8gz13agm0ooh2bumuzrjylnx
photographie
0
245416
5754479
2765667
2026-08-06T07:24:10Z
OctraBot
3198
update template use
5754479
wikitext
text/x-wiki
{{also/auto}}
== ภาษาฝรั่งเศส ==
{{wp|lang=fr}}
=== รากศัพท์ ===
{{etymon|fr|:af|grc:φωτο-|grc:γρᾰ́φω}}
=== การออกเสียง ===
* {{fr-IPA}}
* {{audio|fr|Fr-photographie.ogg}}
=== คำนาม ===
{{fr-noun|f}}
# {{lb|fr|uncountable}} [[การถ่ายรูป]]
# {{lb|fr|countable}} [[รูปถ่าย]]
==== คำเกี่ยวข้อง ====
* {{l|fr|photographe}}
* {{l|fr|photographier}}
* {{l|fr|photographique}}
=== อ่านเพิ่ม ===
* {{R:fr:TLFi}}
{{C|fr|การถ่ายรูป}}
guj1769quxz71bjei4vkd7yuckapit1
nennen
0
256255
5754463
5645383
2026-08-06T06:01:28Z
Octahedron80
267
/* รากศัพท์ */ เก็บกวาด
5754463
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== รากศัพท์ ===
{{dercat|de|gem-pro|inh=1}}
{{etymon|de|id=to name|:inh|gmh:nennen<id:to name>|tree=1}}
จาก{{inh|de|gmh|nennen}}, {{m|gmh|nemmen}}, {{m|mgh|nemnen}}, จาก{{inh|de|goh|nemnen}}, จาก{{inh|de|gmw-pro|*namnijan}}, จาก{{inh|de|gem-pro|*namnijaną}}
{{col-top|2|cog}}
ร่วมเชื้อสายกับ{{cog|hrx|nenne}}, {{cog|ang|nemnan}}, {{cog|enm|nemnen}}, {{cog|sv|nämna}}.
{{col-bottom}}
=== การออกเสียง ===
* {{IPA|de|/ˈnɛnən/}}
* {{audio|de|De-nennen2.ogg}}
* {{audio|de|De-nennen.ogg}}
*{{hyph|de|nen|nen}}
=== คำกริยา ===
{{de-verb|nennen<nannte,genannt,nennte>}}
# {{lb|de|transitive}} [[ตั้ง]][[ชื่อ]]
# {{lb|de|transitive}} [[เรียก]]
==== การผัน ====
{{de-conj|nennen<nannte,genannt,nennte>}}
==== ลูกคำ ====
{{der-top3}}
* {{l|de|benennen}}
* {{l|de|ernennen}}
* {{l|de|nennbar}}
* {{l|de|Nennbetrag}}
* {{l|de|nennenswert}}
{{der-mid3}}
* {{l|de|Nenner}}
* {{l|de|Nennform}}
* {{l|de|Nenngeld}}
* {{l|de|Nennleistung}}
* {{l|de|Nennonkel}}
{{der-mid3}}
* {{l|de|Nenntante}}
* {{l|de|Nennung}}
* {{l|de|Nennwert}}
* {{l|de|umbenennen}}
* {{l|de|umnennen}}
{{der-bottom}}
=== อ่านเพิ่ม ===
* {{R:de:Duden}}
8npkbw0y3fv3o1mlee1uynn66euslhy
5754464
5754463
2026-08-06T06:01:42Z
Octahedron80
267
/* รากศัพท์ */
5754464
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== รากศัพท์ ===
{{dercat|de|gem-pro|inh=1}}
{{etymon|de|id=to name|:inh|gmh:nennen<id:to name>|tree=1}}
จาก{{inh|de|gmh|nennen}}, {{m|gmh|nemmen}}, {{m|mgh|nemnen}}, จาก{{inh|de|goh|nemnen}}, จาก{{inh|de|gmw-pro|*namnijan}}, จาก{{inh|de|gem-pro|*namnijaną}}
{{col-top|2|cog}}
ร่วมเชื้อสายกับ{{cog|hrx|nenne}}, {{cog|ang|nemnan}}, {{cog|enm|nemnen}}, {{cog|sv|nämna}}
{{col-bottom}}
=== การออกเสียง ===
* {{IPA|de|/ˈnɛnən/}}
* {{audio|de|De-nennen2.ogg}}
* {{audio|de|De-nennen.ogg}}
*{{hyph|de|nen|nen}}
=== คำกริยา ===
{{de-verb|nennen<nannte,genannt,nennte>}}
# {{lb|de|transitive}} [[ตั้ง]][[ชื่อ]]
# {{lb|de|transitive}} [[เรียก]]
==== การผัน ====
{{de-conj|nennen<nannte,genannt,nennte>}}
==== ลูกคำ ====
{{der-top3}}
* {{l|de|benennen}}
* {{l|de|ernennen}}
* {{l|de|nennbar}}
* {{l|de|Nennbetrag}}
* {{l|de|nennenswert}}
{{der-mid3}}
* {{l|de|Nenner}}
* {{l|de|Nennform}}
* {{l|de|Nenngeld}}
* {{l|de|Nennleistung}}
* {{l|de|Nennonkel}}
{{der-mid3}}
* {{l|de|Nenntante}}
* {{l|de|Nennung}}
* {{l|de|Nennwert}}
* {{l|de|umbenennen}}
* {{l|de|umnennen}}
{{der-bottom}}
=== อ่านเพิ่ม ===
* {{R:de:Duden}}
nl7u7d1pz4d4j29y2h1i8ejl76h046m
5754465
5754464
2026-08-06T06:02:34Z
Octahedron80
267
/* ภาษาเยอรมัน */
5754465
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== รากศัพท์ ===
{{dercat|de|gem-pro|inh=1}}
{{etymon|de|id=to name|:inh|gmh:nennen<id:to name>|tree=1}}
จาก{{inh|de|gmh|nennen}}, {{m|gmh|nemmen}}, {{m|mgh|nemnen}}, จาก{{inh|de|goh|nemnen}}, จาก{{inh|de|gmw-pro|*namnijan}}, จาก{{inh|de|gem-pro|*namnijaną}}
{{col-top|2|cog}}
ร่วมเชื้อสายกับ{{cog|hrx|nenne}}, {{cog|ang|nemnan}}, {{cog|enm|nemnen}}, {{cog|sv|nämna}}
{{col-bottom}}
=== การออกเสียง ===
* {{IPA|de|/ˈnɛnən/}}
* {{audio|de|De-nennen2.ogg|a=<<Germany>> (<<Berlin>>)}}
* {{audio|de|De-nennen.ogg}}
* {{hyph|de|nen|nen}}
=== คำกริยา ===
{{de-verb|nennen<nannte,genannt,nennte>}}
# {{lb|de|transitive}} [[ตั้ง]][[ชื่อ]]
# {{lb|de|transitive}} [[เรียก]]
==== การผัน ====
{{de-conj|nennen<nannte,genannt,nennte>}}
==== ลูกคำ ====
{{col3|de
|benennen
|das Kind beim Namen nennen
|ernennen
|nennbar
|Nennbetrag
|nennenswert
|Nenner
|Nennform
|Nenngeld
|Nennleistung
|Nennonkel
|Nenntante
|Nennung
|Nennwert
|umbenennen
|umnennen
}}
=== อ่านเพิ่ม ===
* {{R:de:DWDS}}
* {{R:de:UniLeipzig}}
* {{R:de:Duden}}
* {{R:de:OpenThesaurus}}
gxkth3wgny3t8yu8r3ochybzaaodg0v
5754468
5754465
2026-08-06T06:12:45Z
Octahedron80
267
/* คำกริยา */
5754468
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== รากศัพท์ ===
{{dercat|de|gem-pro|inh=1}}
{{etymon|de|id=to name|:inh|gmh:nennen<id:to name>|tree=1}}
จาก{{inh|de|gmh|nennen}}, {{m|gmh|nemmen}}, {{m|mgh|nemnen}}, จาก{{inh|de|goh|nemnen}}, จาก{{inh|de|gmw-pro|*namnijan}}, จาก{{inh|de|gem-pro|*namnijaną}}
{{col-top|2|cog}}
ร่วมเชื้อสายกับ{{cog|hrx|nenne}}, {{cog|ang|nemnan}}, {{cog|enm|nemnen}}, {{cog|sv|nämna}}
{{col-bottom}}
=== การออกเสียง ===
* {{IPA|de|/ˈnɛnən/}}
* {{audio|de|De-nennen2.ogg|a=<<Germany>> (<<Berlin>>)}}
* {{audio|de|De-nennen.ogg}}
* {{hyph|de|nen|nen}}
=== คำกริยา ===
{{de-verb|nennen<nannte,genannt,nennte>}}
# {{lb|de|transitive}} [[ตั้ง]][[ชื่อ]]
# {{lb|de|transitive}} [[เรียก]]...[[ว่า]] ( {{+obj|de|acc<บางคน> + predicate&adjective/acc&noun<บางชื่อ ชื่อตั้ง หรือคำอธิบาย>}}
#: {{ux|de|'''Nennst''' du mich einen Dummkopf?|Are you '''calling''' me an idiot?}}
#: {{ux|de|Wir '''nennen''' den Hund Leo.|We '''call''' the dog Leo.}}
# {{lb|de|transitive}} [[กล่าว]][[ถึง]], [[ทำ]][[ให้]][[ทราบ]], [[บอก]], [[ให้]] {{+obj|de|dat<บางคน> + acc<ข้อมูลบางอย่าง>}}
#: {{ux|de|'''Nennen''' Sie mir den Ort des Treffens.|'''Tell''' me the location of the meeting.}}
#* {{RQ:Heyking Orgelpfeifen|page=64|passage=Namen '''wurden''' in diesen Berichten nicht '''genannt''', und in dieser Anonymität der Leistungen lag eine besondere entsagungsvolle Größe.|translation=Names were not mentioned in these reports and in this anonymity of the achievements was a particular sacrificing greatness.}}
# {{lb|de|transitive}} [[กล่าว]], [[พูด]], [[อ้าง]] (ชื่อ)
#: {{ux|de|Kannst du deinen Namen '''nennen'''?|Can you '''say''' your name?}}
# {{lb|de|transitive}} [[เรียกร้อง]]; [[ยื่น]] (เช่น คำขอ)
# {{lb|de|reflexive}} ถูกเรียก; ถูกตั้งชื่อ; ใช้ชื่อใดชื่อหนึ่ง
==== การผัน ====
{{de-conj|nennen<nannte,genannt,nennte>}}
==== ลูกคำ ====
{{col3|de
|benennen
|das Kind beim Namen nennen
|ernennen
|nennbar
|Nennbetrag
|nennenswert
|Nenner
|Nennform
|Nenngeld
|Nennleistung
|Nennonkel
|Nenntante
|Nennung
|Nennwert
|umbenennen
|umnennen
}}
=== อ่านเพิ่ม ===
* {{R:de:DWDS}}
* {{R:de:UniLeipzig}}
* {{R:de:Duden}}
* {{R:de:OpenThesaurus}}
e8arnplgb4argputl4l0o52icrlyjiw
5754469
5754468
2026-08-06T06:13:32Z
Octahedron80
267
/* คำกริยา */
5754469
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== รากศัพท์ ===
{{dercat|de|gem-pro|inh=1}}
{{etymon|de|id=to name|:inh|gmh:nennen<id:to name>|tree=1}}
จาก{{inh|de|gmh|nennen}}, {{m|gmh|nemmen}}, {{m|mgh|nemnen}}, จาก{{inh|de|goh|nemnen}}, จาก{{inh|de|gmw-pro|*namnijan}}, จาก{{inh|de|gem-pro|*namnijaną}}
{{col-top|2|cog}}
ร่วมเชื้อสายกับ{{cog|hrx|nenne}}, {{cog|ang|nemnan}}, {{cog|enm|nemnen}}, {{cog|sv|nämna}}
{{col-bottom}}
=== การออกเสียง ===
* {{IPA|de|/ˈnɛnən/}}
* {{audio|de|De-nennen2.ogg|a=<<Germany>> (<<Berlin>>)}}
* {{audio|de|De-nennen.ogg}}
* {{hyph|de|nen|nen}}
=== คำกริยา ===
{{de-verb|nennen<nannte,genannt,nennte>}}
# {{lb|de|transitive}} [[ตั้ง]][[ชื่อ]]
# {{lb|de|transitive}} [[เรียก]]...[[ว่า]] {{+obj|de|acc<บางคน> + predicate&adjective/acc&noun<บางชื่อ ชื่อตั้ง หรือคำอธิบาย>}}
#: {{ux|de|'''Nennst''' du mich einen Dummkopf?|Are you '''calling''' me an idiot?}}
#: {{ux|de|Wir '''nennen''' den Hund Leo.|We '''call''' the dog Leo.}}
# {{lb|de|transitive}} [[กล่าว]][[ถึง]], [[ทำ]][[ให้]][[ทราบ]], [[บอก]], [[ให้]] {{+obj|de|dat<บางคน> + acc<ข้อมูลบางอย่าง>}}
#: {{ux|de|'''Nennen''' Sie mir den Ort des Treffens.|'''Tell''' me the location of the meeting.}}
#* {{RQ:Heyking Orgelpfeifen|page=64|passage=Namen '''wurden''' in diesen Berichten nicht '''genannt''', und in dieser Anonymität der Leistungen lag eine besondere entsagungsvolle Größe.|translation=Names were not mentioned in these reports and in this anonymity of the achievements was a particular sacrificing greatness.}}
# {{lb|de|transitive}} [[กล่าว]], [[พูด]], [[อ้าง]] (ชื่อ)
#: {{ux|de|Kannst du deinen Namen '''nennen'''?|Can you '''say''' your name?}}
# {{lb|de|transitive}} [[เรียกร้อง]]; [[ยื่น]] (เช่น คำขอ)
# {{lb|de|reflexive}} ถูกเรียก; ถูกตั้งชื่อ; ใช้ชื่อใดชื่อหนึ่ง
==== การผัน ====
{{de-conj|nennen<nannte,genannt,nennte>}}
==== ลูกคำ ====
{{col3|de
|benennen
|das Kind beim Namen nennen
|ernennen
|nennbar
|Nennbetrag
|nennenswert
|Nenner
|Nennform
|Nenngeld
|Nennleistung
|Nennonkel
|Nenntante
|Nennung
|Nennwert
|umbenennen
|umnennen
}}
=== อ่านเพิ่ม ===
* {{R:de:DWDS}}
* {{R:de:UniLeipzig}}
* {{R:de:Duden}}
* {{R:de:OpenThesaurus}}
01ve32eks8cwy13qzxpm8i2nla3aq9v
5754471
5754469
2026-08-06T06:16:35Z
Octahedron80
267
/* คำกริยา */
5754471
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== รากศัพท์ ===
{{dercat|de|gem-pro|inh=1}}
{{etymon|de|id=to name|:inh|gmh:nennen<id:to name>|tree=1}}
จาก{{inh|de|gmh|nennen}}, {{m|gmh|nemmen}}, {{m|mgh|nemnen}}, จาก{{inh|de|goh|nemnen}}, จาก{{inh|de|gmw-pro|*namnijan}}, จาก{{inh|de|gem-pro|*namnijaną}}
{{col-top|2|cog}}
ร่วมเชื้อสายกับ{{cog|hrx|nenne}}, {{cog|ang|nemnan}}, {{cog|enm|nemnen}}, {{cog|sv|nämna}}
{{col-bottom}}
=== การออกเสียง ===
* {{IPA|de|/ˈnɛnən/}}
* {{audio|de|De-nennen2.ogg|a=<<Germany>> (<<Berlin>>)}}
* {{audio|de|De-nennen.ogg}}
* {{hyph|de|nen|nen}}
=== คำกริยา ===
{{de-verb|nennen<nannte,genannt,nennte>}}
# {{lb|de|transitive}} [[ตั้ง]][[ชื่อ]]
# {{lb|de|transitive}} [[เรียก]]...[[ว่า]], [[อธิบาย]] {{+obj|de|acc<บางคน> + predicate&adjective/acc&noun<บางชื่อ ชื่อตั้ง หรือคำอธิบาย>}}
#: {{ux|de|'''Nennst''' du mich einen Dummkopf?|คุณกำลังบอกว่าฉันเป็นคนโง่เหรอ?}}
#: {{ux|de|Wir '''nennen''' den Hund Leo.|เราเรียกสุนัขตัวนั้นว่า ลีโอ}}
# {{lb|de|transitive}} [[กล่าว]][[ถึง]], [[ทำ]][[ให้]][[ทราบ]], [[บอก]], [[ให้]] {{+obj|de|dat<บางคน> + acc<ข้อมูลบางอย่าง>}}
#: {{ux|de|'''Nennen''' Sie mir den Ort des Treffens.|บอกสถานที่นัดพบให้หน่อย}}
#* {{RQ:Heyking Orgelpfeifen|page=64|passage=Namen '''wurden''' in diesen Berichten nicht '''genannt''', und in dieser Anonymität der Leistungen lag eine besondere entsagungsvolle Größe.|translation=รายงานเหล่านี้ไม่ได้เอ่ยชื่อใคร และนั่นคือความยิ่งใหญ่ที่พิเศษและแสดงถึงความเสียสละอย่างแท้จริง ในการที่ความสำเร็จเหล่านั้นไม่ปรากฏชื่อผู้กระทำ}}
# {{lb|de|transitive}} [[กล่าว]], [[พูด]], [[บอก]] (ชื่อ)
#: {{ux|de|Kannst du deinen Namen '''nennen'''?|คุณช่วยบอกชื่อของคุณได้ไหม?}}
# {{lb|de|transitive}} [[เรียกร้อง]]; [[ยื่น]] (เช่น คำขอ)
# {{lb|de|reflexive}} ถูกเรียก; ถูกตั้งชื่อ; ใช้ชื่อใดชื่อหนึ่ง
==== การผัน ====
{{de-conj|nennen<nannte,genannt,nennte>}}
==== ลูกคำ ====
{{col3|de
|benennen
|das Kind beim Namen nennen
|ernennen
|nennbar
|Nennbetrag
|nennenswert
|Nenner
|Nennform
|Nenngeld
|Nennleistung
|Nennonkel
|Nenntante
|Nennung
|Nennwert
|umbenennen
|umnennen
}}
=== อ่านเพิ่ม ===
* {{R:de:DWDS}}
* {{R:de:UniLeipzig}}
* {{R:de:Duden}}
* {{R:de:OpenThesaurus}}
aqh088g67i2hu28mdx5v8us7v03328u
คลั่ง
0
283484
5754331
1880992
2026-08-05T21:17:51Z
Alifshinobi
397
/* รากศัพท์ 1 */
5754331
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== การออกเสียง ===
{{th-pron|คฺลั่ง}}
=== รากศัพท์ 1 ===
ร่วมเชื้อสายกับ{{cog|lo|ຄັ່ງ}}, {{cog|nod|ᨣᩖᩢ᩵ᨦ}}
==== คำกริยา ====
{{th-verb|~}}
# [[แสดง]][[อาการ]][[ผิด]][[ปรกติ]][[อย่าง]][[คน]][[บ้า]], [[เสียสติ]]
# [[หลงใหล]][[ใน]][[บุคคล]][[หรือ]][[สิ่ง]][[ใด]]สิ่ง[[หนึ่ง]], [[หมกมุ่น]][[อยู่]][[กับ]][[งาน]]หรือสิ่งใดสิ่งหนึ่ง
#: {{ux|th|'''คลั่ง'''ดารา}}
#: {{ux|th|'''คลั่ง'''อำนาจ}}
#: {{ux|th|'''คลั่ง'''เล่นกล้วยไม้}}
=== รากศัพท์ 2 ===
==== คำกริยา ====
{{th-verb}}
# [[คั่ง]]
#: {{ux|th|ชลเนตร'''คลั่ง'''คลอนัยนา|ref=<ref name=อิเหนา>อิเหนา พระราชนิพนธ์ในรัชกาลที่ 2 ฉบับหอพระสมุดวชิรญาณ พ.ศ. 2464</ref>}}
=== อ้างอิง ===
{{รายการอ้างอิง}}
nhml542l0dpynlhshsdrqia81kp3b9v
ᨿᩬᩴ
0
285255
5754406
1953264
2026-08-06T03:12:17Z
Alifshinobi
397
5754406
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
{{nod-alt|l=ยอ|s=ญอ}}
=== การออกเสียง ===
* {{IPA|nod|/ɲɔː˧˧/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|สกรรม}} [[ยอ]], [[ยก]]
# {{lb|nod|สกรรม}} [[ยอ]], [[กล่าว]][[คำ]][[เชิดชู]][[เพื่อ]][[ให้]][[ชอบใจ]]
hrqisxaqoj6yg34z4nql6nctamk08ow
ถุงมือ
0
287889
5754529
1355123
2026-08-06T09:04:03Z
GinGlaep
7155
/* ภาษาไทย */
5754529
wikitext
text/x-wiki
== ภาษาไทย ==
{{wp}}
[[ไฟล์:Dress Glove.JPG|thumb|ถุงมือ]]
=== รากศัพท์ ===
{{com+|th|ถุง|มือ}}
=== การออกเสียง ===
{{th-pron|ถุง-มือ}}
=== คำนาม ===
{{th-noun|คู่|ข้าง}}
# [[เครื่อง]][[สวม]][[มือ]][[ทำ]][[จาก]][[วัสดุ]][[ต่าง ๆ]] [[เช่น]] [[ไหม]] [[ผ้า]] [[หนัง]][[สัตว์]] [[ยาง]] [[เป็นต้น]] [[มี]][[ช่อง]][[เล็ก]][[ให้]][[นิ้ว]][[แต่ละ]]นิ้ว[[สอด]][[ลง]][[ไป]][[ได้]] [[ใช้]][[เพื่อ]][[ป้องกัน]][[ความหนาว]][[เย็น]] [[หรือ]]เพื่อ[[ประโยชน์]][[อย่าง]][[อื่น]]
==== คำแปลภาษาอื่น ====
{{trans-top|เครื่องสวมมือ}}
* เกาหลี: {{t+|ko|장갑(掌匣)(掌甲)}}
* เขมร: {{t|km|ស្រោមដៃ}}
* จีน:
*: กวางตุ้ง: {{t|yue|手襪|tr=sau2 mat6}}, {{t|yue|手套|tr=sau2 tou3}}
*: หมิ่นตะวันออก: {{t|cdo|手套}}, {{t|cdo|手絡}}
*: ฮกเกี้ยน: {{t+|nan-hbl|手囊|tr=chhiú-lông}}, {{t+|nan-hbl|手套|tr=chhiú-thò}}
*: จีนกลาง: {{t+|cmn|手套|tr=shǒutào}}
*: หมิ่นเหนือ: {{t|mnp|手套}}
*: อู๋: {{t|wuu|手套}}
* ญี่ปุ่น: {{t+|ja|手袋|tr=てぶくろ, tebukuro}}
* ดัตช์: {{t+|nl|handschoen|f}}
* ตากาล็อก: {{t|tl|guwantes}}
* ไทดำ: {{t|blt|ꪣꪱꪒꪣꪳ}}
* โปรตุเกส: {{t+|pt|luva|f}}
* ฝรั่งเศส: {{t+|fr|gant|m}}
* พม่า: {{t+|my|လက်အိတ်}}
* ฟินแลนด์: {{t+|fi|hansikas}}, {{t+|fi|hanska}}, {{t+|fi|sormikas}}
* มาเลเซีย: {{t+|ms|sarung tangan}}
* เยอรมัน: {{t+|de|Handschuh|m}}
* รัสเซีย: {{t+|ru|перча́тка|f}}
* ลาว: {{t+|lo|ຖົງມື}}
* เวียดนาม: {{t+|vi|găng tay}}, {{t+|vi|bao tay}}
* สเปน: {{t+|es|guante|m}}
* อังกฤษ: {{t+|en|glove}}
* อิตาลี: {{t+|it|guanto|m}}
* อินโดนีเซีย: {{t+|id|sarung tangan}}
{{trans-bottom}}
gcq76b99e8ut533iohaehbc86rumpvc
kalender
0
291524
5754417
1877242
2026-08-06T04:08:16Z
Octahedron80
267
เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754417
wikitext
text/x-wiki
{{also/auto}}
== ภาษาดัตช์ ==
{{wp|nl:}}
=== รากศัพท์ ===
จาก{{inh|nl|dum|kalendier}}, จาก{{der|nl|fro|calendier}}, จาก{{der|nl|la|calendārium}}; รูปที่ลงท้ายด้วย ''-er'' ได้รับอิทธิพลจาก{{der|nl|de|Kalender}}
=== การออกเสียง ===
* {{IPA|nl|/ˌkaːˈlɛn.dər/}}
* {{audio|nl|Nl-kalender.ogg}}
* {{hyphenation|nl|ka|len|der}}
* {{rhymes|nl|ɛndər}}
=== คำนาม ===
{{nl-noun|m|-s|+}}
# [[ปฏิทิน]]
==== ลูกคำ ====
{{col|nl
|adventskalender
|gregoriaanse kalender
|juliaanse kalender
|kalenderjaar
|lunisolaire kalender
|maankalender
|scheurkalender
|zonnekalender
}}
==== คำสืบทอด ====
* {{desc|af|kalender}}
* {{desc|hns|kalendar|bor=1}}
* {{desc|id|bor=1|kalender}}
* {{desc|pap|kalènder|bor=1}}
=== คำสลับอักษร ===
* {{l|nl|elkander}}
== ภาษาเดนมาร์ก ==
{{wp|da:}}
=== การออกเสียง ===
* {{IPA|da|/kaˈlɛnˀɐ/|[kʰæˈlenˀɐ]|[kʰæˈlenˀɒ̽]}}
=== คำนาม ===
{{da-noun|en|e}}
# [[ปฏิทิน]]
==== การผันรูป ====
{{da-decl|en|e|ne}}
=== อ่านเพิ่ม ===
* {{R:DDO}}
== ภาษาตุรกี ==
=== รากศัพท์ ===
{{inh+|tr|ota|قلندر|tr=kalender}}, จาก{{der|tr|ar|قَلَنْدَر}}
=== การออกเสียง ===
* {{IPA|tr|/kɑlendeɾ/}}
=== คำคุณศัพท์ ===
{{tr-adj}}
# [[ไม่]][[ทำ]][[ตาม]][[กฎ]][[ทาง]][[สังคม]]
# [[สบาย]] ๆ
# [[เชิง]][[ปรัชญา]]
# ไม่[[เหมือน]][[ใคร]]
== ภาษานอร์เวย์แบบนือนอสก์ ==
{{wp|nn:}}
=== คำนาม ===
{{head|nn|คำนาม|g=m|definite singular|kalenderen|indefinite plural|kalendrar|definite plural|kalendrane}}
# [[ปฏิทิน]]
==== ลูกคำ ====
* {{l|nn|adventskalender}}
* {{l|nn|kalenderår}}
== ภาษานอร์เวย์แบบบุ๊กมอล ==
{{wp|no:}}
=== คำนาม ===
{{nb-noun-m3}}
# [[ปฏิทิน]]
#: {{ux|nb|Har du puttet legetimen din på '''kalenderen''' din?|Have you put your doctor's appointment on your '''calender'''?}}
==== ลูกคำ ====
* {{l|nb|adventskalender}}
* {{l|nb|kalenderår}}
== ภาษาวีลามอวิตแซ ==
=== การออกเสียง ===
* {{audio|wym|Wym-kalender (wersja Józefa Gary).ogg}}
=== คำนาม ===
{{wym-noun|g=m|pl=kalendyn}}
# [[ปฏิทิน]]
{{C|wym|เวลา}}
== ภาษาสวีเดน ==
{{wp|sv:}}
=== คำนาม ===
{{sv-noun|c}}
# [[ปฏิทิน]]
#: {{syn|sv|almanacka}}
# [[สิ่งพิมพ์]][[ประจำ]][[ปี]]
==== การผันรูป ====
{{sv-infl-noun-c-r|3=kalendra}}
==== ลูกคำ ====
* {{l|sv|kalendermånad}}
* {{l|sv|kalenderår}}
* {{l|sv|adventskalender}}
* {{l|sv|julkalender}}
* {{l|sv|taxeringskalender}}
=== อ้างอิง ===
* {{R:svenska.se|so}}
* {{R:svenska.se|saol}}
* {{R:svenska.se|saob}}
== ภาษาอังกฤษกลาง ==
=== รูปแบบอื่น ===
* {{alter|enm|calender|kalendere|calendder|kalendar|kalander|calendre|kalunder|calundere}}
=== รากศัพท์ ===
{{etymon|enm|id=calendar|:bor|fro:calendier<id:calender>}}
จาก{{bor|enm|fro|calendier}}, จาก{{der|enm|la|calendārium}}, {{m|la|kalendārium}}; เทียบเท่า {{affix|enm|kalende|-er}}
=== การออกเสียง ===
* {{IPA|enm|/kalənˈdɛːr/|/ˈkaləndɛr/|/ˈkaləndər/}}
=== คำนาม ===
{{enm-noun|kalenderes}}
# [[ปี]]
# [[ปฏิทิน]]
# {{lb|enm|rare}} [[ตัวอย่าง]]ที่ควรปฏิบัติตามหรือจดบันทึก
# {{lb|enm|rare}} รายการหรือชุดบันทึกที่มีรายละเอียด
# {{lb|enm|rare}} แผนภูมิหรือกราฟที่ใช้เพื่อวัตถุประสงค์ทางวิทยาศาสตร์
# {{lb|enm|rare}} [[การเริ่มต้น]]; [[จุด]][[เริ่มต้น]]
==== คำสืบทอด ====
* {{desctree|en|calendar}}
* {{desc|sco|calendar}}
* {{desc|cy|calendr|bor=1}}
==== อ้างอิง ====
* {{R:MED Online|entry=calendē̆r |pos=n |id=MED6530|accessdate=2018-09-12}}
{{C|enm|เวลา}}
== ภาษาอาฟรีกานส์ ==
=== การออกเสียง ===
* {{audio|af|LL-Q14196 (afr)-Oesjaar-kalender.wav}}
=== คำนาม ===
{{af-noun|kalenders}}
# [[ปฏิทิน]]
== ภาษาอินโดนีเซีย ==
{{wp|id:}}
=== รากศัพท์ 1 ===
จาก{{bor|id|nl|kalender}}, จาก{{der|id|la|calendarium}}
==== การออกเสียง ====
{{id-pr|ka.lèn.der}}
==== คำนาม ====
{{id-noun|head=kalèndêr}}
# [[ปฏิทิน]]:
## ระบบใด ๆ ที่ใช้แบ่งเวลาออกเป็นวัน สัปดาห์ เดือน และปี
## วิธีการกำหนดวันที่ซึ่งประกอบด้วยเอกสารที่มีวันที่และข้อมูลเวลาอื่น ๆ
##: {{syn|id|almanak|daftar hari bulan|penanggalan|takwim|tanggalan}}
## ตารางเวลา: รายการหรือการเรียงลำดับเหตุการณ์อย่างเป็นระเบียบ
##: {{syn|id|jadwal}}
===== รูปแบบอื่น =====
* {{alt|id|kalendar||มลายูมาตรฐาน}}
===== คำลูกกลุ่ม =====
{{col|id|
| kalender acara| kalender akademik| kalender Buddhis| kalender bulan| kalender Cina| kalender editorial| kalender gerejawi| kalender gregorian| kalender Haab| kalender hijriah| kalender Jawa| kalender kamariah| kalender kehamilan| kalender kesuburan| kalender liturgi| kalender lunar| kalender lunisolar| kalender masehi| kalender matahari| kalender meja| kalender ovulasi| kalender pendidikan| kalender setahun| kalender surya| kalender syamsiah| kalender Tionghoa
}}
=== รากศัพท์ 2 ===
จาก{{bor|id|nl|kalender}}, จาก{{der|id|frm|calandre}}, จาก{{der|id|la-lat|calendra}}, แผลงมาจาก{{der|id|la|cylindrus||ทรงกระบอก}}, จาก{{der|id|grc|κύλινδρος}}
==== การออกเสียง ====
{{id-pr|ka.lèn.der}}
==== คำนาม ====
{{id-noun|head=kalèndêr}}
# [[เครื่องรีดผิว]] (เครื่องจักรที่ใช้สำหรับทำให้ผ้า กระดาษ ฯลฯ มีพื้นผิวเรียบเนียน เงาวาว หรือเป็นมันเงา)
=== อ่านเพิ่ม ===
* {{R:KBBI Daring}}
== ภาษาเอสโตเนีย ==
{{wp|et:}}
=== รากศัพท์ ===
จาก{{der|et|de|Kalender}}, แรกสุดจาก{{der|et|la|calendārium|t=สมุดบัญชี}}
=== การออกเสียง ===
* {{et-IPA|kaˈlender}}
* {{rhymes|et|ender|s=3}}
* {{hyph|et|ka|len|der}}
=== คำนาม ===
{{et-noun|kalendri|kalendrit}}
# [[ปฏิทิน]]
## [[ระบบ]][[ลำดับเวลา]]ที่แน่นอน
##: {{ux|et|Maiade '''kalendri''' järgi algab detsembris uus ajastu.|According to the Mayan '''calendar''', a new era starts this December.}}
## [[ตาราง]]หรือ[[หนังสือ]]ที่มีรายการ[[วัน]]และ[[เดือน]]ของ[[ปี]] [[วันหยุด]]ประจำชาติ และวันหยุดตามวัฒนธรรม ตลอดจน[[ข้อมูล]]และ[[รายละเอียด]]อื่น ๆ
##: {{ux|et|Vaatasin '''kalendrist''' järele, et jõulud on sel aastal neljapäeval.|I checked the '''calendar''', and found out that Christmas is on a Thursday this year.}}
==== การผันรูป ====
{{et-decl-õpik|kalend|ri|er}}
==== ลูกคำ ====
* {{l|et|kalendaarium}}
* {{l|et|kalendriline}}
=== อ้างอิง ===
* {{R:Sõnaveeb}}
{{C|et|เวลา}}
r7twreq1y31tx2axb1pjvsef3emo4ma
haben
0
299920
5754477
5645655
2026-08-06T07:20:03Z
OctraBot
3198
update template use
5754477
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== รูปแบบอื่น ===
* {{alter|de|ham||การสะกดแบบไม่เป็นทางการ}}
* {{alter|de|han||โบราณ|ภาษาถิ่น}}
=== รากศัพท์ ===
{{etymon|de|:inh|gmh:hān<id:have>|id=have}}
จาก{{inh|de|gmh|han|haben}}, จาก{{inh|de|goh|habēn}} (ร่วมเชื้อสายกับ{{cog|osx|hebbian}}, {{cog|non|hafa}} ({{cog|sv|hava}}/{{m|sv|ha}}), {{cog|ofs|habba}}, {{cog|got|𐌷𐌰𐌱𐌰𐌽}}, {{cog|ang|habban}}), จาก{{inh|de|gmw-pro|*habbjan}}, จาก{{inh|de|gem-pro|*habjaną}}, จาก{{der|de|ine-pro|*keh₂p-||to grasp}}; ร่วมเชื้อสายกับ{{cog|bar|håbn}}, {{cog|yi|האָבן}}, {{cog|nl|hebben}}, {{cog|en|have}}, {{cog|da|have}}
=== การออกเสียง ===
* {{IPA|de|/ˈhaːbən/|[ˈhäːbən]|[ˈhäːbn̩]|[ˈhäːbm̩]|aa=มาตรฐาน}}
* {{IPA|de|/ham/|aa=สามัญ; โดยเฉพาะในรูปปัจจุบันกาล พบในรูปกริยากลาง (infinitive) ได้บางโอกาส}} {{attn|de|[ham̩] ?}}
* {{audio|de|De-haben.ogg}}
* {{audio|de|De-haben3.ogg}}
* {{audio|de|De-haben4.ogg}}
* {{hyph|de|ha|ben}}
* {{rhymes|de|aːbn̩|s=2}}
=== คำกริยา ===
{{de-verb|haben<irreg>}}
# {{lb|de|auxiliary|+ กริยารูป [[past participle]]}} {{non-gloss definition|ใช้สร้างประโยคกาลสมบูรณ์}}
#: {{uxi|de|Ich '''habe''' [[schon]] '''[[gegessen]]'''.|ฉันกินข้าวแล้ว}}
#: {{uxi|de|Wir '''haben''' [[täglich]] [[außer]] [[Samstag]] '''[[geöffnet]]'''.|พวกเราเปิดทุกวันยกเว้นวันเสาร์}}
# {{lb|de|transitive}} [[มี]] (สิ่งครอบครอง, คุณสมบัติ, สิ่งบรรจุ, ความรู้สึก, ปริมาณ)
#: {{uxi|de|Ich '''habe''' ein [[Auto]], eine [[Frau]] [[und]] [[zwei]] [[Kinder]].|ฉันมีรถหนึ่งคัน ภรรยาและลูกสองคน}}
#: {{uxi|de|Er '''hat''' [[blau]]e [[Auge]]n und [[lang]]e [[Bein]]e.|เขามีตาสีน้ำเงินและขายาว}}
#: {{uxi|de|'''Habt''' ihr [[heute]] [[Zeit]]?|วันนี้พวกเธอมีเวลาไหม}}
#: {{uxi|de|Du '''hast''' ein [[gut]]es [[Gedächtnis]].|เธอมีความจำดี}}
#: {{uxi|de|Sie '''hat''' [[Geduld]], [[Mut]], [[Angst]], [[Hoffnung]].|หล่อนมีความอดทน, ความกล้า, ความกลัว, ความหวัง}}
#: {{uxi|de|Kinder '''haben''' [[Hunger]], [[Durst]], [[Fieber]].|เด็ก ๆ หิวข้าว, หิวน้ำ, มีไข้}}
#: {{uxi|de|Ein [[Kilo]] '''hat''' 1000 [[Gramm]].|หนึ่งกิโลมีหนึ่งพันกรัม}}
# {{lb|de|transitive}} [[ได้]][[รับ]]
#: {{uxi|de|[[können|Kann]] ich [[mal]] das [[Handtuch]] '''haben'''?|ฉันขอผ้าเช็ดมือหน่อยได้ไหม}}
# ('''''[[zu]]''' + รูปกริยากลาง'') [[ต้อง]]
#: {{syn|de|müssen}}
#: {{uxi|de|Ich '''habe''' heute [[viel]] '''zu''' [[erledigen]].|วันนี้ฉันมีหลายอย่างที่'''ต้อง'''ทำให้เสร็จ}}
# {{lb|de|transitive|ปาก}} [[เรียน]]
#: {{syn|de|lernen}}
#: {{uxi|de|Wir '''haben''' [[im]] [[Gymnasium]] [[Latein]] und [[Griechisch]].|พวกเราเรียนภาษาละตินและภาษากรีกที่โรงเรียนมัธยม}}
# {{lb|de|transitive|ปาก}} [[เจอ]], [[จับ]][[ได้]]
#: {{uxi|de|Die [[Polizei]] '''hat''' den [[Ausbrecher]].|ตำรวจจับนักโทษหนีคุกได้}}
#: {{uxi|de|'''Hab''' [[dich]]!|ฉันเจอเธอแล้ว/ฉันจับเธอได้แล้ว!}}
==== การผัน ====
{{de-conj|haben<irreg>}}
==== คำแผลง ====
{{col4|de|Habe|Haben|habhaft|häbig|Gehabe}}
==== ลูกคำ ====
{{col4|de|Habenichts|Habgier|Habsucht|Habseligkeit}}
{{col4|de|haben können|abhaben|anhaben|aufhaben|dahaben|dabeihaben|gernhaben|herhaben|innehaben|liebhaben|mithaben|teilhaben|umhaben|unterhaben|voraushaben|vorhaben|weghaben|zuhaben}}
=== อ่านเพิ่ม ===
* {{R:de:DWDS}}
s2cdf50rn83a5z28h4vndmet1qwnifu
bromance
0
336651
5754508
2187973
2026-08-06T08:23:10Z
OctraBot
3198
/* รากศัพท์ */ มาจากการบัญญัติ
5754508
wikitext
text/x-wiki
== ภาษาอังกฤษ ==
{{wikipedia}}
=== รากศัพท์ ===
{{blend|en|bro|romance}}; {{coinage|en|Dave Carnie|in=1990s|nat=ชาวอเมริกัน|occ=บรรณาธิการ|nobycat=1}} as part of an article for the skateboard magazine ''{{w|Big Brother (magazine)|Big Brother}}'' to refer specifically to the sort of relationships that develop between skaters who spent a great deal of time together.<ref name =grandbromance>{{cite-journal
| last=Elliott
| first=Tim
| title=A grand bromance
| work=The Age
| date=2007-08-23
| url=http://www.theage.com.au/news/relationships/a-grand-bromance/2007/08/23/1187462423868.html
| accessdate=2008-10-28}}</ref>
=== การออกเสียง ===
* {{IPA|en|/ˈbɹoʊmæns/|a=GA}}
* {{IPA|en|/ˈbɹəʊmæns/|a=RP}}
* {{audio|en|En-au-bromance.ogg|a=AU}}
* {{hyph|en|bro|mance}}
=== คำนาม ===
{{en-noun|~}}
# {{lb|en|ไม่ทางการ}} [[ความสัมพันธ์]][[รักใคร่]][[ระหว่าง]][[ผู้ชาย]] [[โดย]][[ไม่]][[เกี่ยว]][[กับ]][[เรื่อง]][[ทาง]][[เพศ]]
#: ''There is a '''bromance''' between Josh and David.''
#* {{quote-journal
| en
| title=WORD
| url=https://www.grindtv.com/surf/word-3-7/
| accessdate=2018-01-06
| magazine=TransWorld Surf
| year=2001
| month=April
| page=40
| passage='''Bromance'''—Romance between bros. Example: ‘It looks like there's a bit of '''bromance''' between Ryan and Matt.’
}}
#* {{RQ:Bolton Room|96|The letter was pure puffery, probably written by some clerk in North Korea's agitprop bureau, but Trump loved it. This was the beginning of the Trump-Kim '''bromance'''.}}
==== คำพ้องความ ====
* {{l|en|brolationship}}
* {{l|en|man crush}}
==== คำเกี่ยวข้อง ====
* {{l|en|girl crush}}
* {{l|en|sismance}}
* {{l|en|womance}}
==== ลูกคำ ====
* {{l|en|bromancey}}
* {{l|en|bromantic}}
=== ดูเพิ่ม ===
* {{l|en|romantic friendship}}
* {{l|en|queerplatonic}}
=== อ้างอิง ===
<references/>
=== คำสลับอักษร ===
* {{anagrams|en|a=abcemnor|Camborne}}
[[หมวดหมู่:English coinages]]
{{topics|en|เพศชาย}}
qpvk2wmhonbfinyv0qudwsaeyvgfql9
kalendere
0
513640
5754423
5129049
2026-08-06T04:09:10Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754423
wikitext
text/x-wiki
== ภาษาเดนมาร์ก ==
=== คำนาม ===
{{head|da|รูปนาม|g=c}}
# {{inflection of|da|kalender||indef|p}}
== ภาษานอร์เวย์แบบบุ๊กมอล ==
=== รูปแบบอื่น ===
* {{alt|nb|kalendre}}
* {{alt|nb|kalendrer}}
=== คำนาม ===
{{head|nb|รูปนาม|g=m}}
# {{inflection of|nb|kalender||indefinite|p}}
== ภาษาอังกฤษกลาง ==
=== คำนาม ===
{{head|enm|คำนาม|altform=1}}
# {{alternative form of|enm|kalender}}
1syhxsv9imk5q4nbsozpmx5g74vdjdf
kalenderen
0
513641
5754424
5129052
2026-08-06T04:09:20Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754424
wikitext
text/x-wiki
== ภาษาเดนมาร์ก ==
=== คำนาม ===
{{head|da|รูปนาม|g=c}}
# {{inflection of|da|kalender||def|s}}
== ภาษานอร์เวย์แบบนือนอสก์ ==
=== คำนาม ===
{{head|nn|รูปนาม|g=m}}
# {{inflection of|nn|kalender||def|s}}
== ภาษานอร์เวย์แบบบุ๊กมอล ==
=== คำนาม ===
{{head|nb|รูปนาม|g=m}}
# {{inflection of|nb|kalender||definite|s}}
5pb4mn7pr3wljeeao8s37fieq6ap3o5
kalenderne
0
513642
5754422
5129053
2026-08-06T04:09:01Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754422
wikitext
text/x-wiki
== ภาษาเดนมาร์ก ==
=== คำนาม ===
{{head|da|รูปนาม|g=c}}
# {{inflection of|da|kalender||def|p}}
== ภาษานอร์เวย์แบบบุ๊กมอล ==
=== รูปแบบอื่น ===
* {{alt|nb|kalendrene}}
=== คำนาม ===
{{head|nb|รูปนาม|g=m}}
# {{inflection of|nb|kalender||definite|p}}
hma0xktgmsht3wmh3q4g85vgcgkq9kr
มอดูล:etymon
828
576414
5754439
5727304
2026-08-06T04:30:02Z
Octahedron80
267
5754439
Scribunto
text/plain
--[=[
This module implements the {{etymon}} template for structured etymology data on Wiktionary.
It enables the creation of etymology trees and text by parsing etymon chains,
scraping linked pages for their own {{etymon}} data, and recursively building a tree
of derivational relationships.
Authors:
- Original implementation: [[User:Ioaxxere]]
- Full refactor (September 2025): [[User:Fenakhay]] ([[Special:Diff/86717746]])
Modules:
- [[Module:etymon]]: main module handling parsing, validation, tree building, and page scraping
- [[Module:etymon/data]]: keyword definitions, configuration, and status constants
- [[Module:etymon/tree]]: etymology tree rendering
- [[Module:etymon/text]]: etymology text generation
- [[Module:etymon/categories]]: category generation logic
- [[Module:etymon/tracking]]: tracking
]=]
local export = {}
local __state = {
cached_etymon_args = {},
cached_etymon_pages = {},
cached_descendants_checks = {},
senseid_parent_etymon = {},
available_etymon_ids = {},
single_etymons = {},
entry_title = nil,
entry_lang_code = nil,
current_page_has_inline_etymology = false,
current_page_has_redundant_etymology = false,
used_idless_etymon = false,
toplevel_has_inline_etymology = false,
toplevel_redundant_etymology = false,
toplevel_idless_etymon = false,
has_mismatched_id = false,
linked_page_multiple_etymons_idless = false,
linked_page_partial_etymology_sections = false,
partial_etymology_targets = {},
skip_partial_etymology_category = false,
max_depth_reached = 0,
total_nodes = 0,
language_count = {},
toplevel_keyword_stats = {},
id_stats = nil,
warnings = {},
}
local function reset_invocation_state()
__state.current_page_has_inline_etymology = false
__state.current_page_has_redundant_etymology = false
__state.used_idless_etymon = false
__state.toplevel_has_inline_etymology = false
__state.toplevel_redundant_etymology = false
__state.toplevel_idless_etymon = false
__state.has_mismatched_id = false
__state.linked_page_multiple_etymons_idless = false
__state.linked_page_partial_etymology_sections = false
__state.max_depth_reached = 0
__state.total_nodes = 0
__state.language_count = {}
__state.toplevel_keyword_stats = {}
__state.warnings = {}
end
local M = require("Module:module loader").init({
require = {
data = "Module:etymon/data",
tree = "Module:etymon/tree",
text = "Module:etymon/text",
categories = "Module:etymon/categories",
tracking = "Module:etymon/tracking",
descendants = "Module:etymon/descendants",
anchors = "Module:anchors",
etydate = "Module:etydate",
etymology = "Module:etymology",
families = "Module:families",
languages = "Module:languages",
languages_errorgetby = "Module:languages/errorGetBy",
links = "Module:links",
pages = "Module:pages",
parameters = "Module:parameters",
string_utilities = "Module:string utilities",
template_parser = "Module:template parser",
utilities = "Module:utilities",
debug = "Module:debug",
en_utilities = "Module:en-utilities",
parse_utilities = "Module:parse utilities",
references = "Module:references",
template_styles = "Module:TemplateStyles",
script_utilities = "Module:script utilities",
JSON = "Module:JSON",
yesno = "Module:yesno",
},
loadData = {
headword_data = "Module:headword/data",
parameters_data = "Module:parameters/data",
text_allowed = "Module:etymon/data/text_allowed",
},
})
local Util = {}
function Util.format_error(message, preview_only)
if preview_only and not M.pages.is_preview() then
return nil
end
return '<span class="error">' .. message .. '</span>'
end
function Util.add_warning(message, preview_only)
local formatted = Util.format_error(message, preview_only)
if formatted then
table.insert(__state.warnings, formatted)
end
end
function Util.is_text_param_allowed_for_lang(lang)
if not lang or type(lang) ~= "table" then
return false
end
local types = lang.getTypes and lang:getTypes()
if types and types.family then
local code = lang.getCode and lang:getCode()
return code and M.text_allowed.families[code] == true
end
local full_code = lang.getFullCode and lang:getFullCode()
if full_code and M.text_allowed.langs[full_code] then
return true
end
if lang.inFamily then
for family_code in pairs(M.text_allowed.families) do
if lang:inFamily(family_code) then
return true
end
end
end
return false
end
function Util.get_lang(code, no_error)
if no_error then
return M.languages.getByCode(code, nil, true)
end
return M.languages.getByCode(code, nil, true) or M.languages_errorgetby.code(code, true, true)
end
-- Match a term language against a text=:lang stop target (supports etymology-only codes).
function Util.lang_matches_stop_code(term_lang, stop_code)
if not term_lang or not stop_code or stop_code == "" then
return false
end
local stop_lang = Util.get_lang(stop_code, true)
if not stop_lang then
return false
end
if term_lang:getCode() == stop_lang:getCode() then
return true
end
if stop_lang:getFullCode() == stop_lang:getCode() then
return term_lang:getFullCode() == stop_lang:getCode()
end
return false
end
function Util.get_family(code)
return M.families.getByCode(code)
end
function Util.get_lang_exception(lang)
-- Families have no language-specific exceptions
if lang.getTypes and lang:getTypes().family then
return nil
end
local code = lang:getCode()
local lang_exceptions = M.data.config.lang_exceptions
if lang_exceptions[code] then
return lang_exceptions[code]
end
for norm_code, exc in pairs(lang_exceptions) do
if exc.normalize_to and code == exc.normalize_to then
return exc
end
if exc.normalize_from_families then
local should_normalize = false
for _, family in ipairs(exc.normalize_from_families) do
if lang:inFamily(family) then
should_normalize = true
break
end
end
if should_normalize and exc.normalize_exclude_families then
for _, family in ipairs(exc.normalize_exclude_families) do
if lang:inFamily(family) then
should_normalize = false
break
end
end
end
if should_normalize then
local ret = {}
for k, v in pairs(exc) do
ret[k] = v
end
ret.suppress_tr = nil
return ret
end
end
end
return nil
end
function Util.get_norm_lang(lang)
local exc = Util.get_lang_exception(lang)
if exc and exc.normalize_to then
return M.languages.getByCode(exc.normalize_to)
end
return lang
end
function Util.resolve_context_lang(lang, node_args)
if type(node_args) ~= "table" then return lang end
if node_args.status == M.data.STATUS.INLINE then return lang end
if not (lang.hasType and lang:hasType("etymology-only")) then return lang end
local full = lang.getFull and lang:getFull()
if not full or full:getCode() == lang:getCode() then return lang end
if full.hasAncestor and full:hasAncestor(lang) then return lang end
return full
end
-- Add default values for boolean modifiers (e.g., <unc> becomes <unc:1>)
-- This is needed because Module:parse utilities expects boolean modifiers to have explicit values
function Util.add_boolean_defaults(str, param_mods)
local result = str
for name, spec in pairs(param_mods) do
if spec.type == "boolean" then
-- Replace <name> with <name:1> (but not <name:...> which already has a value)
result = result:gsub("<" .. name .. ">", "<" .. name .. ":1>")
end
end
return result
end
local REQUEST_TEMPLATE_PARAM_MODS = {
rfe = {
nocat = { type = "boolean" },
sort = {},
y = {},
m = {},
fragment = {},
section = {},
box = { type = "boolean" },
noes = { type = "boolean" },
},
etystub = {
nocat = { type = "boolean" },
sort = {},
nocap = { type = "boolean" },
nodot = { type = "boolean" },
},
}
function Util.expand_request_template(frame, template_name, param_value, lang_code)
local param_mods = REQUEST_TEMPLATE_PARAM_MODS[template_name]
local with_defaults = Util.add_boolean_defaults(param_value, param_mods)
local parsed = M.parse_utilities.parse_inline_modifiers(with_defaults, {
param_mods = param_mods,
generate_obj = function(text)
if M.yesno(text, false) then
return { is_boolean = true }
end
return { text = text }
end,
})
local template_args = { [1] = lang_code }
for name in pairs(param_mods) do
template_args[name] = parsed[name]
end
if not parsed.is_boolean then
template_args[2] = parsed.text
end
return " " .. frame:expandTemplate({
title = template_name,
args = template_args,
})
end
-- Centralized term formatting: handles suppress_term (-), unknown_term (empty/+), and regular terms
function Util.format_term(term, is_toplevel, opts)
opts = opts or {}
-- suppress_term (-) returns nil
if term.suppress_term then
return nil
end
local lang = term.lang
local exc = Util.get_lang_exception(lang)
if is_toplevel then
local display_text = term.alt or term.title or ""
local sc = term.sc or lang:findBestScript(display_text)
local bold_text = tostring(mw.html.create("strong")
:addClass("selflink")
:wikitext(display_text))
return M.script_utilities.tag_text(bold_text, lang, sc, "term")
end
local link_params = { lang = lang }
link_params.term = not term.unknown_term and term.title or nil
link_params.alt = term.alt
link_params.id = (not term.unknown_term and term.id and term.id ~= "") and term.id or nil
if not (exc and exc.suppress_tr) then
link_params.tr = term.tr
link_params.ts = term.ts
else
link_params.suppress_tr = true
end
link_params.lit = (opts.lit ~= "suppress") and term.lit or nil
if opts.gloss ~= "suppress" then
link_params.gloss = term.t
end
if term.g and term.g ~= "" then
local genders = M.string_utilities.split(term.g, ",")
for i = 1, #genders do
genders[i] = M.string_utilities.trim(genders[i])
end
link_params.genders = genders
end
if opts.pos ~= "suppress" then
link_params.pos = term.pos
link_params.ng = term.ng
end
if exc and exc.suppress_tr then
link_params.lit = nil
end
local show_qualifiers
if opts.tree_ql ~= "suppress" then
if term.q then
link_params.q = term.q
end
if term.qq then
link_params.qq = term.qq
end
if term.l then
link_params.l = term.l
end
if term.ll then
link_params.ll = term.ll
end
show_qualifiers = term.q or term.qq or term.l or term.ll
end
return M.links.full_link(link_params, "term", nil, show_qualifiers and true or nil)
end
local __is_content_page_cached
function Util.is_content_page()
if __is_content_page_cached == nil then
__is_content_page_cached = M.pages.is_content_page(mw.title.getCurrentTitle())
end
return __is_content_page_cached
end
local __page_data_cached
function Util.get_page_data()
if not __page_data_cached then
__page_data_cached = M.headword_data.page
end
return __page_data_cached
end
-- Extract base keyword from param (without modifiers)
local function get_keyword_base(param)
if type(param) ~= "string" then return nil end
local base = param:match("^:?([^<]+)") or param:gsub("^:", "")
return base
end
local function is_keyword(param, allow_colon_less)
if type(param) ~= "string" then return false end
local keywords = M.data.keywords
if param:sub(1, 1) == ":" then
local base = get_keyword_base(param)
return keywords[base] ~= nil
end
if allow_colon_less then
local base = get_keyword_base(param)
return keywords[base] ~= nil
end
return false
end
local function get_keyword(param, allow_colon_less)
if type(param) ~= "string" then return nil end
local keywords = M.data.keywords
if param:sub(1, 1) == ":" then
return get_keyword_base(param)
end
if allow_colon_less then
local base = get_keyword_base(param)
if keywords[base] then
return base
end
end
return nil
end
local function normalize_keyword(keyword)
if keyword:sub(1, 1) == ":" then
return keyword
end
return ":" .. keyword
end
-- Resolve keyword (possibly an alias) to its canonical form. Used only at input boundaries
local function get_canonical_keyword(keyword)
if not keyword then return keyword end
return M.data.keyword_canonical[keyword] or keyword
end
local function is_affix_group_keyword(keyword)
local config = keyword and M.data.keywords[keyword]
return config and config.affix_categories or false
end
local function reject_removed_surf_keyword(param)
local base = get_keyword_base(param)
if base == "surf" then
error("The `:surf` keyword has been removed. Use `<surf>` on a formation keyword instead (e.g. `:af<surf>`, `:bor<surf>`).")
end
end
local function copy_keyword_info(source)
local copy = {}
for k, v in pairs(source) do
copy[k] = v
end
return copy
end
local function lowercase_glossary_display(text)
return text:gsub("(%[%[Appendix:Glossary#[^|]+|)([^%]])([^%]]*)%]%]", function(prefix, first, rest)
return prefix .. mw.ustring.lower(first) .. rest .. "]]"
end)
end
local function surf_should_keep_formation_phrase(base)
if not base.phrase then
return false
end
if base.glossary then
return true
end
return not (base.phrase == "from" and (base.text == "From" or base.text == "from"))
end
-- Runtime overrides when <surf> is present on a keyword.
local function get_effective_keyword_info(keyword, modifiers)
local base = M.data.keywords[keyword]
if not base or not modifiers or not modifiers.surf then
return base
end
local effective = copy_keyword_info(base)
local surf_text = "By [[Appendix:Glossary#surface_analysis|surface analysis]],"
local surf_phrase = "by surface analysis,"
effective.new_sentence = true
effective.invisible = "tree"
if surf_should_keep_formation_phrase(base) then
effective.phrase = surf_phrase .. " " .. base.phrase
if base.text then
effective.text = surf_text .. " " .. lowercase_glossary_display(base.text)
else
effective.text = surf_text .. " " .. base.phrase
end
else
effective.text = surf_text
effective.phrase = surf_phrase
end
return effective
end
-- Build text/phrase for nominalization with <g:code> (uses data module for codes only).
local function get_nominalization_label_for_g(code)
if not code or code == "" then return nil end
local codes = M.data.nominalization_g_codes
local adj = codes[code]
if not adj and #code == 2 then
local gender_adj = codes[code:sub(1, 1)]
local number_adj = codes[code:sub(2, 2)]
if gender_adj and number_adj then
adj = gender_adj .. " " .. number_adj
end
end
if not adj then return nil end
local text = adj:gsub("^%l", function(c) return string.upper(c) end) .. " [[Appendix:Glossary#nominalization|nominalization]] of"
local phrase = M.en_utilities.add_indefinite_article(adj .. " [[Appendix:Glossary#nominalization|nominalization]] of", false)
return { text = text, phrase = phrase }
end
local EtymonParser = {}
-- Keyword modifier definitions
EtymonParser.keyword_param_mods = {
unc = { type = "boolean" },
ref = {},
text = { restrict = { keywords = { "from", "derived" } } },
lit = { restrict = { affix_group = true } },
conj = {}, -- conjunction for alternatives: "and", "or", "and/or", etc.
g = { restrict = { keywords = { "nominalization" } } },
surf = { type = "boolean" },
senseid = { restrict = { keywords = { "semantic loan" } } },
}
-- Term modifier definitions
EtymonParser.etymon_param_mods = {
id = {},
t = {},
tr = {},
ts = {},
q = {},
qq = {},
l = {},
ll = {},
pos = {},
ng = {},
alt = {},
g = {},
ety = {},
lit = {},
unc = { type = "boolean" },
ref = {},
aftype = { restrict = { affix_group = true } },
postype = {},
bor = { type = "boolean", restrict = { affix_group = true } },
slbor = { type = "boolean", restrict = { affix_group = true } },
lbor = { type = "boolean", restrict = { affix_group = true } },
}
local function get_clean_param_mods(param_mods)
local clean = {}
for mod_name, mod_def in pairs(param_mods) do
clean[mod_name] = {}
for key, value in pairs(mod_def) do
if key ~= "restrict" then
clean[mod_name][key] = value
end
end
end
return clean
end
function EtymonParser.check_modifier_restrictions(modifiers, current_keyword, param_mods)
for mod_name, mod_value in pairs(modifiers) do
-- Only check restrictions if the modifier has a non-false/nil value
if mod_value then
local mod_def = param_mods[mod_name]
if mod_def and mod_def.restrict then
if mod_def.restrict.affix_group then
if not is_affix_group_keyword(current_keyword) then
local mod_display = mod_value == true and "<" .. mod_name .. ">" or "<" .. mod_name .. ":" .. tostring(mod_value) .. ">"
error("The modifier `" .. mod_display .. "` is only allowed for affix-group keywords (e.g. `:af`, `:blend`, `:univ`).")
end
elseif mod_def.restrict.keywords then
local allowed_keywords = mod_def.restrict.keywords
local is_allowed = false
for _, allowed_keyword in ipairs(allowed_keywords) do
if current_keyword == allowed_keyword then
is_allowed = true
break
end
end
if not is_allowed then
local keyword_list = {}
for _, kw in ipairs(allowed_keywords) do
table.insert(keyword_list, ":" .. kw)
end
local keyword_str = table.concat(keyword_list, #keyword_list == 2 and " or " or ", ")
if #keyword_list > 2 then
-- Replace last comma with "or"
keyword_str = keyword_str:gsub(", ([^,]+)$", " or %1")
end
local mod_display = mod_value == true and "<" .. mod_name .. ">" or "<" .. mod_name .. ":" .. tostring(mod_value) .. ">"
error("The modifier `" .. mod_display .. "` is only allowed for the keyword" .. (#keyword_list > 1 and "s " or " ") .. keyword_str .. ".")
end
end
end
end
end
end
local TERM_RULE_DISALLOW = {
suppress = { field = "suppress_term", label = "suppressed" },
unknown = { field = "unknown_term", label = "unknown" },
family = { field = "is_family", label = "family" },
}
function EtymonParser.check_etymon_limits(count, limits, label, opts)
if not limits then
return
end
opts = opts or {}
local min_etymons = limits.min_etymons
if min_etymons == nil and not opts.skip_default_min then
min_etymons = 1
end
if min_etymons and count < min_etymons then
if min_etymons > 1 then
error("Detected " .. label .. " group with fewer than " .. min_etymons .. " etymons.")
else
error("Detected " .. label .. " with no etymons.")
end
end
if limits.max_etymons and count > limits.max_etymons then
local unit = (limits.max_etymons == 1) and "etymon" or "etymons"
error("Detected " .. label .. " with more than " .. limits.max_etymons .. " " .. unit .. ".")
end
end
function EtymonParser.check_term_rules(etymon_data, entry_lang, rules, label)
label = label or "term"
if rules and rules.disallow then
local disallowed = {}
for _, typ in ipairs(rules.disallow) do
local spec = TERM_RULE_DISALLOW[typ]
if spec and etymon_data[spec.field] then
table.insert(disallowed, spec.label)
end
end
if #disallowed > 0 then
error(label .. " does not support " ..
mw.text.listToText(disallowed, "or") .. " etymons.")
end
end
if etymon_data.is_family then
if rules and rules.family == "disallowed" then
error(label .. " does not support family codes" .. (rules.family_suffix or "."))
elseif not etymon_data.suppress_term then
error("Family codes require suppressed term (use family:-).")
end
end
if rules then
if rules.require_term and (not etymon_data.term or etymon_data.term == "") then
error(label .. " requires a term for each listed form.")
end
if rules.entry_lang then
if Util.get_norm_lang(etymon_data.lang):getFullCode() ~=
Util.get_norm_lang(entry_lang):getFullCode() then
error(label .. " terms must be in the entry language (" ..
entry_lang:getFullCode() .. "), got '" .. etymon_data.lang:getFullCode() .. "'.")
end
end
if rules.ancestor_check then
M.etymology.check_ancestor(entry_lang, etymon_data.lang)
end
elseif etymon_data.is_family and not etymon_data.suppress_term then
error("Family codes require suppressed term (use family:-).")
end
end
function EtymonParser.check_keyword_term(etymon_data, entry_lang, keyword)
local config = M.data.keywords[keyword]
EtymonParser.check_term_rules(etymon_data, entry_lang, config and config.term_rules, "`:" .. keyword .. "`")
end
function EtymonParser.check_supplement_term(etymon_data, entry_lang, supplement_type)
local config = M.data.supplements[supplement_type]
EtymonParser.check_term_rules(etymon_data, entry_lang, config and config.term_rules, "|" .. supplement_type .. "=")
end
-- Parse keyword with modifiers (e.g., ":bor<unc>" or ":bor<ref:{{R:example}}>")
function EtymonParser.parse_keyword_modifiers(param)
if type(param) ~= "string" then return nil, {} end
local base_keyword = get_keyword_base(param)
if not base_keyword then return nil, {} end
local canonical_keyword = get_canonical_keyword(base_keyword)
-- Check if there are any modifiers
if not param:find("<", 1, true) then
return canonical_keyword, {}
end
-- Parse modifiers using the same mechanism as etymon parsing
local rest_with_defaults = Util.add_boolean_defaults(param, EtymonParser.keyword_param_mods)
local function generate_obj(ignored)
return {}
end
local parsed = M.parse_utilities.parse_inline_modifiers(rest_with_defaults:gsub("^:?[^<]+", ""),
{ param_mods = get_clean_param_mods(EtymonParser.keyword_param_mods), generate_obj = generate_obj })
local modifiers = {
unc = parsed.unc or false,
ref = parsed.ref,
text = parsed.text,
lit = parsed.lit,
conj = parsed.conj,
g = parsed.g,
surf = parsed.surf or false,
senseid = parsed.senseid,
}
-- Validate modifiers against restrictions
EtymonParser.check_modifier_restrictions(modifiers, canonical_keyword, EtymonParser.keyword_param_mods)
return canonical_keyword, modifiers
end
local function normalize_keyword_param(keyword_with_mods)
local trimmed = M.string_utilities.trim(keyword_with_mods)
reject_removed_surf_keyword(trimmed:match("^:") and trimmed or (":" .. trimmed))
local base = get_keyword_base(trimmed)
if not base or not M.data.keywords[base] then
error("Invalid keyword '" .. trimmed .. "' in inline etymology")
end
local canonical_base = get_canonical_keyword(base)
local without_colon = trimmed:gsub("^:", "")
local mods_part = without_colon:sub(#base + 1)
local kw_param = normalize_keyword(canonical_base .. mods_part)
EtymonParser.parse_keyword_modifiers(kw_param)
return kw_param
end
local function get_keyword_mod_names()
local names = {}
for mod_name in pairs(EtymonParser.keyword_param_mods) do
names[mod_name] = true
end
return names
end
local function parse_inline_ety_run(ety_string)
local body = ety_string or ""
if body == "" then
error("Empty inline etymology")
end
local keyword_mod_names = get_keyword_mod_names()
local pos = 1
local len = #body
local function parse_err(msg)
error(msg .. " in inline etymology: '" .. body .. "'")
end
local function peek_double()
return body:sub(pos, pos + 1) == "<<"
end
local function mod_name_from_unwrapped(unwrapped)
return unwrapped:match("^<([^:>]+)")
end
local function is_keyword_mod(unwrapped)
local name = mod_name_from_unwrapped(unwrapped)
return name and keyword_mod_names[name] or false
end
local function read_double_bracket()
if not peek_double() then
return nil
end
local start = pos
pos = pos + 2
while pos <= len - 1 do
if body:sub(pos, pos + 1) == ">>" then
local token = body:sub(start, pos + 1)
pos = pos + 2
return token, token:sub(2, -2)
end
pos = pos + 1
end
parse_err("Unmatched <<")
end
local function read_angle_cell()
if body:sub(pos, pos) ~= "<" or peek_double() then
return nil
end
local open = pos
pos = pos + 1
local depth = 1
local i = pos
while i <= len do
local ch = body:sub(i, i)
if ch == "<" then
depth = depth + 1
elseif ch == ">" then
depth = depth - 1
if depth == 0 then
local inner = body:sub(open + 1, i - 1)
pos = i + 1
return inner
end
end
i = i + 1
end
parse_err("Unmatched <")
end
local function read_bare_run()
local start = pos
while pos <= len and body:sub(pos, pos) ~= "<" do
pos = pos + 1
end
return body:sub(start, pos - 1)
end
local function absorb_double_keyword_mods(keyword_str)
while peek_double() do
local saved = pos
local _, unwrapped = read_double_bracket()
if is_keyword_mod(unwrapped) then
keyword_str = keyword_str .. unwrapped
else
pos = saved
break
end
end
return keyword_str
end
local kw_start = pos
while pos <= len and body:sub(pos, pos) ~= "<" do
pos = pos + 1
end
local keyword = body:sub(kw_start, pos - 1)
if keyword:match("^%s*$") then
parse_err("Missing keyword")
end
keyword = absorb_double_keyword_mods(keyword)
local cells = {}
while pos <= len do
if peek_double() then
local _, unwrapped = read_double_bracket()
if is_keyword_mod(unwrapped) then
parse_err("Unexpected keyword modifier " .. unwrapped .. " outside of a keyword")
end
table.insert(cells, "+" .. unwrapped)
elseif body:sub(pos, pos) == "<" then
local inner = read_angle_cell()
if inner ~= "" then
table.insert(cells, inner)
end
else
local bare = read_bare_run()
if bare ~= "" then
if bare:sub(1, 1) ~= ":" then
parse_err("Unexpected bare text '" .. bare .. "' (use :keyword for nested keywords in inline etymology)")
end
if not is_keyword(bare, true) then
parse_err("Invalid keyword '" .. bare .. "' in inline etymology")
end
table.insert(cells, absorb_double_keyword_mods(bare))
end
end
end
return {
keyword = keyword,
cells = cells,
}
end
function EtymonParser.inline_ety_to_pipe(ety_string)
local run = parse_inline_ety_run(ety_string)
if not run.keyword or run.keyword:match("^%s*$") then
return "|"
end
local pipe_parts = { normalize_keyword_param(M.string_utilities.trim(run.keyword)) }
for _, segment in ipairs(run.cells) do
if is_keyword(segment, true) then
table.insert(pipe_parts, normalize_keyword_param(segment))
else
table.insert(pipe_parts, segment)
end
end
return "|" .. table.concat(pipe_parts, "|") .. "|"
end
function EtymonParser.pipe_to_inline_ety(pipe_string)
local cells = {}
for cell in pipe_string:gmatch("([^|]+)") do
if cell ~= "" then
table.insert(cells, cell)
end
end
if #cells == 0 then
return ""
end
local inline_parts = {}
for index, cell in ipairs(cells) do
local base = get_keyword_base(cell)
if base and M.data.keywords[base] then
local without_colon = cell:gsub("^:", "")
local kw_base, mods = without_colon:match("^([^<]+)(.*)$")
local inline_kw = (kw_base or without_colon) .. (mods or ""):gsub("<([^>]+)>", "<<%1>>")
if index > 1 then
inline_kw = ":" .. inline_kw
end
table.insert(inline_parts, inline_kw)
elseif cell:sub(1, 1) == "+" then
local mod = cell:sub(2)
if mod:match("^<.->$") then
mod = mod:sub(2, -2)
end
table.insert(inline_parts, "<<" .. mod .. ">>")
else
table.insert(inline_parts, "<" .. cell .. ">")
end
end
return table.concat(inline_parts, "")
end
function EtymonParser.parse_inline_ety(ety_string, context_lang)
local run = parse_inline_ety_run(ety_string)
local keyword = M.string_utilities.trim(run.keyword)
reject_removed_surf_keyword(":" .. keyword)
if not is_keyword(keyword, true) then
error("Invalid keyword '" .. keyword .. "' in inline etymology <ety:" .. keyword .. "...>")
end
local args = { context_lang:getCode(), normalize_keyword_param(keyword) }
for _, segment in ipairs(run.cells) do
if is_keyword(segment, true) then
table.insert(args, normalize_keyword_param(segment))
else
table.insert(args, segment)
end
end
return args
end
function EtymonParser.parse_etymon(param, context_lang)
if is_keyword(param) then
return nil
end
if type(param) ~= "string" then
return nil
end
local lang, rest
local is_family = false
local before_bracket = param:match("^([^<]*)") or param
local lang_code, rest_match = before_bracket:match("^([a-zA-Z][a-zA-Z0-9._-]*):(.*)$")
if lang_code then
local potential_lang = Util.get_lang(lang_code, true)
if potential_lang then
lang = potential_lang
rest = param:sub(#lang_code + 2)
else
local potential_family = Util.get_family(lang_code)
if potential_family then
lang = potential_family
rest = param:sub(#lang_code + 2)
is_family = true
else
lang = context_lang
rest = param
end
end
else
lang = context_lang
rest = param
end
M.tracking.track_term(rest)
if rest == "" or rest == "+" then
return {
lang = lang,
term = nil,
unknown_term = true,
is_family = is_family,
}
end
if rest == "-" then
return {
lang = lang,
term = nil,
suppress_term = true,
is_family = is_family,
}
end
if not rest:find("<", 1, true) then
return {
lang = lang,
term = M.string_utilities.trim(rest),
is_family = is_family,
}
end
local term_text = rest:match("^([^<]*)") or ""
local is_unknown = (term_text == "" or term_text == "+")
local is_suppress = (term_text == "-")
local function generate_obj(ignored_term)
return { term = (is_unknown or is_suppress) and nil or M.string_utilities.trim(term_text) }
end
local rest_with_defaults = Util.add_boolean_defaults(rest, EtymonParser.etymon_param_mods)
local parsed_obj = M.parse_utilities.parse_inline_modifiers(rest_with_defaults,
{ param_mods = get_clean_param_mods(EtymonParser.etymon_param_mods), generate_obj = generate_obj })
if parsed_obj.id and parsed_obj.id:match("^!") then
parsed_obj.id = parsed_obj.id:sub(2)
parsed_obj.override = true
end
parsed_obj.lang = lang
parsed_obj.is_family = is_family
if is_unknown then
parsed_obj.unknown_term = true
elseif is_suppress then
parsed_obj.suppress_term = true
end
return parsed_obj
end
function EtymonParser.validate(lang, args, id, title, pos, starts_with_lang_code)
-- id is now optional, so only validate if provided
if id then
if mw.ustring.len(id) < 2 then
error("The `id` parameter must have at least two characters.")
end
if id == title or id == Util.get_page_data().pagename then
error("The `id` parameter must not be the same as the page title.")
end
end
local valid_pos = { prefix = true, suffix = true, interfix = true, infix = true, root = true, word = true }
if pos and not valid_pos[pos] then
error("Unknown value provided for `pos`. Valid values: " .. table.concat(require("Module:table").keysToList(valid_pos), ", ") .. ".")
end
local current_keyword = "from"
local current_keyword_explicit = false
local keyword_etymons = {}
local keywords = M.data.keywords
local function checkKeyword()
local config = keywords[current_keyword]
if current_keyword == "from" and not current_keyword_explicit and #keyword_etymons == 0 then
keyword_etymons = {}
return
end
EtymonParser.check_etymon_limits(#keyword_etymons, config, "`:" .. current_keyword .. "`")
keyword_etymons = {}
end
local start_index = starts_with_lang_code and 2 or 1
for i = start_index, #args do
local param = args[i]
if type(param) ~= "string" then
elseif param:sub(1, 1) == ":" and not is_keyword(param) then
reject_removed_surf_keyword(param)
error("Invalid keyword '" .. param .. "'. Did you mean a valid keyword like ':bor', ':inh', etc.?")
elseif is_keyword(param) then
checkKeyword()
current_keyword = get_canonical_keyword(get_keyword(param))
current_keyword_explicit = true
else
local etymon_data = EtymonParser.parse_etymon(param, lang)
if etymon_data then
table.insert(keyword_etymons, param)
EtymonParser.check_keyword_term(etymon_data, lang, current_keyword)
-- Check modifier restrictions
EtymonParser.check_modifier_restrictions(etymon_data, current_keyword, EtymonParser.etymon_param_mods)
-- postype must be "root" or "word"
local VALID_POSTYPES = { root = true, word = true }
if etymon_data.postype and not VALID_POSTYPES[etymon_data.postype] then
error("Invalid <postype:" .. etymon_data.postype .. ">; must be \"root\" or \"word\".")
end
if etymon_data.ety then
local inline_args = EtymonParser.parse_inline_ety(etymon_data.ety, etymon_data.lang)
EtymonParser.validate(etymon_data.lang, inline_args, nil, nil, nil, true)
end
else
table.insert(keyword_etymons, param)
end
end
end
checkKeyword()
end
local DataRetriever = {}
local function format_etymon_id_hint(id_data, idx)
local id = type(id_data) == "table" and id_data.id or id_data
local pos = type(id_data) == "table" and id_data.pos
if id and id ~= "" and id ~= "*" then
return '"' .. id .. '"'
end
if pos and pos ~= "" then
return "unnamed (|pos=" .. pos .. "|)"
end
return "etymon #" .. idx .. " (no |id= on page)"
end
local function etymon_target_page_link(page, norm_lang)
return M.links.full_link({
term = page,
lang = norm_lang,
no_generate_forms = true,
}, "term")
end
-- Summarize {{etymon}} id slots on a linked page for preview warnings.
local function summarize_available_etymon_ids(ids)
local id_list = {}
local all_idless = true
local target_has_idless = false
local any_pos = false
for i, id_data in ipairs(ids) do
local id = type(id_data) == "table" and id_data.id or id_data
local pos = type(id_data) == "table" and id_data.pos
if id and id ~= "" and id ~= "*" then
all_idless = false
else
target_has_idless = true
end
if pos and pos ~= "" then
any_pos = true
end
table.insert(id_list, format_etymon_id_hint(id_data, i))
end
return {
id_list = id_list,
all_idless = all_idless,
target_has_idless = target_has_idless,
any_pos = any_pos,
count = #ids,
options_text = mw.text.listToText(id_list),
}
end
local function ambiguous_etymon_suggestion(page_link, summary)
if summary.all_idless then
if summary.any_pos then
return " None set `|id=` yet; add a unique `|id=` to each on " .. page_link
.. ", then `<id:identifier>` after the term here. Section order / hints: "
.. summary.options_text .. "."
end
return " None set `|id=` yet; add a unique `|id=` to each {{etymon}} in that section from top to bottom, then `<id:identifier>` after the term here (same value as `|id=`)."
end
return " Specify which one with `<id:identifier>` after the term. Options: " .. summary.options_text .. "."
end
local function warn_ambiguous_etymon_link(page, norm_lang, ids, is_toplevel)
local page_link = etymon_target_page_link(page, norm_lang)
local summary = summarize_available_etymon_ids(ids)
if is_toplevel and summary.target_has_idless then
__state.linked_page_multiple_etymons_idless = true
end
local lang_name = norm_lang:getCanonicalName()
local lead = "Etymology link to " .. page_link .. " is ambiguous (" .. summary.count
.. " {{etymon}} templates for " .. lang_name .. ")."
Util.add_warning(lead .. ambiguous_etymon_suggestion(page_link, summary), true)
end
local function is_mismatched_explicit_id(base_key, cached_args, parent_etymon)
return cached_args == M.data.STATUS.MISSING and not parent_etymon
and #(__state.available_etymon_ids[base_key] or {}) > 0
end
local function maybe_flag_partial_etymology_reference(base_key, etymon_data, cached_args, is_toplevel)
if not is_toplevel or __state.skip_partial_etymology_category then
return
end
if not __state.partial_etymology_targets[base_key] then
return
end
if etymon_data.id and type(cached_args) == "table" then
return
end
__state.linked_page_partial_etymology_sections = true
end
local function is_nonlemma_etymon_template(template_args)
return template_args and M.yesno(template_args.nl, false)
end
local function warn_mismatched_explicit_id(page, norm_lang, base_key, etymon_id)
local page_link = etymon_target_page_link(page, norm_lang)
local summary = summarize_available_etymon_ids(__state.available_etymon_ids[base_key] or {})
local lang_name = norm_lang:getCanonicalName()
local lead = "Etymology link to " .. page_link .. " uses `<id:" .. etymon_id
.. ">`, but no {{etymon}} on that page has `|id=" .. etymon_id .. "|` for " .. lang_name .. "."
Util.add_warning(lead .. " Valid IDs: " .. summary.options_text .. ".", true)
end
-- Given an etymon data, scrape its page and cache the result in the global state object.
function DataRetriever.cache_page_etymons(etymon_page, etymon_title, key, etymon_lang, etymon_id, redirected_from, descendants_is_toplevel)
local content = etymon_title:getContent()
if not content then
__state.cached_etymon_args[key] = M.data.STATUS.REDLINK
return
end
-- Check if the linked page is a redirect. If it is, the template parsing
-- code below will be effectively skipped, and `scrape_page` will be called
-- again on the redirect target (see the bottom of this function)
local lang_section_for_descendants = nil
local redirect_target = etymon_title.redirect_target
if not redirect_target then
content = M.pages.get_section(content, etymon_lang:getFullName(), 2)
if not content then
__state.cached_etymon_args[key] = M.data.STATUS.MISSING
return
end
lang_section_for_descendants = content
end
local etymon_lang_code = etymon_lang:getFullCode()
local lang_page_key = etymon_lang_code .. ":" .. etymon_page
local found_templates_for_lang = {}
local found_ids = {}
local get_node_class = M.template_parser.class_else_type
-- Look for all {{etymon}} templates within the page content using the template parser
-- This way the same page is never parsed more than once
-- Build a map from senseids to their parent etymonids.
local active_etymon_args = nil
local etymology_section_count = 0
local etymology_sections_with_etymon = 0
local current_etymology_has_etymon = false
local current_etymology_has_nonlemma = false
local function finalize_current_etymology_section()
if etymology_section_count == 0 then
return
end
if current_etymology_has_etymon or current_etymology_has_nonlemma then
etymology_sections_with_etymon = etymology_sections_with_etymon + 1
end
current_etymology_has_etymon = false
current_etymology_has_nonlemma = false
end
for node in M.template_parser.parse(content):iterate_nodes() do
local node_class = get_node_class(node)
if node_class == "heading" then
-- A new L2 or etymology section acts as a barrier: an {{etymon}} usage
-- used previously cannot be the parent of any subsequent senseids.
-- Note that we don't have to check for L2s due to the usage of `M.pages.get_section` above.
if node:get_name():find("^Etymology") then
finalize_current_etymology_section()
etymology_section_count = etymology_section_count + 1
active_etymon_args = nil
end
elseif node_class == "template" then
local template_name = node:get_name()
if template_name == "etymon" then
local template_args = node:get_arguments()
-- Check if this etymon is for our language
if template_args[1] == etymon_lang_code then
if is_nonlemma_etymon_template(template_args) then
if etymology_section_count > 0 then
current_etymology_has_nonlemma = true
end
else
if etymology_section_count > 0 then
current_etymology_has_etymon = true
end
table.insert(found_templates_for_lang, template_args)
if template_args.id then
local etymon_key = lang_page_key .. ":" .. template_args.id
__state.cached_etymon_args[etymon_key] = template_args
__state.cached_etymon_pages[etymon_key] = tostring(etymon_page)
table.insert(found_ids, template_args.id)
active_etymon_args = template_args
else
-- Store idless etymon with default key
local etymon_key = lang_page_key .. ":*"
__state.cached_etymon_args[etymon_key] = template_args
__state.cached_etymon_pages[etymon_key] = tostring(etymon_page)
table.insert(found_ids, "*")
active_etymon_args = template_args
end
end
end
elseif active_etymon_args and template_name == "senseid" then
local template_args = node:get_arguments()
-- This should always be true for proper usages of {{senseid}}.
if template_args[1] == etymon_lang_code and template_args[2] then
local sense_id_key = lang_page_key .. ":" .. template_args[2]
__state.senseid_parent_etymon[sense_id_key] = active_etymon_args
__state.cached_etymon_pages[sense_id_key] = tostring(etymon_page)
end
end
end
end
finalize_current_etymology_section()
if lang_section_for_descendants
and etymology_section_count > 1
and etymology_sections_with_etymon > 0
and etymology_sections_with_etymon < etymology_section_count
then
__state.partial_etymology_targets[lang_page_key] = true
end
if descendants_is_toplevel and lang_section_for_descendants and #found_templates_for_lang > 0 then
M.descendants.cache_page_checks({
lang_section = lang_section_for_descendants,
etymon_lang_code = etymon_lang_code,
found_templates_for_lang = found_templates_for_lang,
entry_title = __state.entry_title,
entry_lang_code = __state.entry_lang_code,
entry_lang = __state.entry_lang_code and Util.get_lang(__state.entry_lang_code, true) or nil,
cached_descendants_checks = __state.cached_descendants_checks,
lang_page_key = lang_page_key,
redirected_from = redirected_from,
})
end
local id_data_list = {}
for _, args in ipairs(found_templates_for_lang) do
local id = args.id or "*"
table.insert(id_data_list, { id = id, pos = args.pos })
end
__state.available_etymon_ids[lang_page_key] = id_data_list
if #found_templates_for_lang == 1 then
__state.single_etymons[lang_page_key] = found_templates_for_lang[1]
end
if redirected_from and __state.available_etymon_ids[lang_page_key] then
__state.available_etymon_ids[redirected_from] = __state.available_etymon_ids[redirected_from] or {}
for _, id_data in ipairs(__state.available_etymon_ids[lang_page_key]) do
table.insert(__state.available_etymon_ids[redirected_from], id_data)
end
end
if __state.cached_etymon_args[key] ~= nil or __state.senseid_parent_etymon[key] ~= nil then
-- All done!
return
elseif redirect_target and not redirected_from then
-- Try scraping the redirect.
etymon_page = redirect_target.prefixedText
DataRetriever.cache_page_etymons(etymon_page, redirect_target, lang_page_key .. ":" .. etymon_id, etymon_lang, etymon_id, lang_page_key, descendants_is_toplevel)
__state.cached_etymon_args[key] = __state.cached_etymon_args[etymon_lang_code .. ":" .. etymon_page .. ":" .. etymon_id]
else
__state.cached_etymon_args[key] = M.data.STATUS.MISSING
end
end
local function has_linkable_term(etymon_data)
if etymon_data.is_family or etymon_data.suppress_term or etymon_data.unknown_term then
return false
end
local term = etymon_data.term
if term == nil or term == "" then
return false
end
return M.string_utilities.trim(term) ~= ""
end
local function record_term_id_tracking(etymon_data)
if not has_linkable_term(etymon_data) then
return
end
local term_page = M.links.get_link_page(etymon_data.term, etymon_data.lang)
M.tracking.record_term_id_usage(__state.id_stats, etymon_data, term_page)
end
-- Given an etymon object, scrape its page (if necessary) and return its own etymon arguments as well as the page name.
function DataRetriever.get_etymon_args(etymon_data, is_toplevel)
if not has_linkable_term(etymon_data) then
return M.data.STATUS.MISSING, nil, nil, nil
end
local page = M.links.get_link_page(etymon_data.term, etymon_data.lang)
local norm_lang = Util.get_norm_lang(etymon_data.lang)
local base_key = norm_lang:getFullCode() .. ":" .. page
if etymon_data.id then
local key = base_key .. ":" .. etymon_data.id
local cached_args = __state.cached_etymon_args[key] or __state.senseid_parent_etymon[key]
if cached_args == nil then
local title = mw.title.new(page)
if not title then error('Invalid page title "' .. page .. '" encountered.') end
DataRetriever.cache_page_etymons(page, title, key, norm_lang, etymon_data.id, nil, is_toplevel)
end
cached_args = __state.cached_etymon_args[key] or __state.senseid_parent_etymon[key] -- refresh
-- Get etymon_id from parent if this was resolved via senseid
local parent_etymon = __state.senseid_parent_etymon[key]
local resolved_etymon_id = parent_etymon and parent_etymon.id
local descendants_check = M.descendants.get_lookup_check({
cached_descendants_checks = __state.cached_descendants_checks,
is_toplevel = is_toplevel,
base_key = base_key,
lookup = {
explicit_id = etymon_data.id,
parent_etymon = parent_etymon,
},
})
if is_toplevel and descendants_check == nil then
local title = mw.title.new(page)
if title then
DataRetriever.cache_page_etymons(page, title, key, norm_lang, etymon_data.id, nil, true)
descendants_check = M.descendants.get_lookup_check({
cached_descendants_checks = __state.cached_descendants_checks,
is_toplevel = true,
base_key = base_key,
lookup = {
explicit_id = etymon_data.id,
parent_etymon = parent_etymon,
},
})
end
end
local mismatched_id = is_mismatched_explicit_id(base_key, cached_args, parent_etymon)
if mismatched_id and is_toplevel then
__state.has_mismatched_id = true
M.tracking.record_mismatched_id_usage(__state.id_stats, norm_lang, page, etymon_data.id)
warn_mismatched_explicit_id(page, norm_lang, base_key, etymon_data.id)
end
maybe_flag_partial_etymology_reference(base_key, etymon_data, cached_args, is_toplevel)
return cached_args, __state.cached_etymon_pages[key], resolved_etymon_id, descendants_check
else
__state.used_idless_etymon = true
if is_toplevel then
__state.toplevel_idless_etymon = true
end
if __state.available_etymon_ids[base_key] == nil then
local title = mw.title.new(page)
if not title then error('Invalid page title "' .. page .. '" encountered.') end
DataRetriever.cache_page_etymons(page, title, base_key .. ":*", norm_lang, "*", nil, is_toplevel)
end
local ids = __state.available_etymon_ids[base_key] or {}
local count = #ids
-- Try to filter by postype if available and we have multiple candidates
if count > 1 and etymon_data.postype then
local matching_ids = {}
for _, id_data in ipairs(ids) do
if id_data.pos == etymon_data.postype then
table.insert(matching_ids, id_data)
end
end
if #matching_ids == 1 then
local matched_id = matching_ids[1].id
local matched_key = base_key .. ":" .. matched_id
M.tracking.record_idless_resolution(__state.id_stats, norm_lang, page, "postype")
local descendants_check = M.descendants.get_lookup_check({
cached_descendants_checks = __state.cached_descendants_checks,
is_toplevel = is_toplevel,
base_key = base_key,
lookup = { id = matched_id },
})
if is_toplevel and descendants_check == nil then
local title = mw.title.new(page)
if title then
DataRetriever.cache_page_etymons(page, title, base_key .. ":*", norm_lang, "*", nil, true)
descendants_check = M.descendants.get_lookup_check({
cached_descendants_checks = __state.cached_descendants_checks,
is_toplevel = true,
base_key = base_key,
lookup = { id = matched_id },
})
end
end
local matched_args = __state.cached_etymon_args[matched_key]
maybe_flag_partial_etymology_reference(base_key, etymon_data, matched_args, is_toplevel)
return matched_args, __state.cached_etymon_pages[matched_key], nil, descendants_check
end
end
if count == 1 then
local only_id_data = ids[1]
local only_id = (type(only_id_data) == "table" and only_id_data.id) or only_id_data or "*"
M.tracking.record_idless_resolution(__state.id_stats, norm_lang, page, "single")
local descendants_check = M.descendants.get_lookup_check({
cached_descendants_checks = __state.cached_descendants_checks,
is_toplevel = is_toplevel,
base_key = base_key,
lookup = { id_data = only_id_data },
})
if is_toplevel and descendants_check == nil then
local title = mw.title.new(page)
if title then
DataRetriever.cache_page_etymons(page, title, base_key .. ":*", norm_lang, "*", nil, true)
descendants_check = M.descendants.get_lookup_check({
cached_descendants_checks = __state.cached_descendants_checks,
is_toplevel = true,
base_key = base_key,
lookup = { id_data = only_id_data },
})
end
end
local single_args = __state.single_etymons[base_key]
maybe_flag_partial_etymology_reference(base_key, etymon_data, single_args, is_toplevel)
return single_args, __state.cached_etymon_pages[base_key .. ":" .. only_id], nil, descendants_check
elseif count > 1 then
M.tracking.record_idless_resolution(__state.id_stats, norm_lang, page, "ambiguous")
warn_ambiguous_etymon_link(page, norm_lang, ids, is_toplevel)
maybe_flag_partial_etymology_reference(base_key, etymon_data, M.data.STATUS.AMBIGUOUS, is_toplevel)
return M.data.STATUS.AMBIGUOUS, nil, nil, nil
else
M.tracking.record_idless_resolution(__state.id_stats, norm_lang, page, "missing")
maybe_flag_partial_etymology_reference(base_key, etymon_data, M.data.STATUS.MISSING, is_toplevel)
return M.data.STATUS.MISSING, nil, nil, nil
end
end
end
local function keyword_invisible_in_tree(keyword_info)
if not keyword_info then
return false
end
local inv = keyword_info.invisible
return inv == "all" or inv == true or inv == "tree"
end
-- True when the node has at least one top-level child container visible in the tree.
local function node_has_visible_tree_children(node)
for _, container in ipairs(node.children or {}) do
if not keyword_invisible_in_tree(container.keyword_info) then
return true
end
end
return false
end
-- Count visible term nodes in the tree.
local function get_visible_tree_depth(node, skip_child_rendering)
local max_depth = 1
if skip_child_rendering or not node then
return max_depth
end
for _, container in ipairs(node.children or {}) do
local keyword_info = container.keyword_info
if not keyword_invisible_in_tree(keyword_info) then
local skip_grandchildren = keyword_info and keyword_info.no_child_categories
for _, term in ipairs(container.terms or {}) do
if term.is_duplicate then
if term.original_has_children then
max_depth = math.max(max_depth, 2)
end
else
max_depth = math.max(max_depth, 1 + get_visible_tree_depth(term, skip_grandchildren))
end
end
end
end
return max_depth
end
local function as_param_list(val)
if val == nil then
return {}
end
if type(val) == "table" then
return val
end
if type(val) == "string" and val ~= "" then
return { val }
end
return {}
end
local TreeBuilder = {}
local function parse_etymon_references(refs_text)
if not refs_text or refs_text == "" then
return ""
end
return M.references.parse_references(refs_text)
end
local function parse_tree_references(node)
if node.ref then
node.parsed_ref = parse_etymon_references(node.ref)
end
if node.children then
for _, container in ipairs(node.children) do
if container.terms then
for _, term in ipairs(container.terms) do
parse_tree_references(term)
end
end
end
end
if node.supplements then
for _, supplement in ipairs(node.supplements) do
if supplement.terms then
for _, term in ipairs(supplement.terms) do
parse_tree_references(term)
end
end
end
end
end
-- Build a unique key for deduplication in the seen table
function TreeBuilder.build_key(lang, title, args)
local norm_lang_code = Util.get_norm_lang(lang):getFullCode()
local is_table = type(args) == "table"
local id = (is_table and args.id) or ""
if title then
return norm_lang_code .. ":" .. M.links.get_link_page(title, lang) .. ":" .. id
end
if is_table and args.status == M.data.STATUS.INLINE then
local content_parts = {}
for i = 1, #args do
content_parts[i] = tostring(args[i])
end
return norm_lang_code .. ":*:" .. id .. "\0" .. table.concat(content_parts, "\0")
end
return norm_lang_code .. ":*:" .. id
end
-- Copy parsed etymon modifiers onto a tree/supplement term node.
function TreeBuilder.apply_etymon_fields(term, etymon_data)
term.id = etymon_data.id
term.t = etymon_data.t
term.tr = etymon_data.tr
term.ts = etymon_data.ts
term.alt = etymon_data.alt
term.g = etymon_data.g
term.pos = etymon_data.pos
term.ng = etymon_data.ng
term.ref = etymon_data.ref
term.is_uncertain = etymon_data.unc
term.lit = etymon_data.lit
term.q = etymon_data.q
term.qq = etymon_data.qq
term.l = etymon_data.l
term.ll = etymon_data.ll
term.suppress_term = etymon_data.suppress_term
term.unknown_term = etymon_data.unknown_term
term.is_family = etymon_data.is_family
term.override = etymon_data.override
term.aftype = etymon_data.aftype
term.postype = etymon_data.postype
term.bor = etymon_data.bor
term.lbor = etymon_data.lbor
term.slbor = etymon_data.slbor
end
function TreeBuilder.build_supplement_term(etymon_data, entry_lang, supplement_type)
EtymonParser.check_supplement_term(etymon_data, entry_lang, supplement_type)
local term = {
lang = etymon_data.lang,
title = etymon_data.term,
children = {},
status = M.data.STATUS.OK,
}
TreeBuilder.apply_etymon_fields(term, etymon_data)
return term
end
function TreeBuilder.build_supplement_terms(entry_lang, supplement_type, param_value)
local terms = {}
for _, term_param in ipairs(as_param_list(param_value)) do
if type(term_param) == "string" and term_param ~= "" then
local etymon_data = EtymonParser.parse_etymon(term_param, entry_lang)
if etymon_data then
table.insert(terms, TreeBuilder.build_supplement_term(etymon_data, entry_lang, supplement_type))
end
end
end
return terms
end
-- Attach a |param= supplement defined in etymon_data.supplements (e.g. doublet=).
function TreeBuilder.append_term_supplement(data_tree, entry_lang, supplement_type, param_value)
local config = M.data.supplements[supplement_type]
if not config then
error("Unknown supplement '" .. tostring(supplement_type) .. "'.")
end
local terms = TreeBuilder.build_supplement_terms(entry_lang, supplement_type, param_value)
if #terms == 0 then
return
end
data_tree.supplements = data_tree.supplements or {}
table.insert(data_tree.supplements, {
type = supplement_type,
config = config,
terms = terms,
})
M.tracking.record_keyword_usage(__state.toplevel_keyword_stats, supplement_type, entry_lang, entry_lang, true)
end
function TreeBuilder.build(lang, title, args, seen, depth, stop_recursion)
seen = seen or {}
depth = depth or 0
local is_toplevel = (depth == 0)
if depth > __state.max_depth_reached then
__state.max_depth_reached = depth
end
__state.total_nodes = __state.total_nodes + 1
local lang_code = lang:getCode()
__state.language_count[lang_code] = (__state.language_count[lang_code] or 0) + 1
local current_id = (type(args) == "table" and args.id) or ""
local key = TreeBuilder.build_key(lang, title, args)
local node = { lang = lang, title = title, id = current_id, args = args, children = {}, status = M.data.STATUS.OK }
if type(args) ~= "table" or seen[key] then
node.status = args or M.data.STATUS.MISSING
-- Mark as duplicate if we've seen this node before
if seen[key] then
node.is_duplicate = true
node.duplicate_key = key
local original_node = seen[key]
if type(original_node) == "table" and original_node.children and #original_node.children > 0 then
node.original_has_children = true
end
end
return node
end
node.status = args.status or M.data.STATUS.OK
seen[key] = node
-- If stop_recursion is set, skip parsing children but check for visible children
if stop_recursion then
local keywords = M.data.keywords
local has_visible_children = false
for i = 2, #args do
local param = args[i]
if type(param) == "string" then
local keyword_base = get_keyword_base(param)
if keyword_base and keywords[keyword_base] then
local _, kw_modifiers = EtymonParser.parse_keyword_modifiers(param:sub(1, 1) == ":" and param or (":" .. param))
if not keyword_invisible_in_tree(get_effective_keyword_info(keyword_base, kw_modifiers)) then
has_visible_children = true
break
end
elseif param:sub(1, 1) ~= ":" then
-- It's a term (not a keyword), so there are visible children
has_visible_children = true
break
end
end
end
node.has_visible_children = has_visible_children
return node
end
-- Parse args into keyword containers
local current_keyword = "from"
local current_keyword_modifiers = {}
local current_container = nil
local function ensure_container()
if not current_container or current_container.keyword ~= current_keyword then
local keyword_info = get_effective_keyword_info(current_keyword, current_keyword_modifiers)
current_container = {
keyword = current_keyword,
keyword_info = keyword_info,
keyword_modifiers = current_keyword_modifiers,
terms = {},
}
table.insert(node.children, current_container)
-- Override keyword text/phrase for nominalization with <g:code>
if current_keyword_modifiers.g and current_keyword == "nominalization" then
local labels = get_nominalization_label_for_g(current_keyword_modifiers.g)
if not labels then
local codes = {}
for c in pairs(M.data.nominalization_g_codes) do table.insert(codes, c) end
table.sort(codes)
error("Invalid <g:" .. tostring(current_keyword_modifiers.g) .. ">. Supported codes for nominalization: " .. table.concat(codes, ", "))
end
current_container.keyword_info = copy_keyword_info(keyword_info)
current_container.keyword_info.text = labels.text
current_container.keyword_info.phrase = labels.phrase
end
end
return current_container
end
local parse_context_lang = Util.resolve_context_lang(lang, args)
for i = 2, #args do
local param = args[i]
if is_keyword(param) then
local keyword, modifiers = EtymonParser.parse_keyword_modifiers(param)
if not keyword then
error("Invalid keyword '" .. param .. "'.")
end
current_keyword = keyword
current_keyword_modifiers = modifiers
current_container = nil -- Force new container for new keyword
elseif type(param) == "string" and param:sub(1, 1) == ":" then
reject_removed_surf_keyword(param)
error("Invalid keyword '" .. param .. "'. Did you mean a valid keyword like ':bor', ':inh', etc.?")
elseif type(param) == "string" then
local etymon_data = EtymonParser.parse_etymon(param, parse_context_lang)
if etymon_data then
-- Track keyword usage at top level
M.tracking.record_keyword_usage(__state.toplevel_keyword_stats, current_keyword, lang, etymon_data.lang, is_toplevel)
local term_node = {}
local container
-- Handle suppress_term (-) and unknown_term (empty or +) directly
if etymon_data.suppress_term or etymon_data.unknown_term then
container = ensure_container()
if etymon_data.ety then
local inline_args = EtymonParser.parse_inline_ety(etymon_data.ety, etymon_data.lang)
inline_args.id = etymon_data.id
inline_args.status = M.data.STATUS.INLINE
term_node = TreeBuilder.build(etymon_data.lang, nil, inline_args, seen, depth + 1)
else
term_node = {
lang = etymon_data.lang,
children = {},
status = M.data.STATUS.OK,
}
end
TreeBuilder.apply_etymon_fields(term_node, etymon_data)
else
-- Regular term: fetch arguments from page
record_term_id_tracking(etymon_data)
local etymon_args, page_of, resolved_etymon_id, descendants_check =
DataRetriever.get_etymon_args(etymon_data, is_toplevel)
-- Check for <ety> inline parameter doesn't override the scraped arguments, unless the latter are missing
if etymon_data.ety then
if etymon_args == M.data.STATUS.REDLINK or etymon_args == M.data.STATUS.MISSING then
__state.current_page_has_inline_etymology = true
if is_toplevel then
__state.toplevel_has_inline_etymology = true
end
local inline_args = EtymonParser.parse_inline_ety(etymon_data.ety, etymon_data.lang)
-- Track inline ety keywords too
local inline_keyword = get_keyword(inline_args[2], true)
if inline_keyword and #inline_args >= 3 then
local inline_etymon = EtymonParser.parse_etymon(inline_args[3], etymon_data.lang)
if inline_etymon then
M.tracking.record_keyword_usage(__state.toplevel_keyword_stats, inline_keyword, etymon_data.lang, inline_etymon.lang, is_toplevel)
end
end
inline_args.id = etymon_data.id
inline_args.status = M.data.STATUS.INLINE
etymon_args = inline_args
term_node.page_of = __state.cached_etymon_pages[key] -- term node is on the same page as the parent
else
-- Scraped arguments exist, <ety> is redundant and ignored
__state.current_page_has_redundant_etymology = true
if is_toplevel then
__state.toplevel_redundant_etymology = true
end
end
end
-- Ensure container exists before checking keyword info
container = ensure_container()
-- Check if current keyword has no_child_categories - if so, stop recursion
local keyword_info = container.keyword_info
local should_stop_recursion = (stop_recursion or (keyword_info and keyword_info.no_child_categories))
term_node = TreeBuilder.build(etymon_data.lang, etymon_data.term, etymon_args, seen, depth + 1, should_stop_recursion)
term_node.target_key = Util.get_norm_lang(etymon_data.lang):getFullCode() ..
":" .. M.links.get_link_page(etymon_data.term, etymon_data.lang)
term_node.etymon_id = resolved_etymon_id -- The actual etymon id when resolved via senseid
term_node.page_of = page_of
TreeBuilder.apply_etymon_fields(term_node, etymon_data)
term_node.missing_descendants_header, term_node.missing_descendants_entry =
M.descendants.get_term_sync_flags(current_keyword, term_node.status, descendants_check)
end
table.insert(container.terms, term_node)
end
end
end
return node
end
-- Convert etymology tree to JSON-serializable table
local function tree_to_json(node)
local obj = {
term = node.title,
lang = node.lang:getCode(),
lang_name = node.lang:getCanonicalName(),
id = (node.id and node.id ~= "") and node.id or nil,
status = node.status,
is_uncertain = node.is_uncertain or nil,
is_duplicate = node.is_duplicate or nil,
gloss = node.t,
transliteration = node.tr,
transcription = node.ts,
alt = node.alt,
g = node.g,
pos = node.pos,
ng = node.ng,
children = {},
}
for _, container in ipairs(node.children or {}) do
local keyword_info = container.keyword_info
if keyword_info then
local container_obj = {
keyword = container.keyword,
keyword_label = keyword_info.text,
keyword_abbrev = keyword_info.abbrev,
is_group = keyword_info.is_group or nil,
is_invisible = keyword_info.invisible or nil,
is_uncertain = (container.keyword_modifiers and container.keyword_modifiers.unc) or nil,
terms = {},
}
for _, term in ipairs(container.terms or {}) do
table.insert(container_obj.terms, tree_to_json(term))
end
table.insert(obj.children, container_obj)
end
end
return obj
end
-- Build and return the etymology data tree for a given term.
function export.get_tree(lang, title, args, options)
options = options or {}
__state.entry_title = title
__state.entry_lang_code = lang:getCode()
__state.id_stats = M.tracking.new_id_stats()
__state.skip_partial_etymology_category = options.skip_partial_etymology_category == true
if options.validate then
EtymonParser.validate(lang, args, options.id, title, options.pos, false)
end
local lang_code = lang:getCode()
local start_index = (args[1] == lang_code) and 2 or 1
local tree_args = { [1] = lang_code, id = options.id or args.id }
for i = start_index, #args do
table.insert(tree_args, args[i])
end
__state.cached_etymon_args[lang_code .. ":" .. title .. ":" .. (tree_args.id or "")] = tree_args
local ety_data_tree = TreeBuilder.build(lang, title, tree_args)
parse_tree_references(ety_data_tree)
if options.json then
return M.JSON.toJSON(tree_to_json(ety_data_tree))
end
return ety_data_tree
end
-- Given a language code, page name and optionally the id= parameter,
-- render the tree and only the etymology tree for the relevant page.
-- Fetches and parses the corresponding {{etymon}} from the requested page,
-- and any further pages needed to render the tree.
-- Parameters can be passed either through the #invoke or as
-- template parameters *through* an #invoke.
function export.render_tree_for_etymon_on_page(frame)
local frame_args = frame.args
local parent_args = frame:getParent().args
local langcode = frame_args[1] or parent_args[1]
local pagename = frame_args[2] or parent_args[2]
local id = frame_args["id"] or parent_args["id"]
local display_title = frame_args["title"] or parent_args["title"]
local parsed_title = mw.title.new(pagename, 0)
local title
if parsed_title.namespace == 0 then
title = M.pages.safe_page_name(parsed_title)
elseif parsed_title.namespace == 118 then
title = "*" .. M.pages.safe_page_name(parsed_title)
else
error("Unsupported namespace for render_tree_for_etymon_on_page: " .. parsed_title.namespace)
end
local lang = Util.get_lang(langcode)
__state.entry_title = title
__state.entry_lang_code = lang:getCode()
__state.id_stats = M.tracking.new_id_stats()
-- Construct etymon_data for DataRetriever.get_args.
local etymon_data = {
lang = lang,
term = title,
id = id
}
local args, pagename = DataRetriever.get_etymon_args(etymon_data, true)
if args == M.data.STATUS.MISSING then
error("The etymon template was not found (language " ..
langcode ..
", title '" ..
title ..
"'" ..
(id and ", ID '" .. id .. "'" or ", no ID given") .. "). Page contents may have changed in the interim.")
end
local tree_title = display_title or title
if lang:stripDiacritics(M.links.remove_links(tree_title)) ~= lang:stripDiacritics(M.links.remove_links(title)) then
M.tracking.track_title_pagename_mismatch(lang)
end
reset_invocation_state()
local ety_data_tree = export.get_tree(lang, tree_title, args, {
validate = true,
id = id,
})
local output = {}
table.insert(output, M.template_styles("Module:etymon/styles.css"))
table.insert(output, M.tree.render({
data_tree = ety_data_tree,
format_term_func = function(term, is_toplevel)
return Util.format_term(term, is_toplevel, {
gloss = "suppress",
pos = "suppress",
lit = "suppress",
tree_ql = "suppress",
})
end,
}))
return table.concat(output)
end
function export.main(frame)
local parent_args = frame:getParent().args
local args = M.parameters.process(parent_args, M.parameters_data.etymon)
local lang = args[1]
local etymon_args = args[2]
local id = args.id
local title = args.title
local text = args.text
local tree = args.tree
local etydate = args.etydate
local doublet = args.doublet
local rfe = args.rfe
local etystub = args.etystub
local is_nonlemma = M.yesno(args.nl, false)
local page_data = Util.get_page_data()
if not title then
title = page_data.pagename
if page_data.namespace == "การสืบสร้าง" then title = "*" .. title end
end
local entry_pagename = page_data.pagename
if page_data.namespace == "การสืบสร้าง" then
entry_pagename = "*" .. entry_pagename
end
if lang:stripDiacritics(M.links.remove_links(title)) ~= lang:stripDiacritics(M.links.remove_links(entry_pagename)) then
M.tracking.track_title_pagename_mismatch(lang)
end
local current_L2 = M.pages.get_current_L2()
if current_L2 then
local norm_lang = Util.get_norm_lang(lang)
local norm_name = norm_lang:getCategoryName() --th
if current_L2 ~= norm_name then
local lang_desc = lang:getCode() .. " (" .. lang:getCanonicalName() .. ")"
if norm_lang:getCode() ~= lang:getCode() then
lang_desc = lang_desc .. ", normalized to " .. norm_lang:getCode() .. " (" .. norm_name .. ")"
end
error("Language '" .. lang_desc .. "' does not match the L2 header (" .. current_L2 .. ").")
end
end
reset_invocation_state()
local ety_data_tree = export.get_tree(lang, title, etymon_args, {
validate = true,
pos = args.pos,
id = id,
json = args.json,
skip_partial_etymology_category = is_nonlemma,
})
if args.json then
return ety_data_tree
end
local output = {}
local text_allowlist_mode = M.text_allowed.default_mode or "off"
if text and text_allowlist_mode ~= "off" and not Util.is_text_param_allowed_for_lang(lang) then
local msg = "Etymology texts (parameter <code>text=</code>) are not allowed for " .. lang:getFullName() ..
"; see [[Template:etymon#Text allowlist|Template:etymon § Text allowlist]] for the list of languages that may use the <code>text=</code> parameter."
if text_allowlist_mode == "error" then
error(msg)
else
Util.add_warning(msg, true)
end
end
local lang_exc = Util.get_lang_exception(lang)
if lang_exc and lang_exc.disallow then
local disallow = lang_exc.disallow
local error_text = " for " .. lang:getFullName()
if disallow.ref then
error_text = error_text .. "; see " .. disallow.ref
else
error_text = error_text .. "."
end
if tree and disallow.tree then
error("Etymology trees are not allowed" .. error_text)
end
if text and disallow.text then
error("Etymology texts are not allowed" .. error_text)
end
end
if etydate then
local etydate_param_mods = {
ref = { list = true, type = "references", allow_holes = true },
refn = { list = true, allow_holes = true },
nocap = { type = "boolean" },
}
local function generate_etydate_obj(etydate_text)
local etydate_specs = {}
for spec in etydate_text:gmatch("[^,]+") do
table.insert(etydate_specs, mw.text.trim(spec))
end
return { [1] = etydate_specs }
end
local parsed_etydate = M.parse_utilities.parse_inline_modifiers(etydate, { param_mods = etydate_param_mods, generate_obj = generate_etydate_obj })
local etydate_args = {
[1] = parsed_etydate[1],
nocap = parsed_etydate.nocap or false,
}
ety_data_tree.supplements = ety_data_tree.supplements or {}
table.insert(ety_data_tree.supplements, {
type = "etydate",
etydate_text = M.etydate.format_etydate(etydate_args, { omit_refs = true }),
etydate_refs = (parsed_etydate.ref and #parsed_etydate.ref > 0) and parsed_etydate.ref or nil,
})
end
TreeBuilder.append_term_supplement(ety_data_tree, lang, "doublet", doublet)
if ety_data_tree.supplements then
parse_tree_references(ety_data_tree)
end
local has_visible_children = node_has_visible_tree_children(ety_data_tree)
-- Suppress trees for multiword entries and one-step chains
local visible_tree_depth = get_visible_tree_depth(ety_data_tree)
local is_trivial_tree = visible_tree_depth <= 2
local is_multiword = title:find("%s") ~= nil or title:find("_") ~= nil
if tree and (is_multiword or is_trivial_tree) then
tree = false
end
if tree then
table.insert(output, M.template_styles("Module:etymon/styles.css"))
table.insert(output, M.tree.render({
data_tree = ety_data_tree,
format_term_func = function(term, is_toplevel)
return Util.format_term(term, is_toplevel, {
gloss = "suppress",
pos = "suppress",
lit = "suppress",
tree_ql = "suppress",
})
end,
}))
end
local tree_disallowed = lang_exc and lang_exc.disallow and lang_exc.disallow.tree
local ety_tree_json = M.JSON.toJSON(tree_to_json(ety_data_tree))
local anchor = M.anchors.etymonid(lang, id, {
no_tree = args.notree,
title = title,
empty_tree = (not has_visible_children) or tree_disallowed,
ety_tree_json = ety_tree_json,
})
table.insert(output, anchor)
local text_stop_lang_missing = nil
if text then
local max_depth, stop_at_blue_link, stop_at_lang, stop_at_lang_or_bluelink
if text == "++" then
max_depth, stop_at_blue_link = false, false
elseif text == "+" then
max_depth, stop_at_blue_link = 1, false
elseif text == "*" then
max_depth, stop_at_blue_link = false, true
elseif text:match("^:[^*]+%*$") then
-- Stop at a specific language OR first bluelink after it, e.g., ":ota*"
-- If the target language is a redlink, continue to the first bluelink
local lang_code = text:match("^:([^*]+)%*$")
if lang_code and lang_code ~= "" then
local lang_obj = Util.get_lang(lang_code, true)
if lang_obj then
stop_at_lang_or_bluelink = lang_code
else
Util.add_warning('Invalid language code "' .. lang_code .. '" in text parameter. Showing full chain instead.')
max_depth, stop_at_blue_link = false, false
end
else
Util.add_warning('Empty language code in text parameter. Showing full chain instead.')
max_depth, stop_at_blue_link = false, false
end
elseif text:sub(1, 1) == ":" then
-- Stop at a specific language, e.g., ":ar" stops at first Arabic term
local lang_code = text:sub(2)
if lang_code ~= "" then
-- Validate the language code
local lang_obj = Util.get_lang(lang_code, true)
if lang_obj then
stop_at_lang = lang_code
else
Util.add_warning('Invalid language code "' .. lang_code .. '" in text parameter. Showing full chain instead.')
max_depth, stop_at_blue_link = false, false -- default to ++
end
else
Util.add_warning('Empty language code in text parameter. Showing full chain instead.')
max_depth, stop_at_blue_link = false, false -- default to ++
end
else
local num = tonumber(text)
if num and num >= 1 then
max_depth, stop_at_blue_link = num, false
else
error('Invalid text value "' ..
text .. '". Valid values are: "++" (full chain), "+" (first step only), "*" (until first blue link), a number (max steps), ":lang" (stop at language), or ":lang*" (stop at language or first bluelink if redlink)')
end
end
local text_output, text_render_meta = M.text.render({
data_tree = ety_data_tree,
format_term_func = Util.format_term,
lang_matches_stop_code = Util.lang_matches_stop_code,
max_depth = max_depth,
stop_at_blue_link = stop_at_blue_link,
curr_page = page_data.pagename,
nodot = args.nodot,
dot = args.dot,
stop_at_lang = stop_at_lang,
stop_at_lang_or_bluelink = stop_at_lang_or_bluelink,
})
table.insert(output, text_output)
if stop_at_lang and text_render_meta and not text_render_meta.stop_lang_reached then
M.tracking.track_text_stop_lang_missing(lang, stop_at_lang)
text_stop_lang_missing = stop_at_lang
end
end
if rfe then
table.insert(output, Util.expand_request_template(frame, "rfe", rfe, lang:getCode()))
end
if etystub then
table.insert(output, Util.expand_request_template(frame, "etystub", etystub, lang:getCode()))
end
if is_nonlemma then
table.insert(output, " " .. frame:expandTemplate({
title = "nonlemma",
args = {},
}))
end
local categories = {}
if Util.is_content_page() then
M.tracking.track_tree_metrics({
max_depth_reached = __state.max_depth_reached,
total_nodes = __state.total_nodes,
language_count = __state.language_count,
lang = lang,
})
categories = M.categories.build({
data_tree = ety_data_tree,
page_lang = lang,
available_etymon_ids = __state.available_etymon_ids,
senseid_parent_etymon = __state.senseid_parent_etymon,
get_norm_lang_func = Util.get_norm_lang,
lang_exc = lang_exc,
suppress_categories = lang_exc and lang_exc.suppress_categories,
nocat = args.nocat,
tree = tree,
text = text,
exnihilo = args.exnihilo,
toplevel_has_inline_etymology = __state.toplevel_has_inline_etymology,
toplevel_redundant_etymology = __state.toplevel_redundant_etymology,
toplevel_idless_etymon = __state.toplevel_idless_etymon,
has_mismatched_id = __state.has_mismatched_id,
linked_page_multiple_etymons_idless = __state.linked_page_multiple_etymons_idless,
linked_page_partial_etymology_sections = __state.linked_page_partial_etymology_sections,
text_stop_lang_missing = text_stop_lang_missing,
})
M.tracking.track_keywords(__state.toplevel_keyword_stats, lang)
M.tracking.track_page_id(lang, id)
M.tracking.track_ids(__state.id_stats, lang)
end
if #categories > 0 then
table.insert(output, M.categories.format(categories, lang))
end
if __state.warnings then
for i, warning in ipairs(__state.warnings) do
table.insert(output, (i == 1 and "\n" or "") .. warning .. "\n")
end
end
return table.concat(output)
end
return export
4bvqx4zo1nd1t46kj9a8cyl2tvdeeg4
5754452
5754439
2026-08-06T04:59:28Z
Octahedron80
267
5754452
Scribunto
text/plain
--[=[
This module implements the {{etymon}} template for structured etymology data on Wiktionary.
It enables the creation of etymology trees and text by parsing etymon chains,
scraping linked pages for their own {{etymon}} data, and recursively building a tree
of derivational relationships.
Authors:
- Original implementation: [[User:Ioaxxere]]
- Full refactor (September 2025): [[User:Fenakhay]] ([[Special:Diff/86717746]])
Modules:
- [[Module:etymon]]: main module handling parsing, validation, tree building, and page scraping
- [[Module:etymon/data]]: keyword definitions, configuration, and status constants
- [[Module:etymon/tree]]: etymology tree rendering
- [[Module:etymon/text]]: etymology text generation
- [[Module:etymon/categories]]: category generation logic
- [[Module:etymon/tracking]]: tracking
]=]
local export = {}
local __state = {
cached_etymon_args = {},
cached_etymon_pages = {},
cached_descendants_checks = {},
senseid_parent_etymon = {},
available_etymon_ids = {},
single_etymons = {},
entry_title = nil,
entry_lang_code = nil,
current_page_has_inline_etymology = false,
current_page_has_redundant_etymology = false,
used_idless_etymon = false,
toplevel_has_inline_etymology = false,
toplevel_redundant_etymology = false,
toplevel_idless_etymon = false,
has_mismatched_id = false,
linked_page_multiple_etymons_idless = false,
linked_page_partial_etymology_sections = false,
partial_etymology_targets = {},
skip_partial_etymology_category = false,
max_depth_reached = 0,
total_nodes = 0,
language_count = {},
toplevel_keyword_stats = {},
id_stats = nil,
warnings = {},
}
local function reset_invocation_state()
__state.current_page_has_inline_etymology = false
__state.current_page_has_redundant_etymology = false
__state.used_idless_etymon = false
__state.toplevel_has_inline_etymology = false
__state.toplevel_redundant_etymology = false
__state.toplevel_idless_etymon = false
__state.has_mismatched_id = false
__state.linked_page_multiple_etymons_idless = false
__state.linked_page_partial_etymology_sections = false
__state.max_depth_reached = 0
__state.total_nodes = 0
__state.language_count = {}
__state.toplevel_keyword_stats = {}
__state.warnings = {}
end
local M = require("Module:module loader").init({
require = {
data = "Module:etymon/data",
tree = "Module:etymon/tree",
text = "Module:etymon/text",
categories = "Module:etymon/categories",
tracking = "Module:etymon/tracking",
descendants = "Module:etymon/descendants",
anchors = "Module:anchors",
etydate = "Module:etydate",
etymology = "Module:etymology",
families = "Module:families",
languages = "Module:languages",
languages_errorgetby = "Module:languages/errorGetBy",
links = "Module:links",
pages = "Module:pages",
parameters = "Module:parameters",
string_utilities = "Module:string utilities",
template_parser = "Module:template parser",
utilities = "Module:utilities",
debug = "Module:debug",
en_utilities = "Module:en-utilities",
parse_utilities = "Module:parse utilities",
references = "Module:references",
template_styles = "Module:TemplateStyles",
script_utilities = "Module:script utilities",
JSON = "Module:JSON",
yesno = "Module:yesno",
},
loadData = {
headword_data = "Module:headword/data",
parameters_data = "Module:parameters/data",
text_allowed = "Module:etymon/data/text_allowed",
},
})
local Util = {}
function Util.format_error(message, preview_only)
if preview_only and not M.pages.is_preview() then
return nil
end
return '<span class="error">' .. message .. '</span>'
end
function Util.add_warning(message, preview_only)
local formatted = Util.format_error(message, preview_only)
if formatted then
table.insert(__state.warnings, formatted)
end
end
function Util.is_text_param_allowed_for_lang(lang)
if not lang or type(lang) ~= "table" then
return false
end
local types = lang.getTypes and lang:getTypes()
if types and types.family then
local code = lang.getCode and lang:getCode()
return code and M.text_allowed.families[code] == true
end
local full_code = lang.getFullCode and lang:getFullCode()
if full_code and M.text_allowed.langs[full_code] then
return true
end
if lang.inFamily then
for family_code in pairs(M.text_allowed.families) do
if lang:inFamily(family_code) then
return true
end
end
end
return false
end
function Util.get_lang(code, no_error)
if no_error then
return M.languages.getByCode(code, nil, true)
end
return M.languages.getByCode(code, nil, true) or M.languages_errorgetby.code(code, true, true)
end
-- Match a term language against a text=:lang stop target (supports etymology-only codes).
function Util.lang_matches_stop_code(term_lang, stop_code)
if not term_lang or not stop_code or stop_code == "" then
return false
end
local stop_lang = Util.get_lang(stop_code, true)
if not stop_lang then
return false
end
if term_lang:getCode() == stop_lang:getCode() then
return true
end
if stop_lang:getFullCode() == stop_lang:getCode() then
return term_lang:getFullCode() == stop_lang:getCode()
end
return false
end
function Util.get_family(code)
return M.families.getByCode(code)
end
function Util.get_lang_exception(lang)
-- Families have no language-specific exceptions
if lang.getTypes and lang:getTypes().family then
return nil
end
local code = lang:getCode()
local lang_exceptions = M.data.config.lang_exceptions
if lang_exceptions[code] then
return lang_exceptions[code]
end
for norm_code, exc in pairs(lang_exceptions) do
if exc.normalize_to and code == exc.normalize_to then
return exc
end
if exc.normalize_from_families then
local should_normalize = false
for _, family in ipairs(exc.normalize_from_families) do
if lang:inFamily(family) then
should_normalize = true
break
end
end
if should_normalize and exc.normalize_exclude_families then
for _, family in ipairs(exc.normalize_exclude_families) do
if lang:inFamily(family) then
should_normalize = false
break
end
end
end
if should_normalize then
local ret = {}
for k, v in pairs(exc) do
ret[k] = v
end
ret.suppress_tr = nil
return ret
end
end
end
return nil
end
function Util.get_norm_lang(lang)
local exc = Util.get_lang_exception(lang)
if exc and exc.normalize_to then
return M.languages.getByCode(exc.normalize_to)
end
return lang
end
function Util.resolve_context_lang(lang, node_args)
if type(node_args) ~= "table" then return lang end
if node_args.status == M.data.STATUS.INLINE then return lang end
if not (lang.hasType and lang:hasType("etymology-only")) then return lang end
local full = lang.getFull and lang:getFull()
if not full or full:getCode() == lang:getCode() then return lang end
if full.hasAncestor and full:hasAncestor(lang) then return lang end
return full
end
-- Add default values for boolean modifiers (e.g., <unc> becomes <unc:1>)
-- This is needed because Module:parse utilities expects boolean modifiers to have explicit values
function Util.add_boolean_defaults(str, param_mods)
local result = str
for name, spec in pairs(param_mods) do
if spec.type == "boolean" then
-- Replace <name> with <name:1> (but not <name:...> which already has a value)
result = result:gsub("<" .. name .. ">", "<" .. name .. ":1>")
end
end
return result
end
local REQUEST_TEMPLATE_PARAM_MODS = {
rfe = {
nocat = { type = "boolean" },
sort = {},
y = {},
m = {},
fragment = {},
section = {},
box = { type = "boolean" },
noes = { type = "boolean" },
},
etystub = {
nocat = { type = "boolean" },
sort = {},
nocap = { type = "boolean" },
nodot = { type = "boolean" },
},
}
function Util.expand_request_template(frame, template_name, param_value, lang_code)
local param_mods = REQUEST_TEMPLATE_PARAM_MODS[template_name]
local with_defaults = Util.add_boolean_defaults(param_value, param_mods)
local parsed = M.parse_utilities.parse_inline_modifiers(with_defaults, {
param_mods = param_mods,
generate_obj = function(text)
if M.yesno(text, false) then
return { is_boolean = true }
end
return { text = text }
end,
})
local template_args = { [1] = lang_code }
for name in pairs(param_mods) do
template_args[name] = parsed[name]
end
if not parsed.is_boolean then
template_args[2] = parsed.text
end
return " " .. frame:expandTemplate({
title = template_name,
args = template_args,
})
end
-- Centralized term formatting: handles suppress_term (-), unknown_term (empty/+), and regular terms
function Util.format_term(term, is_toplevel, opts)
opts = opts or {}
-- suppress_term (-) returns nil
if term.suppress_term then
return nil
end
local lang = term.lang
local exc = Util.get_lang_exception(lang)
if is_toplevel then
local display_text = term.alt or term.title or ""
local sc = term.sc or lang:findBestScript(display_text)
local bold_text = tostring(mw.html.create("strong")
:addClass("selflink")
:wikitext(display_text))
return M.script_utilities.tag_text(bold_text, lang, sc, "term")
end
local link_params = { lang = lang }
link_params.term = not term.unknown_term and term.title or nil
link_params.alt = term.alt
link_params.id = (not term.unknown_term and term.id and term.id ~= "") and term.id or nil
if not (exc and exc.suppress_tr) then
link_params.tr = term.tr
link_params.ts = term.ts
else
link_params.suppress_tr = true
end
link_params.lit = (opts.lit ~= "suppress") and term.lit or nil
if opts.gloss ~= "suppress" then
link_params.gloss = term.t
end
if term.g and term.g ~= "" then
local genders = M.string_utilities.split(term.g, ",")
for i = 1, #genders do
genders[i] = M.string_utilities.trim(genders[i])
end
link_params.genders = genders
end
if opts.pos ~= "suppress" then
link_params.pos = term.pos
link_params.ng = term.ng
end
if exc and exc.suppress_tr then
link_params.lit = nil
end
local show_qualifiers
if opts.tree_ql ~= "suppress" then
if term.q then
link_params.q = term.q
end
if term.qq then
link_params.qq = term.qq
end
if term.l then
link_params.l = term.l
end
if term.ll then
link_params.ll = term.ll
end
show_qualifiers = term.q or term.qq or term.l or term.ll
end
return M.links.full_link(link_params, "term", nil, show_qualifiers and true or nil)
end
local __is_content_page_cached
function Util.is_content_page()
if __is_content_page_cached == nil then
__is_content_page_cached = M.pages.is_content_page(mw.title.getCurrentTitle())
end
return __is_content_page_cached
end
local __page_data_cached
function Util.get_page_data()
if not __page_data_cached then
__page_data_cached = M.headword_data.page
end
return __page_data_cached
end
-- Extract base keyword from param (without modifiers)
local function get_keyword_base(param)
if type(param) ~= "string" then return nil end
local base = param:match("^:?([^<]+)") or param:gsub("^:", "")
return base
end
local function is_keyword(param, allow_colon_less)
if type(param) ~= "string" then return false end
local keywords = M.data.keywords
if param:sub(1, 1) == ":" then
local base = get_keyword_base(param)
return keywords[base] ~= nil
end
if allow_colon_less then
local base = get_keyword_base(param)
return keywords[base] ~= nil
end
return false
end
local function get_keyword(param, allow_colon_less)
if type(param) ~= "string" then return nil end
local keywords = M.data.keywords
if param:sub(1, 1) == ":" then
return get_keyword_base(param)
end
if allow_colon_less then
local base = get_keyword_base(param)
if keywords[base] then
return base
end
end
return nil
end
local function normalize_keyword(keyword)
if keyword:sub(1, 1) == ":" then
return keyword
end
return ":" .. keyword
end
-- Resolve keyword (possibly an alias) to its canonical form. Used only at input boundaries
local function get_canonical_keyword(keyword)
if not keyword then return keyword end
return M.data.keyword_canonical[keyword] or keyword
end
local function is_affix_group_keyword(keyword)
local config = keyword and M.data.keywords[keyword]
return config and config.affix_categories or false
end
local function reject_removed_surf_keyword(param)
local base = get_keyword_base(param)
if base == "surf" then
error("The `:surf` keyword has been removed. Use `<surf>` on a formation keyword instead (e.g. `:af<surf>`, `:bor<surf>`).")
end
end
local function copy_keyword_info(source)
local copy = {}
for k, v in pairs(source) do
copy[k] = v
end
return copy
end
local function lowercase_glossary_display(text)
return text:gsub("(%[%[Appendix:Glossary#[^|]+|)([^%]])([^%]]*)%]%]", function(prefix, first, rest)
return prefix .. mw.ustring.lower(first) .. rest .. "]]"
end)
end
local function surf_should_keep_formation_phrase(base)
if not base.phrase then
return false
end
if base.glossary then
return true
end
return not (base.phrase == "from" and (base.text == "From" or base.text == "from"))
end
-- Runtime overrides when <surf> is present on a keyword.
local function get_effective_keyword_info(keyword, modifiers)
local base = M.data.keywords[keyword]
if not base or not modifiers or not modifiers.surf then
return base
end
local effective = copy_keyword_info(base)
local surf_text = "By [[Appendix:Glossary#surface_analysis|surface analysis]],"
local surf_phrase = "by surface analysis,"
effective.new_sentence = true
effective.invisible = "tree"
if surf_should_keep_formation_phrase(base) then
effective.phrase = surf_phrase .. " " .. base.phrase
if base.text then
effective.text = surf_text .. " " .. lowercase_glossary_display(base.text)
else
effective.text = surf_text .. " " .. base.phrase
end
else
effective.text = surf_text
effective.phrase = surf_phrase
end
return effective
end
-- Build text/phrase for nominalization with <g:code> (uses data module for codes only).
local function get_nominalization_label_for_g(code)
if not code or code == "" then return nil end
local codes = M.data.nominalization_g_codes
local adj = codes[code]
if not adj and #code == 2 then
local gender_adj = codes[code:sub(1, 1)]
local number_adj = codes[code:sub(2, 2)]
if gender_adj and number_adj then
adj = gender_adj .. " " .. number_adj
end
end
if not adj then return nil end
local text = adj:gsub("^%l", function(c) return string.upper(c) end) .. " [[Appendix:Glossary#nominalization|nominalization]] of"
local phrase = M.en_utilities.add_indefinite_article(adj .. " [[Appendix:Glossary#nominalization|nominalization]] of", false)
return { text = text, phrase = phrase }
end
local EtymonParser = {}
-- Keyword modifier definitions
EtymonParser.keyword_param_mods = {
unc = { type = "boolean" },
ref = {},
text = { restrict = { keywords = { "from", "derived" } } },
lit = { restrict = { affix_group = true } },
conj = {}, -- conjunction for alternatives: "and", "or", "and/or", etc.
g = { restrict = { keywords = { "nominalization" } } },
surf = { type = "boolean" },
senseid = { restrict = { keywords = { "semantic loan" } } },
}
-- Term modifier definitions
EtymonParser.etymon_param_mods = {
id = {},
t = {},
tr = {},
ts = {},
q = {},
qq = {},
l = {},
ll = {},
pos = {},
ng = {},
alt = {},
g = {},
ety = {},
lit = {},
unc = { type = "boolean" },
ref = {},
aftype = { restrict = { affix_group = true } },
postype = {},
bor = { type = "boolean", restrict = { affix_group = true } },
slbor = { type = "boolean", restrict = { affix_group = true } },
lbor = { type = "boolean", restrict = { affix_group = true } },
}
local function get_clean_param_mods(param_mods)
local clean = {}
for mod_name, mod_def in pairs(param_mods) do
clean[mod_name] = {}
for key, value in pairs(mod_def) do
if key ~= "restrict" then
clean[mod_name][key] = value
end
end
end
return clean
end
function EtymonParser.check_modifier_restrictions(modifiers, current_keyword, param_mods)
for mod_name, mod_value in pairs(modifiers) do
-- Only check restrictions if the modifier has a non-false/nil value
if mod_value then
local mod_def = param_mods[mod_name]
if mod_def and mod_def.restrict then
if mod_def.restrict.affix_group then
if not is_affix_group_keyword(current_keyword) then
local mod_display = mod_value == true and "<" .. mod_name .. ">" or "<" .. mod_name .. ":" .. tostring(mod_value) .. ">"
error("The modifier `" .. mod_display .. "` is only allowed for affix-group keywords (e.g. `:af`, `:blend`, `:univ`).")
end
elseif mod_def.restrict.keywords then
local allowed_keywords = mod_def.restrict.keywords
local is_allowed = false
for _, allowed_keyword in ipairs(allowed_keywords) do
if current_keyword == allowed_keyword then
is_allowed = true
break
end
end
if not is_allowed then
local keyword_list = {}
for _, kw in ipairs(allowed_keywords) do
table.insert(keyword_list, ":" .. kw)
end
local keyword_str = table.concat(keyword_list, #keyword_list == 2 and " or " or ", ")
if #keyword_list > 2 then
-- Replace last comma with "or"
keyword_str = keyword_str:gsub(", ([^,]+)$", " or %1")
end
local mod_display = mod_value == true and "<" .. mod_name .. ">" or "<" .. mod_name .. ":" .. tostring(mod_value) .. ">"
error("The modifier `" .. mod_display .. "` is only allowed for the keyword" .. (#keyword_list > 1 and "s " or " ") .. keyword_str .. ".")
end
end
end
end
end
end
local TERM_RULE_DISALLOW = {
suppress = { field = "suppress_term", label = "suppressed" },
unknown = { field = "unknown_term", label = "unknown" },
family = { field = "is_family", label = "family" },
}
function EtymonParser.check_etymon_limits(count, limits, label, opts)
if not limits then
return
end
opts = opts or {}
local min_etymons = limits.min_etymons
if min_etymons == nil and not opts.skip_default_min then
min_etymons = 1
end
if min_etymons and count < min_etymons then
if min_etymons > 1 then
error("Detected " .. label .. " group with fewer than " .. min_etymons .. " etymons.")
else
error("Detected " .. label .. " with no etymons.")
end
end
if limits.max_etymons and count > limits.max_etymons then
local unit = (limits.max_etymons == 1) and "etymon" or "etymons"
error("Detected " .. label .. " with more than " .. limits.max_etymons .. " " .. unit .. ".")
end
end
function EtymonParser.check_term_rules(etymon_data, entry_lang, rules, label)
label = label or "term"
if rules and rules.disallow then
local disallowed = {}
for _, typ in ipairs(rules.disallow) do
local spec = TERM_RULE_DISALLOW[typ]
if spec and etymon_data[spec.field] then
table.insert(disallowed, spec.label)
end
end
if #disallowed > 0 then
error(label .. " does not support " ..
mw.text.listToText(disallowed, "or") .. " etymons.")
end
end
if etymon_data.is_family then
if rules and rules.family == "disallowed" then
error(label .. " does not support family codes" .. (rules.family_suffix or "."))
elseif not etymon_data.suppress_term then
error("Family codes require suppressed term (use family:-).")
end
end
if rules then
if rules.require_term and (not etymon_data.term or etymon_data.term == "") then
error(label .. " requires a term for each listed form.")
end
if rules.entry_lang then
if Util.get_norm_lang(etymon_data.lang):getFullCode() ~=
Util.get_norm_lang(entry_lang):getFullCode() then
error(label .. " terms must be in the entry language (" ..
entry_lang:getFullCode() .. "), got '" .. etymon_data.lang:getFullCode() .. "'.")
end
end
if rules.ancestor_check then
M.etymology.check_ancestor(entry_lang, etymon_data.lang)
end
elseif etymon_data.is_family and not etymon_data.suppress_term then
error("Family codes require suppressed term (use family:-).")
end
end
function EtymonParser.check_keyword_term(etymon_data, entry_lang, keyword)
local config = M.data.keywords[keyword]
EtymonParser.check_term_rules(etymon_data, entry_lang, config and config.term_rules, "`:" .. keyword .. "`")
end
function EtymonParser.check_supplement_term(etymon_data, entry_lang, supplement_type)
local config = M.data.supplements[supplement_type]
EtymonParser.check_term_rules(etymon_data, entry_lang, config and config.term_rules, "|" .. supplement_type .. "=")
end
-- Parse keyword with modifiers (e.g., ":bor<unc>" or ":bor<ref:{{R:example}}>")
function EtymonParser.parse_keyword_modifiers(param)
if type(param) ~= "string" then return nil, {} end
local base_keyword = get_keyword_base(param)
if not base_keyword then return nil, {} end
local canonical_keyword = get_canonical_keyword(base_keyword)
-- Check if there are any modifiers
if not param:find("<", 1, true) then
return canonical_keyword, {}
end
-- Parse modifiers using the same mechanism as etymon parsing
local rest_with_defaults = Util.add_boolean_defaults(param, EtymonParser.keyword_param_mods)
local function generate_obj(ignored)
return {}
end
local parsed = M.parse_utilities.parse_inline_modifiers(rest_with_defaults:gsub("^:?[^<]+", ""),
{ param_mods = get_clean_param_mods(EtymonParser.keyword_param_mods), generate_obj = generate_obj })
local modifiers = {
unc = parsed.unc or false,
ref = parsed.ref,
text = parsed.text,
lit = parsed.lit,
conj = parsed.conj,
g = parsed.g,
surf = parsed.surf or false,
senseid = parsed.senseid,
}
-- Validate modifiers against restrictions
EtymonParser.check_modifier_restrictions(modifiers, canonical_keyword, EtymonParser.keyword_param_mods)
return canonical_keyword, modifiers
end
local function normalize_keyword_param(keyword_with_mods)
local trimmed = M.string_utilities.trim(keyword_with_mods)
reject_removed_surf_keyword(trimmed:match("^:") and trimmed or (":" .. trimmed))
local base = get_keyword_base(trimmed)
if not base or not M.data.keywords[base] then
error("Invalid keyword '" .. trimmed .. "' in inline etymology")
end
local canonical_base = get_canonical_keyword(base)
local without_colon = trimmed:gsub("^:", "")
local mods_part = without_colon:sub(#base + 1)
local kw_param = normalize_keyword(canonical_base .. mods_part)
EtymonParser.parse_keyword_modifiers(kw_param)
return kw_param
end
local function get_keyword_mod_names()
local names = {}
for mod_name in pairs(EtymonParser.keyword_param_mods) do
names[mod_name] = true
end
return names
end
local function parse_inline_ety_run(ety_string)
local body = ety_string or ""
if body == "" then
error("Empty inline etymology")
end
local keyword_mod_names = get_keyword_mod_names()
local pos = 1
local len = #body
local function parse_err(msg)
error(msg .. " in inline etymology: '" .. body .. "'")
end
local function peek_double()
return body:sub(pos, pos + 1) == "<<"
end
local function mod_name_from_unwrapped(unwrapped)
return unwrapped:match("^<([^:>]+)")
end
local function is_keyword_mod(unwrapped)
local name = mod_name_from_unwrapped(unwrapped)
return name and keyword_mod_names[name] or false
end
local function read_double_bracket()
if not peek_double() then
return nil
end
local start = pos
pos = pos + 2
while pos <= len - 1 do
if body:sub(pos, pos + 1) == ">>" then
local token = body:sub(start, pos + 1)
pos = pos + 2
return token, token:sub(2, -2)
end
pos = pos + 1
end
parse_err("Unmatched <<")
end
local function read_angle_cell()
if body:sub(pos, pos) ~= "<" or peek_double() then
return nil
end
local open = pos
pos = pos + 1
local depth = 1
local i = pos
while i <= len do
local ch = body:sub(i, i)
if ch == "<" then
depth = depth + 1
elseif ch == ">" then
depth = depth - 1
if depth == 0 then
local inner = body:sub(open + 1, i - 1)
pos = i + 1
return inner
end
end
i = i + 1
end
parse_err("Unmatched <")
end
local function read_bare_run()
local start = pos
while pos <= len and body:sub(pos, pos) ~= "<" do
pos = pos + 1
end
return body:sub(start, pos - 1)
end
local function absorb_double_keyword_mods(keyword_str)
while peek_double() do
local saved = pos
local _, unwrapped = read_double_bracket()
if is_keyword_mod(unwrapped) then
keyword_str = keyword_str .. unwrapped
else
pos = saved
break
end
end
return keyword_str
end
local kw_start = pos
while pos <= len and body:sub(pos, pos) ~= "<" do
pos = pos + 1
end
local keyword = body:sub(kw_start, pos - 1)
if keyword:match("^%s*$") then
parse_err("Missing keyword")
end
keyword = absorb_double_keyword_mods(keyword)
local cells = {}
while pos <= len do
if peek_double() then
local _, unwrapped = read_double_bracket()
if is_keyword_mod(unwrapped) then
parse_err("Unexpected keyword modifier " .. unwrapped .. " outside of a keyword")
end
table.insert(cells, "+" .. unwrapped)
elseif body:sub(pos, pos) == "<" then
local inner = read_angle_cell()
if inner ~= "" then
table.insert(cells, inner)
end
else
local bare = read_bare_run()
if bare ~= "" then
if bare:sub(1, 1) ~= ":" then
parse_err("Unexpected bare text '" .. bare .. "' (use :keyword for nested keywords in inline etymology)")
end
if not is_keyword(bare, true) then
parse_err("Invalid keyword '" .. bare .. "' in inline etymology")
end
table.insert(cells, absorb_double_keyword_mods(bare))
end
end
end
return {
keyword = keyword,
cells = cells,
}
end
function EtymonParser.inline_ety_to_pipe(ety_string)
local run = parse_inline_ety_run(ety_string)
if not run.keyword or run.keyword:match("^%s*$") then
return "|"
end
local pipe_parts = { normalize_keyword_param(M.string_utilities.trim(run.keyword)) }
for _, segment in ipairs(run.cells) do
if is_keyword(segment, true) then
table.insert(pipe_parts, normalize_keyword_param(segment))
else
table.insert(pipe_parts, segment)
end
end
return "|" .. table.concat(pipe_parts, "|") .. "|"
end
function EtymonParser.pipe_to_inline_ety(pipe_string)
local cells = {}
for cell in pipe_string:gmatch("([^|]+)") do
if cell ~= "" then
table.insert(cells, cell)
end
end
if #cells == 0 then
return ""
end
local inline_parts = {}
for index, cell in ipairs(cells) do
local base = get_keyword_base(cell)
if base and M.data.keywords[base] then
local without_colon = cell:gsub("^:", "")
local kw_base, mods = without_colon:match("^([^<]+)(.*)$")
local inline_kw = (kw_base or without_colon) .. (mods or ""):gsub("<([^>]+)>", "<<%1>>")
if index > 1 then
inline_kw = ":" .. inline_kw
end
table.insert(inline_parts, inline_kw)
elseif cell:sub(1, 1) == "+" then
local mod = cell:sub(2)
if mod:match("^<.->$") then
mod = mod:sub(2, -2)
end
table.insert(inline_parts, "<<" .. mod .. ">>")
else
table.insert(inline_parts, "<" .. cell .. ">")
end
end
return table.concat(inline_parts, "")
end
function EtymonParser.parse_inline_ety(ety_string, context_lang)
local run = parse_inline_ety_run(ety_string)
local keyword = M.string_utilities.trim(run.keyword)
reject_removed_surf_keyword(":" .. keyword)
if not is_keyword(keyword, true) then
error("Invalid keyword '" .. keyword .. "' in inline etymology <ety:" .. keyword .. "...>")
end
local args = { context_lang:getCode(), normalize_keyword_param(keyword) }
for _, segment in ipairs(run.cells) do
if is_keyword(segment, true) then
table.insert(args, normalize_keyword_param(segment))
else
table.insert(args, segment)
end
end
return args
end
function EtymonParser.parse_etymon(param, context_lang)
if is_keyword(param) then
return nil
end
if type(param) ~= "string" then
return nil
end
local lang, rest
local is_family = false
local before_bracket = param:match("^([^<]*)") or param
local lang_code, rest_match = before_bracket:match("^([a-zA-Z][a-zA-Z0-9._-]*):(.*)$")
if lang_code then
local potential_lang = Util.get_lang(lang_code, true)
if potential_lang then
lang = potential_lang
rest = param:sub(#lang_code + 2)
else
local potential_family = Util.get_family(lang_code)
if potential_family then
lang = potential_family
rest = param:sub(#lang_code + 2)
is_family = true
else
lang = context_lang
rest = param
end
end
else
lang = context_lang
rest = param
end
M.tracking.track_term(rest)
if rest == "" or rest == "+" then
return {
lang = lang,
term = nil,
unknown_term = true,
is_family = is_family,
}
end
if rest == "-" then
return {
lang = lang,
term = nil,
suppress_term = true,
is_family = is_family,
}
end
if not rest:find("<", 1, true) then
return {
lang = lang,
term = M.string_utilities.trim(rest),
is_family = is_family,
}
end
local term_text = rest:match("^([^<]*)") or ""
local is_unknown = (term_text == "" or term_text == "+")
local is_suppress = (term_text == "-")
local function generate_obj(ignored_term)
return { term = (is_unknown or is_suppress) and nil or M.string_utilities.trim(term_text) }
end
local rest_with_defaults = Util.add_boolean_defaults(rest, EtymonParser.etymon_param_mods)
local parsed_obj = M.parse_utilities.parse_inline_modifiers(rest_with_defaults,
{ param_mods = get_clean_param_mods(EtymonParser.etymon_param_mods), generate_obj = generate_obj })
if parsed_obj.id and parsed_obj.id:match("^!") then
parsed_obj.id = parsed_obj.id:sub(2)
parsed_obj.override = true
end
parsed_obj.lang = lang
parsed_obj.is_family = is_family
if is_unknown then
parsed_obj.unknown_term = true
elseif is_suppress then
parsed_obj.suppress_term = true
end
return parsed_obj
end
function EtymonParser.validate(lang, args, id, title, pos, starts_with_lang_code)
-- id is now optional, so only validate if provided
if id then
if mw.ustring.len(id) < 2 then
error("The `id` parameter must have at least two characters.")
end
if id == title or id == Util.get_page_data().pagename then
error("The `id` parameter must not be the same as the page title.")
end
end
local valid_pos = { prefix = true, suffix = true, interfix = true, infix = true, root = true, word = true }
if pos and not valid_pos[pos] then
error("Unknown value provided for `pos`. Valid values: " .. table.concat(require("Module:table").keysToList(valid_pos), ", ") .. ".")
end
local current_keyword = "from"
local current_keyword_explicit = false
local keyword_etymons = {}
local keywords = M.data.keywords
local function checkKeyword()
local config = keywords[current_keyword]
if current_keyword == "from" and not current_keyword_explicit and #keyword_etymons == 0 then
keyword_etymons = {}
return
end
EtymonParser.check_etymon_limits(#keyword_etymons, config, "`:" .. current_keyword .. "`")
keyword_etymons = {}
end
local start_index = starts_with_lang_code and 2 or 1
for i = start_index, #args do
local param = args[i]
if type(param) ~= "string" then
elseif param:sub(1, 1) == ":" and not is_keyword(param) then
reject_removed_surf_keyword(param)
error("Invalid keyword '" .. param .. "'. Did you mean a valid keyword like ':bor', ':inh', etc.?")
elseif is_keyword(param) then
checkKeyword()
current_keyword = get_canonical_keyword(get_keyword(param))
current_keyword_explicit = true
else
local etymon_data = EtymonParser.parse_etymon(param, lang)
if etymon_data then
table.insert(keyword_etymons, param)
EtymonParser.check_keyword_term(etymon_data, lang, current_keyword)
-- Check modifier restrictions
EtymonParser.check_modifier_restrictions(etymon_data, current_keyword, EtymonParser.etymon_param_mods)
-- postype must be "root" or "word"
local VALID_POSTYPES = { root = true, word = true }
if etymon_data.postype and not VALID_POSTYPES[etymon_data.postype] then
error("Invalid <postype:" .. etymon_data.postype .. ">; must be \"root\" or \"word\".")
end
if etymon_data.ety then
local inline_args = EtymonParser.parse_inline_ety(etymon_data.ety, etymon_data.lang)
EtymonParser.validate(etymon_data.lang, inline_args, nil, nil, nil, true)
end
else
table.insert(keyword_etymons, param)
end
end
end
checkKeyword()
end
local DataRetriever = {}
local function format_etymon_id_hint(id_data, idx)
local id = type(id_data) == "table" and id_data.id or id_data
local pos = type(id_data) == "table" and id_data.pos
if id and id ~= "" and id ~= "*" then
return '"' .. id .. '"'
end
if pos and pos ~= "" then
return "unnamed (|pos=" .. pos .. "|)"
end
return "etymon #" .. idx .. " (no |id= on page)"
end
local function etymon_target_page_link(page, norm_lang)
return M.links.full_link({
term = page,
lang = norm_lang,
no_generate_forms = true,
}, "term")
end
-- Summarize {{etymon}} id slots on a linked page for preview warnings.
local function summarize_available_etymon_ids(ids)
local id_list = {}
local all_idless = true
local target_has_idless = false
local any_pos = false
for i, id_data in ipairs(ids) do
local id = type(id_data) == "table" and id_data.id or id_data
local pos = type(id_data) == "table" and id_data.pos
if id and id ~= "" and id ~= "*" then
all_idless = false
else
target_has_idless = true
end
if pos and pos ~= "" then
any_pos = true
end
table.insert(id_list, format_etymon_id_hint(id_data, i))
end
return {
id_list = id_list,
all_idless = all_idless,
target_has_idless = target_has_idless,
any_pos = any_pos,
count = #ids,
options_text = mw.text.listToText(id_list),
}
end
local function ambiguous_etymon_suggestion(page_link, summary)
if summary.all_idless then
if summary.any_pos then
return " None set `|id=` yet; add a unique `|id=` to each on " .. page_link
.. ", then `<id:identifier>` after the term here. Section order / hints: "
.. summary.options_text .. "."
end
return " None set `|id=` yet; add a unique `|id=` to each {{etymon}} in that section from top to bottom, then `<id:identifier>` after the term here (same value as `|id=`)."
end
return " Specify which one with `<id:identifier>` after the term. Options: " .. summary.options_text .. "."
end
local function warn_ambiguous_etymon_link(page, norm_lang, ids, is_toplevel)
local page_link = etymon_target_page_link(page, norm_lang)
local summary = summarize_available_etymon_ids(ids)
if is_toplevel and summary.target_has_idless then
__state.linked_page_multiple_etymons_idless = true
end
local lang_name = norm_lang:getCanonicalName()
local lead = "Etymology link to " .. page_link .. " is ambiguous (" .. summary.count
.. " {{etymon}} templates for " .. lang_name .. ")."
Util.add_warning(lead .. ambiguous_etymon_suggestion(page_link, summary), true)
end
local function is_mismatched_explicit_id(base_key, cached_args, parent_etymon)
return cached_args == M.data.STATUS.MISSING and not parent_etymon
and #(__state.available_etymon_ids[base_key] or {}) > 0
end
local function maybe_flag_partial_etymology_reference(base_key, etymon_data, cached_args, is_toplevel)
if not is_toplevel or __state.skip_partial_etymology_category then
return
end
if not __state.partial_etymology_targets[base_key] then
return
end
if etymon_data.id and type(cached_args) == "table" then
return
end
__state.linked_page_partial_etymology_sections = true
end
local function is_nonlemma_etymon_template(template_args)
return template_args and M.yesno(template_args.nl, false)
end
local function warn_mismatched_explicit_id(page, norm_lang, base_key, etymon_id)
local page_link = etymon_target_page_link(page, norm_lang)
local summary = summarize_available_etymon_ids(__state.available_etymon_ids[base_key] or {})
local lang_name = norm_lang:getCanonicalName()
local lead = "Etymology link to " .. page_link .. " uses `<id:" .. etymon_id
.. ">`, but no {{etymon}} on that page has `|id=" .. etymon_id .. "|` for " .. lang_name .. "."
Util.add_warning(lead .. " Valid IDs: " .. summary.options_text .. ".", true)
end
-- Given an etymon data, scrape its page and cache the result in the global state object.
function DataRetriever.cache_page_etymons(etymon_page, etymon_title, key, etymon_lang, etymon_id, redirected_from, descendants_is_toplevel)
local content = etymon_title:getContent()
if not content then
__state.cached_etymon_args[key] = M.data.STATUS.REDLINK
return
end
-- Check if the linked page is a redirect. If it is, the template parsing
-- code below will be effectively skipped, and `scrape_page` will be called
-- again on the redirect target (see the bottom of this function)
local lang_section_for_descendants = nil
local redirect_target = etymon_title.redirect_target
if not redirect_target then
--content = M.pages.get_section(content, etymon_lang:getFullName(), 2)
-- Fix Thai Wiktionary that prefixes language name with ภาษา
local lang_name = etymon_lang:getFullName()
local section_content = M.pages.get_section(content, lang_name, 2)
if not section_content then
section_content = M.pages.get_section(content, "ภาษา" .. lang_name, 2)
end
content = section_content
if not content then
__state.cached_etymon_args[key] = M.data.STATUS.MISSING
return
end
lang_section_for_descendants = content
end
local etymon_lang_code = etymon_lang:getFullCode()
local lang_page_key = etymon_lang_code .. ":" .. etymon_page
local found_templates_for_lang = {}
local found_ids = {}
local get_node_class = M.template_parser.class_else_type
-- Look for all {{etymon}} templates within the page content using the template parser
-- This way the same page is never parsed more than once
-- Build a map from senseids to their parent etymonids.
local active_etymon_args = nil
local etymology_section_count = 0
local etymology_sections_with_etymon = 0
local current_etymology_has_etymon = false
local current_etymology_has_nonlemma = false
local function finalize_current_etymology_section()
if etymology_section_count == 0 then
return
end
if current_etymology_has_etymon or current_etymology_has_nonlemma then
etymology_sections_with_etymon = etymology_sections_with_etymon + 1
end
current_etymology_has_etymon = false
current_etymology_has_nonlemma = false
end
for node in M.template_parser.parse(content):iterate_nodes() do
local node_class = get_node_class(node)
if node_class == "heading" then
-- A new L2 or etymology section acts as a barrier: an {{etymon}} usage
-- used previously cannot be the parent of any subsequent senseids.
-- Note that we don't have to check for L2s due to the usage of `M.pages.get_section` above.
if node:get_name():find("^Etymology") then
finalize_current_etymology_section()
etymology_section_count = etymology_section_count + 1
active_etymon_args = nil
end
elseif node_class == "template" then
local template_name = node:get_name()
if template_name == "etymon" then
local template_args = node:get_arguments()
-- Check if this etymon is for our language
if template_args[1] == etymon_lang_code then
if is_nonlemma_etymon_template(template_args) then
if etymology_section_count > 0 then
current_etymology_has_nonlemma = true
end
else
if etymology_section_count > 0 then
current_etymology_has_etymon = true
end
table.insert(found_templates_for_lang, template_args)
if template_args.id then
local etymon_key = lang_page_key .. ":" .. template_args.id
__state.cached_etymon_args[etymon_key] = template_args
__state.cached_etymon_pages[etymon_key] = tostring(etymon_page)
table.insert(found_ids, template_args.id)
active_etymon_args = template_args
else
-- Store idless etymon with default key
local etymon_key = lang_page_key .. ":*"
__state.cached_etymon_args[etymon_key] = template_args
__state.cached_etymon_pages[etymon_key] = tostring(etymon_page)
table.insert(found_ids, "*")
active_etymon_args = template_args
end
end
end
elseif active_etymon_args and template_name == "senseid" then
local template_args = node:get_arguments()
-- This should always be true for proper usages of {{senseid}}.
if template_args[1] == etymon_lang_code and template_args[2] then
local sense_id_key = lang_page_key .. ":" .. template_args[2]
__state.senseid_parent_etymon[sense_id_key] = active_etymon_args
__state.cached_etymon_pages[sense_id_key] = tostring(etymon_page)
end
end
end
end
finalize_current_etymology_section()
if lang_section_for_descendants
and etymology_section_count > 1
and etymology_sections_with_etymon > 0
and etymology_sections_with_etymon < etymology_section_count
then
__state.partial_etymology_targets[lang_page_key] = true
end
if descendants_is_toplevel and lang_section_for_descendants and #found_templates_for_lang > 0 then
M.descendants.cache_page_checks({
lang_section = lang_section_for_descendants,
etymon_lang_code = etymon_lang_code,
found_templates_for_lang = found_templates_for_lang,
entry_title = __state.entry_title,
entry_lang_code = __state.entry_lang_code,
entry_lang = __state.entry_lang_code and Util.get_lang(__state.entry_lang_code, true) or nil,
cached_descendants_checks = __state.cached_descendants_checks,
lang_page_key = lang_page_key,
redirected_from = redirected_from,
})
end
local id_data_list = {}
for _, args in ipairs(found_templates_for_lang) do
local id = args.id or "*"
table.insert(id_data_list, { id = id, pos = args.pos })
end
__state.available_etymon_ids[lang_page_key] = id_data_list
if #found_templates_for_lang == 1 then
__state.single_etymons[lang_page_key] = found_templates_for_lang[1]
end
if redirected_from and __state.available_etymon_ids[lang_page_key] then
__state.available_etymon_ids[redirected_from] = __state.available_etymon_ids[redirected_from] or {}
for _, id_data in ipairs(__state.available_etymon_ids[lang_page_key]) do
table.insert(__state.available_etymon_ids[redirected_from], id_data)
end
end
if __state.cached_etymon_args[key] ~= nil or __state.senseid_parent_etymon[key] ~= nil then
-- All done!
return
elseif redirect_target and not redirected_from then
-- Try scraping the redirect.
etymon_page = redirect_target.prefixedText
DataRetriever.cache_page_etymons(etymon_page, redirect_target, lang_page_key .. ":" .. etymon_id, etymon_lang, etymon_id, lang_page_key, descendants_is_toplevel)
__state.cached_etymon_args[key] = __state.cached_etymon_args[etymon_lang_code .. ":" .. etymon_page .. ":" .. etymon_id]
else
__state.cached_etymon_args[key] = M.data.STATUS.MISSING
end
end
local function has_linkable_term(etymon_data)
if etymon_data.is_family or etymon_data.suppress_term or etymon_data.unknown_term then
return false
end
local term = etymon_data.term
if term == nil or term == "" then
return false
end
return M.string_utilities.trim(term) ~= ""
end
local function record_term_id_tracking(etymon_data)
if not has_linkable_term(etymon_data) then
return
end
local term_page = M.links.get_link_page(etymon_data.term, etymon_data.lang)
M.tracking.record_term_id_usage(__state.id_stats, etymon_data, term_page)
end
-- Given an etymon object, scrape its page (if necessary) and return its own etymon arguments as well as the page name.
function DataRetriever.get_etymon_args(etymon_data, is_toplevel)
if not has_linkable_term(etymon_data) then
return M.data.STATUS.MISSING, nil, nil, nil
end
local page = M.links.get_link_page(etymon_data.term, etymon_data.lang)
local norm_lang = Util.get_norm_lang(etymon_data.lang)
local base_key = norm_lang:getFullCode() .. ":" .. page
if etymon_data.id then
local key = base_key .. ":" .. etymon_data.id
local cached_args = __state.cached_etymon_args[key] or __state.senseid_parent_etymon[key]
if cached_args == nil then
local title = mw.title.new(page)
if not title then error('Invalid page title "' .. page .. '" encountered.') end
DataRetriever.cache_page_etymons(page, title, key, norm_lang, etymon_data.id, nil, is_toplevel)
end
cached_args = __state.cached_etymon_args[key] or __state.senseid_parent_etymon[key] -- refresh
-- Get etymon_id from parent if this was resolved via senseid
local parent_etymon = __state.senseid_parent_etymon[key]
local resolved_etymon_id = parent_etymon and parent_etymon.id
local descendants_check = M.descendants.get_lookup_check({
cached_descendants_checks = __state.cached_descendants_checks,
is_toplevel = is_toplevel,
base_key = base_key,
lookup = {
explicit_id = etymon_data.id,
parent_etymon = parent_etymon,
},
})
if is_toplevel and descendants_check == nil then
local title = mw.title.new(page)
if title then
DataRetriever.cache_page_etymons(page, title, key, norm_lang, etymon_data.id, nil, true)
descendants_check = M.descendants.get_lookup_check({
cached_descendants_checks = __state.cached_descendants_checks,
is_toplevel = true,
base_key = base_key,
lookup = {
explicit_id = etymon_data.id,
parent_etymon = parent_etymon,
},
})
end
end
local mismatched_id = is_mismatched_explicit_id(base_key, cached_args, parent_etymon)
if mismatched_id and is_toplevel then
__state.has_mismatched_id = true
M.tracking.record_mismatched_id_usage(__state.id_stats, norm_lang, page, etymon_data.id)
warn_mismatched_explicit_id(page, norm_lang, base_key, etymon_data.id)
end
maybe_flag_partial_etymology_reference(base_key, etymon_data, cached_args, is_toplevel)
return cached_args, __state.cached_etymon_pages[key], resolved_etymon_id, descendants_check
else
__state.used_idless_etymon = true
if is_toplevel then
__state.toplevel_idless_etymon = true
end
if __state.available_etymon_ids[base_key] == nil then
local title = mw.title.new(page)
if not title then error('Invalid page title "' .. page .. '" encountered.') end
DataRetriever.cache_page_etymons(page, title, base_key .. ":*", norm_lang, "*", nil, is_toplevel)
end
local ids = __state.available_etymon_ids[base_key] or {}
local count = #ids
-- Try to filter by postype if available and we have multiple candidates
if count > 1 and etymon_data.postype then
local matching_ids = {}
for _, id_data in ipairs(ids) do
if id_data.pos == etymon_data.postype then
table.insert(matching_ids, id_data)
end
end
if #matching_ids == 1 then
local matched_id = matching_ids[1].id
local matched_key = base_key .. ":" .. matched_id
M.tracking.record_idless_resolution(__state.id_stats, norm_lang, page, "postype")
local descendants_check = M.descendants.get_lookup_check({
cached_descendants_checks = __state.cached_descendants_checks,
is_toplevel = is_toplevel,
base_key = base_key,
lookup = { id = matched_id },
})
if is_toplevel and descendants_check == nil then
local title = mw.title.new(page)
if title then
DataRetriever.cache_page_etymons(page, title, base_key .. ":*", norm_lang, "*", nil, true)
descendants_check = M.descendants.get_lookup_check({
cached_descendants_checks = __state.cached_descendants_checks,
is_toplevel = true,
base_key = base_key,
lookup = { id = matched_id },
})
end
end
local matched_args = __state.cached_etymon_args[matched_key]
maybe_flag_partial_etymology_reference(base_key, etymon_data, matched_args, is_toplevel)
return matched_args, __state.cached_etymon_pages[matched_key], nil, descendants_check
end
end
if count == 1 then
local only_id_data = ids[1]
local only_id = (type(only_id_data) == "table" and only_id_data.id) or only_id_data or "*"
M.tracking.record_idless_resolution(__state.id_stats, norm_lang, page, "single")
local descendants_check = M.descendants.get_lookup_check({
cached_descendants_checks = __state.cached_descendants_checks,
is_toplevel = is_toplevel,
base_key = base_key,
lookup = { id_data = only_id_data },
})
if is_toplevel and descendants_check == nil then
local title = mw.title.new(page)
if title then
DataRetriever.cache_page_etymons(page, title, base_key .. ":*", norm_lang, "*", nil, true)
descendants_check = M.descendants.get_lookup_check({
cached_descendants_checks = __state.cached_descendants_checks,
is_toplevel = true,
base_key = base_key,
lookup = { id_data = only_id_data },
})
end
end
local single_args = __state.single_etymons[base_key]
maybe_flag_partial_etymology_reference(base_key, etymon_data, single_args, is_toplevel)
return single_args, __state.cached_etymon_pages[base_key .. ":" .. only_id], nil, descendants_check
elseif count > 1 then
M.tracking.record_idless_resolution(__state.id_stats, norm_lang, page, "ambiguous")
warn_ambiguous_etymon_link(page, norm_lang, ids, is_toplevel)
maybe_flag_partial_etymology_reference(base_key, etymon_data, M.data.STATUS.AMBIGUOUS, is_toplevel)
return M.data.STATUS.AMBIGUOUS, nil, nil, nil
else
M.tracking.record_idless_resolution(__state.id_stats, norm_lang, page, "missing")
maybe_flag_partial_etymology_reference(base_key, etymon_data, M.data.STATUS.MISSING, is_toplevel)
return M.data.STATUS.MISSING, nil, nil, nil
end
end
end
local function keyword_invisible_in_tree(keyword_info)
if not keyword_info then
return false
end
local inv = keyword_info.invisible
return inv == "all" or inv == true or inv == "tree"
end
-- True when the node has at least one top-level child container visible in the tree.
local function node_has_visible_tree_children(node)
for _, container in ipairs(node.children or {}) do
if not keyword_invisible_in_tree(container.keyword_info) then
return true
end
end
return false
end
-- Count visible term nodes in the tree.
local function get_visible_tree_depth(node, skip_child_rendering)
local max_depth = 1
if skip_child_rendering or not node then
return max_depth
end
for _, container in ipairs(node.children or {}) do
local keyword_info = container.keyword_info
if not keyword_invisible_in_tree(keyword_info) then
local skip_grandchildren = keyword_info and keyword_info.no_child_categories
for _, term in ipairs(container.terms or {}) do
if term.is_duplicate then
if term.original_has_children then
max_depth = math.max(max_depth, 2)
end
else
max_depth = math.max(max_depth, 1 + get_visible_tree_depth(term, skip_grandchildren))
end
end
end
end
return max_depth
end
local function as_param_list(val)
if val == nil then
return {}
end
if type(val) == "table" then
return val
end
if type(val) == "string" and val ~= "" then
return { val }
end
return {}
end
local TreeBuilder = {}
local function parse_etymon_references(refs_text)
if not refs_text or refs_text == "" then
return ""
end
return M.references.parse_references(refs_text)
end
local function parse_tree_references(node)
if node.ref then
node.parsed_ref = parse_etymon_references(node.ref)
end
if node.children then
for _, container in ipairs(node.children) do
if container.terms then
for _, term in ipairs(container.terms) do
parse_tree_references(term)
end
end
end
end
if node.supplements then
for _, supplement in ipairs(node.supplements) do
if supplement.terms then
for _, term in ipairs(supplement.terms) do
parse_tree_references(term)
end
end
end
end
end
-- Build a unique key for deduplication in the seen table
function TreeBuilder.build_key(lang, title, args)
local norm_lang_code = Util.get_norm_lang(lang):getFullCode()
local is_table = type(args) == "table"
local id = (is_table and args.id) or ""
if title then
return norm_lang_code .. ":" .. M.links.get_link_page(title, lang) .. ":" .. id
end
if is_table and args.status == M.data.STATUS.INLINE then
local content_parts = {}
for i = 1, #args do
content_parts[i] = tostring(args[i])
end
return norm_lang_code .. ":*:" .. id .. "\0" .. table.concat(content_parts, "\0")
end
return norm_lang_code .. ":*:" .. id
end
-- Copy parsed etymon modifiers onto a tree/supplement term node.
function TreeBuilder.apply_etymon_fields(term, etymon_data)
term.id = etymon_data.id
term.t = etymon_data.t
term.tr = etymon_data.tr
term.ts = etymon_data.ts
term.alt = etymon_data.alt
term.g = etymon_data.g
term.pos = etymon_data.pos
term.ng = etymon_data.ng
term.ref = etymon_data.ref
term.is_uncertain = etymon_data.unc
term.lit = etymon_data.lit
term.q = etymon_data.q
term.qq = etymon_data.qq
term.l = etymon_data.l
term.ll = etymon_data.ll
term.suppress_term = etymon_data.suppress_term
term.unknown_term = etymon_data.unknown_term
term.is_family = etymon_data.is_family
term.override = etymon_data.override
term.aftype = etymon_data.aftype
term.postype = etymon_data.postype
term.bor = etymon_data.bor
term.lbor = etymon_data.lbor
term.slbor = etymon_data.slbor
end
function TreeBuilder.build_supplement_term(etymon_data, entry_lang, supplement_type)
EtymonParser.check_supplement_term(etymon_data, entry_lang, supplement_type)
local term = {
lang = etymon_data.lang,
title = etymon_data.term,
children = {},
status = M.data.STATUS.OK,
}
TreeBuilder.apply_etymon_fields(term, etymon_data)
return term
end
function TreeBuilder.build_supplement_terms(entry_lang, supplement_type, param_value)
local terms = {}
for _, term_param in ipairs(as_param_list(param_value)) do
if type(term_param) == "string" and term_param ~= "" then
local etymon_data = EtymonParser.parse_etymon(term_param, entry_lang)
if etymon_data then
table.insert(terms, TreeBuilder.build_supplement_term(etymon_data, entry_lang, supplement_type))
end
end
end
return terms
end
-- Attach a |param= supplement defined in etymon_data.supplements (e.g. doublet=).
function TreeBuilder.append_term_supplement(data_tree, entry_lang, supplement_type, param_value)
local config = M.data.supplements[supplement_type]
if not config then
error("Unknown supplement '" .. tostring(supplement_type) .. "'.")
end
local terms = TreeBuilder.build_supplement_terms(entry_lang, supplement_type, param_value)
if #terms == 0 then
return
end
data_tree.supplements = data_tree.supplements or {}
table.insert(data_tree.supplements, {
type = supplement_type,
config = config,
terms = terms,
})
M.tracking.record_keyword_usage(__state.toplevel_keyword_stats, supplement_type, entry_lang, entry_lang, true)
end
function TreeBuilder.build(lang, title, args, seen, depth, stop_recursion)
seen = seen or {}
depth = depth or 0
local is_toplevel = (depth == 0)
if depth > __state.max_depth_reached then
__state.max_depth_reached = depth
end
__state.total_nodes = __state.total_nodes + 1
local lang_code = lang:getCode()
__state.language_count[lang_code] = (__state.language_count[lang_code] or 0) + 1
local current_id = (type(args) == "table" and args.id) or ""
local key = TreeBuilder.build_key(lang, title, args)
local node = { lang = lang, title = title, id = current_id, args = args, children = {}, status = M.data.STATUS.OK }
if type(args) ~= "table" or seen[key] then
node.status = args or M.data.STATUS.MISSING
-- Mark as duplicate if we've seen this node before
if seen[key] then
node.is_duplicate = true
node.duplicate_key = key
local original_node = seen[key]
if type(original_node) == "table" and original_node.children and #original_node.children > 0 then
node.original_has_children = true
end
end
return node
end
node.status = args.status or M.data.STATUS.OK
seen[key] = node
-- If stop_recursion is set, skip parsing children but check for visible children
if stop_recursion then
local keywords = M.data.keywords
local has_visible_children = false
for i = 2, #args do
local param = args[i]
if type(param) == "string" then
local keyword_base = get_keyword_base(param)
if keyword_base and keywords[keyword_base] then
local _, kw_modifiers = EtymonParser.parse_keyword_modifiers(param:sub(1, 1) == ":" and param or (":" .. param))
if not keyword_invisible_in_tree(get_effective_keyword_info(keyword_base, kw_modifiers)) then
has_visible_children = true
break
end
elseif param:sub(1, 1) ~= ":" then
-- It's a term (not a keyword), so there are visible children
has_visible_children = true
break
end
end
end
node.has_visible_children = has_visible_children
return node
end
-- Parse args into keyword containers
local current_keyword = "from"
local current_keyword_modifiers = {}
local current_container = nil
local function ensure_container()
if not current_container or current_container.keyword ~= current_keyword then
local keyword_info = get_effective_keyword_info(current_keyword, current_keyword_modifiers)
current_container = {
keyword = current_keyword,
keyword_info = keyword_info,
keyword_modifiers = current_keyword_modifiers,
terms = {},
}
table.insert(node.children, current_container)
-- Override keyword text/phrase for nominalization with <g:code>
if current_keyword_modifiers.g and current_keyword == "nominalization" then
local labels = get_nominalization_label_for_g(current_keyword_modifiers.g)
if not labels then
local codes = {}
for c in pairs(M.data.nominalization_g_codes) do table.insert(codes, c) end
table.sort(codes)
error("Invalid <g:" .. tostring(current_keyword_modifiers.g) .. ">. Supported codes for nominalization: " .. table.concat(codes, ", "))
end
current_container.keyword_info = copy_keyword_info(keyword_info)
current_container.keyword_info.text = labels.text
current_container.keyword_info.phrase = labels.phrase
end
end
return current_container
end
local parse_context_lang = Util.resolve_context_lang(lang, args)
for i = 2, #args do
local param = args[i]
if is_keyword(param) then
local keyword, modifiers = EtymonParser.parse_keyword_modifiers(param)
if not keyword then
error("Invalid keyword '" .. param .. "'.")
end
current_keyword = keyword
current_keyword_modifiers = modifiers
current_container = nil -- Force new container for new keyword
elseif type(param) == "string" and param:sub(1, 1) == ":" then
reject_removed_surf_keyword(param)
error("Invalid keyword '" .. param .. "'. Did you mean a valid keyword like ':bor', ':inh', etc.?")
elseif type(param) == "string" then
local etymon_data = EtymonParser.parse_etymon(param, parse_context_lang)
if etymon_data then
-- Track keyword usage at top level
M.tracking.record_keyword_usage(__state.toplevel_keyword_stats, current_keyword, lang, etymon_data.lang, is_toplevel)
local term_node = {}
local container
-- Handle suppress_term (-) and unknown_term (empty or +) directly
if etymon_data.suppress_term or etymon_data.unknown_term then
container = ensure_container()
if etymon_data.ety then
local inline_args = EtymonParser.parse_inline_ety(etymon_data.ety, etymon_data.lang)
inline_args.id = etymon_data.id
inline_args.status = M.data.STATUS.INLINE
term_node = TreeBuilder.build(etymon_data.lang, nil, inline_args, seen, depth + 1)
else
term_node = {
lang = etymon_data.lang,
children = {},
status = M.data.STATUS.OK,
}
end
TreeBuilder.apply_etymon_fields(term_node, etymon_data)
else
-- Regular term: fetch arguments from page
record_term_id_tracking(etymon_data)
local etymon_args, page_of, resolved_etymon_id, descendants_check =
DataRetriever.get_etymon_args(etymon_data, is_toplevel)
-- Check for <ety> inline parameter doesn't override the scraped arguments, unless the latter are missing
if etymon_data.ety then
if etymon_args == M.data.STATUS.REDLINK or etymon_args == M.data.STATUS.MISSING then
__state.current_page_has_inline_etymology = true
if is_toplevel then
__state.toplevel_has_inline_etymology = true
end
local inline_args = EtymonParser.parse_inline_ety(etymon_data.ety, etymon_data.lang)
-- Track inline ety keywords too
local inline_keyword = get_keyword(inline_args[2], true)
if inline_keyword and #inline_args >= 3 then
local inline_etymon = EtymonParser.parse_etymon(inline_args[3], etymon_data.lang)
if inline_etymon then
M.tracking.record_keyword_usage(__state.toplevel_keyword_stats, inline_keyword, etymon_data.lang, inline_etymon.lang, is_toplevel)
end
end
inline_args.id = etymon_data.id
inline_args.status = M.data.STATUS.INLINE
etymon_args = inline_args
term_node.page_of = __state.cached_etymon_pages[key] -- term node is on the same page as the parent
else
-- Scraped arguments exist, <ety> is redundant and ignored
__state.current_page_has_redundant_etymology = true
if is_toplevel then
__state.toplevel_redundant_etymology = true
end
end
end
-- Ensure container exists before checking keyword info
container = ensure_container()
-- Check if current keyword has no_child_categories - if so, stop recursion
local keyword_info = container.keyword_info
local should_stop_recursion = (stop_recursion or (keyword_info and keyword_info.no_child_categories))
term_node = TreeBuilder.build(etymon_data.lang, etymon_data.term, etymon_args, seen, depth + 1, should_stop_recursion)
term_node.target_key = Util.get_norm_lang(etymon_data.lang):getFullCode() ..
":" .. M.links.get_link_page(etymon_data.term, etymon_data.lang)
term_node.etymon_id = resolved_etymon_id -- The actual etymon id when resolved via senseid
term_node.page_of = page_of
TreeBuilder.apply_etymon_fields(term_node, etymon_data)
term_node.missing_descendants_header, term_node.missing_descendants_entry =
M.descendants.get_term_sync_flags(current_keyword, term_node.status, descendants_check)
end
table.insert(container.terms, term_node)
end
end
end
return node
end
-- Convert etymology tree to JSON-serializable table
local function tree_to_json(node)
local obj = {
term = node.title,
lang = node.lang:getCode(),
lang_name = node.lang:getCanonicalName(),
id = (node.id and node.id ~= "") and node.id or nil,
status = node.status,
is_uncertain = node.is_uncertain or nil,
is_duplicate = node.is_duplicate or nil,
gloss = node.t,
transliteration = node.tr,
transcription = node.ts,
alt = node.alt,
g = node.g,
pos = node.pos,
ng = node.ng,
children = {},
}
for _, container in ipairs(node.children or {}) do
local keyword_info = container.keyword_info
if keyword_info then
local container_obj = {
keyword = container.keyword,
keyword_label = keyword_info.text,
keyword_abbrev = keyword_info.abbrev,
is_group = keyword_info.is_group or nil,
is_invisible = keyword_info.invisible or nil,
is_uncertain = (container.keyword_modifiers and container.keyword_modifiers.unc) or nil,
terms = {},
}
for _, term in ipairs(container.terms or {}) do
table.insert(container_obj.terms, tree_to_json(term))
end
table.insert(obj.children, container_obj)
end
end
return obj
end
-- Build and return the etymology data tree for a given term.
function export.get_tree(lang, title, args, options)
options = options or {}
__state.entry_title = title
__state.entry_lang_code = lang:getCode()
__state.id_stats = M.tracking.new_id_stats()
__state.skip_partial_etymology_category = options.skip_partial_etymology_category == true
if options.validate then
EtymonParser.validate(lang, args, options.id, title, options.pos, false)
end
local lang_code = lang:getCode()
local start_index = (args[1] == lang_code) and 2 or 1
local tree_args = { [1] = lang_code, id = options.id or args.id }
for i = start_index, #args do
table.insert(tree_args, args[i])
end
__state.cached_etymon_args[lang_code .. ":" .. title .. ":" .. (tree_args.id or "")] = tree_args
local ety_data_tree = TreeBuilder.build(lang, title, tree_args)
parse_tree_references(ety_data_tree)
if options.json then
return M.JSON.toJSON(tree_to_json(ety_data_tree))
end
return ety_data_tree
end
-- Given a language code, page name and optionally the id= parameter,
-- render the tree and only the etymology tree for the relevant page.
-- Fetches and parses the corresponding {{etymon}} from the requested page,
-- and any further pages needed to render the tree.
-- Parameters can be passed either through the #invoke or as
-- template parameters *through* an #invoke.
function export.render_tree_for_etymon_on_page(frame)
local frame_args = frame.args
local parent_args = frame:getParent().args
local langcode = frame_args[1] or parent_args[1]
local pagename = frame_args[2] or parent_args[2]
local id = frame_args["id"] or parent_args["id"]
local display_title = frame_args["title"] or parent_args["title"]
local parsed_title = mw.title.new(pagename, 0)
local title
if parsed_title.namespace == 0 then
title = M.pages.safe_page_name(parsed_title)
elseif parsed_title.namespace == 118 then
title = "*" .. M.pages.safe_page_name(parsed_title)
else
error("Unsupported namespace for render_tree_for_etymon_on_page: " .. parsed_title.namespace)
end
local lang = Util.get_lang(langcode)
__state.entry_title = title
__state.entry_lang_code = lang:getCode()
__state.id_stats = M.tracking.new_id_stats()
-- Construct etymon_data for DataRetriever.get_args.
local etymon_data = {
lang = lang,
term = title,
id = id
}
local args, pagename = DataRetriever.get_etymon_args(etymon_data, true)
if args == M.data.STATUS.MISSING then
error("The etymon template was not found (language " ..
langcode ..
", title '" ..
title ..
"'" ..
(id and ", ID '" .. id .. "'" or ", no ID given") .. "). Page contents may have changed in the interim.")
end
local tree_title = display_title or title
if lang:stripDiacritics(M.links.remove_links(tree_title)) ~= lang:stripDiacritics(M.links.remove_links(title)) then
M.tracking.track_title_pagename_mismatch(lang)
end
reset_invocation_state()
local ety_data_tree = export.get_tree(lang, tree_title, args, {
validate = true,
id = id,
})
local output = {}
table.insert(output, M.template_styles("Module:etymon/styles.css"))
table.insert(output, M.tree.render({
data_tree = ety_data_tree,
format_term_func = function(term, is_toplevel)
return Util.format_term(term, is_toplevel, {
gloss = "suppress",
pos = "suppress",
lit = "suppress",
tree_ql = "suppress",
})
end,
}))
return table.concat(output)
end
function export.main(frame)
local parent_args = frame:getParent().args
local args = M.parameters.process(parent_args, M.parameters_data.etymon)
local lang = args[1]
local etymon_args = args[2]
local id = args.id
local title = args.title
local text = args.text
local tree = args.tree
local etydate = args.etydate
local doublet = args.doublet
local rfe = args.rfe
local etystub = args.etystub
local is_nonlemma = M.yesno(args.nl, false)
local page_data = Util.get_page_data()
if not title then
title = page_data.pagename
if page_data.namespace == "การสืบสร้าง" then title = "*" .. title end
end
local entry_pagename = page_data.pagename
if page_data.namespace == "การสืบสร้าง" then
entry_pagename = "*" .. entry_pagename
end
if lang:stripDiacritics(M.links.remove_links(title)) ~= lang:stripDiacritics(M.links.remove_links(entry_pagename)) then
M.tracking.track_title_pagename_mismatch(lang)
end
local current_L2 = M.pages.get_current_L2()
if current_L2 then
local norm_lang = Util.get_norm_lang(lang)
local norm_name = norm_lang:getCategoryName() --th
if current_L2 ~= norm_name then
local lang_desc = lang:getCode() .. " (" .. lang:getCanonicalName() .. ")"
if norm_lang:getCode() ~= lang:getCode() then
lang_desc = lang_desc .. ", normalized to " .. norm_lang:getCode() .. " (" .. norm_name .. ")"
end
error("Language '" .. lang_desc .. "' does not match the L2 header (" .. current_L2 .. ").")
end
end
reset_invocation_state()
local ety_data_tree = export.get_tree(lang, title, etymon_args, {
validate = true,
pos = args.pos,
id = id,
json = args.json,
skip_partial_etymology_category = is_nonlemma,
})
if args.json then
return ety_data_tree
end
local output = {}
local text_allowlist_mode = M.text_allowed.default_mode or "off"
if text and text_allowlist_mode ~= "off" and not Util.is_text_param_allowed_for_lang(lang) then
local msg = "Etymology texts (parameter <code>text=</code>) are not allowed for " .. lang:getFullName() ..
"; see [[Template:etymon#Text allowlist|Template:etymon § Text allowlist]] for the list of languages that may use the <code>text=</code> parameter."
if text_allowlist_mode == "error" then
error(msg)
else
Util.add_warning(msg, true)
end
end
local lang_exc = Util.get_lang_exception(lang)
if lang_exc and lang_exc.disallow then
local disallow = lang_exc.disallow
local error_text = " for " .. lang:getFullName()
if disallow.ref then
error_text = error_text .. "; see " .. disallow.ref
else
error_text = error_text .. "."
end
if tree and disallow.tree then
error("Etymology trees are not allowed" .. error_text)
end
if text and disallow.text then
error("Etymology texts are not allowed" .. error_text)
end
end
if etydate then
local etydate_param_mods = {
ref = { list = true, type = "references", allow_holes = true },
refn = { list = true, allow_holes = true },
nocap = { type = "boolean" },
}
local function generate_etydate_obj(etydate_text)
local etydate_specs = {}
for spec in etydate_text:gmatch("[^,]+") do
table.insert(etydate_specs, mw.text.trim(spec))
end
return { [1] = etydate_specs }
end
local parsed_etydate = M.parse_utilities.parse_inline_modifiers(etydate, { param_mods = etydate_param_mods, generate_obj = generate_etydate_obj })
local etydate_args = {
[1] = parsed_etydate[1],
nocap = parsed_etydate.nocap or false,
}
ety_data_tree.supplements = ety_data_tree.supplements or {}
table.insert(ety_data_tree.supplements, {
type = "etydate",
etydate_text = M.etydate.format_etydate(etydate_args, { omit_refs = true }),
etydate_refs = (parsed_etydate.ref and #parsed_etydate.ref > 0) and parsed_etydate.ref or nil,
})
end
TreeBuilder.append_term_supplement(ety_data_tree, lang, "doublet", doublet)
if ety_data_tree.supplements then
parse_tree_references(ety_data_tree)
end
local has_visible_children = node_has_visible_tree_children(ety_data_tree)
-- Suppress trees for multiword entries and one-step chains
local visible_tree_depth = get_visible_tree_depth(ety_data_tree)
local is_trivial_tree = visible_tree_depth <= 2
local is_multiword = title:find("%s") ~= nil or title:find("_") ~= nil
if tree and (is_multiword or is_trivial_tree) then
tree = false
end
if tree then
table.insert(output, M.template_styles("Module:etymon/styles.css"))
table.insert(output, M.tree.render({
data_tree = ety_data_tree,
format_term_func = function(term, is_toplevel)
return Util.format_term(term, is_toplevel, {
gloss = "suppress",
pos = "suppress",
lit = "suppress",
tree_ql = "suppress",
})
end,
}))
end
local tree_disallowed = lang_exc and lang_exc.disallow and lang_exc.disallow.tree
local ety_tree_json = M.JSON.toJSON(tree_to_json(ety_data_tree))
local anchor = M.anchors.etymonid(lang, id, {
no_tree = args.notree,
title = title,
empty_tree = (not has_visible_children) or tree_disallowed,
ety_tree_json = ety_tree_json,
})
table.insert(output, anchor)
local text_stop_lang_missing = nil
if text then
local max_depth, stop_at_blue_link, stop_at_lang, stop_at_lang_or_bluelink
if text == "++" then
max_depth, stop_at_blue_link = false, false
elseif text == "+" then
max_depth, stop_at_blue_link = 1, false
elseif text == "*" then
max_depth, stop_at_blue_link = false, true
elseif text:match("^:[^*]+%*$") then
-- Stop at a specific language OR first bluelink after it, e.g., ":ota*"
-- If the target language is a redlink, continue to the first bluelink
local lang_code = text:match("^:([^*]+)%*$")
if lang_code and lang_code ~= "" then
local lang_obj = Util.get_lang(lang_code, true)
if lang_obj then
stop_at_lang_or_bluelink = lang_code
else
Util.add_warning('Invalid language code "' .. lang_code .. '" in text parameter. Showing full chain instead.')
max_depth, stop_at_blue_link = false, false
end
else
Util.add_warning('Empty language code in text parameter. Showing full chain instead.')
max_depth, stop_at_blue_link = false, false
end
elseif text:sub(1, 1) == ":" then
-- Stop at a specific language, e.g., ":ar" stops at first Arabic term
local lang_code = text:sub(2)
if lang_code ~= "" then
-- Validate the language code
local lang_obj = Util.get_lang(lang_code, true)
if lang_obj then
stop_at_lang = lang_code
else
Util.add_warning('Invalid language code "' .. lang_code .. '" in text parameter. Showing full chain instead.')
max_depth, stop_at_blue_link = false, false -- default to ++
end
else
Util.add_warning('Empty language code in text parameter. Showing full chain instead.')
max_depth, stop_at_blue_link = false, false -- default to ++
end
else
local num = tonumber(text)
if num and num >= 1 then
max_depth, stop_at_blue_link = num, false
else
error('Invalid text value "' ..
text .. '". Valid values are: "++" (full chain), "+" (first step only), "*" (until first blue link), a number (max steps), ":lang" (stop at language), or ":lang*" (stop at language or first bluelink if redlink)')
end
end
local text_output, text_render_meta = M.text.render({
data_tree = ety_data_tree,
format_term_func = Util.format_term,
lang_matches_stop_code = Util.lang_matches_stop_code,
max_depth = max_depth,
stop_at_blue_link = stop_at_blue_link,
curr_page = page_data.pagename,
nodot = args.nodot,
dot = args.dot,
stop_at_lang = stop_at_lang,
stop_at_lang_or_bluelink = stop_at_lang_or_bluelink,
})
table.insert(output, text_output)
if stop_at_lang and text_render_meta and not text_render_meta.stop_lang_reached then
M.tracking.track_text_stop_lang_missing(lang, stop_at_lang)
text_stop_lang_missing = stop_at_lang
end
end
if rfe then
table.insert(output, Util.expand_request_template(frame, "rfe", rfe, lang:getCode()))
end
if etystub then
table.insert(output, Util.expand_request_template(frame, "etystub", etystub, lang:getCode()))
end
if is_nonlemma then
table.insert(output, " " .. frame:expandTemplate({
title = "nonlemma",
args = {},
}))
end
local categories = {}
if Util.is_content_page() then
M.tracking.track_tree_metrics({
max_depth_reached = __state.max_depth_reached,
total_nodes = __state.total_nodes,
language_count = __state.language_count,
lang = lang,
})
categories = M.categories.build({
data_tree = ety_data_tree,
page_lang = lang,
available_etymon_ids = __state.available_etymon_ids,
senseid_parent_etymon = __state.senseid_parent_etymon,
get_norm_lang_func = Util.get_norm_lang,
lang_exc = lang_exc,
suppress_categories = lang_exc and lang_exc.suppress_categories,
nocat = args.nocat,
tree = tree,
text = text,
exnihilo = args.exnihilo,
toplevel_has_inline_etymology = __state.toplevel_has_inline_etymology,
toplevel_redundant_etymology = __state.toplevel_redundant_etymology,
toplevel_idless_etymon = __state.toplevel_idless_etymon,
has_mismatched_id = __state.has_mismatched_id,
linked_page_multiple_etymons_idless = __state.linked_page_multiple_etymons_idless,
linked_page_partial_etymology_sections = __state.linked_page_partial_etymology_sections,
text_stop_lang_missing = text_stop_lang_missing,
})
M.tracking.track_keywords(__state.toplevel_keyword_stats, lang)
M.tracking.track_page_id(lang, id)
M.tracking.track_ids(__state.id_stats, lang)
end
if #categories > 0 then
table.insert(output, M.categories.format(categories, lang))
end
if __state.warnings then
for i, warning in ipairs(__state.warnings) do
table.insert(output, (i == 1 and "\n" or "") .. warning .. "\n")
end
end
return table.concat(output)
end
return export
0nmz9wcmfp3ipz3vwym86qah7jwn26g
มอดูล:etymon/styles.css
828
576415
5754448
5684435
2026-08-06T04:48:32Z
Octahedron80
267
5754448
sanitized-css
text/css
/* Main container */
.etytree {
width: max-content;
max-width: 100%;
overflow: hidden;
box-sizing: border-box;
}
.etytree .NavHead {
background: var(--wikt-palette-lightergrey);
}
.etytree .NavHead > div {
width: 25em;
}
.etytree .NavContent {
overflow: auto;
}
.etytree-body {
display: flex;
flex-direction: column;
align-items: center;
padding: 0.5em;
margin: auto;
width: fit-content;
}
.etytree-branch-group {
display: flex;
column-gap: 0.5em;
align-items: end;
position: relative;
}
.etytree-branch {
display: flex;
flex-direction: column;
align-items: center;
}
/* Term blocks */
.etytree-block {
position: relative;
padding: 5px 10px;
border: 1px solid var(--wikt-palette-lightgrey, #ddd);
border-radius: 4px;
background: var(--wikt-palette-beige);
text-align: center;
}
/* Termless keyword blocks (invisible wrapper for positioning) */
.etytree-termless-block {
height: 0 !important;
padding: 0 !important;
border: none !important;
background: transparent !important;
margin: 0 !important;
overflow: visible;
}
.etytree-block.etytree-duplicate {
border: 1px dashed var(--wikt-palette-grey);
}
.etytree-term {
display: inline-block;
}
/* Vertical connectors */
.etytree-connector-vertical,
.etytree-connector-vertical-short {
border-right: 2px solid var(--wikt-palette-grey, #999);
position: relative;
transform: translateX(1px);
}
.etytree-connector-vertical { height: 20px; }
.etytree-connector-vertical-short { height: 10px; }
.etytree-connector-dotted {
border-left: 2px dotted var(--wikt-palette-grey);
height: 20px;
display: block;
margin-left: 50%;
}
/* Branch connectors */
.etytree-branch-left,
.etytree-branch-right {
height: 10px;
width: calc(50% + 0.25em + 1px);
border-bottom: 2px solid var(--wikt-palette-grey, #999);
}
.etytree-branch-left {
border-left: 2px solid var(--wikt-palette-grey, #999);
border-bottom-left-radius: 4px;
transform: translateX(calc(50% - 0.4px));
}
.etytree-branch-right {
border-right: 2px solid var(--wikt-palette-grey, #999);
border-bottom-right-radius: 4px;
transform: translateX(calc(-50% + 2.4px));
}
.etytree-branch-mid {
border-bottom: 2px solid var(--wikt-palette-grey, #999);
width: calc(100% + 0.5em);
}
/* Duplicate connector (L-shaped with arrow) */
.etytree-duplicate-connector {
display: flex;
justify-content: center;
height: 20px;
}
.etytree-duplicate-connector > div {
position: relative;
width: 60px;
height: 100%;
}
.etytree-duplicate-connector .etytree-dup-right {
position: absolute;
right: 0;
top: 50%;
bottom: 0;
border-left: 2px dotted var(--wikt-palette-grey);
}
.etytree-duplicate-connector .etytree-dup-horiz {
position: absolute;
left: 0;
right: 0;
top: 50%;
border-top: 2px dotted var(--wikt-palette-grey);
}
.etytree-duplicate-connector .etytree-dup-left {
position: absolute;
left: 0;
top: 0;
bottom: 50%;
border-left: 2px dotted var(--wikt-palette-grey);
}
.etytree-duplicate-connector .etytree-dup-arrow {
position: absolute;
left: -5px;
top: -5px;
font-size: 10px;
color: var(--wikt-palette-grey);
}
/* Label containers */
.etytree-label-container {
z-index: 1;
position: absolute;
transform: translate(-50%);
top: calc(100% + 5px);
left: 50%;
line-height: 10px;
overflow: visible;
}
.etytree-group-label {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
z-index: 2;
height: 10px;
line-height: 10px;
}
/* Labels */
.etytree-label abbr {
font-size: 12px;
font-style: italic;
color: var(--wikt-palette-black);
background: var(--wikt-palette-cyan, #fff);
border-radius: 2px;
text-decoration: none;
}
/* Uncertainty marker */
.etytree-unc {
font-size: 10px;
font-weight: bold;
padding: 1px 2px;
background: var(--wikt-palette-pink);
border-radius: 2px;
text-decoration: none;
}
.etytree-label + .etytree-unc {
position: absolute;
left: calc(100% + 3px);
}
/* Final marker (for termless keywords) */
.etytree-final {
font-size: 10px;
font-weight: bold;
padding: 1px 2px;
background: var(--wikt-palette-grey) !important;
color: var(--wikt-palette-white) !important;
border-radius: 2px;
text-decoration: none;
display: inline-block;
line-height: 1;
}
.etytree-label-container .etytree-final {
position: absolute;
left: 50%;
top: -12px;
transform: translateX(-50%);
z-index: 3;
margin-left: 0;
}
94pxy0d6ov1puaxbux7krmz6ntarty0
มอดูล:number list/data/ceb
828
576597
5754344
2198707
2026-08-06T01:35:42Z
Octahedron80
267
5754344
Scribunto
text/plain
local export = {numbers = {}}
export.additional_number_types = {
{key = "spanish_cardinal", display = "เชิงการนับจากสเปน", after = "cardinal"},
}
local numbers = export.numbers
export.numbers[0] = {
cardinal = "walâ",
spanish_cardinal = {"nulo", "sero"},
ordinal = "ikasero",
adverbial = "makasero",
}
export.numbers[1] = {
cardinal = {"usá", "isá<q:Mindanao>"},
spanish_cardinal = "uno",
ordinal = "una",
adverbial = "makausá",
distributive = {"usa-úsa", "tag-usá", "tagsa"},
}
export.numbers[2] = {
cardinal = "duhá",
spanish_cardinal = "dos",
ordinal = "ikaduhá",
adverbial = "makaduhá",
distributive = {"duha-dúha", "tagdúha"},
fractional = "sikaduhá",
}
export.numbers[3] = {
cardinal = "tuló",
spanish_cardinal = "tres",
ordinal = "ikatuló",
adverbial = "makatuló",
distributive = {"tulo-túlo", "tagtúlo"},
fractional = "sikatuló",
}
export.numbers[4] = {
cardinal = "upát",
spanish_cardinal = {"kuwatro", "kwatro <q:eye dialect>"},
ordinal = "ikaupát",
adverbial = "makaupát",
distributive = {"upat-úpat", "tag-upát"},
fractional = "sikaupát",
}
export.numbers[5] = {
cardinal = "limá",
spanish_cardinal = "singko",
ordinal = "ikalimá",
adverbial = "makalimá",
distributive = {"lima-líma", "taglíma"},
fractional = "sikalimá",
}
export.numbers[6] = {
cardinal = "unóm",
spanish_cardinal = {"sayis", "séys"},
ordinal = "ikaunóm",
adverbial = "makaunóm",
distributive = {"unom-únom", "tag-unóm"},
fractional = "sikaunóm",
}
export.numbers[7] = {
cardinal = "pitó",
spanish_cardinal = "siyete",
ordinal = "ikapitó",
adverbial = "makapitó",
distributive = {"pito-píto", "tagpíto"},
fractional = "sikapitó",
}
export.numbers[8] = {
cardinal = "waló",
spanish_cardinal = "otso",
ordinal = "ikawaló",
adverbial = "makawaló",
distributive = {"walo-wálo", "tagwálo"},
fractional = "sikawaló",
}
export.numbers[9] = {
cardinal = "siyám",
spanish_cardinal = {"nuybe", "nuwebe", "nwebe"},
ordinal = "ikasiyám",
adverbial = "makasiyám",
distributive = {"siyam-síyam", "tagsíyam"},
fractional = "sikasiyám",
}
export.numbers[10] = {
cardinal = {"napulò", "pulò"},
spanish_cardinal = "diyés",
ordinal = {"ikanapulò", "ikapulô"},
adverbial = "makanapulò",
distributive = {"napulò-napulò", "tagnapulò"},
fractional = "sikanapulò",
}
export.numbers[11] = {
cardinal = "napúlog usá",
spanish_cardinal = "onse",
ordinal = {"ikanapúlog usá", "ikapúlog usá"},
adverbial = "makanapúlog usá",
fractional = "sikanapúlog usá",
}
export.numbers[12] = {
cardinal = "napúlog duhá",
spanish_cardinal = "dose",
ordinal = {"ikanapúlog duhá", "ikapúlog duhá"},
adverbial = "makanapúlog duhá",
fractional = "sikanapúlog duhá",
}
export.numbers[13] = {
cardinal = "napúlog tuló",
spanish_cardinal = "trese",
ordinal = {"ikanapúlog tuló", "ikapúlog tuló"},
adverbial = "makanapúlog tuló",
fractional = "sikanapúlog tuló",
}
export.numbers[14] = {
cardinal = "napúlog upát",
spanish_cardinal = "katórse",
ordinal = {"ikanapúlog upát", "ikapúlog upát"},
adverbial = "makanapúlog upát",
fractional = "sikanapúlog upát",
}
export.numbers[15] = {
cardinal = "napúlog limá",
spanish_cardinal = "kinse",
ordinal = {"ikanapúlog limá", "ikapúlog limá"},
adverbial = "makanapúlog limá",
fractional = "sikanapúlog limá",
}
export.numbers[16] = {
cardinal = "napúlog unóm",
spanish_cardinal = {"desisayis", "diyesiséys"},
ordinal = {"ikanapúlog unóm", "ikapúlog unóm"},
adverbial = "makanapúlog unóm",
fractional = "sikanapúlog unóm",
}
export.numbers[17] = {
cardinal = "napúlog pitó",
spanish_cardinal = {"desisiyete", "diyesisiyete"},
ordinal = {"ikanapúlog pitó", "ikapúlog pitó"},
adverbial = "makanapúlog pitó",
fractional = "sikanapúlog pitó",
}
export.numbers[18] = {
cardinal = "napúlog waló",
spanish_cardinal = {"desiotso", "diyesiyotso"},
ordinal = {"ikanapúlog waló", "ikapúlog waló"},
adverbial = "makanapúlog waló",
fractional = "sikanapúlog waló",
}
export.numbers[19] = {
cardinal = "napúlog siyám",
spanish_cardinal = {"desinuybe", "diyesinwebe"},
ordinal = {"ikanapúlog siyám", "ikapúlog siyám"},
adverbial = "makanapúlog siyám",
fractional = "sikanapúlog siyám",
}
export.numbers[20] = {
cardinal = {"kaluháan", "kawháan"},
spanish_cardinal = {"baynte", "beynte"},
ordinal = {"ikakaluháan", "ikakawháan"},
adverbial = "makakawháan",
fractional = "sikakawháan",
}
export.numbers[21] = {
cardinal = {"kaluháag usá", "kawháag usá"},
spanish_cardinal = {"baynte uno", "beyntiwuno"},
ordinal = {"ikakaluháag usá", "ikakawháag usá"},
adverbial = {"makakaluháag usá", "makakawháag usá"},
}
export.numbers[22] = {
cardinal = {"kaluháag duhá", "kawháag duhá"},
spanish_cardinal = {"baynte dos", "beyntidos"},
}
export.numbers[23] = {
cardinal = {"kaluháag tuló", "kawháag tuló"},
spanish_cardinal = {"baynte tres", "beyntitres"},
}
export.numbers[24] = {
cardinal = {"kaluháag upát", "kawháag upát"},
spanish_cardinal = {"baynte kwatro", "beyntikwatro", "baynte kuwatro<q:dated>"},
}
export.numbers[25] = {
cardinal = {"kaluháag limá", "kawháag limá"},
spanish_cardinal = {"baynte singko", "beyntisingko"},
}
export.numbers[26] = {
cardinal = {"kaluháag unóm", "kawháag unóm"},
spanish_cardinal = {"baynte sayis", "beyntiséys"},
}
export.numbers[27] = {
cardinal = {"kaluháag pitó", "kawháag pitó"},
spanish_cardinal = {"baynte siyete", "beyntisiyete"},
}
export.numbers[28] = {
cardinal = {"kaluháag waló", "kawháag waló"},
spanish_cardinal = {"baynte otso", "beyntiotso"},
}
export.numbers[29] = {
cardinal = {"kaluháag siyám", "kawháag siyám"},
spanish_cardinal = {"baynte nuybe", "beyntinwebe"},
}
export.numbers[30] = {
cardinal = {"katlóan", "katulóan"},
spanish_cardinal = "traynta",
}
export.numbers[31] = {
cardinal = {"katlóag usá", "katulóag usá"},
spanish_cardinal = "trayntay uno",
}
export.numbers[32] = {
cardinal = {"katlóag duhá", "katulóag duhá"},
spanish_cardinal = "trayntay dos",
}
export.numbers[33] = {
cardinal = {"katlóag tuló", "katulóag tuló"},
spanish_cardinal = "trayntay tres",
}
export.numbers[34] = {
cardinal = {"katlóag upát", "katulóag upát"},
spanish_cardinal = {"trayntay kuwatro", "trayntay kwatro<q:informal>"},
}
export.numbers[35] = {
cardinal = {"katlóag limá", "katulóag limá"},
spanish_cardinal = "trayntay singko",
}
export.numbers[36] = {
cardinal = {"katlóag unóm", "katulóag unóm"},
spanish_cardinal = "trayntay sayis",
}
export.numbers[37] = {
cardinal = {"katlóag pitó", "katulóag pitó"},
spanish_cardinal = "trayntay siyete",
}
export.numbers[38] = {
cardinal = {"katlóag waló", "katulóag waló"},
spanish_cardinal = "trayntay otso",
}
export.numbers[39] = {
cardinal = {"katlóag siyám", "katulóag siyám"},
spanish_cardinal = "trayntay nuybe",
}
export.numbers[40] = {
cardinal = {"kap-atan", "kaupátan"},
spanish_cardinal = {"kuwarénta", "kwarénta<q:informal>"},
}
export.numbers[41] = {
cardinal = {"kap-atag usá", "kaupátag usá"},
spanish_cardinal = {"kuwaréntay uno", "kwaréntay uno<q:informal>"},
}
export.numbers[42] = {
cardinal = {"kap-atag duhá", "kaupátag duhá"},
spanish_cardinal = {"kuwaréntay dos", "kwaréntay dos<q:informal>"},
}
export.numbers[43] = {
cardinal = {"kap-atag tuló", "kaupátag tuló"},
spanish_cardinal = {"kuwaréntay tres", "kwaréntay tres<q:informal>"},
}
export.numbers[44] = {
cardinal = {"kap-atag upát", "kaupátag upát"},
spanish_cardinal = {"kuwaréntay kuwatro", "kwaréntay kwatro<q:informal>", "kuwaréntay kuwatro<q:informal>"},
}
export.numbers[45] = {
cardinal = {"kap-atag limá", "kaupátag limá"},
spanish_cardinal = {"kuwaréntay singko", "kwaréntay singko<q:informal>"},
}
export.numbers[46] = {
cardinal = {"kap-atag unóm", "kaupátag unóm"},
spanish_cardinal = {"kuwaréntay sayis", "kwaréntay sayis<q:informal>"},
}
export.numbers[47] = {
cardinal = {"kap-atag pitó", "kaupátag pitó"},
spanish_cardinal = {"kuwaréntay siyete", "kwaréntay siyete<q:informal>"},
}
export.numbers[48] = {
cardinal = {"kap-atag waló", "kaupátag waló"},
spanish_cardinal = {"kuwaréntay otso", "kwaréntay otso<q:informal>"},
}
export.numbers[49] = {
cardinal = {"kap-atag siyám", "kaupátag siyám"},
spanish_cardinal = {"kuwaréntay nuybe", "kwaréntay nuybe<q:informal>"},
}
export.numbers[50] = {
cardinal = {"kalím-an", "kalimáan"},
spanish_cardinal = {"singkuwénta", "singkwénta<q:informal>"},
}
export.numbers[51] = {
cardinal = {"kalím-ag usá", "kalimáag usá"},
spanish_cardinal = {"singkuwéntay uno", "singkwéntay uno<q:informal>"},
}
export.numbers[52] = {
cardinal = {"kalím-ag duhá", "kalimáag duhá"},
spanish_cardinal = {"singkuwéntay dos", "singkwéntay dos<q:informal>"},
}
export.numbers[53] = {
cardinal = {"kalím-ag tuló", "kalimáag tuló"},
spanish_cardinal = {"singkuwéntay tres", "singkwéntay tres<q:informal>"},
}
export.numbers[54] = {
cardinal = {"kalím-ag upát", "kalimáag upát"},
spanish_cardinal = {"singkuwéntay kuwatro", "singkwéntay kwatro<q:dated>", "singkwéntay kuwatro<q:dated>"},
}
export.numbers[55] = {
cardinal = {"kalím-ag limá", "kalimáag limá"},
spanish_cardinal = {"singkuwéntay singko", "singkwéntay singko<q:informal>"},
}
export.numbers[56] = {
cardinal = {"kalím-ag unóm", "kalimáag unóm"},
spanish_cardinal = {"singkuwéntay sayis", "singkwéntay sayis<q:informal>"},
}
export.numbers[57] = {
cardinal = {"kalím-ag pitó", "kalimáag pitó"},
spanish_cardinal = {"singkuwéntay siyete", "singkwéntay siyete<q:informal>"},
}
export.numbers[58] = {
cardinal = {"kalím-ag waló", "kalimáag waló"},
spanish_cardinal = {"singkuwéntay otso", "singkwéntay otso<q:informal>"},
}
export.numbers[59] = {
cardinal = {"kalím-ag siyám", "kalimáag siyám"},
spanish_cardinal = {"singkuwéntay nuybe", "singkwéntay nuybe<q:informal>"},
}
export.numbers[60] = {
cardinal = {"kan-oman", "kan-uman", "kaunóman"},
spanish_cardinal = "saysénta",
}
export.numbers[61] = {
cardinal = {"kan-omag usá", "kan-umag usá", "kaunómag usá"},
spanish_cardinal = "sayséntay uno",
}
export.numbers[62] = {
cardinal = {"kan-omag duhá", "kan-umag duhá", "kaunómag duhá"},
spanish_cardinal = "sayséntay dos",
}
export.numbers[63] = {
cardinal = {"kan-omag tuló", "kan-umag tuló", "kaunómag tuló"},
spanish_cardinal = "sayséntay tres",
}
export.numbers[64] = {
cardinal = {"kan-omag upát", "kan-umag upát", "kaunómag upát"},
spanish_cardinal = {"sayséntay kuwatro", "sayséntay kwatro<q:informal>"},
}
export.numbers[65] = {
cardinal = {"kan-omag limá", "kan-umag limá", "kaunómag limá"},
spanish_cardinal = "sayséntay singko",
}
export.numbers[66] = {
cardinal = {"kan-omag unóm", "kan-umag unóm", "kaunómag unóm"},
spanish_cardinal = "sayséntay sayis",
}
export.numbers[67] = {
cardinal = {"kan-omag pitó", "kan-umag pitó", "kaunómag pitó"},
spanish_cardinal = "sayséntay siyete",
}
export.numbers[68] = {
cardinal = {"kan-omag waló", "kan-umag waló", "kaunómag waló"},
spanish_cardinal = "sayséntay otso",
}
export.numbers[69] = {
cardinal = {"kan-omag siyám", "kan-umag siyám", "kaunómag siyám"},
spanish_cardinal = "sayséntay nuybe",
}
export.numbers[70] = {
cardinal = "kapitóan",
spanish_cardinal = "seténta",
}
export.numbers[71] = {
cardinal = "kapitóag usá",
spanish_cardinal = "seténtay uno",
}
export.numbers[72] = {
cardinal = "kapitóag duhá",
spanish_cardinal = "seténtay dos",
}
export.numbers[73] = {
cardinal = "kapitóag tuló",
spanish_cardinal = "seténtay tres",
}
export.numbers[74] = {
cardinal = "kapitóag upát",
spanish_cardinal = {"seténtay kuwatro", "seténtay kwatro<q:informal>"},
}
export.numbers[75] = {
cardinal = "kapitóag limá",
spanish_cardinal = "seténtay singko",
}
export.numbers[76] = {
cardinal = "kapitóag unóm",
spanish_cardinal = "seténtay sayis",
}
export.numbers[77] = {
cardinal = "kapitóag pitó",
spanish_cardinal = "seténtay siyete",
}
export.numbers[78] = {
cardinal = "kapitóag waló",
spanish_cardinal = "seténtay otso",
}
export.numbers[79] = {
cardinal = "kapitóag siyám",
spanish_cardinal = "seténtay nuybe",
}
export.numbers[80] = {
cardinal = "kawalóan",
spanish_cardinal = "otsénta",
}
export.numbers[81] = {
cardinal = "kawalóag usá",
spanish_cardinal = "otséntay uno",
}
export.numbers[82] = {
cardinal = "kawalóag duhá",
spanish_cardinal = "otséntay dos",
}
export.numbers[83] = {
cardinal = "kawalóag tuló",
spanish_cardinal = "otséntay tres",
}
export.numbers[84] = {
cardinal = "kawalóag upát",
spanish_cardinal = {"otséntay kuwatro", "otséntay kwatro<q:informal>"},
}
export.numbers[85] = {
cardinal = "kawalóag limá",
spanish_cardinal = "otséntay singko",
}
export.numbers[86] = {
cardinal = "kawalóag unóm",
spanish_cardinal = "otséntay sayis",
}
export.numbers[87] = {
cardinal = "kawalóag pitó",
spanish_cardinal = "otséntay siyete",
}
export.numbers[88] = {
cardinal = "kawalóag waló",
spanish_cardinal = "otséntay otso",
}
export.numbers[89] = {
cardinal = "kawalóag siyám",
spanish_cardinal = "otséntay nuybe",
}
export.numbers[90] = {
cardinal = "kasiyáman",
spanish_cardinal = "nobénta",
}
export.numbers[91] = {
cardinal = "kasiyámag usá",
spanish_cardinal = "nobéntay uno",
}
export.numbers[92] = {
cardinal = "kasiyámag duhá",
spanish_cardinal = "nobéntay dos",
}
export.numbers[93] = {
cardinal = "kasiyámag tuló",
spanish_cardinal = "nobéntay tres",
}
export.numbers[94] = {
cardinal = "kasiyámag upát",
spanish_cardinal = {"nobéntay kuwatro", "nobéntay kwatro<q:informal>"},
}
export.numbers[95] = {
cardinal = "kasiyámag limá",
spanish_cardinal = "nobéntay singko",
}
export.numbers[96] = {
cardinal = "kasiyámag unóm",
spanish_cardinal = "nobéntay sayis",
}
export.numbers[97] = {
cardinal = "kasiyámag pitó",
spanish_cardinal = "nobéntay siyete",
}
export.numbers[98] = {
cardinal = "kasiyámag waló",
spanish_cardinal = "nobéntay otso",
}
export.numbers[99] = {
cardinal = "kasiyámag siyám",
spanish_cardinal = "nobéntay nuybe",
}
export.numbers[100] = {
cardinal = {"usá ka gatós", "gatós"},
spanish_cardinal = {"sinto", "siyénto", "siyén"},
}
export.numbers[200] = {
cardinal = "duhá ka gatós",
spanish_cardinal = {"doséntos", "dosiyéntos"},
}
export.numbers[300] = {
cardinal = "tuló ka gatós",
spanish_cardinal = {"treséntos", "tresiyéntos"},
}
export.numbers[400] = {
cardinal = "upát ka gatós",
spanish_cardinal = {"kuwatroséntos", "kuwatrosiyéntos", "kwatrosiyentos","kwatroséntos<q:informal>"},
}
export.numbers[500] = {
cardinal = "limá ka gatós",
spanish_cardinal = {"kinyéntos", "kiniyéntos"},
}
export.numbers[600] = {
cardinal = "unóm ka gatós",
spanish_cardinal = "sayséntos",
}
export.numbers[700] = {
cardinal = "pitó ka gatós",
spanish_cardinal = "seteséntos",
}
export.numbers[800] = {
cardinal = "waló ka gatós",
spanish_cardinal = "otsoséntos",
}
export.numbers[900] = {
cardinal = "siyám ka gatós",
spanish_cardinal = "nuybeséntos",
}
export.numbers[1000] = {
cardinal = {"usá ka libo", "libo"},
spanish_cardinal = "mil",
}
export.numbers[2000] = {
cardinal = "duhá ka libo",
spanish_cardinal = "dos mil",
}
export.numbers[3000] = {
cardinal = "tuló ka libo",
spanish_cardinal = "tres mil",
}
export.numbers[4000] = {
cardinal = "upát ka libo",
spanish_cardinal = { "kuwatro mil", "kwatro mil<q:informal>"},
}
export.numbers[5000] = {
cardinal = "limá ka libo",
spanish_cardinal = "singko mil",
}
export.numbers[6000] = {
cardinal = "unóm ka libo",
spanish_cardinal = {"sayis mil", "séys mil"},
}
export.numbers[7000] = {
cardinal = "pitó ka libo",
spanish_cardinal = "siyete mil",
}
export.numbers[8000] = {
cardinal = "waló ka libo",
spanish_cardinal = "otso mil",
}
export.numbers[9000] = {
cardinal = "siyám ka libo",
spanish_cardinal = "nuybe mil",
}
export.numbers[10000] = {
cardinal = {"usá ka laksà", "laksà", "napulò ka libo"},
spanish_cardinal = "diyes mil",
}
export.numbers[100000] = {
cardinal = {"usá ka yaba", "yaba", "usá ka gatós ka libo"},
spanish_cardinal = "siyén mil",
}
export.numbers[1000000] = {
cardinal = {"usá ka yukót", "yukót"},
spanish_cardinal = "milyón",
}
export.numbers[1000000000] = {
cardinal = {"usá ka wakát", "wakát"},
spanish_cardinal = "bilyón",
}
export.numbers[1000000000000] = {
spanish_cardinal = "trilyón",
}
export.numbers[1000000000000000] = {
spanish_cardinal = "kuwadrilyón",
}
export.numbers["1000000000000000000"] = {
spanish_cardinal = "kuwintilyón",
}
return export
2fz7803v9v3uhx38mso4kzbbttu8qpa
profeta
0
577924
5754493
2201018
2026-08-06T07:43:43Z
OctraBot
3198
update template use
5754493
wikitext
text/x-wiki
==ภาษาโปรตุเกส==
{{wp|lang=pt}}
===รากศัพท์===
{{etymon|pt|:inh|roa-opt:profeta<id:prophet>|id=prophet|text=++}}
===การออกเสียง===
{{pt-IPA|proféta}}
* {{rhyme|pt|ɛtɐ|ɛta|q1=most dialects|q2=Southern Brazil|s=3}}
* {{hyph|pt|pro|fe|ta}}
===คำนาม===
{{pt-noun|m|f=profetisa}}
# [[ศาสดาพยากรณ์]]
=== อ้างอิง ===
{{รายการอ้างอิง}}
* ''Oxford Portuguese Dictionary''. (2023). Oxford University Press.
fvoqbgolqbjg19m50wkj3dm305fy1rw
televisão
0
1051607
5754494
5386724
2026-08-06T07:43:48Z
OctraBot
3198
update template use
5754494
wikitext
text/x-wiki
==ภาษาโปรตุเกส==
{{wp|lang=pt}}
===รากศัพท์===
{{etymon|pt|:calque|fr:télévision<id:television>|id=television|tree=1}}
จาก {{affix|pt|tele-|visão}}, {{calque|pt|fr|télévision|nocap=1}}
===การออกเสียง===
{{pt-IPA}}
* {{rhyme|pt|ɐ̃w̃|s=4}}
* {{hyph|pt|te|le|vi|são}}
===คำนาม===
{{pt-noun|f}}
# {{lb|pt|uncountable}} [[โทรทัศน์]] {{gl|ระบบ}}
#: {{syn|pt|tevê}}
#* {{quote-av|pt|date=2024-08-23|title=Batcast|number=13|author=Marcio Seixas|speaker=Samir Murad|time=13:21|url=https://youtu.be/D5rKPQHjV54?t=801|network=YouTube|location=Rio de Janeiro
|text={{...}}e na '''televisão''', ao contrário do que se pode imaginar,{{...}}você não tem direção, né? O que você fizer, se não tiver muito fora, tá valendo.
|t=และใน'''โทรทัศน์''' ตรงข้ามกับสิ่งที่คนคิดกัน คือมันไม่มีการกำกับ ใช่ไหมล่ะ ไม่ว่าคุณจะทำอะไร ถ้ามันไม่ผิดปกติมากเกินไป มันก็ไม่เป็นไร}}
# [[เครื่อง]][[รับ]][[โทรทัศน์]]
#: {{syn|pt|tevê|televisor}}
====คำสืบทอด====
* {{desc|hrx|Tëlevisong|bor=1}}
===ดูเพิ่ม===
* {{l|pt|telinha}}
=== อ้างอิง ===
{{รายการอ้างอิง}}
* ''Oxford Portuguese Dictionary''. (2023). Oxford University Press.
p4r42ip9vn3i4qjqb0jokr3d7b837wj
loja
0
1626413
5754490
4586646
2026-08-06T07:43:31Z
OctraBot
3198
update template use
5754490
wikitext
text/x-wiki
==ภาษาโปรตุเกส==
[[File:The Body Shop unutrasnos Oslo.JPG|thumb|250px|interior de uma loja]]
{{wikipedia|lang=pt}}
===รูปแบบอื่น===
* {{alter|pt|lógea||โบราณ}}
===รากศัพท์===
{{etymon|pt|:inh|roa-opt:logea<t:storehouse>|:influence|fr:loge|id=shop|tree=1}}
===การออกเสียง===
{{pt-IPA|lója}}
* {{hyph|pt|lo|ja}}
===คำนาม===
{{pt-noun|f}}
# [[ร้าน]][[ค้า]]
====ลูกคำ====
{{col|pt|alojar|loja-âncora|loja de conveniência|lojista|desamparar a loja|fechar a loja|lojão}}
====ดูเพิ่ม====
{{col4|pt|bazar}}
====คำสืบทอด====
{{top3}}
* {{desc|hrx|Loja|bor=1}}
* {{desc|mjb|loja|bor=1|t=ร้านค้า}}
* {{desc|tet|loja|bor=1}}
{{bottom}}
===อ้างอิง===
{{รายการอ้างอิง}}
* {{cite-web|pt|url=https://ciberduvidas.iscte-iul.pt/consultorio/perguntas/a-formacao-e-a-etimologia-de-alojamento/37404|title=A formação e a etimologia de alojamento|work=Ciberdúvidas da Língua Portuguesa|author=Carlos Rocha|date=2023-03-14}}
* {{R:pt:Infopédia}}
* {{R:pt:Priberam}}
* ''Oxford Portuguese Dictionary''. (2023). Oxford University Press.
81m3zkbsgoywn9vuf1qtgqqltyaxeyn
ferreiro
0
1626539
5754489
4586879
2026-08-06T07:42:50Z
OctraBot
3198
update template use
5754489
wikitext
text/x-wiki
==ภาษาโปรตุเกส==
===รากศัพท์===
{{etymon|pt|id=blacksmith|:inh|roa-opt:ferreiro<id:blacksmith>}}
{{inh+|pt|roa-opt|ferreiro}} (เทียบ{{cog|gl|ferreiro}}), จาก{{inh|pt|la|ferrārius||ช่างตีเหล็ก}} (เทียบ{{cog|es|herrero}}), จาก {{m|la|ferrum||เหล็ก}}; {{surf|pt|ferro|-eiro}}
===การออกเสียง===
{{pt-IPA}}
* {{audio|pt|LL-Q5146 (por)-NMaia-ferreiro.wav|a=BR}}
* {{hyph|pt|fer|rei|ro}}
===คำนาม===
{{pt-noun|m|f=+}}
# [[ช่างตีเหล็ก]]
#: {{coord|pt|ourives|prateiro}}
====คำเกี่ยวข้อง====
{{col|pt
|ferrado
|ferrador
|ferradura
|ferrageiro
|ferragem
|ferragista
|ferramenta
|ferramenteiro
|ferrar
|ferraria
|férreo
|ferro
|ferro-velho
|ferrugem
}}
====คำสืบทอด====
* {{desc|tpw|pereru|bor=1}}
===อ่านเพิ่ม===
* {{R:pt:Priberam}}
===อ้างอิง===
{{รายการอ้างอิง}}
* ''Oxford Portuguese Dictionary''. (2023). Oxford University Press.
e24o831a3qfiv4kpebyf5ry9miusrpk
botelha
0
1714929
5754487
4734241
2026-08-06T07:42:32Z
OctraBot
3198
update template use
5754487
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำนาม ===
{{gl-reinteg-noun|f}}
# {{gl-reinteg sp|botella}}
== ภาษาครีโอลมาเก๊า ==
=== รากศัพท์ ===
จาก{{der|mzs|pt|botelha}}, จาก{{der|mzs|fr|bouteille}}
=== การออกเสียง ===
* {{IPA|mzs|/bɔˈtɛ.ʎa/}}
=== คำนาม ===
{{head|mzs|คำนาม}}
# [[ขวด]]
=== อ้างอิง ===
* https://www.macaneselibrary.org/pub/english/uipatua.htm#b
{{C|mzs|Vessels}}
== ภาษาโปรตุเกส ==
=== รากศัพท์ ===
{{etymon|pt|:bor|fr:bouteille<id:bottle><unc:1>|id=bottle}}
เป็นไปได้ว่า{{bor+|pt|fr|bouteille|nocap=1}}; เทียบ{{cog|es|botella}}; {{doublet|pt|botija}}
=== การออกเสียง ===
{{pt-IPA|[elh:êlh]}}
* {{hyph|pt|bo|te|lha}}
=== คำนาม ===
{{pt-noun|f}}
# [[ขวด]]
#: {{syn|pt|garrafa}}
==== คำสืบทอด ====
* {{desc|bn|বোতল|bor=1}}
* {{desc|as|বটল|bor=1}} {{q|หรือมาจาก {{m+|en|bottle}}}}
* {{desctree|hi|बोतल|bor=1}}
50iez1df5umj5ql6tfq1xotdypcrbxv
jazmín
0
1726687
5754484
4750479
2026-08-06T07:36:11Z
OctraBot
3198
update template use
5754484
wikitext
text/x-wiki
== ภาษาสเปน ==
{{wikipedia|lang=es}}
=== รากศัพท์ ===
{{etymon|es|id=jasmine|:bor|ar:يَاسَمِين<id:jasmine>|tree=1}}
{{bor+|es|ar|يَاسَمِين}}, ผ่าน{{bor|es|xaa|-}}
=== การออกเสียง ===
{{es-pr}}
=== คำนาม ===
{{es-noun|m}}
# [[มะลิ]]
==== ลูกคำ ====
{{col|es
|jazmín de España
|jazmín del papa|jazmín del Paraguay
|jazmín paraguayo
|jazminero<g:m>
}}
==== คำสืบทอด ====
* {{desc|de|bor=1|Jasmin}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
{{C|es|ดอกไม้|Olive family plants}}
8dtlj86mcmf2xu6r7w8x2me2rpnw2ga
gesiminu
0
1726689
5754415
4750482
2026-08-06T03:53:37Z
Octahedron80
267
/* รากศัพท์ */
5754415
wikitext
text/x-wiki
== ภาษาซิซิลี ==
=== รูปแบบอื่น ===
* {{alt|scn|giasiminu|gesuminu|gessuminu}}
* {{alt|scn|gersuminu|gelsiminu|gelsuminu}}
=== รากศัพท์ ===
{{etymon|scn|id=jasmine|:bor|ar:يَاسَمِين<id:jasmine>|tree=1}}
จาก{{bor|scn|ar|يَاسَمِين}}, ผ่าน{{bor|scn|sqr|-}}; ร่วมเชื้อสายกับ{{cog|it|gelsomino}}
=== คำนาม ===
{{scn-noun|gesimin|m|u}} {{rfinfl-lite|scn}}
# [[มะลิ]] ({{taxfmt|Jasminum officinale|species}}) {{c|scn|Olive family plants}}
#: {{coi|scn|'''gesuminu''' [[cidratu]] / di l'[[Arabbia]] / di [[Malta]]|[[มะลิอาหรับ]] ({{taxfmt|Jasminum sambac|species}})}}
#: {{coi|scn|'''gesuminu''' di [[Nàpuli]]|[[มะลิสเปน]] ({{taxfmt|Jasminum grandiflorum|species}})}}
==== คำสืบทอด ====
* {{desc|mt|bor=1|ġiżimin|alts=1}}
=== อ้างอิง ===
* {{R:scn:Traina|1832|gesuminu}}
* {{R:scn:Pasqualino|2|215}}
2yr68ctn286gighxaomw08v7alo5kgo
gessamí
0
1726691
5754416
4750486
2026-08-06T03:54:08Z
Octahedron80
267
/* รากศัพท์ */
5754416
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== รูปแบบอื่น ===
* {{alt|ca|llessamí}}
=== รากศัพท์ ===
{{etymon|ca|id=jasmine|:bor|ar:يَاسَمِين<id:jasmine>|tree=1}}
{{bor+|ca|ar|يَاسَمِين}} {{dercat|ca|pal}}
=== การออกเสียง ===
* {{ca-IPA}}
=== คำนาม ===
{{ca-noun|m}}
# [[มะลิ]]
==== ลูกคำ ====
* {{l|ca|gessamí blau}}
* {{l|ca|gessamí de Virgínia}}
* {{l|ca|gessamí de Xile}}
=== อ่านเพิ่ม ===
* {{R:ca:IEC2}}
{{C|ca|Olive family plants}}
qnsprc5akqjf2z6xpokhu7cm0s2186v
มอดูล:etymon/data
828
2297436
5754410
5727300
2026-08-06T03:39:55Z
Octahedron80
267
5754410
Scribunto
text/plain
local export = {}
export.STATUS = {
OK = "ok",
INLINE = "inline",
MISSING = "missing",
REDLINK = "redlink",
AMBIGUOUS = "ambiguous",
}
export.TRANSITIVE = {
ALWAYS = "always", -- always recurse into children
NEVER = "never", -- never recurse into children
CROSS_LANG = "cross_lang", -- only recurse when source lang differs from target lang (but pos chain continues)
CROSS_LANG_NO_INTERNAL_SOURCE = "cross_lang_no_internal_source", -- like CROSS_LANG, but source breaks for internal derivations in the same language context
}
-- Deep merge tables (nested tables are merged recursively, later values override earlier)
local function deep_merge(...)
local result = {}
for _, t in ipairs({ ... }) do
for k, v in pairs(t) do
if type(v) == "table" and type(result[k]) == "table" then
result[k] = deep_merge(result[k], v)
else
result[k] = v
end
end
end
return result
end
local function make_glossary_link(term, display_text)
if not term then return display_text end
return "[[Appendix:Glossary#" .. term:gsub(" ", "_") .. "|" .. display_text .. "]]"
end
-- Extract base word and connector from text like "Borrowed from" or "calque of"
local function split_glossary_text(text)
for _, pattern in ipairs({ "^(.-)(%s+[Oo][Ff])$", "^(.-)(%s+[Ff][Rr][Oo][Mm])$","^(.-)(จาก)$", "^(.-)(ของ)$" }) do
local base, rest = text:match(pattern)
if base then return base, rest end
end
return text, ""
end
local TRANSITIVE = export.TRANSITIVE
local function create_keyword(opts)
local entry = {
is_group = opts.is_group or false,
abbrev = opts.abbrev,
glossary = opts.glossary,
transitive = opts.transitive or TRANSITIVE.ALWAYS, -- default "always"
inherited_chain = opts.inherited_chain or false,
affix_categories = opts.affix_categories or false,
borrowing_type = opts.borrowing_type,
specialized_borrowing = opts.specialized_borrowing,
toplevel_category = opts.toplevel_category,
no_child_categories = opts.no_child_categories or false,
source_category_type = opts.source_category_type,
invisible = opts.invisible or false,
pos_override = opts.pos_override,
new_sentence = opts.new_sentence or false,
separate_clause = opts.separate_clause or false,
aliases = opts.aliases,
}
-- Only set text/phrase for visible keywords
if not opts.invisible then
entry.phrase = opts.phrase
if opts.text then
if opts.glossary then
local base_word, rest = split_glossary_text(opts.text)
entry.text = make_glossary_link(opts.glossary, base_word) .. rest
else
entry.text = opts.text
end
end
end
return entry
end
-- Shared defaults for keyword groups
local DEFAULTS = {
-- Keywords that pass through inheritance chain
inheritance = {
transitive = TRANSITIVE.ALWAYS,
inherited_chain = true,
},
-- Standard transitive derivation
transitive = {
transitive = TRANSITIVE.ALWAYS,
},
-- Standard for internal derivations: transitive across languages, but not within them
internal_derivation = {
transitive = TRANSITIVE.CROSS_LANG,
},
-- Borrowing keywords
borrowing = {
transitive = TRANSITIVE.ALWAYS,
},
-- Affix group keywords (compound words, blends, etc.)
affix_group = {
is_group = true,
transitive = TRANSITIVE.CROSS_LANG,
affix_categories = true,
},
-- Calque-like keywords (calque, partial calque, semantic loan)
calque_like = {
transitive = TRANSITIVE.NEVER,
no_child_categories = true,
new_sentence = true,
},
-- Non-transitive influence
influence_like = {
transitive = TRANSITIVE.NEVER,
no_child_categories = true,
},
}
export.keywords = {
--
-- Inheritance keywords
--
["from"] = create_keyword(deep_merge(DEFAULTS.internal_derivation, {
text = "จาก", phrase = "จาก",
})),
["inherited"] = create_keyword(deep_merge(DEFAULTS.inheritance, {
text = "สืบทอดจาก",
phrase = "สืบทอดจาก",
abbrev = "สืบทอด",
glossary = "inherited",
aliases = { "inh" },
})),
--
-- Basic derivation keywords
--
["uder"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "จาก",
phrase = "จาก",
toplevel_category = "undefined derivations",
})),
["derived"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "รับมาจาก",
phrase = "รับมาจาก",
abbrev = "รับ",
glossary = "derived terms",
aliases = { "der" },
})),
--
-- Affix/compound group keywords
--
["affix"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "จาก",
phrase = "จาก",
aliases = { "af" },
})),
["blend"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "หลอมมาจาก",
phrase = "หลอมมาจาก",
abbrev = "หลอม",
glossary = "blend",
toplevel_category = "blends",
})),
["univerbation"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "รวมเป็นหนึ่งคำจาก",
phrase = "รวมเป็นหนึ่งคำจาก",
abbrev = "รวมหนึ่งคำ",
glossary = "univerbation",
toplevel_category = "univerbations",
aliases = { "univ" },
})),
--
-- Borrowing keywords
--
["bor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "ยืมมาจาก",
phrase = "ยืมมาจาก",
abbrev = "ยืม",
glossary = "loanword",
borrowing_type = "borrowed",
aliases = { "borrowed" },
})),
["lbor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "ยืมโดยเรียนรู้จาก",
phrase = "ยืมโดยเรียนรู้จาก",
abbrev = "ยืมเรียนรู้",
glossary = "learned borrowing",
specialized_borrowing = "learned",
})),
["obor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "ยืมอักขรวิธีจาก",
phrase = "ยืมอักขรวิธีจาก",
abbrev = "ยืมอักขรวิธี",
glossary = "orthographic borrowing",
specialized_borrowing = "orthographic",
})),
["slbor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "ยืมโดยกึ่งเรียนรู้จาก",
phrase = "ยืมโดยกึ่งเรียนรู้จาก",
abbrev = "ยืมกึ่งเรียนรู้",
glossary = "semi-learned borrowing",
specialized_borrowing = "semi-learned",
})),
["ubor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "ยืมโดยไม่ดัดแปลงจาก",
phrase = "ยืมโดยไม่ดัดแปลงจาก",
abbrev = "ยืมไม่ดัดแปลง",
glossary = "unadapted borrowing",
specialized_borrowing = "unadapted",
})),
--
-- Calque-like keywords (non-transitive, start new sentence)
--
["calque"] = create_keyword(deep_merge(DEFAULTS.calque_like, {
text = "แปลตรงตัวจาก",
phrase = "แปลตรงตัวจาก",
abbrev = "แปลตรง",
glossary = "calque",
specialized_borrowing = "calque",
aliases = { "cal", "clq" },
})),
["partial calque"] = create_keyword(deep_merge(DEFAULTS.calque_like, {
text = "แปลตรงตัวบางส่วนจาก",
phrase = "แปลตรงตัวบางส่วนจาก",
abbrev = "แปลตรงบางส่วน",
glossary = "partial calque",
specialized_borrowing = "partial-calque",
aliases = { "pcal" },
})),
["semantic loan"] = create_keyword(deep_merge(DEFAULTS.calque_like, {
text = "ยืมความหมายจาก",
phrase = "ยืมความหมายจาก",
abbrev = "ยืมความหมาย",
glossary = "semantic loan",
specialized_borrowing = "semantic-loan",
aliases = { "sl" },
})),
--
-- Influence keywords (non-transitive, separate clause)
--
["influence"] = create_keyword(deep_merge(DEFAULTS.influence_like, {
text = "ได้รับอิทธิพลจาก",
phrase = "ได้รับอิทธิพลจาก",
abbrev = "รับอิทธิพล",
glossary = "contamination",
separate_clause = true,
})),
--
-- Morphological derivation keywords
--
["clipping"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "ตัดทอนจาก",
phrase = "ตัดทอนจาก",
abbrev = "ตัด",
glossary = "clipping",
toplevel_category = "clippings",
aliases = { "clip" },
})),
["ellipsis"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Ellipsis of",
phrase = "ellipsis of",
abbrev = "ellip.",
glossary = "ellipsis",
toplevel_category = "ellipses",
aliases = { "ellip" },
})),
["back-formation"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "ผันรูปย้อนกลับจาก",
phrase = "ผันรูปย้อนกลับจาก",
abbrev = "ผันย้อนกลับ",
glossary = "back-formation",
toplevel_category = "back-formations",
aliases = { "bf" },
})),
["transliteration"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Transliteration of",
phrase = "borrowed from",
abbrev = "translit.",
glossary = "transliteration",
aliases = { "translit" },
})),
["vrd"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Vṛddhi derivative of",
phrase = "a vṛddhi derivative of",
abbrev = "vṛd.",
glossary = "vṛddhi derivative",
})),
["apheretic"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Apheretic form of",
phrase = "an apheretic form of",
abbrev = "aph.",
glossary = "apheresis",
aliases = { "apheresis", "aphetic" },
})),
["denominal"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Denominal verb from",
phrase = "denominal verb from",
abbrev = "denom.",
glossary = "denominal",
toplevel_category = "denominal verbs",
aliases = { "denom" },
})),
["deverbal"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Deverbal from",
phrase = "deverbal from",
abbrev = "deverb.",
glossary = "deverbal",
toplevel_category = "deverbals",
})),
["reduplication"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Reduplication of",
phrase = "reduplication of",
abbrev = "redup.",
glossary = "reduplication",
toplevel_category = "reduplications",
aliases = { "redup" },
})),
["abbreviation"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Abbreviation of",
phrase = "abbreviation of",
abbrev = "abbr.",
glossary = "abbreviation",
aliases = { "abbr" },
})),
["acronym"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "อักษรย่อรวมพยางค์ของ",
phrase = "อักษรย่อรวมพยางค์ของ",
abbrev = "อักษรย่อ",
glossary = "acronym",
aliases = { "acro" },
})),
["initialism"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Initialism of",
phrase = "initialism of",
abbrev = "init.",
glossary = "initialism",
aliases = { "init" },
})),
["metathesis"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Metathesis of",
phrase = "metathesis of",
abbrev = "meta.",
glossary = "metathesis",
toplevel_category = "words derived through metathesis",
aliases = { "meta" },
})),
--
-- Invisible keywords (no text output)
--
["root"] = create_keyword {
transitive = TRANSITIVE.ALWAYS,
invisible = true,
pos_override = "root",
},
["afeq"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "จาก",
phrase = "จาก",
transitive = TRANSITIVE.NEVER,
invisible = true,
})),
}
local aliases_to_register = {}
local canonical_aliases = {}
for name, keyword_data in pairs(export.keywords) do
if keyword_data.aliases then
canonical_aliases[name] = keyword_data.aliases
for _, alias in ipairs(keyword_data.aliases) do
if export.keywords[alias] then
error("Alias '" ..
alias .. "' defined in keyword '" .. name .. "' collides with existing keyword '" .. alias .. "'.")
end
if aliases_to_register[alias] then
error("Alias '" ..
alias .. "' defined in keyword '" .. name .. "' is already claimed by another keyword.")
end
aliases_to_register[alias] = keyword_data
end
keyword_data.aliases = nil
end
end
for alias, data in pairs(aliases_to_register) do
export.keywords[alias] = data
end
--
-- Language exception presets
--
local EXCEPTION_PRESETS = {
-- Fully disallowed: no tree, no text, no categories
disallowed = {
disallow = { tree = true, text = true },
suppress_categories = true,
},
-- Suppress transliteration only
no_translit = {
suppress_tr = true,
},
-- Suppress all categories only
no_categories = {
suppress_categories = true,
},
}
--[=[
Available exception options:
disallow = { Related options for disallowing output:
tree Disallow etymology trees for this language
text Disallow etymology text generation for this language
ref Reference link shown when tree/text is disallowed
}
suppress_tr Suppress transliteration in links
suppress_categories Suppress all category generation
normalize_to Normalize language code to a different code
normalize_from_families Apply normalization to languages in these families
normalize_exclude_families Exclude these families from normalization
keyword_overrides Per-keyword categorisation overrides (e.g. { ["af"] = { transitive = TRANSITIVE.NEVER } })
]=]
local function create_exception(preset, overrides)
local base = preset and EXCEPTION_PRESETS[preset] or {}
return deep_merge(base, overrides or {})
end
export.config = {
lang_exceptions = {
["zh"] = create_exception("disallowed", {
disallow = { ref = "[[Wiktionary:Beer parlour/2025/May#Template:etymon for Chinese]]" },
suppress_tr = true,
normalize_to = "zh",
normalize_from_families = { "zhx" },
normalize_exclude_families = { "qfa-cnt" },
}),
},
}
--
-- Propagate keyword overrides to aliases
--
if export.config.lang_exceptions then
for lang_code, exception in pairs(export.config.lang_exceptions) do
if exception.keyword_overrides then
for canonical, aliases in pairs(canonical_aliases) do
if exception.keyword_overrides[canonical] then
local override_data = exception.keyword_overrides[canonical]
for _, alias in ipairs(aliases) do
if not exception.keyword_overrides[alias] then
exception.keyword_overrides[alias] = override_data
end
end
end
end
end
end
end
return export
a6754fxpgcpsik74uogpco7yn8a8aiw
5754411
5754410
2026-08-06T03:45:36Z
Octahedron80
267
5754411
Scribunto
text/plain
local export = {}
export.STATUS = {
OK = "ok",
INLINE = "inline",
MISSING = "missing",
REDLINK = "redlink",
AMBIGUOUS = "ambiguous",
}
export.TRANSITIVE = {
ALWAYS = "always", -- always recurse into children
NEVER = "never", -- never recurse into children
CROSS_LANG = "cross_lang", -- only recurse when source lang differs from target lang (but pos chain continues)
CROSS_LANG_NO_INTERNAL_SOURCE = "cross_lang_no_internal_source", -- like CROSS_LANG, but source breaks for internal derivations in the same language context
}
-- Deep merge tables (nested tables are merged recursively, later values override earlier)
local function deep_merge(...)
local result = {}
for _, t in ipairs({ ... }) do
for k, v in pairs(t) do
if type(v) == "table" and type(result[k]) == "table" then
result[k] = deep_merge(result[k], v)
else
result[k] = v
end
end
end
return result
end
local function make_glossary_link(term, display_text)
if not term then return display_text end
return "[[Appendix:Glossary#" .. term:gsub(" ", "_") .. "|" .. display_text .. "]]"
end
-- Extract base word and connector from text like "Borrowed from" or "calque of"
local function split_glossary_text(text)
for _, pattern in ipairs({ "^(.-)(%s+[Oo][Ff])$", "^(.-)(%s+[Ff][Rr][Oo][Mm])$","^(.-)(จาก)$", "^(.-)(ของ)$" }) do
local base, rest = text:match(pattern)
if base then return base, rest end
end
return text, ""
end
local TRANSITIVE = export.TRANSITIVE
local function create_keyword(opts)
local entry = {
is_group = opts.is_group or false,
abbrev = opts.abbrev,
glossary = opts.glossary,
transitive = opts.transitive or TRANSITIVE.ALWAYS, -- default "always"
inherited_chain = opts.inherited_chain or false,
affix_categories = opts.affix_categories or false,
borrowing_type = opts.borrowing_type,
specialized_borrowing = opts.specialized_borrowing,
toplevel_category = opts.toplevel_category,
no_child_categories = opts.no_child_categories or false,
source_category_type = opts.source_category_type,
invisible = opts.invisible or false,
pos_override = opts.pos_override,
new_sentence = opts.new_sentence or false,
separate_clause = opts.separate_clause or false,
aliases = opts.aliases,
}
-- Only set text/phrase for visible keywords
if not opts.invisible then
entry.phrase = opts.phrase
if opts.text then
if opts.glossary then
local base_word, rest = split_glossary_text(opts.text)
entry.text = make_glossary_link(opts.glossary, base_word) .. rest
else
entry.text = opts.text
end
end
end
return entry
end
-- Shared defaults for keyword groups
local DEFAULTS = {
-- Keywords that pass through inheritance chain
inheritance = {
transitive = TRANSITIVE.ALWAYS,
inherited_chain = true,
},
-- Standard transitive derivation
transitive = {
transitive = TRANSITIVE.ALWAYS,
},
-- Standard for internal derivations: transitive across languages, but not within them
internal_derivation = {
transitive = TRANSITIVE.CROSS_LANG,
},
-- Borrowing keywords
borrowing = {
transitive = TRANSITIVE.ALWAYS,
},
-- Affix group keywords (compound words, blends, etc.)
affix_group = {
is_group = true,
transitive = TRANSITIVE.CROSS_LANG,
affix_categories = true,
},
-- Calque-like keywords (calque, partial calque, semantic loan)
calque_like = {
transitive = TRANSITIVE.NEVER,
no_child_categories = true,
new_sentence = true,
},
-- Non-transitive influence
influence_like = {
transitive = TRANSITIVE.NEVER,
no_child_categories = true,
},
}
export.keywords = {
--
-- Inheritance keywords
--
["from"] = create_keyword(deep_merge(DEFAULTS.internal_derivation, {
text = "จาก", phrase = "จาก",
})),
["inherited"] = create_keyword(deep_merge(DEFAULTS.inheritance, {
text = "สืบทอดจาก",
phrase = "สืบทอดจาก",
abbrev = "สืบทอด",
glossary = "inherited",
aliases = { "inh" },
})),
--
-- Basic derivation keywords
--
["uder"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "จาก",
phrase = "จาก",
toplevel_category = "undefined derivations",
})),
["derived"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "รับมาจาก",
phrase = "รับมาจาก",
abbrev = "รับ",
glossary = "derived terms",
aliases = { "der" },
})),
--
-- Affix/compound group keywords
--
["affix"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "จาก",
phrase = "จาก",
aliases = { "af" },
})),
["blend"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "หลอมมาจาก",
phrase = "หลอมมาจาก",
abbrev = "หลอม",
glossary = "blend",
toplevel_category = "blends",
})),
["univerbation"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "รวมเป็นหนึ่งคำจาก",
phrase = "รวมเป็นหนึ่งคำจาก",
abbrev = "รวมหนึ่งคำ",
glossary = "univerbation",
toplevel_category = "univerbations",
aliases = { "univ" },
})),
--
-- Borrowing keywords
--
["bor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "ยืมมาจาก",
phrase = "ยืมมาจาก",
abbrev = "ยืม",
glossary = "loanword",
borrowing_type = "borrowed",
aliases = { "borrowed" },
})),
["lbor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "ยืมโดยเรียนรู้จาก",
phrase = "ยืมโดยเรียนรู้จาก",
abbrev = "เรียนรู้",
glossary = "learned borrowing",
specialized_borrowing = "learned",
})),
["obor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "ยืมอักขรวิธีจาก",
phrase = "ยืมอักขรวิธีจาก",
abbrev = "อักขรวิธี",
glossary = "orthographic borrowing",
specialized_borrowing = "orthographic",
})),
["slbor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "ยืมโดยกึ่งเรียนรู้จาก",
phrase = "ยืมโดยกึ่งเรียนรู้จาก",
abbrev = "กึ่งเรียนรู้",
glossary = "semi-learned borrowing",
specialized_borrowing = "semi-learned",
})),
["ubor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "ยืมโดยไม่ดัดแปลงจาก",
phrase = "ยืมโดยไม่ดัดแปลงจาก",
abbrev = "ไม่ดัดแปลง",
glossary = "unadapted borrowing",
specialized_borrowing = "unadapted",
})),
--
-- Calque-like keywords (non-transitive, start new sentence)
--
["calque"] = create_keyword(deep_merge(DEFAULTS.calque_like, {
text = "แปลตรงตัวจาก",
phrase = "แปลตรงตัวจาก",
abbrev = "แปลตรง",
glossary = "calque",
specialized_borrowing = "calque",
aliases = { "cal", "clq" },
})),
["partial calque"] = create_keyword(deep_merge(DEFAULTS.calque_like, {
text = "แปลตรงตัวบางส่วนจาก",
phrase = "แปลตรงตัวบางส่วนจาก",
abbrev = "แปลส่วน",
glossary = "partial calque",
specialized_borrowing = "partial-calque",
aliases = { "pcal" },
})),
["semantic loan"] = create_keyword(deep_merge(DEFAULTS.calque_like, {
text = "ยืมความหมายจาก",
phrase = "ยืมความหมายจาก",
abbrev = "ความหมาย",
glossary = "semantic loan",
specialized_borrowing = "semantic-loan",
aliases = { "sl" },
})),
--
-- Influence keywords (non-transitive, separate clause)
--
["influence"] = create_keyword(deep_merge(DEFAULTS.influence_like, {
text = "ได้รับอิทธิพลจาก",
phrase = "ได้รับอิทธิพลจาก",
abbrev = "อิทธิพล",
glossary = "contamination",
separate_clause = true,
})),
--
-- Morphological derivation keywords
--
["clipping"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "ตัดทอนจาก",
phrase = "ตัดทอนจาก",
abbrev = "ตัด",
glossary = "clipping",
toplevel_category = "clippings",
aliases = { "clip" },
})),
["ellipsis"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Ellipsis of",
phrase = "ellipsis of",
abbrev = "ellip.",
glossary = "ellipsis",
toplevel_category = "ellipses",
aliases = { "ellip" },
})),
["back-formation"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "ผันรูปย้อนกลับจาก",
phrase = "ผันรูปย้อนกลับจาก",
abbrev = "ผันย้อน",
glossary = "back-formation",
toplevel_category = "back-formations",
aliases = { "bf" },
})),
["transliteration"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "ถอดอักษรจาก",
phrase = "ยืมมาจาก",
abbrev = "ถอดอักษร",
glossary = "transliteration",
aliases = { "translit" },
})),
["vrd"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Vṛddhi derivative of",
phrase = "a vṛddhi derivative of",
abbrev = "vṛd.",
glossary = "vṛddhi derivative",
})),
["apheretic"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Apheretic form of",
phrase = "an apheretic form of",
abbrev = "aph.",
glossary = "apheresis",
aliases = { "apheresis", "aphetic" },
})),
["denominal"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Denominal verb from",
phrase = "denominal verb from",
abbrev = "denom.",
glossary = "denominal",
toplevel_category = "denominal verbs",
aliases = { "denom" },
})),
["deverbal"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Deverbal from",
phrase = "deverbal from",
abbrev = "deverb.",
glossary = "deverbal",
toplevel_category = "deverbals",
})),
["reduplication"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "คำซ้ำของ",
phrase = "คำซ้ำของ",
abbrev = "ซ้ำ",
glossary = "reduplication",
toplevel_category = "reduplications",
aliases = { "redup" },
})),
["abbreviation"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "คำย่อของ",
phrase = "คำย่อของ",
abbrev = "ย่อ",
glossary = "abbreviation",
aliases = { "abbr" },
})),
["acronym"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "อักษรย่อรวมพยางค์ของ",
phrase = "อักษรย่อรวมพยางค์ของ",
abbrev = "ย่อพยางค์",
glossary = "acronym",
aliases = { "acro" },
})),
["initialism"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "อักษรย่อของ",
phrase = "อักษรย่อของ",
abbrev = "ย่ออักษร",
glossary = "initialism",
aliases = { "init" },
})),
["metathesis"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Metathesis of",
phrase = "metathesis of",
abbrev = "meta.",
glossary = "metathesis",
toplevel_category = "words derived through metathesis",
aliases = { "meta" },
})),
--
-- Invisible keywords (no text output)
--
["root"] = create_keyword {
transitive = TRANSITIVE.ALWAYS,
invisible = true,
pos_override = "root",
},
["afeq"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "จาก",
phrase = "จาก",
transitive = TRANSITIVE.NEVER,
invisible = true,
})),
}
local aliases_to_register = {}
local canonical_aliases = {}
for name, keyword_data in pairs(export.keywords) do
if keyword_data.aliases then
canonical_aliases[name] = keyword_data.aliases
for _, alias in ipairs(keyword_data.aliases) do
if export.keywords[alias] then
error("Alias '" ..
alias .. "' defined in keyword '" .. name .. "' collides with existing keyword '" .. alias .. "'.")
end
if aliases_to_register[alias] then
error("Alias '" ..
alias .. "' defined in keyword '" .. name .. "' is already claimed by another keyword.")
end
aliases_to_register[alias] = keyword_data
end
keyword_data.aliases = nil
end
end
for alias, data in pairs(aliases_to_register) do
export.keywords[alias] = data
end
--
-- Language exception presets
--
local EXCEPTION_PRESETS = {
-- Fully disallowed: no tree, no text, no categories
disallowed = {
disallow = { tree = true, text = true },
suppress_categories = true,
},
-- Suppress transliteration only
no_translit = {
suppress_tr = true,
},
-- Suppress all categories only
no_categories = {
suppress_categories = true,
},
}
--[=[
Available exception options:
disallow = { Related options for disallowing output:
tree Disallow etymology trees for this language
text Disallow etymology text generation for this language
ref Reference link shown when tree/text is disallowed
}
suppress_tr Suppress transliteration in links
suppress_categories Suppress all category generation
normalize_to Normalize language code to a different code
normalize_from_families Apply normalization to languages in these families
normalize_exclude_families Exclude these families from normalization
keyword_overrides Per-keyword categorisation overrides (e.g. { ["af"] = { transitive = TRANSITIVE.NEVER } })
]=]
local function create_exception(preset, overrides)
local base = preset and EXCEPTION_PRESETS[preset] or {}
return deep_merge(base, overrides or {})
end
export.config = {
lang_exceptions = {
["zh"] = create_exception("disallowed", {
disallow = { ref = "[[Wiktionary:Beer parlour/2025/May#Template:etymon for Chinese]]" },
suppress_tr = true,
normalize_to = "zh",
normalize_from_families = { "zhx" },
normalize_exclude_families = { "qfa-cnt" },
}),
},
}
--
-- Propagate keyword overrides to aliases
--
if export.config.lang_exceptions then
for lang_code, exception in pairs(export.config.lang_exceptions) do
if exception.keyword_overrides then
for canonical, aliases in pairs(canonical_aliases) do
if exception.keyword_overrides[canonical] then
local override_data = exception.keyword_overrides[canonical]
for _, alias in ipairs(aliases) do
if not exception.keyword_overrides[alias] then
exception.keyword_overrides[alias] = override_data
end
end
end
end
end
end
end
return export
p0pm285yp5qmc4r859mtmihy9i1f68z
5754442
5754411
2026-08-06T04:36:42Z
Octahedron80
267
5754442
Scribunto
text/plain
local export = {}
export.STATUS = {
OK = "ok",
INLINE = "inline",
MISSING = "missing",
REDLINK = "redlink",
AMBIGUOUS = "ambiguous",
}
export.TRANSITIVE = {
ALWAYS = "always", -- always recurse into children
NEVER = "never", -- never recurse into children
CROSS_LANG = "cross_lang", -- only recurse when source lang differs from target lang (but pos chain continues)
CROSS_LANG_NO_INTERNAL_SOURCE = "cross_lang_no_internal_source", -- like CROSS_LANG, but source breaks for internal derivations in the same language context
}
-- Deep merge tables (nested tables are merged recursively, later values override earlier)
local function deep_merge(...)
local result = {}
for _, t in ipairs({ ... }) do
for k, v in pairs(t) do
if type(v) == "table" and type(result[k]) == "table" then
result[k] = deep_merge(result[k], v)
else
result[k] = v
end
end
end
return result
end
local function make_glossary_link(term, display_text)
if not term then return display_text end
return "[[Appendix:Glossary#" .. term:gsub(" ", "_") .. "|" .. display_text .. "]]"
end
-- Extract base word and connector from text like "Borrowed from" or "calque of"
local function split_glossary_text(text)
for _, pattern in ipairs({ "^(.-)(%s+[Oo][Ff])$", "^(.-)(%s+[Ff][Rr][Oo][Mm])$","^(.-)(จาก)$", "^(.-)(ของ)$" }) do
local base, rest = text:match(pattern)
if base then return base, rest end
end
return text, ""
end
local TRANSITIVE = export.TRANSITIVE
local function create_keyword(opts)
local entry = {
is_group = opts.is_group or false,
abbrev = opts.abbrev,
glossary = opts.glossary,
transitive = opts.transitive or TRANSITIVE.ALWAYS, -- default "always"
inherited_chain = opts.inherited_chain or false,
affix_categories = opts.affix_categories or false,
borrowing_type = opts.borrowing_type,
specialized_borrowing = opts.specialized_borrowing,
toplevel_category = opts.toplevel_category,
no_child_categories = opts.no_child_categories or false,
source_category_type = opts.source_category_type,
invisible = (opts.invisible == true and "all") or opts.invisible or false,
pos_override = opts.pos_override,
new_sentence = opts.new_sentence or false,
separate_clause = opts.separate_clause or false,
default_conj = opts.default_conj,
min_etymons = opts.min_etymons,
max_etymons = opts.max_etymons,
term_rules = opts.term_rules,
aliases = opts.aliases,
}
-- Only set text/phrase when visible in text (invisible ~= "all" and ~= "text")
local inv = entry.invisible
if inv ~= "all" and inv ~= "text" then
entry.phrase = opts.phrase
if opts.text then
if opts.glossary then
local base_word, rest = split_glossary_text(opts.text)
entry.text = make_glossary_link(opts.glossary, base_word) .. rest
else
entry.text = opts.text
end
end
end
return entry
end
-- Shared defaults for keyword groups
local DEFAULTS = {
-- Keywords that pass through inheritance chain
inheritance = {
transitive = TRANSITIVE.ALWAYS,
inherited_chain = true,
},
-- Standard transitive derivation
transitive = {
transitive = TRANSITIVE.ALWAYS,
},
-- Standard for internal derivations: transitive across languages, but not within them
internal_derivation = {
transitive = TRANSITIVE.CROSS_LANG,
},
-- Borrowing keywords
borrowing = {
transitive = TRANSITIVE.ALWAYS,
},
-- Affix group keywords (compound words, blends, etc.)
affix_group = {
is_group = true,
min_etymons = 2,
transitive = TRANSITIVE.CROSS_LANG,
affix_categories = true,
},
-- Calque-like keywords (calque, partial calque, semantic loan)
calque_like = {
transitive = TRANSITIVE.NEVER,
no_child_categories = true,
new_sentence = true,
},
-- Non-transitive influence
influence_like = {
transitive = TRANSITIVE.NEVER,
no_child_categories = true,
},
}
export.keywords = {
--
-- Inheritance keywords
--
["from"] = create_keyword(deep_merge(DEFAULTS.internal_derivation, {
text = "จาก", phrase = "จาก",
term_rules = { entry_lang = true },
})),
["inherited"] = create_keyword(deep_merge(DEFAULTS.inheritance, {
text = "สืบทอดจาก",
phrase = "สืบทอดจาก",
abbrev = "สืบทอด",
glossary = "inherited",
aliases = { "inh" },
term_rules = {
family = "disallowed",
family_suffix = "; use a specific language.",
ancestor_check = true,
},
})),
--
-- Basic derivation keywords
--
["uder"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "จาก",
phrase = "จาก",
toplevel_category = "undefined derivations",
})),
["derived"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "รับมาจาก",
phrase = "รับมาจาก",
abbrev = "รับ",
glossary = "derived terms",
aliases = { "der" },
})),
--
-- Affix/compound group keywords
--
["affix"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "จาก",
phrase = "จาก",
min_etymons = 1,
aliases = { "af" },
})),
["blend"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "หลอมมาจาก",
phrase = "หลอมมาจาก",
abbrev = "หลอม",
glossary = "blend",
toplevel_category = "blends",
})),
["univerbation"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "รวมเป็นหนึ่งคำจาก",
phrase = "รวมเป็นหนึ่งคำจาก",
abbrev = "รวมหนึ่งคำ",
glossary = "univerbation",
toplevel_category = "univerbations",
min_etymons = 1,
aliases = { "univ" },
})),
["vrd-af"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "Vṛddhi derivative of",
phrase = "a vṛddhi derivative of",
abbrev = "vṛd.",
glossary = "vṛddhi derivative",
toplevel_category = "vrddhi derivatives",
})),
["sa-af"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "[[Sanskritic]] formation from",
phrase = "a [[Sanskritic]] formation of",
toplevel_category = "Sanskritic formations",
})),
--
-- Borrowing keywords
--
["bor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "ยืมมาจาก",
phrase = "ยืมมาจาก",
abbrev = "ยืม",
glossary = "loanword",
borrowing_type = "borrowed",
aliases = { "borrowed" },
})),
["lbor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "ยืมโดยเรียนรู้จาก",
phrase = "ยืมโดยเรียนรู้จาก",
abbrev = "เรียนรู้",
glossary = "learned borrowing",
specialized_borrowing = "learned",
})),
["obor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "ยืมอักขรวิธีจาก",
phrase = "ยืมอักขรวิธีจาก",
abbrev = "อักขรวิธี",
glossary = "orthographic borrowing",
specialized_borrowing = "orthographic",
})),
["slbor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "ยืมโดยกึ่งเรียนรู้จาก",
phrase = "ยืมโดยกึ่งเรียนรู้จาก",
abbrev = "กึ่งเรียนรู้",
glossary = "semi-learned borrowing",
specialized_borrowing = "semi-learned",
})),
["ubor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "ยืมโดยไม่ดัดแปลงจาก",
phrase = "ยืมโดยไม่ดัดแปลงจาก",
abbrev = "ไม่ดัดแปลง",
glossary = "unadapted borrowing",
specialized_borrowing = "unadapted",
})),
--
-- Calque-like keywords (non-transitive, start new sentence)
--
["calque"] = create_keyword(deep_merge(DEFAULTS.calque_like, {
text = "แปลตรงตัวจาก",
phrase = "แปลตรงตัวจาก",
abbrev = "แปลตรง",
glossary = "calque",
specialized_borrowing = "calque",
aliases = { "cal", "clq" },
})),
["partial calque"] = create_keyword(deep_merge(DEFAULTS.calque_like, {
text = "แปลตรงตัวบางส่วนจาก",
phrase = "แปลตรงตัวบางส่วนจาก",
abbrev = "แปลส่วน",
glossary = "partial calque",
specialized_borrowing = "partial-calque",
aliases = { "pcal" },
})),
["semantic loan"] = create_keyword(deep_merge(DEFAULTS.calque_like, {
text = "ยืมความหมายจาก",
phrase = "ยืมความหมายจาก",
abbrev = "ความหมาย",
glossary = "semantic loan",
specialized_borrowing = "semantic-loan",
aliases = { "sl" },
})),
["psm"] = create_keyword(deep_merge(DEFAULTS.calque_like, {
text = "Phono-semantic matching of",
phrase = "a phono-semantic matching of",
abbrev = "psm.",
glossary = "phono-semantic matching",
specialized_borrowing = "phono-semantic-matching",
aliases = { "phono-semantic matching" },
})),
--
-- Influence keywords (non-transitive, separate clause)
--
["influence"] = create_keyword(deep_merge(DEFAULTS.influence_like, {
text = "ได้รับอิทธิพลจาก",
phrase = "ได้รับอิทธิพลจาก",
abbrev = "อิทธิพล",
glossary = "contamination",
separate_clause = true,
})),
--
-- Morphological derivation keywords
--
["clipping"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "ตัดทอนจาก",
phrase = "ตัดทอนจาก",
abbrev = "ตัด",
glossary = "clipping",
toplevel_category = "clippings",
aliases = { "clip" },
})),
["ellipsis"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Ellipsis of",
phrase = "ellipsis of",
abbrev = "ellip.",
glossary = "ellipsis",
toplevel_category = "ellipses",
aliases = { "ellip" },
})),
["back-formation"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "ผันรูปย้อนกลับจาก",
phrase = "ผันรูปย้อนกลับจาก",
abbrev = "ผันย้อน",
glossary = "back-formation",
toplevel_category = "back-formations",
aliases = { "bf" },
})),
["nominalization"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Nominalization of",
phrase = "a nominalization of",
abbrev = "nom.",
glossary = "nominalization",
toplevel_category = "nominalizations",
aliases = { "nom" },
})),
["transliteration"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "ถอดอักษรจาก",
phrase = "ยืมมาจาก",
abbrev = "ถอดอักษร",
glossary = "transliteration",
aliases = { "translit" },
})),
["vrd"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Vṛddhi derivative of",
phrase = "a vṛddhi derivative of",
abbrev = "vṛd.",
glossary = "vṛddhi derivative",
toplevel_category = "vrddhi derivatives",
})),
["apheretic"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Apheretic form of",
phrase = "an apheretic form of",
abbrev = "aph.",
glossary = "apheresis",
aliases = { "apheresis", "aphetic" },
})),
["denominal"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Denominal verb from",
phrase = "denominal verb from",
abbrev = "denom.",
glossary = "denominal",
toplevel_category = "denominal verbs",
aliases = { "denom" },
})),
["deverbal"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Deverbal from",
phrase = "deverbal from",
abbrev = "deverb.",
glossary = "deverbal",
toplevel_category = "deverbals",
})),
["reduplication"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "คำซ้ำของ",
phrase = "คำซ้ำของ",
abbrev = "ซ้ำ",
glossary = "reduplication",
toplevel_category = "reduplications",
aliases = { "redup" },
})),
["abbreviation"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "คำย่อของ",
phrase = "คำย่อของ",
abbrev = "ย่อ",
glossary = "abbreviation",
aliases = { "abbr", "abbrev" },
})),
["syllabic abbreviation"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Syllabic abbreviation of",
phrase = "syllabic abbreviation of",
abbrev = "syl. abbr.",
glossary = "syllabic abbreviation",
aliases = { "sylabbr", "sylabbrev" },
})),
["acronym"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "อักษรย่อรวมพยางค์ของ",
phrase = "อักษรย่อรวมพยางค์ของ",
abbrev = "ย่อพยางค์",
glossary = "acronym",
aliases = { "acro" },
})),
["initialism"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "อักษรย่อของ",
phrase = "อักษรย่อของ",
abbrev = "ย่ออักษร",
glossary = "initialism",
aliases = { "init" },
})),
["metathesis"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Metathesis of",
phrase = "metathesis of",
abbrev = "meta.",
glossary = "metathesis",
toplevel_category = "words derived through metathesis",
aliases = { "meta" },
})),
--
-- Invisible keywords (no text output)
--
["root"] = create_keyword {
transitive = TRANSITIVE.ALWAYS,
invisible = "all",
pos_override = "root",
},
["afeq"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "จาก",
phrase = "จาก",
transitive = TRANSITIVE.NEVER,
min_etymons = 1,
invisible = "all",
})),
}
-- Template-parameter supplements.
export.supplements = {
doublet = {
text = "ร่วมรากกับ",
phrase = "ร่วมรากกับ",
glossary = "doublet",
toplevel_category = "doublets",
default_conj = "and",
term_rules = {
entry_lang = true,
require_term = true,
disallow = { "suppress", "unknown", "family" },
},
},
}
local aliases_to_register = {}
local canonical_aliases = {}
-- Map every keyword (canonical or alias) to its canonical form for consistent checks and tracking.
export.keyword_canonical = {}
for name, keyword_data in pairs(export.keywords) do
export.keyword_canonical[name] = name
if keyword_data.aliases then
canonical_aliases[name] = keyword_data.aliases
for _, alias in ipairs(keyword_data.aliases) do
if export.keywords[alias] then
error("Alias '" ..
alias .. "' defined in keyword '" .. name .. "' collides with existing keyword '" .. alias .. "'.")
end
if aliases_to_register[alias] then
error("Alias '" ..
alias .. "' defined in keyword '" .. name .. "' is already claimed by another keyword.")
end
aliases_to_register[alias] = keyword_data
export.keyword_canonical[alias] = name
end
keyword_data.aliases = nil
end
end
for alias, data in pairs(aliases_to_register) do
export.keywords[alias] = data
end
--
-- Language exception presets
--
local EXCEPTION_PRESETS = {
-- Fully disallowed: no tree, no text, no categories
disallowed = {
disallow = { tree = true, text = true },
suppress_categories = true,
},
-- Suppress transliteration only
no_translit = {
suppress_tr = true,
},
-- Suppress all categories only
no_categories = {
suppress_categories = true,
},
}
--[=[
Available exception options:
disallow = { Related options for disallowing output:
tree Disallow etymology trees for this language
text Disallow etymology text generation for this language
ref Reference link shown when tree/text is disallowed
}
suppress_tr Suppress transliteration in links
suppress_categories Suppress all category generation
normalize_to Normalize language code to a different code
normalize_from_families Apply normalization to languages in these families
normalize_exclude_families Exclude these families from normalization
keyword_overrides Per-keyword categorisation overrides (e.g. { ["af"] = { transitive = TRANSITIVE.NEVER } })
]=]
local function create_exception(preset, overrides)
local base = preset and EXCEPTION_PRESETS[preset] or {}
return deep_merge(base, overrides or {})
end
export.config = {
lang_exceptions = {
["zh"] = create_exception("disallowed", {
disallow = { ref = "[[Wiktionary:Beer parlour/2025/May#Template:etymon for Chinese]]" },
suppress_tr = true,
normalize_to = "zh",
normalize_from_families = { "zhx" },
normalize_exclude_families = { "qfa-cnt" },
}),
},
}
-- Supported codes for the nominalization <g:code> modifier (subset of common gender/number-style codes)
export.nominalization_g_codes = {
["m"] = "เพศชาย",
["f"] = "เพศหญิง",
["n"] = "เพศกลาง",
["c"] = "เพศรวม",
["gneut"] = "ไม่ระบุเพศ",
["s"] = "เอกพจน์",
["p"] = "พหูพจน์",
["d"] = "ทวิพจน์",
["pauc"] = "paucal",
["mf"] = "เพศชายหรือเพศหญิง",
["fm"] = "เพศชายหรือเพศหญิง",
["mfn"] = "เพศชาย เพศหญิง หรือเพศกลาง",
["mnf"] = "เพศชาย เพศหญิง หรือเพศกลาง",
["fmn"] = "เพศชาย เพศหญิง หรือเพศกลาง",
["fnm"] = "เพศชาย เพศหญิง หรือเพศกลาง",
["nmf"] = "เพศชาย เพศหญิง หรือเพศกลาง",
["nfm"] = "เพศชาย เพศหญิง หรือเพศกลาง",
}
--
-- Propagate keyword overrides to aliases
--
if export.config.lang_exceptions then
for lang_code, exception in pairs(export.config.lang_exceptions) do
if exception.keyword_overrides then
for canonical, aliases in pairs(canonical_aliases) do
if exception.keyword_overrides[canonical] then
local override_data = exception.keyword_overrides[canonical]
for _, alias in ipairs(aliases) do
if not exception.keyword_overrides[alias] then
exception.keyword_overrides[alias] = override_data
end
end
end
end
end
end
end
return export
fon151dys3mup47kk7wmemwtqxv4a07
มอดูล:etymon/text
828
2297437
5754409
5727295
2026-08-06T03:27:59Z
Octahedron80
267
5754409
Scribunto
text/plain
local export = {}
local loader = require("Module:module loader")
local M = loader.init({
require = {
references = "Module:references",
},
loadData = {
data = "Module:etymon/data",
},
})
function export.render(opts)
opts = opts or {}
local data_tree = opts.data_tree
local format_term_func = opts.format_term_func
local max_depth = opts.max_depth
local stop_at_blue_link = opts.stop_at_blue_link
local curr_page = opts.curr_page
local nodot = opts.nodot
local stop_at_lang = opts.stop_at_lang
local stop_at_lang_or_bluelink = opts.stop_at_lang_or_bluelink
local children = data_tree.children
if not children or #children == 0 then
return ""
end
local top_l2 = data_tree.lang:getFullCode() .. ":" .. curr_page
-- Get refs for a term
local function get_term_refs(term, term_lang, depth)
local term_l2 = term_lang:getFullCode() .. ":" .. curr_page
if term.parsed_ref and (depth == 1 or term_l2 == top_l2) then
return M.references.format_references(term.parsed_ref)
end
return ""
end
-- Build a text part for a single term
local function build_term_part(term, current_lang, depth)
local text = ""
local new_lang = current_lang
local lang_changed = term.lang:getCanonicalName() ~= current_lang:getCanonicalName()
-- Use centralized format_term (handles suppress_term, unknown_term, and regular terms)
local term_text = format_term_func(term)
if lang_changed then
new_lang = term.lang
-- Fix Thai translation need of having ภาษา in front
local wp_target = term.lang:getWikipediaArticle()
local lang_link = "[[w:" .. wp_target .. "|ภาษา" .. term.lang:getCanonicalName() .. "]]"
if term_text then
text = lang_link .. " " .. term_text
else
-- suppress_term with language change: show only language
text = lang_link
end
else
text = term_text or ""
end
return {
type = "term",
text = text,
refs = get_term_refs(term, new_lang, depth),
lang = new_lang,
is_uncertain = term.is_uncertain or false,
}
end
-- Build text parts for a container
local function build_container_part(container, node, depth, allow_continuation, fallback_to_bluelink)
local keyword_info = container.keyword_info
local keyword_modifiers = container.keyword_modifiers or {}
local terms = container.terms or {}
if not keyword_info or keyword_info.invisible or #terms == 0 then
return nil
end
local is_group = keyword_info.is_group
local keyword_uncertain = keyword_modifiers.unc or false
-- Determine text and phrase (allowing for overrides)
local intro_text = keyword_info.text
local phrase = keyword_info.phrase
if keyword_modifiers.text then
-- User-provided override: assumed to be lowercase
phrase = keyword_modifiers.text
-- Auto-capitalize for intro text (e.g., "derived from" -> "Derived from")
intro_text = mw.ustring.upper(phrase:sub(1, 1)) .. phrase:sub(2)
end
-- Get keyword references
local keyword_refs = ""
if keyword_modifiers.ref then
local parsed_keyword_refs = M.references.parse_references(keyword_modifiers.ref)
if parsed_keyword_refs and parsed_keyword_refs ~= "" then
keyword_refs = M.references.format_references(parsed_keyword_refs)
end
end
-- Build term parts
local term_parts = {}
local current_lang = node.lang
for _, term in ipairs(terms) do
local term_part = build_term_part(term, current_lang, depth)
if term_part.text ~= "" then
table.insert(term_parts, term_part)
current_lang = term_part.lang
end
end
-- Check uncertainty distribution
local uncertain_count = 0
for _, term_part in ipairs(term_parts) do
if term_part.is_uncertain then
uncertain_count = uncertain_count + 1
end
end
-- If keyword itself is uncertain, treat all terms as uncertain
local all_uncertain = keyword_uncertain or (uncertain_count == #term_parts and #term_parts > 0)
local has_mixed_uncertainty = not keyword_uncertain and uncertain_count > 0 and uncertain_count < #term_parts
-- Check if there are more steps (only if continuation is allowed)
local has_more_steps = false
local next_node = nil
local first_term = terms[1]
-- Check if we should stop at this language
local reached_stop_lang = false
if stop_at_lang then
for _, term in ipairs(terms) do
if term.lang and term.lang:getCode() == stop_at_lang then
reached_stop_lang = true
break
end
end
elseif stop_at_lang_or_bluelink then
-- Check if we should stop at this language, or at the first bluelink if it's a redlink
for _, term in ipairs(terms) do
if term.lang and term.lang:getCode() == stop_at_lang_or_bluelink then
if first_term.status == M.data.STATUS.OK then
reached_stop_lang = true
else
fallback_to_bluelink = true
end
break
end
end
if fallback_to_bluelink and first_term.status == M.data.STATUS.OK then
reached_stop_lang = true
end
end
if allow_continuation and not is_group and #terms == 1 and not reached_stop_lang then
local first_term_children = first_term.children
if first_term_children and #first_term_children > 0 and (not max_depth or depth < max_depth) then
local next_container = first_term_children[1]
local next_keyword_info = next_container and next_container.keyword_info
if not (next_keyword_info and next_keyword_info.invisible) then
if stop_at_blue_link then
if first_term.status ~= M.data.STATUS.OK then
has_more_steps = true
next_node = first_term
end
else
has_more_steps = true
next_node = first_term
end
end
end
end
return {
type = "container",
intro_text = intro_text,
phrase = phrase,
is_uncertain = all_uncertain,
has_mixed_uncertainty = has_mixed_uncertainty,
term_parts = term_parts,
is_group = is_group,
has_more_steps = has_more_steps,
next_node = next_node,
new_sentence = keyword_info.new_sentence or false,
separate_clause = keyword_info.separate_clause or false,
conj = keyword_modifiers.conj, -- custom conjunction: "and", "or", "and/or", etc.
lit = keyword_modifiers.lit,
keyword_refs = keyword_refs,
fallback_to_bluelink = fallback_to_bluelink,
}
end
-- Build the full tree of text parts
local function build_text_tree(node, depth, allow_continuation, fallback_to_bluelink)
local containers = node.children
if not containers or #containers == 0 then
return nil
end
local container_parts = {}
-- Count only visible containers
local visible_container_count = 0
for _, container in ipairs(containers) do
local keyword_info = container.keyword_info
if not (keyword_info and keyword_info.invisible) then
visible_container_count = visible_container_count + 1
end
end
-- If there are multiple visible containers at this level, don't allow continuation for any
local has_multiple_containers = visible_container_count > 1
local should_allow_continuation = allow_continuation and not has_multiple_containers
for _, container in ipairs(containers) do
local part = build_container_part(container, node, depth, should_allow_continuation, fallback_to_bluelink)
if part then
-- Recursively build children if there are more steps
if part.has_more_steps and part.next_node then
part.continuation = build_text_tree(part.next_node, depth + 1, true, part.fallback_to_bluelink)
end
table.insert(container_parts, part)
end
end
if #container_parts == 0 then
return nil
end
return {
type = "tree",
container_parts = container_parts,
depth = depth,
}
end
-- Check if tree has mixed joining types
local function check_complexity(tree)
if not tree then return nil end
local parts = tree.container_parts
if #parts <= 1 then
-- Single container
if parts[1] and parts[1].continuation then
return check_complexity(parts[1].continuation)
end
return nil
end
-- Multiple containers
local has_or_join = false
local has_new_sentence = false
local has_separate_clause = false
for i = 2, #parts do
local part = parts[i]
-- Ignore etydate parts for complexity checks
if part.type ~= "etydate" then
if part.new_sentence then
has_new_sentence = true
elseif part.separate_clause then
has_separate_clause = true
else
has_or_join = true
end
end
end
local join_type_count = 0
if has_or_join then join_type_count = join_type_count + 1 end
if has_new_sentence then join_type_count = join_type_count + 1 end
if has_separate_clause then join_type_count = join_type_count + 1 end
if join_type_count > 1 then
error(
"Cannot generate etymology text: mixed joining styles (e.g., alternatives joined with 'or' cannot be combined with calques or influences in the same list).")
end
return nil
end
-- Analyze tree and assign punctuation
local function analyze_punctuation(tree, is_toplevel)
if not tree then return end
local parts = tree.container_parts
local num_parts = #parts
for i, part in ipairs(parts) do
local is_first = (i == 1)
local is_last = (i == num_parts)
local next_part = parts[i + 1]
-- Analyze term punctuation within container
-- Terms use Oxford comma style: "A, B, or C"
-- Custom conjunction can be specified via conj modifier (e.g., "and/or", "and")
local num_terms = #part.term_parts
local term_conj = part.conj or "or" -- default to "or"
for j, term_part in ipairs(part.term_parts) do
local is_last_term = (j == num_terms)
if part.is_group then
-- Group: terms joined with " + "
term_part.joiner = is_last_term and "" or " + "
elseif num_terms > 1 then
-- Multiple terms not in a group: Oxford comma style
if is_last_term then
term_part.joiner = ""
elseif j == num_terms - 1 then
-- Second to last term
if num_terms == 2 then
term_part.joiner = " " .. term_conj .. " "
else
term_part.joiner = ", " .. term_conj .. " "
end
else
term_part.joiner = ", "
end
else
-- Single term
term_part.joiner = ""
end
end
-- Determine container punctuation based on what comes next
if part.continuation then
-- Has continuation
part.punctuation = ","
-- Recursively analyze continuation
analyze_punctuation(part.continuation, false)
elseif is_last then
-- Last container
part.punctuation = (is_toplevel and nodot) and "" or "."
elseif next_part and next_part.new_sentence then
-- Next container starts a new sentence
part.punctuation = "."
elseif next_part and next_part.separate_clause then
-- Next container is a separate clause
part.punctuation = ","
else
-- Not last, next is joined with "or"
-- Containers use repeated "or" style: "A, or B, or C"
part.punctuation = ","
end
-- Determine joiner to next part
-- Containers use repeated "or" style: ", or" between each
-- Custom conjunction can be specified via conj modifier
local container_conj = part.conj or "or" -- default to "or"
if not is_last then
if next_part and next_part.new_sentence then
-- New sentence
part.joiner = " "
elseif next_part and next_part.separate_clause then
-- Separate clause
part.joiner = " "
else
-- Same sentence: use custom conjunction or default "or"
part.joiner = " " .. container_conj .. " "
end
else
part.joiner = ""
end
-- Determine intro formatting
-- Capitalize if first at top level, OR if this container starts a new sentence
if (is_first and is_toplevel) or part.new_sentence then
part.intro_capitalized = true
part.use_full_intro = true
else
part.intro_capitalized = false
part.use_full_intro = false
end
end
end
-- Assemble text from analyzed tree
local function assemble_text(tree)
if not tree then return "" end
local result = ""
for i, part in ipairs(tree.container_parts) do
if part.type == "etydate" then
result = result .. part.etydate_text
if part.punctuation and part.punctuation ~= "" then
result = result .. part.punctuation
end
if part.etydate_refs and part.etydate_refs ~= "" then
result = result .. M.references.format_references(part.etydate_refs)
end
if part.joiner and part.joiner ~= "" then
result = result .. part.joiner
end
else
-- Build intro
local intro
if part.use_full_intro then
if part.is_uncertain then
intro = "เป็นไปได้ว่า" .. part.phrase
else
intro = part.intro_text
end
else
if part.is_uncertain then
intro = "เป็นไปได้ว่า" .. part.phrase
else
intro = part.phrase
end
end
result = result .. intro
-- Build terms
if #part.term_parts > 0 then
-- Dealing with random space in Thai, each Thai char is 3
if intro:sub(-3) == "ก" then
result = result .. ""
else
result = result .. " "
end
for j, term_part in ipairs(part.term_parts) do
-- Add "possibly" prefix for uncertain terms when there's mixed uncertainty
if part.has_mixed_uncertainty and term_part.is_uncertain then
result = result .. "เป็นไปได้ว่า"
end
result = result .. term_part.text
-- Add joiner between terms
if term_part.joiner ~= "" then
-- Check if joiner contains comma (punctuation)
local comma_pos = term_part.joiner:find(",")
if comma_pos then
-- Add up to and including comma
result = result .. term_part.joiner:sub(1, comma_pos)
-- Add refs after comma
if term_part.refs ~= "" then
result = result .. term_part.refs
end
-- Add rest of joiner
result = result .. term_part.joiner:sub(comma_pos + 1)
else
-- No comma, add refs before joiner
if term_part.refs ~= "" then
result = result .. term_part.refs
end
result = result .. term_part.joiner
end
end
end
-- For the last term, add punctuation then refs
local last_term = part.term_parts[#part.term_parts]
if last_term and last_term.joiner == "" then
if part.punctuation ~= "" then
-- If we have literal text, punctuation goes AFTER it
if part.lit then
-- Add refs first (attached to term)
if last_term.refs ~= "" then
result = result .. last_term.refs
end
-- Add keyword refs
if part.keyword_refs and part.keyword_refs ~= "" then
result = result .. part.keyword_refs
end
-- Add literal text
result = result .. ", literally “" .. part.lit .. "”"
-- Add punctuation
result = result .. part.punctuation
else
-- Normal behavior: punctuation then refs
result = result .. part.punctuation
if last_term.refs ~= "" then
result = result .. last_term.refs
end
-- Add keyword refs after term refs
if part.keyword_refs and part.keyword_refs ~= "" then
result = result .. part.keyword_refs
end
end
else
-- No punctuation
if last_term.refs ~= "" then
result = result .. last_term.refs
end
-- Add keyword refs
if part.keyword_refs and part.keyword_refs ~= "" then
result = result .. part.keyword_refs
end
-- Add literal text if present (even without punctuation)
if part.lit then
result = result .. ", literally “" .. part.lit .. "”"
end
end
end
else
-- No terms, just add punctuation and keyword refs
if part.punctuation ~= "" then
result = result .. part.punctuation
end
-- Add keyword refs even when there are no terms
if part.keyword_refs and part.keyword_refs ~= "" then
result = result .. part.keyword_refs
end
end
-- Add continuation
if part.continuation then
result = result .. " " .. assemble_text(part.continuation)
end
-- Add joiner to next container
if part.joiner ~= "" then
result = result .. part.joiner
end
end
end
return result
end
local text_tree = build_text_tree(data_tree, 1, true, false)
if not text_tree then
return ""
end
-- Add etydate container
if data_tree.etydate and data_tree.etydate ~= "" then
table.insert(text_tree.container_parts, {
type = "etydate",
etydate_text = data_tree.etydate,
etydate_refs = data_tree.etydate_refs,
term_parts = {},
new_sentence = true,
})
end
check_complexity(text_tree)
analyze_punctuation(text_tree, true)
return assemble_text(text_tree)
end
return export
oxbdmlb015v1nwmumwy454cc5wn7x59
มอดูล:etymon/tree
828
2297438
5754449
5727296
2026-08-06T04:49:42Z
Octahedron80
267
5754449
Scribunto
text/plain
local export = {}
local html_create = mw.html.create
local max = math.max
local function create_vertical_connector()
return html_create('span'):addClass('etytree-connector-vertical')
end
local function create_abbr(text, title, glossary)
local abbr = html_create('abbr')
:attr('title', title)
:wikitext(text)
if glossary then
abbr = '[[ภาคผนวก:อภิธานศัพท์#' .. glossary .. '|' .. tostring(abbr) .. ']]'
end
return html_create('span'):addClass('etytree-label'):node(abbr)
end
local function create_uncertainty_marker()
return html_create('abbr')
:addClass('etytree-unc')
:attr('title', 'uncertain')
:wikitext('?')
end
local function create_label_container()
return html_create('span'):addClass('etytree-label-container')
end
local function invisible_in_tree(inv)
return inv == "all" or inv == true or inv == "tree"
end
local function render_label(term_block, keyword_info, keyword_modifiers, is_uncertain, is_group_child, term_labels)
-- Skip label when invisible in tree
local has_label = keyword_info and keyword_info.abbrev and not is_group_child and not invisible_in_tree(keyword_info.invisible)
-- For group children, keyword uncertainty is shown on the group label, not on individual terms
local keyword_uncertain = keyword_modifiers and keyword_modifiers.unc and not is_group_child
local show_term_uncertainty = is_uncertain
-- Check if we have term-specific labels
local has_term_labels = term_labels and #term_labels > 0
if not has_label and not show_term_uncertainty and not keyword_uncertain and not has_term_labels then
return
end
local label_span = create_label_container()
if has_label then
local glossary_title = keyword_info.glossary
and keyword_info.glossary:gsub("_", " ")
or keyword_info.abbrev
label_span:node(create_abbr(
keyword_info.abbrev,
glossary_title,
keyword_info.glossary
))
-- Show uncertainty marker if term or keyword is uncertain
if show_term_uncertainty or keyword_uncertain then
label_span:node(create_uncertainty_marker())
end
else
-- No label, but term or keyword is uncertain
if show_term_uncertainty or keyword_uncertain then
label_span:node(create_uncertainty_marker())
end
end
-- Add term-specific labels
if has_term_labels then
for _, label_info in ipairs(term_labels) do
label_span:node(create_abbr(label_info.abbrev, label_info.title, label_info.glossary))
end
end
term_block:node(label_span)
end
local function render_term_block(node_data, format_term_func, is_toplevel)
local link_content = html_create()
link_content
:tag('span')
:addClass('etyl')
:wikitext(node_data.lang:getCanonicalName())
:done()
local term_text = format_term_func(node_data, is_toplevel)
if term_text then
link_content
:wikitext(' ')
:tag('span')
:addClass('etytree-term')
:wikitext(term_text)
:done()
end
local block = html_create('div'):addClass('etytree-block'):node(link_content)
-- Add duplicate styling if this is a duplicate node
if node_data.is_duplicate then
block:addClass('etytree-duplicate')
end
return block
end
local function create_dotted_connector()
return html_create('span'):addClass('etytree-connector-dotted')
end
-- Create an L-shaped connector for nodes with hidden ancestry (duplicate or no_child_categories)
local function create_duplicate_connector()
local container = html_create('div'):addClass('etytree-duplicate-connector')
local inner_wrapper = container:tag('div')
inner_wrapper:tag('span'):addClass('etytree-dup-right')
inner_wrapper:tag('span'):addClass('etytree-dup-horiz')
inner_wrapper:tag('span'):addClass('etytree-dup-left')
inner_wrapper:tag('span'):addClass('etytree-dup-arrow'):wikitext('▲')
return container
end
local function render_group_label(connecting_line, keyword_info, keyword_modifiers)
local has_abbrev = keyword_info and keyword_info.abbrev
local keyword_uncertain = keyword_modifiers and keyword_modifiers.unc
-- Nothing to show if no abbrev and no uncertainty
if not has_abbrev and not keyword_uncertain then
return
end
local label_span = connecting_line:tag('span'):addClass('etytree-group-label')
if has_abbrev then
local glossary_title = keyword_info.glossary
and keyword_info.glossary:gsub("_", " ")
or keyword_info.abbrev
label_span:node(create_abbr(keyword_info.abbrev, glossary_title, nil))
end
-- Add uncertainty marker if keyword has <unc> modifier
if keyword_uncertain then
label_span:node(create_uncertainty_marker())
end
end
local function add_branch_connector(column, index, total)
if index == 1 then
column:tag('span'):addClass('etytree-branch-left')
elseif index == total then
column:tag('span'):addClass('etytree-branch-right')
else
column:tag('span'):addClass('etytree-connector-vertical-short')
column:tag('span'):addClass('etytree-branch-mid')
end
end
function export.render(opts)
opts = opts or {}
local data_tree = opts.data_tree
local format_term_func = opts.format_term_func
-- Forward declaration
local render_term
-- Render a container (keyword + its terms)
local function render_container(container, is_toplevel)
local keyword_info = container.keyword_info
local keyword_modifiers = container.keyword_modifiers or {}
local is_group = keyword_info and keyword_info.is_group
local terms = container.terms or {}
-- Skip container entirely only when invisible = "all" (or true)
if keyword_info and invisible_in_tree(keyword_info.invisible) then
return nil, 0, 0
end
if #terms == 0 then
return nil, 0, 0
end
-- For no_child_categories keywords (calque, semantic loan, etc.), don't render term's children
local skip_child_rendering = keyword_info and keyword_info.no_child_categories
-- Render each term in the container
local rendered_terms = {}
local container_height = 0
local container_width = 0
for _, term in ipairs(terms) do
-- Collect term-specific labels
local term_labels = {}
if term.bor then
table.insert(term_labels, { abbrev = "bor.", title = "borrowed", glossary = "loanword" })
end
if term.slbor then
table.insert(term_labels, { abbrev = "slbor.", title = "semi-learned borrowing", glossary = "semi-learned_borrowing" })
end
if term.lbor then
table.insert(term_labels, { abbrev = "lbor.", title = "learned borrowing", glossary = "learned_borrowing" })
end
local term_tree, term_height, term_width = render_term(term, keyword_info, keyword_modifiers, is_group, false, skip_child_rendering, term_labels)
table.insert(rendered_terms, {
tree = term_tree,
height = term_height,
width = term_width,
is_uncertain = term.is_uncertain,
})
container_height = max(container_height, term_height)
container_width = container_width + term_width
end
local rendered_html
local has_connector = false
if #rendered_terms == 1 then
-- Single term: just return it directly
rendered_html = rendered_terms[1].tree
container_height = rendered_terms[1].height
container_width = rendered_terms[1].width
else
-- Multiple terms: group them together
local subtree_container = html_create('div'):addClass('etytree-branch-group')
for i, term_data in ipairs(rendered_terms) do
local column = html_create('div'):addClass('etytree-branch')
column:node(term_data.tree)
add_branch_connector(column, i, #rendered_terms)
subtree_container:node(column)
end
local connecting_line = create_vertical_connector()
-- Add group label for group keywords
if is_group and not invisible_in_tree(keyword_info.invisible) then
render_group_label(connecting_line, keyword_info, keyword_modifiers)
end
rendered_html = html_create()
:node(subtree_container)
:node(connecting_line)
has_connector = true
end
return rendered_html, container_height, container_width, has_connector
end
-- Render a term node
render_term = function(term_node, keyword_info, keyword_modifiers, is_group_child, is_toplevel_term, skip_child_rendering, term_labels)
local tree_width, tree_height = 0, 0
local subtrees = {}
-- Process term's children (which are containers)
local has_hidden_children = false
if not term_node.is_duplicate and not skip_child_rendering then
for _, container in ipairs(term_node.children or {}) do
local subtree, sub_height, sub_width, subtree_has_connector = render_container(container, is_toplevel_term)
if subtree then
table.insert(subtrees, {
tree = subtree,
height = sub_height,
width = sub_width,
has_connector = subtree_has_connector,
})
tree_height = max(tree_height, sub_height)
tree_width = tree_width + sub_width
end
end
elseif skip_child_rendering then
-- Check if there are any visible children
-- When stop_recursion is true, children aren't parsed, but has_visible_children flag is set
if term_node.has_visible_children then
has_hidden_children = true
elseif term_node.children and #term_node.children > 0 then
-- Fallback: check parsed children for visibility
for _, container in ipairs(term_node.children) do
local child_keyword_info = container.keyword_info
if not (child_keyword_info and (child_keyword_info.invisible == "all" or child_keyword_info.invisible == true)) then
has_hidden_children = true
break
end
end
end
end
local is_toplevel_node = (keyword_info == nil)
local term_block = render_term_block(term_node, format_term_func, is_toplevel_node)
render_label(term_block, keyword_info, keyword_modifiers, term_node.is_uncertain, is_group_child, term_labels or {})
local term_html = html_create()
if #subtrees == 0 then
local show_connector = (term_node.is_duplicate and term_node.original_has_children) or has_hidden_children
if show_connector then
term_html:node(create_duplicate_connector())
end
term_html:node(term_block)
tree_width = tree_width + 1
elseif #subtrees == 1 then
term_html:node(subtrees[1].tree)
if not subtrees[1].has_connector then
term_html:node(create_vertical_connector())
end
term_html:node(term_block)
else
-- Multiple containers: need to merge them
local subtree_container = html_create('div'):addClass('etytree-branch-group')
for i, subtree_data in ipairs(subtrees) do
local column = html_create('div'):addClass('etytree-branch')
column:node(subtree_data.tree)
add_branch_connector(column, i, #subtrees)
subtree_container:node(column)
end
local connecting_line = create_vertical_connector()
term_html
:node(subtree_container)
:node(connecting_line)
:node(term_block)
end
return term_html, tree_height + 1, tree_width
end
local final_tree, final_height, final_width = render_term(data_tree, nil, nil, false, true)
local container = html_create('div')
:addClass('etytree-body')
:node(final_tree)
return tostring(html_create('div')
:addClass('etytree NavFrame')
:attr('data-etytree-height', final_height)
:attr('data-etytree-width', final_width)
:tag('div')
:addClass('NavHead')
:tag('div')
:wikitext('แผนผังรากศัพท์')
:done()
:done()
:tag('div')
:addClass('NavContent')
:node(container)
:done())
end
return export
1rbn6nawnyyd5xc7eb4zctv388zc9wh
มอดูล:etymon/categories
828
2297439
5754445
5729434
2026-08-06T04:42:29Z
Octahedron80
267
5754445
Scribunto
text/plain
local export = {}
local M = require("Module:module loader").init({
require = {
etymology = "Module:etymology",
affix = "Module:affix",
etymology_specialized = "Module:etymology/specialized",
utilities = "Module:utilities",
roots = "Module:roots",
},
loadData = {
data = "Module:etymon/data",
},
})
-- Evaluate whether a keyword is transitive for a given term
local function is_transitive(transitive_mode, page_lang, term_lang)
if transitive_mode == M.data.TRANSITIVE.ALWAYS then
return true
elseif transitive_mode == M.data.TRANSITIVE.NEVER then
return false
elseif transitive_mode == M.data.TRANSITIVE.CROSS_LANG then
return page_lang:getCode() ~= term_lang:getCode()
elseif transitive_mode == M.data.TRANSITIVE.CROSS_LANG_NO_INTERNAL_SOURCE then
return page_lang:getCode() ~= term_lang:getCode()
end
error("Unknown transitive mode: " .. tostring(transitive_mode))
end
-- Get keyword config with language-specific overrides
local function get_keyword_config(keyword, lang_exc)
local base_config = M.data.keywords[keyword]
if not base_config then
return nil -- Invalid keyword
end
local overrides = lang_exc and lang_exc.keyword_overrides and lang_exc.keyword_overrides[keyword]
if not overrides then
return base_config
end
-- Merge overrides into base config
local merged = {}
for k, v in pairs(base_config) do
merged[k] = v
end
for k, v in pairs(overrides) do
merged[k] = v
end
return merged
end
function export.get_cat_name(source)
local _, cat_name = M.etymology.get_display_and_cat_name(source, true)
return cat_name
end
-- Normalize affix type aliases
local aftype_aliases = {
["pre"] = "อุปสรรค",
["suf"] = "ปัจจัย",
["in"] = "อาคม",
["inter"] = "หน่วยคำเติมเชื่อม",
["circum"] = "หน่วยคำเติมคร่อม",
["naf"] = "ไม่ใช่หน่วยคำเติม",
["root"] = "ไม่ใช่หน่วยคำเติม",
["prefix"] = "อุปสรรค",
["suffix"] = "ปัจจัย",
["infix"] = "อาคม",
["interfix"] = "หน่วยคำเติมเชื่อม",
["circumfix"] = "หน่วยคำเติมคร่อม",
["non-affix"] = "ไม่ใช่หน่วยคำเติม",
["ราก"] = "ไม่ใช่หน่วยคำเติม",
}
local function add_category(categories, cat_name, sort_key, sort_base)
if categories[cat_name] == nil then
categories[cat_name] = {
sort_key = sort_key,
sort_base = sort_base,
}
return
end
local existing = categories[cat_name]
if existing.sort_key == nil and sort_key ~= nil then
existing.sort_key = sort_key
end
if existing.sort_base == nil and sort_base ~= nil then
existing.sort_base = sort_base
end
end
-- Collect affix categories from top-level group containers
local function collect_affix_categories(node, page_lang, available_etymon_ids, senseid_parent_etymon, lang_exc)
local parts = {}
local part_index = 1
for _, container in ipairs(node.children or {}) do
local config = container.keyword_info
if config and config.affix_categories then
for _, term in ipairs(container.terms or {}) do
if not term.unknown_term then
local part_data = {
term = term.title,
tr = term.tr,
ts = term.ts,
alt = term.alt,
itemno = part_index,
orig_index = part_index
}
-- Determine affix type: explicit aftype > pos=root > auto-detect
local aftype = term.aftype
if aftype then
aftype = aftype_aliases[aftype] or aftype
part_data.type = aftype
elseif term.args and term.args.pos and (term.args.pos == "root" or term.args.pos == "ราก") then
part_data.type = "ไม่ใช่หน่วยคำเติม"
end
if term.lang:getCode() ~= page_lang:getCode() then
part_data.lang = term.lang
end
local target_ids = available_etymon_ids[term.target_key]
local has_multiple_ids = target_ids and #target_ids > 1
local id_exists_in_disambiguation = false
local matched_id = nil
-- Count available senseids for the target page
local senseid_count = 0
local target_prefix = term.target_key .. ":"
if senseid_parent_etymon then
for key, _ in pairs(senseid_parent_etymon) do
if key:sub(1, #target_prefix) == target_prefix then
senseid_count = senseid_count + 1
end
end
end
local has_multiple_senseids = senseid_count > 1
if term.id then
-- Check if user provided a valid senseid
local senseid_key = term.target_key .. ":" .. term.id
if senseid_parent_etymon and senseid_parent_etymon[senseid_key] then
if has_multiple_senseids then
-- Ambiguous senseid: use senseid
matched_id = term.id
id_exists_in_disambiguation = true
elseif has_multiple_ids then
-- Unique senseid but ambiguous etymon: use etymon ID
matched_id = term.etymon_id or term.id
id_exists_in_disambiguation = true
end
else
-- Check if user provided a valid etymon ID
if has_multiple_ids and target_ids then
for _, id_data in ipairs(target_ids) do
local stored_id = type(id_data) == "table" and id_data.id or id_data
if stored_id == term.id then
-- Ambiguous etymon: use etymon ID
id_exists_in_disambiguation = true
matched_id = term.id
break
end
end
end
-- Fallback: check resolved etymon_id (e.g. from previous steps)
if not id_exists_in_disambiguation and has_multiple_ids and term.etymon_id and target_ids then
for _, id_data in ipairs(target_ids) do
local stored_id = type(id_data) == "table" and id_data.id or id_data
if stored_id == term.etymon_id then
id_exists_in_disambiguation = true
matched_id = term.etymon_id
break
end
end
end
end
end
-- Use the matched ID if found
if term.override or id_exists_in_disambiguation then
part_data.id = matched_id or term.id
end
table.insert(parts, part_data)
part_index = part_index + 1
end
end
end
end
if #parts == 0 then return {} end
local affix_data = {
lang = page_lang,
parts = parts,
pos = "ศัพท์",
sort_key = nil,
}
if #parts == 1 then
affix_data.allow_no_affixes_or_compounds = true
end
local affix_categories = M.affix.get_affix_categories_only(affix_data)
local result = {}
for _, cat in ipairs(affix_categories) do
if type(cat) == "table" then
table.insert(result, { cat = cat.cat, sort_key = cat.sort_key, sort_base = cat.sort_base })
else
table.insert(result, { cat = cat })
end
end
return result
end
local function lang_is_source(page_lang, source)
return page_lang:getCode() == source:getCode() or page_lang:hasParent(source)
end
local function is_borrowing_keyword_config(config)
return config and (config.borrowing_type or config.specialized_borrowing)
end
local function add_reborrow_category(categories, page_lang)
local lang_name = page_lang:getFullName()
add_category(categories, lang_name .. " terms borrowed back into " .. lang_name)
end
local function borrow_returns_to_page_lang(page_lang, source, in_foreign_branch)
if not in_foreign_branch then
return false
end
if source:getFullCode() == page_lang:getFullCode() then
return true
end
return page_lang:hasParent(source)
end
local function node_borrows_from_lang(node, page_lang, visited, in_foreign_branch)
visited = visited or {}
if not node or visited[node] then
return false
end
visited[node] = true
if node.is_duplicate then
if node.duplicate_of then
return node_borrows_from_lang(node.duplicate_of, page_lang, visited, in_foreign_branch)
end
return false
end
local node_is_foreign = in_foreign_branch
or (node.lang and node.lang:getFullCode() ~= page_lang:getFullCode())
for _, container in ipairs(node.children or {}) do
if is_borrowing_keyword_config(container.keyword_info) then
for _, child_term in ipairs(container.terms or {}) do
if borrow_returns_to_page_lang(page_lang, child_term.lang, node_is_foreign) then
return true
end
end
end
for _, child_term in ipairs(container.terms or {}) do
if child_term.status == M.data.STATUS.OK or child_term.status == M.data.STATUS.INLINE then
if node_borrows_from_lang(child_term, page_lang, visited, node_is_foreign) then
return true
end
end
end
end
return false
end
local function should_add_reborrow_category(page_lang, term)
if page_lang:getCode() == term.lang:getCode() then
return false
end
if term.status ~= M.data.STATUS.OK and term.status ~= M.data.STATUS.INLINE then
return false
end
return node_borrows_from_lang(term, page_lang, {}, false)
end
-- Add borrowing-related categories (top-level only)
local function collect_borrowing_categories(categories, page_lang, term, config, check_reborrow_path)
if check_reborrow_path and should_add_reborrow_category(page_lang, term) then
add_reborrow_category(categories, page_lang)
end
if config.borrowing_type == "ยืมมา" then
local temp_categories = {}
M.etymology.insert_borrowed_cat(temp_categories, page_lang, term.lang)
for _, cat in ipairs(temp_categories) do
add_category(categories, cat)
end
end
if config.specialized_borrowing and not lang_is_source(page_lang, term.lang) then
local result = M.etymology_specialized.specialized_borrowing {
bortype = config.specialized_borrowing,
lang = page_lang,
sources = { term.lang },
terms = { { lang = term.lang, term = "-" } },
notext = true,
nocat = false,
}
for cat_name in result:gmatch("%[%[Category:([^%]]+)%]%]") do
add_category(categories, cat_name)
end
end
end
-- Add source-based derivation categories (top-level only)
local function collect_source_derivation_categories(categories, page_lang, term, config)
if not config.source_category_type then
return
end
local temp_categories = {}
M.etymology.insert_source_cat_get_display {
lang = page_lang,
source = term.lang,
categories = temp_categories,
borrowing_type = config.source_category_type,
nocat = false,
}
for _, cat in ipairs(temp_categories) do
add_category(categories, cat)
end
end
-- Add source language categories
local function collect_source_categories(categories, page_lang, term, chain, get_norm_lang_func)
if page_lang:getCode() == get_norm_lang_func(term.lang):getCode() then
return
end
local temp_categories = {}
M.etymology.insert_source_cat_get_display {
lang = page_lang,
source = term.lang,
categories = temp_categories,
nocat = false,
}
for _, cat in ipairs(temp_categories) do
add_category(categories, cat)
end
if chain.inherited then
temp_categories = {}
M.etymology.insert_source_cat_get_display {
lang = page_lang,
source = term.lang,
categories = temp_categories,
borrowing_type = "สืบทอด",
nocat = false,
}
for _, cat in ipairs(temp_categories) do
add_category(categories, cat)
end
end
end
-- Add root/word categories
local function collect_pos_categories(categories, page_lang, root_title, term, available_etymon_ids, chain,
get_norm_lang_func, lang_exc, keyword)
local pos_types = { root = "ราก", word = "คำ" }
-- Determine pos: from term's postype, keyword's pos_override, or args.pos
local pos
local config = get_keyword_config(keyword, lang_exc)
if term.postype then
-- Term-level postype modifier takes highest priority
pos = term.postype
elseif config and config.pos_override then
pos = config.pos_override
elseif type(term.args) == "table" and term.args.pos then
pos = term.args.pos
end
local pos_type = pos_types[pos]
if not pos_type or term.unknown_term then
return
end
-- Skip root/word categories for descendants of affix groups
-- if pos_type then
-- return
-- end
local same_language = get_norm_lang_func(page_lang):getFullCode() == get_norm_lang_func(term.lang):getFullCode()
-- Skip self-references
if same_language and root_title == term.title then
return
end
local entry_name
if pos_type == "root" or pos_type == "ราก" then
entry_name = term.title
M.roots.assert_root(term.lang, entry_name)
else
entry_name = term.lang:makeEntryName(term.title)
end
local lang_name = page_lang:getCanonicalName()
local cat_name
if chain.passed_through then
local etymon_lang_name = export.get_cat_name(term.lang)
cat_name = lang_name .. " terms derived from the " .. etymon_lang_name .. " " .. pos_type .. " " .. entry_name
else
cat_name = lang_name .. " terms belonging to the " .. pos_type .. " " .. entry_name
end
-- Add ID disambiguation if needed (for roots/words: use etymon_id if resolved via senseid, otherwise use id)
local target_ids = available_etymon_ids[term.target_key]
local effective_id = term.etymon_id or term.id -- etymon_id if senseid, otherwise id is already an etymon id
if target_ids and effective_id then
local same_pos_count = 0
for _, id_data in ipairs(target_ids) do
if type(id_data) == "table" and id_data.pos == pos then
same_pos_count = same_pos_count + 1
end
end
if same_pos_count > 1 then
cat_name = cat_name .. " (" .. effective_id .. ")"
end
end
add_category(categories, cat_name)
end
-- Compute chain state for a term based on parent chain and keyword config
-- Hyphen patterns for affix detection (regular hyphen + script-specific)
local AFFIX_HYPHEN_PATTERN = "[%-%־ـ᠊]" -- regular hyphen, Hebrew maqqef, Arabic tatweel, Mongolian hyphen
-- Check if a term is an actual affix (not a non-affix member of an affix group)
local function is_actual_affix(term)
-- Check explicit aftype modifier
if term.aftype then
local normalized = aftype_aliases[term.aftype] or term.aftype
return normalized ~= "ไม่ใช่หน่วยคำเติม"
end
-- Check if pos=root (treated as non-affix)
if term.args and term.args.pos and (term.args.pos == "root" or term.args.pos == "ราก") then
return false
end
-- Auto-detect by hyphen: prefix ends with -, suffix starts with -, etc.
if term.title then
local title = term.title
-- Strip leading * for reconstructed terms before checking hyphens
title = title:gsub("^%*", "")
-- Check for hyphens at start or end (handles script-specific hyphens too)
if title:match("^" .. AFFIX_HYPHEN_PATTERN) or title:match(AFFIX_HYPHEN_PATTERN .. "$") then
return true
end
end
-- Default: not an affix
return false
end
local function compute_category_chain(parent_chain, config, page_lang, term_lang, get_norm_lang_func, parent_term_lang, term)
-- Track if we're inside an actual affix (for suppressing root categories on descendants)
-- Only set if the term is an actual affix (prefix, suffix, etc.), not a non-affix member
local inside_affix = parent_chain.inside_affix
if config.affix_categories and term and is_actual_affix(term) then
inside_affix = true
end
-- If no_child_categories is set, disable everything
if config.no_child_categories then
return {
passed_through = parent_chain.passed_through or page_lang:getCode() ~= get_norm_lang_func(term_lang):getCode(),
inherited = false,
source = false,
pos = false,
recurse = false,
inside_affix = inside_affix,
}
end
local term_is_transitive = is_transitive(config.transitive, page_lang, term_lang)
local new_source = parent_chain.source and term_is_transitive
-- For CROSS_LANG_NO_INTERNAL_SOURCE: track internal derivation language context
-- Check if this term is internal relative to parent term's language (if parent_term_lang provided)
-- or relative to page language (if no parent_term_lang)
local internal_lang = parent_chain.internal_lang
local is_internal_in_context = false
if config.transitive == M.data.TRANSITIVE.CROSS_LANG_NO_INTERNAL_SOURCE then
local check_lang = parent_term_lang or page_lang
local term_lang_code = get_norm_lang_func(term_lang):getCode()
local check_lang_code = get_norm_lang_func(check_lang):getCode()
if internal_lang then
-- Already in an internal derivation context: check if this term is also internal
is_internal_in_context = term_lang_code == internal_lang
else
-- Check if this term is internal relative to parent term (or page if no parent)
is_internal_in_context = term_lang_code == check_lang_code
end
end
-- Source chain behavior for CROSS_LANG_NO_INTERNAL_SOURCE
if config.transitive == M.data.TRANSITIVE.CROSS_LANG_NO_INTERNAL_SOURCE then
if is_internal_in_context then
-- Internal derivation
new_source = false
internal_lang = get_norm_lang_func(term_lang):getCode()
else
-- Cross-language
new_source = parent_chain.source and term_is_transitive
internal_lang = nil
end
end
local new_pos = parent_chain.pos
return {
passed_through = parent_chain.passed_through or page_lang:getCode() ~= get_norm_lang_func(term_lang):getCode(),
inherited = parent_chain.inherited and config.inherited_chain,
source = new_source,
pos = new_pos,
internal_lang = internal_lang,
recurse = new_source or new_pos,
inside_affix = inside_affix,
}
end
function export.render(opts)
opts = opts or {}
local data_tree = opts.data_tree
local page_lang = opts.page_lang
local available_etymon_ids = opts.available_etymon_ids
local senseid_parent_etymon = opts.senseid_parent_etymon
local get_norm_lang_func = opts.get_norm_lang_func
local lang_exc = opts.lang_exc
local categories = {}
local seen = {}
local lang_name = page_lang:getCanonicalName()
local root_title = data_tree.title
-- Collect the tree recursively
local function collect(node, parent_chain, is_toplevel)
-- Avoid processing same node twice
if not node.unknown_term and node.title then
local key = node.lang:getFullCode() .. ":" .. (node.title or "") .. ":" .. (node.id or "")
if seen[key] then return end
seen[key] = true
end
-- Collect affix categories at top level only
if is_toplevel then
local affix_cats = collect_affix_categories(node, page_lang, available_etymon_ids, senseid_parent_etymon, lang_exc)
for _, cat in ipairs(affix_cats) do
add_category(categories, lang_name .. " " .. cat.cat, cat.sort_key, cat.sort_base)
end
if node.supplements then
for _, supplement in ipairs(node.supplements) do
local config = supplement.config
if config and config.toplevel_category then
add_category(categories, lang_name .. " " .. config.toplevel_category)
end
end
end
end
-- Process each container
for _, container in ipairs(node.children or {}) do
local keyword = container.keyword
local config = get_keyword_config(keyword, lang_exc)
-- Skip invalid keywords
if config then
-- Process each term in the container
for _, term in ipairs(container.terms or {}) do
local term_chain = compute_category_chain(parent_chain, config, page_lang, term.lang, get_norm_lang_func, node.lang, term)
local no_child_categories = config.no_child_categories == true
local term_is_transitive = is_transitive(config.transitive, page_lang, term.lang)
-- Top-level only processing
if is_toplevel then
-- Missing/ambiguous etymon tracking
if not term.unknown_term and (term.status == M.data.STATUS.MISSING or term.status == M.data.STATUS.REDLINK) then
add_category(categories, lang_name .. " entries referencing missing etymons")
end
if not term.unknown_term and term.status == M.data.STATUS.AMBIGUOUS then
add_category(categories, lang_name .. " entries referencing ambiguous etymons")
end
if term.missing_descendants_header then
add_category(categories, lang_name .. " entries referencing etymons without Descendants sections")
end
if term.missing_descendants_entry then
add_category(categories, lang_name .. " entries referencing etymons without this term in Descendants sections")
end
-- Top-level category (e.g., "undefined derivations")
if config.toplevel_category then
add_category(categories, lang_name .. " " .. config.toplevel_category)
end
-- Borrowing categories (bor, lbor, slbor, ubor, obor)
if config.borrowing_type or config.specialized_borrowing then
collect_borrowing_categories(categories, page_lang, term, config, true)
end
-- Borrowing categories from <bor>, <lbor>, or <slbor> modifiers on affix-group terms
local kw_config = M.data.keywords[keyword]
if kw_config and kw_config.affix_categories then
if term.bor then
local bor_config = { borrowing_type = "ยืมมา" }
collect_borrowing_categories(categories, page_lang, term, bor_config, true)
elseif term.lbor then
local bor_config = { specialized_borrowing = "learned" }
collect_borrowing_categories(categories, page_lang, term, bor_config, true)
elseif term.slbor then
local bor_config = { specialized_borrowing = "semi-learned" }
collect_borrowing_categories(categories, page_lang, term, bor_config, true)
end
end
-- Source-based derivation categories (sl, calque, pcal)
if config.source_category_type then
collect_source_derivation_categories(categories, page_lang, term, config)
end
-- Skip all child categorisation if no_child_categories is set
if not no_child_categories then
-- Source categories only if transitive
if term_is_transitive then
collect_source_categories(categories, page_lang, term, term_chain, get_norm_lang_func)
end
-- Pos categories always (unless no_child_categories)
collect_pos_categories(categories, page_lang, root_title, term, available_etymon_ids, term_chain,
get_norm_lang_func, lang_exc, keyword)
end
else
-- Below top level, respect the parent chain
if parent_chain.source then
collect_source_categories(categories, page_lang, term, term_chain, get_norm_lang_func)
end
if parent_chain.pos then
collect_pos_categories(categories, page_lang, root_title, term, available_etymon_ids, term_chain,
get_norm_lang_func, lang_exc, keyword)
end
end
-- Recurse into term's children if needed and status allows
if term_chain.recurse and (term.status == M.data.STATUS.OK or term.status == M.data.STATUS.INLINE) then
collect(term, term_chain, false)
end
end
end
end
end
-- Initial chain state
local initial_chain = {
passed_through = false,
inherited = true,
source = true,
pos = true,
internal_lang = nil,
recurse = true,
inside_affix = false,
}
collect(data_tree, initial_chain, true)
local cat_list = {}
for cat_name, sort_data in pairs(categories) do
if sort_data.sort_key ~= nil or sort_data.sort_base ~= nil then
table.insert(cat_list, {
name = cat_name,
sort_key = sort_data.sort_key,
sort_base = sort_data.sort_base,
})
else
table.insert(cat_list, cat_name)
end
end
return cat_list
end
function export.build(opts)
opts = opts or {}
local categories = {}
if not opts.suppress_categories and not opts.nocat then
categories = export.render({
data_tree = opts.data_tree,
page_lang = opts.page_lang,
available_etymon_ids = opts.available_etymon_ids,
senseid_parent_etymon = opts.senseid_parent_etymon,
get_norm_lang_func = opts.get_norm_lang_func,
lang_exc = opts.lang_exc,
})
end
local page_lang = opts.page_lang
if not page_lang then
return categories
end
local lang_name = page_lang:getCanonicalName()
table.insert(categories, "Pages with etymon")
table.insert(categories, lang_name .. " entries with etymon")
if opts.tree then
table.insert(categories, "Pages with etymology trees")
table.insert(categories, lang_name .. " entries with etymology trees")
end
if opts.text then
table.insert(categories, lang_name .. " entries with etymology texts")
end
if opts.exnihilo then
table.insert(categories, lang_name .. " terms coined ex nihilo")
end
if opts.toplevel_has_inline_etymology then
table.insert(categories, "Pages with inline etymon for redlinks")
end
if opts.toplevel_redundant_etymology then
table.insert(categories, "Pages with redundant inline etymon")
end
if opts.toplevel_idless_etymon then
table.insert(categories, "Pages using etymon with no ID")
end
if opts.has_mismatched_id then
table.insert(categories, lang_name .. " entries referencing etymons with mismatched IDs")
end
if opts.linked_page_multiple_etymons_idless then
table.insert(categories,
lang_name .. " entries referencing pages with multiple etymons missing IDs")
end
if opts.linked_page_partial_etymology_sections then
table.insert(categories,
lang_name .. " entries referencing pages with etymology sections missing etymons")
end
if opts.text_stop_lang_missing then
table.insert(categories, "Pages with etymology text stop language not in chain")
table.insert(categories, lang_name .. " entries with etymology text stop language not in chain")
end
return categories
end
function export.format(entries, lang)
if type(entries) ~= "table" or #entries == 0 then
return ""
end
local parts = {}
for _, category in ipairs(entries) do
if type(category) == "table" and type(category.name) == "string" then
table.insert(parts, M.utilities.format_categories({ category.name }, lang, category.sort_key, category.sort_base))
elseif type(category) == "string" then
table.insert(parts, M.utilities.format_categories({ category }, lang))
end
end
return table.concat(parts)
end
return export
bnw16uh5wa639vlomw2g813n3w8h727
5754446
5754445
2026-08-06T04:45:27Z
Octahedron80
267
5754446
Scribunto
text/plain
local export = {}
local M = require("Module:module loader").init({
require = {
etymology = "Module:etymology",
affix = "Module:affix",
etymology_specialized = "Module:etymology/specialized",
utilities = "Module:utilities",
roots = "Module:roots",
},
loadData = {
data = "Module:etymon/data",
},
})
-- Evaluate whether a keyword is transitive for a given term
local function is_transitive(transitive_mode, page_lang, term_lang)
if transitive_mode == M.data.TRANSITIVE.ALWAYS then
return true
elseif transitive_mode == M.data.TRANSITIVE.NEVER then
return false
elseif transitive_mode == M.data.TRANSITIVE.CROSS_LANG then
return page_lang:getCode() ~= term_lang:getCode()
elseif transitive_mode == M.data.TRANSITIVE.CROSS_LANG_NO_INTERNAL_SOURCE then
return page_lang:getCode() ~= term_lang:getCode()
end
error("Unknown transitive mode: " .. tostring(transitive_mode))
end
-- Get keyword config with language-specific overrides
local function get_keyword_config(keyword, lang_exc)
local base_config = M.data.keywords[keyword]
if not base_config then
return nil -- Invalid keyword
end
local overrides = lang_exc and lang_exc.keyword_overrides and lang_exc.keyword_overrides[keyword]
if not overrides then
return base_config
end
-- Merge overrides into base config
local merged = {}
for k, v in pairs(base_config) do
merged[k] = v
end
for k, v in pairs(overrides) do
merged[k] = v
end
return merged
end
function export.get_cat_name(source)
local _, cat_name = M.etymology.get_display_and_cat_name(source, true)
return cat_name
end
-- Normalize affix type aliases
local aftype_aliases = {
["pre"] = "อุปสรรค",
["suf"] = "ปัจจัย",
["in"] = "อาคม",
["inter"] = "หน่วยคำเติมเชื่อม",
["circum"] = "หน่วยคำเติมคร่อม",
["naf"] = "ไม่ใช่หน่วยคำเติม",
["root"] = "ไม่ใช่หน่วยคำเติม",
["prefix"] = "อุปสรรค",
["suffix"] = "ปัจจัย",
["infix"] = "อาคม",
["interfix"] = "หน่วยคำเติมเชื่อม",
["circumfix"] = "หน่วยคำเติมคร่อม",
["non-affix"] = "ไม่ใช่หน่วยคำเติม",
["ราก"] = "ไม่ใช่หน่วยคำเติม",
}
local function add_category(categories, cat_name, sort_key, sort_base)
if categories[cat_name] == nil then
categories[cat_name] = {
sort_key = sort_key,
sort_base = sort_base,
}
return
end
local existing = categories[cat_name]
if existing.sort_key == nil and sort_key ~= nil then
existing.sort_key = sort_key
end
if existing.sort_base == nil and sort_base ~= nil then
existing.sort_base = sort_base
end
end
-- Collect affix categories from top-level group containers
local function collect_affix_categories(node, page_lang, available_etymon_ids, senseid_parent_etymon, lang_exc)
local parts = {}
local part_index = 1
for _, container in ipairs(node.children or {}) do
local config = container.keyword_info
if config and config.affix_categories then
for _, term in ipairs(container.terms or {}) do
if not term.unknown_term then
local part_data = {
term = term.title,
tr = term.tr,
ts = term.ts,
alt = term.alt,
itemno = part_index,
orig_index = part_index
}
-- Determine affix type: explicit aftype > pos=root > auto-detect
local aftype = term.aftype
if aftype then
aftype = aftype_aliases[aftype] or aftype
part_data.type = aftype
elseif term.args and term.args.pos and (term.args.pos == "root" or term.args.pos == "ราก") then
part_data.type = "ไม่ใช่หน่วยคำเติม"
end
if term.lang:getCode() ~= page_lang:getCode() then
part_data.lang = term.lang
end
local target_ids = available_etymon_ids[term.target_key]
local has_multiple_ids = target_ids and #target_ids > 1
local id_exists_in_disambiguation = false
local matched_id = nil
-- Count available senseids for the target page
local senseid_count = 0
local target_prefix = term.target_key .. ":"
if senseid_parent_etymon then
for key, _ in pairs(senseid_parent_etymon) do
if key:sub(1, #target_prefix) == target_prefix then
senseid_count = senseid_count + 1
end
end
end
local has_multiple_senseids = senseid_count > 1
if term.id then
-- Check if user provided a valid senseid
local senseid_key = term.target_key .. ":" .. term.id
if senseid_parent_etymon and senseid_parent_etymon[senseid_key] then
if has_multiple_senseids then
-- Ambiguous senseid: use senseid
matched_id = term.id
id_exists_in_disambiguation = true
elseif has_multiple_ids then
-- Unique senseid but ambiguous etymon: use etymon ID
matched_id = term.etymon_id or term.id
id_exists_in_disambiguation = true
end
else
-- Check if user provided a valid etymon ID
if has_multiple_ids and target_ids then
for _, id_data in ipairs(target_ids) do
local stored_id = type(id_data) == "table" and id_data.id or id_data
if stored_id == term.id then
-- Ambiguous etymon: use etymon ID
id_exists_in_disambiguation = true
matched_id = term.id
break
end
end
end
-- Fallback: check resolved etymon_id (e.g. from previous steps)
if not id_exists_in_disambiguation and has_multiple_ids and term.etymon_id and target_ids then
for _, id_data in ipairs(target_ids) do
local stored_id = type(id_data) == "table" and id_data.id or id_data
if stored_id == term.etymon_id then
id_exists_in_disambiguation = true
matched_id = term.etymon_id
break
end
end
end
end
end
-- Use the matched ID if found
if term.override or id_exists_in_disambiguation then
part_data.id = matched_id or term.id
end
table.insert(parts, part_data)
part_index = part_index + 1
end
end
end
end
if #parts == 0 then return {} end
local affix_data = {
lang = page_lang,
parts = parts,
pos = "ศัพท์",
sort_key = nil,
}
if #parts == 1 then
affix_data.allow_no_affixes_or_compounds = true
end
local affix_categories = M.affix.get_affix_categories_only(affix_data)
local result = {}
for _, cat in ipairs(affix_categories) do
if type(cat) == "table" then
table.insert(result, { cat = cat.cat, sort_key = cat.sort_key, sort_base = cat.sort_base })
else
table.insert(result, { cat = cat })
end
end
return result
end
local function lang_is_source(page_lang, source)
return page_lang:getCode() == source:getCode() or page_lang:hasParent(source)
end
local function is_borrowing_keyword_config(config)
return config and (config.borrowing_type or config.specialized_borrowing)
end
local function add_reborrow_category(categories, page_lang)
local lang_name = page_lang:getFullName()
add_category(categories, lang_name .. " terms borrowed back into " .. lang_name)
end
local function borrow_returns_to_page_lang(page_lang, source, in_foreign_branch)
if not in_foreign_branch then
return false
end
if source:getFullCode() == page_lang:getFullCode() then
return true
end
return page_lang:hasParent(source)
end
local function node_borrows_from_lang(node, page_lang, visited, in_foreign_branch)
visited = visited or {}
if not node or visited[node] then
return false
end
visited[node] = true
if node.is_duplicate then
if node.duplicate_of then
return node_borrows_from_lang(node.duplicate_of, page_lang, visited, in_foreign_branch)
end
return false
end
local node_is_foreign = in_foreign_branch
or (node.lang and node.lang:getFullCode() ~= page_lang:getFullCode())
for _, container in ipairs(node.children or {}) do
if is_borrowing_keyword_config(container.keyword_info) then
for _, child_term in ipairs(container.terms or {}) do
if borrow_returns_to_page_lang(page_lang, child_term.lang, node_is_foreign) then
return true
end
end
end
for _, child_term in ipairs(container.terms or {}) do
if child_term.status == M.data.STATUS.OK or child_term.status == M.data.STATUS.INLINE then
if node_borrows_from_lang(child_term, page_lang, visited, node_is_foreign) then
return true
end
end
end
end
return false
end
local function should_add_reborrow_category(page_lang, term)
if page_lang:getCode() == term.lang:getCode() then
return false
end
if term.status ~= M.data.STATUS.OK and term.status ~= M.data.STATUS.INLINE then
return false
end
return node_borrows_from_lang(term, page_lang, {}, false)
end
-- Add borrowing-related categories (top-level only)
local function collect_borrowing_categories(categories, page_lang, term, config, check_reborrow_path)
if check_reborrow_path and should_add_reborrow_category(page_lang, term) then
add_reborrow_category(categories, page_lang)
end
if config.borrowing_type == "ยืมมา" and not lang_is_source(page_lang, term.lang) then
local temp_categories = {}
M.etymology.insert_borrowed_cat(temp_categories, page_lang, term.lang)
for _, cat in ipairs(temp_categories) do
add_category(categories, cat)
end
end
if config.specialized_borrowing and not lang_is_source(page_lang, term.lang) then
local result = M.etymology_specialized.specialized_borrowing {
bortype = config.specialized_borrowing,
lang = page_lang,
sources = { term.lang },
terms = { { lang = term.lang, term = "-" } },
notext = true,
nocat = false,
}
for cat_name in result:gmatch("%[%[Category:([^%]]+)%]%]") do
add_category(categories, cat_name)
end
end
end
-- Add source-based derivation categories (top-level only)
local function collect_source_derivation_categories(categories, page_lang, term, config)
if not config.source_category_type then
return
end
local temp_categories = {}
M.etymology.insert_source_cat_get_display {
lang = page_lang,
source = term.lang,
categories = temp_categories,
borrowing_type = config.source_category_type,
nocat = false,
}
for _, cat in ipairs(temp_categories) do
add_category(categories, cat)
end
end
-- Add source language categories
local function collect_source_categories(categories, page_lang, term, chain, get_norm_lang_func)
if page_lang:getCode() == get_norm_lang_func(term.lang):getCode() then
return
end
local temp_categories = {}
M.etymology.insert_source_cat_get_display {
lang = page_lang,
source = term.lang,
categories = temp_categories,
nocat = false,
}
for _, cat in ipairs(temp_categories) do
add_category(categories, cat)
end
if chain.inherited then
temp_categories = {}
M.etymology.insert_source_cat_get_display {
lang = page_lang,
source = term.lang,
categories = temp_categories,
borrowing_type = "สืบทอด",
nocat = false,
}
for _, cat in ipairs(temp_categories) do
add_category(categories, cat)
end
end
end
-- Add root/word categories
local function collect_pos_categories(categories, page_lang, root_title, term, available_etymon_ids, chain,
get_norm_lang_func, lang_exc, keyword)
local pos_types = { root = "ราก", word = "คำ" }
-- Determine pos: from term's postype, keyword's pos_override, or args.pos
local pos
local config = get_keyword_config(keyword, lang_exc)
if term.postype then
-- Term-level postype modifier takes highest priority
pos = term.postype
elseif config and config.pos_override then
pos = config.pos_override
elseif type(term.args) == "table" and term.args.pos then
pos = term.args.pos
end
local pos_type = pos_types[pos]
if not pos_type or term.unknown_term then
return
end
-- Skip root/word categories for descendants of affix groups
-- if pos_type then
-- return
-- end
local same_language = get_norm_lang_func(page_lang):getFullCode() == get_norm_lang_func(term.lang):getFullCode()
-- Skip self-references
if same_language and root_title == term.title then
return
end
local entry_name
if pos_type == "root" or pos_type == "ราก" then
entry_name = term.title
M.roots.assert_root(term.lang, entry_name)
else
entry_name = term.lang:makeEntryName(term.title)
end
local lang_name = page_lang:getCanonicalName()
local cat_name
if chain.passed_through then
local etymon_lang_name = export.get_cat_name(term.lang)
cat_name = lang_name .. " terms derived from the " .. etymon_lang_name .. " " .. pos_type .. " " .. entry_name
else
cat_name = lang_name .. " terms belonging to the " .. pos_type .. " " .. entry_name
end
-- Add ID disambiguation if needed (for roots/words: use etymon_id if resolved via senseid, otherwise use id)
local target_ids = available_etymon_ids[term.target_key]
local effective_id = term.etymon_id or term.id -- etymon_id if senseid, otherwise id is already an etymon id
if target_ids and effective_id then
local same_pos_count = 0
for _, id_data in ipairs(target_ids) do
if type(id_data) == "table" and id_data.pos == pos then
same_pos_count = same_pos_count + 1
end
end
if same_pos_count > 1 then
cat_name = cat_name .. " (" .. effective_id .. ")"
end
end
add_category(categories, cat_name)
end
-- Compute chain state for a term based on parent chain and keyword config
-- Hyphen patterns for affix detection (regular hyphen + script-specific)
local AFFIX_HYPHEN_PATTERN = "[%-%־ـ᠊]" -- regular hyphen, Hebrew maqqef, Arabic tatweel, Mongolian hyphen
-- Check if a term is an actual affix (not a non-affix member of an affix group)
local function is_actual_affix(term)
-- Check explicit aftype modifier
if term.aftype then
local normalized = aftype_aliases[term.aftype] or term.aftype
return normalized ~= "ไม่ใช่หน่วยคำเติม"
end
-- Check if pos=root (treated as non-affix)
if term.args and term.args.pos and (term.args.pos == "root" or term.args.pos == "ราก") then
return false
end
-- Auto-detect by hyphen: prefix ends with -, suffix starts with -, etc.
if term.title then
local title = term.title
-- Strip leading * for reconstructed terms before checking hyphens
title = title:gsub("^%*", "")
-- Check for hyphens at start or end (handles script-specific hyphens too)
if title:match("^" .. AFFIX_HYPHEN_PATTERN) or title:match(AFFIX_HYPHEN_PATTERN .. "$") then
return true
end
end
-- Default: not an affix
return false
end
local function compute_category_chain(parent_chain, config, page_lang, term_lang, get_norm_lang_func, parent_term_lang, term)
-- Track if we're inside an actual affix (for suppressing root categories on descendants)
-- Only set if the term is an actual affix (prefix, suffix, etc.), not a non-affix member
local inside_affix = parent_chain.inside_affix
if config.affix_categories and term and is_actual_affix(term) then
inside_affix = true
end
-- If no_child_categories is set, disable everything
if config.no_child_categories then
return {
passed_through = parent_chain.passed_through or page_lang:getCode() ~= get_norm_lang_func(term_lang):getCode(),
inherited = false,
source = false,
pos = false,
recurse = false,
inside_affix = inside_affix,
}
end
local term_is_transitive = is_transitive(config.transitive, page_lang, term_lang)
local new_source = parent_chain.source and term_is_transitive
-- For CROSS_LANG_NO_INTERNAL_SOURCE: track internal derivation language context
-- Check if this term is internal relative to parent term's language (if parent_term_lang provided)
-- or relative to page language (if no parent_term_lang)
local internal_lang = parent_chain.internal_lang
local is_internal_in_context = false
if config.transitive == M.data.TRANSITIVE.CROSS_LANG_NO_INTERNAL_SOURCE then
local check_lang = parent_term_lang or page_lang
local term_lang_code = get_norm_lang_func(term_lang):getCode()
local check_lang_code = get_norm_lang_func(check_lang):getCode()
if internal_lang then
-- Already in an internal derivation context: check if this term is also internal
is_internal_in_context = term_lang_code == internal_lang
else
-- Check if this term is internal relative to parent term (or page if no parent)
is_internal_in_context = term_lang_code == check_lang_code
end
end
-- Source chain behavior for CROSS_LANG_NO_INTERNAL_SOURCE
if config.transitive == M.data.TRANSITIVE.CROSS_LANG_NO_INTERNAL_SOURCE then
if is_internal_in_context then
-- Internal derivation
new_source = false
internal_lang = get_norm_lang_func(term_lang):getCode()
else
-- Cross-language
new_source = parent_chain.source and term_is_transitive
internal_lang = nil
end
end
local new_pos = parent_chain.pos
return {
passed_through = parent_chain.passed_through or page_lang:getCode() ~= get_norm_lang_func(term_lang):getCode(),
inherited = parent_chain.inherited and config.inherited_chain,
source = new_source,
pos = new_pos,
internal_lang = internal_lang,
recurse = new_source or new_pos,
inside_affix = inside_affix,
}
end
function export.render(opts)
opts = opts or {}
local data_tree = opts.data_tree
local page_lang = opts.page_lang
local available_etymon_ids = opts.available_etymon_ids
local senseid_parent_etymon = opts.senseid_parent_etymon
local get_norm_lang_func = opts.get_norm_lang_func
local lang_exc = opts.lang_exc
local categories = {}
local seen = {}
local lang_name = page_lang:getCanonicalName()
local root_title = data_tree.title
-- Collect the tree recursively
local function collect(node, parent_chain, is_toplevel)
-- Avoid processing same node twice
if not node.unknown_term and node.title then
local key = node.lang:getFullCode() .. ":" .. (node.title or "") .. ":" .. (node.id or "")
if seen[key] then return end
seen[key] = true
end
-- Collect affix categories at top level only
if is_toplevel then
local affix_cats = collect_affix_categories(node, page_lang, available_etymon_ids, senseid_parent_etymon, lang_exc)
for _, cat in ipairs(affix_cats) do
add_category(categories, lang_name .. " " .. cat.cat, cat.sort_key, cat.sort_base)
end
if node.supplements then
for _, supplement in ipairs(node.supplements) do
local config = supplement.config
if config and config.toplevel_category then
add_category(categories, lang_name .. " " .. config.toplevel_category)
end
end
end
end
-- Process each container
for _, container in ipairs(node.children or {}) do
local keyword = container.keyword
local config = get_keyword_config(keyword, lang_exc)
-- Skip invalid keywords
if config then
-- Process each term in the container
for _, term in ipairs(container.terms or {}) do
local term_chain = compute_category_chain(parent_chain, config, page_lang, term.lang, get_norm_lang_func, node.lang, term)
local no_child_categories = config.no_child_categories == true
local term_is_transitive = is_transitive(config.transitive, page_lang, term.lang)
-- Top-level only processing
if is_toplevel then
-- Missing/ambiguous etymon tracking
if not term.unknown_term and (term.status == M.data.STATUS.MISSING or term.status == M.data.STATUS.REDLINK) then
add_category(categories, lang_name .. " entries referencing missing etymons")
end
if not term.unknown_term and term.status == M.data.STATUS.AMBIGUOUS then
add_category(categories, lang_name .. " entries referencing ambiguous etymons")
end
if term.missing_descendants_header then
add_category(categories, lang_name .. " entries referencing etymons without Descendants sections")
end
if term.missing_descendants_entry then
add_category(categories, lang_name .. " entries referencing etymons without this term in Descendants sections")
end
-- Top-level category (e.g., "undefined derivations")
if config.toplevel_category then
add_category(categories, lang_name .. " " .. config.toplevel_category)
end
-- Borrowing categories (bor, lbor, slbor, ubor, obor)
if config.borrowing_type or config.specialized_borrowing then
collect_borrowing_categories(categories, page_lang, term, config, true)
end
-- Borrowing categories from <bor>, <lbor>, or <slbor> modifiers on affix-group terms
local kw_config = M.data.keywords[keyword]
if kw_config and kw_config.affix_categories then
if term.bor then
local bor_config = { borrowing_type = "ยืมมา" }
collect_borrowing_categories(categories, page_lang, term, bor_config, true)
elseif term.lbor then
local bor_config = { specialized_borrowing = "learned" }
collect_borrowing_categories(categories, page_lang, term, bor_config, true)
elseif term.slbor then
local bor_config = { specialized_borrowing = "semi-learned" }
collect_borrowing_categories(categories, page_lang, term, bor_config, true)
end
end
-- Source-based derivation categories (sl, calque, pcal)
if config.source_category_type then
collect_source_derivation_categories(categories, page_lang, term, config)
end
-- Skip all child categorisation if no_child_categories is set
if not no_child_categories then
-- Source categories only if transitive
if term_is_transitive then
collect_source_categories(categories, page_lang, term, term_chain, get_norm_lang_func)
end
-- Pos categories always (unless no_child_categories)
collect_pos_categories(categories, page_lang, root_title, term, available_etymon_ids, term_chain,
get_norm_lang_func, lang_exc, keyword)
end
else
-- Below top level, respect the parent chain
if parent_chain.source then
collect_source_categories(categories, page_lang, term, term_chain, get_norm_lang_func)
end
if parent_chain.pos then
collect_pos_categories(categories, page_lang, root_title, term, available_etymon_ids, term_chain,
get_norm_lang_func, lang_exc, keyword)
end
end
-- Recurse into term's children if needed and status allows
if term_chain.recurse and (term.status == M.data.STATUS.OK or term.status == M.data.STATUS.INLINE) then
collect(term, term_chain, false)
end
end
end
end
end
-- Initial chain state
local initial_chain = {
passed_through = false,
inherited = true,
source = true,
pos = true,
internal_lang = nil,
recurse = true,
inside_affix = false,
}
collect(data_tree, initial_chain, true)
local cat_list = {}
for cat_name, sort_data in pairs(categories) do
if sort_data.sort_key ~= nil or sort_data.sort_base ~= nil then
table.insert(cat_list, {
name = cat_name,
sort_key = sort_data.sort_key,
sort_base = sort_data.sort_base,
})
else
table.insert(cat_list, cat_name)
end
end
return cat_list
end
function export.build(opts)
opts = opts or {}
local categories = {}
if not opts.suppress_categories and not opts.nocat then
categories = export.render({
data_tree = opts.data_tree,
page_lang = opts.page_lang,
available_etymon_ids = opts.available_etymon_ids,
senseid_parent_etymon = opts.senseid_parent_etymon,
get_norm_lang_func = opts.get_norm_lang_func,
lang_exc = opts.lang_exc,
})
end
local page_lang = opts.page_lang
if not page_lang then
return categories
end
local lang_name = page_lang:getCanonicalName()
table.insert(categories, "Pages with etymon")
table.insert(categories, lang_name .. " entries with etymon")
if opts.tree then
table.insert(categories, "Pages with etymology trees")
table.insert(categories, lang_name .. " entries with etymology trees")
end
if opts.text then
table.insert(categories, lang_name .. " entries with etymology texts")
end
if opts.exnihilo then
table.insert(categories, lang_name .. " terms coined ex nihilo")
end
if opts.toplevel_has_inline_etymology then
table.insert(categories, "Pages with inline etymon for redlinks")
end
if opts.toplevel_redundant_etymology then
table.insert(categories, "Pages with redundant inline etymon")
end
if opts.toplevel_idless_etymon then
table.insert(categories, "Pages using etymon with no ID")
end
if opts.has_mismatched_id then
table.insert(categories, lang_name .. " entries referencing etymons with mismatched IDs")
end
if opts.linked_page_multiple_etymons_idless then
table.insert(categories,
lang_name .. " entries referencing pages with multiple etymons missing IDs")
end
if opts.linked_page_partial_etymology_sections then
table.insert(categories,
lang_name .. " entries referencing pages with etymology sections missing etymons")
end
if opts.text_stop_lang_missing then
table.insert(categories, "Pages with etymology text stop language not in chain")
table.insert(categories, lang_name .. " entries with etymology text stop language not in chain")
end
return categories
end
function export.format(entries, lang)
if type(entries) ~= "table" or #entries == 0 then
return ""
end
local parts = {}
for _, category in ipairs(entries) do
if type(category) == "table" and type(category.name) == "string" then
table.insert(parts, M.utilities.format_categories({ category.name }, lang, category.sort_key, category.sort_base))
elseif type(category) == "string" then
table.insert(parts, M.utilities.format_categories({ category }, lang))
end
end
return table.concat(parts)
end
return export
hd30gwrrrjpaqm6denix7k3sslq5kjc
แม่แบบ:RQ:Conrad Heart of Darkness
10
2302653
5754357
5658982
2026-08-06T02:14:56Z
Octahedron80
267
5754357
wikitext
text/x-wiki
<includeonly>{{#ifeq:{{{year|}}}|1902
| {{RQ:Conrad Youth and Two Other Stories
|chapter = Heart of Darkness
|part = {{{part|}}}
|page = {{{page|{{{1|}}}}}}
|pages = {{{pages|}}}
|pageref = {{{pageref|}}}
|passage = {{{passage|{{{text|{{{2|}}}}}}}}}
|footer = {{{footer|}}}
|brackets = {{{brackets|}}}
}}
| {{#invoke:quote|call_quote_template
|en
|author = w:Joseph Conrad
|chapter = [[w:Heart of Darkness|The Heart of Darkness]]
|title = [[w:Blackwood's Magazine|Blackwood’s Edinburgh Magazine]]
|location = New York, N.Y.
|publisher = The Leonard Scott Publishing Company,{{nb...|7 and 9 Warren Street}}
|month = {{#if:{{{chapter|}}}{{{part|}}}
| {{#switch:{{uc:{{{chapter|}}}{{{part|}}}}}
| I = February
| II = March
| III = April
}}
| {{#if:{{{page|}}}{{{pageref|}}}{{{1|}}}
| {{#ifexpr:{{{page|}}}{{{pageref|}}}{{{1|}}}<221
| February
| {{#ifexpr:{{{page|}}}{{{pageref|}}}{{{1|}}}<503
| March
| April
}}
}}
| {{maintenance line|please specify the page}}
}}
}}
|year = 1899
|volume = CLXV
|issue = {{#if:{{{chapter|}}}{{{part|}}}
| {{#switch:{{uc:{{{chapter|}}}{{{part|}}}}}
| I = M
| II = MI
| III = MII
}}
| {{#if:{{{page|}}}{{{pageref|}}}{{{1|}}}
| {{#ifexpr:{{{page|}}}{{{pageref|}}}{{{1|}}}<221
| M
| {{#ifexpr:{{{page|}}}{{{pageref|}}}{{{1|}}}<503
| MI
| MII
}}
}}
}}
}}
|section = part {{#if:{{{chapter|}}}{{{part|}}}
| {{#switch:{{{chapter|}}}{{{part|}}}
| I|II = {{{chapter|{{{part|}}}}}}
| III = III (Conclusion)
}}
| {{#if:{{{page|}}}{{{pageref|}}}{{{1|}}}
| {{#ifexpr:{{{page|}}}{{{pageref|}}}{{{1|}}}<221
| I
| {{#ifexpr:{{{page|}}}{{{pageref|}}}{{{1|}}}<503
| II
| III (Conclusion)
}}
}}
}}
}}
|pageparam = 1
|pageurl = https://archive.org/details/1899heartofdarknessconradfebmaraprilblackwoodsmagazine/page/n{{#ifexpr:{{{page|}}}{{{pageref|}}}{{{1|}}}<221
| {{#expr:{{{page|{{{pageref|{{{1|}}}}}}}}}-192}}
| {{#ifexpr:{{{page|}}}{{{pageref|}}}{{{1|}}}<503
| {{#expr:{{{page|{{{pageref|{{{1|}}}}}}}}}-450}}
| {{#expr:{{{page|{{{pageref|{{{1|}}}}}}}}}-581}}
}}
}}/mode/1up
|column = {{{column|}}}
|columns = {{{columns|}}}
|oclc = 1042815524
|textparam = 2
|t={{{t|}}}
|allowparams = chapter,part,column,columns,pageref,t
}}
}}</includeonly><noinclude>{{RQ:Conrad Heart of Darkness|page=193}}{{documentation}}</noinclude>
lmggv5hkp2eiv1b9joh9esct3ntt1it
abnego
0
2324027
5754497
5684432
2026-08-06T07:47:33Z
OctraBot
3198
5754497
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA|abi^négo}}
* {{hyph|pt|ab|ne|go}}
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|abnegar}}
== ภาษาละติน ==
=== รากศัพท์ ===
{{ety|la|title=abnegō|:af|ab-<t:จาก, ออกจาก>|negō<t:ปฏิเสธ, ไม่ยอมรับ, บอกปัด>|text=+|tree=1}}
=== การออกเสียง ===
* {{la-IPA|abnegō}}
=== คำกริยา ===
{{la-verb|1+|abnegō}}
# [[ปฏิเสธ]], [[ไม่]][[ยอมรับ]], ไม่[[เต็มใจ]]
==== การผันรูป ====
{{la-conj|1+|abnegō}}
==== ลูกคำ ====
{{col4|la
|abnegātiō
|abnegātīvus
|abnegātor
|abnegātus
}}
==== คำเกี่ยวข้อง ====
{{col4|la
|dēnegō
|negō
|pernegō
|subnegō
}}
==== คำสืบทอด ====
{{top3}}
* {{desc|en|abnegate|bor=1}}
* {{desc|fr|abnéguer|bor=1}}
* {{desc|it|abnegare|annegare|bor=1|unc2=1}}
* {{desc|pt|abnegar|bor=1}}
* {{desc|ro|abnega|bor=1}}
* {{desc|es|abnegar|bor=1}}
{{bottom}}
=== อ้างอิง ===
* {{R:la:L&S}}
* {{R:la:Elementary Lewis}}
* {{R:la:Gaffiot}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|abnegar}}
== ภาษาอิตาลี ==
=== การออกเสียง ===
{{it-pr|^é,^è,^à}}
=== คำกริยา ===
{{head|it|รูปกริยา}}
# {{inflection of|it|abnegare||1|s|pres|indc}}
256nhej21bzfd9ff7fdv5f8pmnh8yiv
animalis
0
2324252
5754473
5685953
2026-08-06T06:30:54Z
Octahedron80
267
/* รากศัพท์ */
5754473
wikitext
text/x-wiki
== ภาษาละติน ==
=== รากศัพท์ ===
{{ety|la|title=animālis|:af|anima<id:soul>|-ālis|text=+|tree=1}}
=== การออกเสียง ===
* {{la-IPA|animālis}}
=== คำคุณศัพท์ ===
{{la-adj|animālis}}
# [[ที่]][[มี]][[ชีวิต]], ที่[[เคลื่อนไหว]][[ได้]][[เอง]]
#: {{syn|la|vītālis}}
# ที่[[เกี่ยว]][[กับ]][[สิ่งมีชีวิต]]
==== การผันรูป ====
{{la-adecl|animālis}}
==== ลูกคำ ====
* {{l|la|animal}}
* {{l|la|exanimālis}}
* {{l|la|inanimālis}}
==== คำเกี่ยวข้อง ====
* {{l|la|animus}}
=== คำนาม ===
{{head|la|รูปนาม|head=animālis}}
# {{inflection of|la|animal||gen|s}}
=== อ้างอิง ===
* {{R:la:L&S}}
* {{R:la:Elementary Lewis}}
* {{R:la:du Cange}}
* {{R:la:Gaffiot}}
* {{R:la:NLW}}
ekda1y6c6m33yxfwkmfrqpl3i8t3rs8
commando
0
2324862
5754498
5689085
2026-08-06T07:49:06Z
OctraBot
3198
5754498
wikitext
text/x-wiki
== ภาษาดัตช์ ==
=== การออกเสียง ===
* {{IPA|nl|/kɔˈmɑn.doː/|/koːˈmɑn.doː/}}
* {{hyphenation|nl|com|man|do}}
=== รากศัพท์ 1 ===
{{bor+|nl|es|comando}}
==== คำนาม ====
{{nl-noun|n|-'s|-}}
# [[กองบัญชาการ]][[ทหาร]] {{defdate|from 17th c.}}
#: {{syn|nl|bevel}}
# [[คำสั่ง]][[ให้]][[ปฏิบัติ]] {{q|โดยเฉพาะอย่างยิ่งในส่วนที่เกี่ยวข้องกับกองทัพหรือการฝึกสัตว์}} {{defdate|from 17th c.}}
#: {{syn|nl|bevel}}
# [[หน่วย]]หรือ[[กอง]]ที่[[นายทหาร]]คนนั้นมี[[อำนาจ]][[บังคับบัญชา]] {{defdate|from 17th c.}}
=== รากศัพท์ 2 ===
{{bor+|nl|en|commando}}, จาก{{der|nl|af|kommando}}, จาก{{der|nl|pt|comando}}
==== คำนาม ====
{{nl-noun|m|-'s|-}}
# [[คอมมานโด]], หน่วยรบพิเศษ {{defdate|from 20th c.}}
# [[นายทหาร]][[ใน]][[หน่วย]]คอมมานโด {{defdate|from mid 20th c.}}
== ภาษาโปรตุเกส ==
=== รากศัพท์ 1 ===
==== คำนาม ====
{{pt-noun|m}}
# {{obsolete spelling of|pt|comando}}
==== คำกริยา ====
{{head|pt|รูปกริยา}}
# {{obsolete spelling of|pt|comando}}
=== รากศัพท์ 2 ===
==== คำกริยา ====
{{head|pt|รูปกริยา}}
# {{pt-verb form of|commandar}}
== ภาษาฝรั่งเศส ==
=== การออกเสียง ===
* {{fr-IPA}}
* {{audio|fr|Fr-commando.ogg}}
* {{audio|fr|LL-Q150 (fra)-Lepticed7-commando.wav|a=<<France>> (<<Toulouse>>)}}
* {{audio|fr|LL-Q150 (fra)-LoquaxFR-commando.wav|a=<<France>> (<<Vosges>>)}}
* {{audio|fr|LL-Q150 (fra)-Poslovitch-commando.wav|a=<<France>> (<<Vosges>>)}}
* {{audio|fr|LL-Q150 (fra)-Jérémy-Günther-Heinz Jähnick-commando.wav|a=<<France>> (<<Somain>>)}}
=== คำนาม ===
{{fr-noun|m}}
# [[คอมมานโด]] {{gl|หน่วยรบ, นายทหาร}}
==== คำสืบทอด ====
* {{desc|tr|komando|bor=1}}
=== อ่านเพิ่ม ===
* {{R:fr:TLFi}}
{{C|fr|Military units}}
== ภาษาละติน ==
=== รากศัพท์ 1 ===
{{etymon|la|id=to commend|title=commandō|:from|commendō|:influence|mandō<id:hand over>|tree=1}}
Reflection of {{m|la|commendō}} based on the unprefixed counterpart {{m|la|mandō|id=order}}.
==== การออกเสียง ====
* {{la-IPA|commandō}}
==== คำกริยา ====
{{la-verb|1|commandō}}
# {{alternative form of|la|commendō}}
#* {{quote-book|la|year=2nd century {{CE}}|author=w:Velius Longus|title=De Orthographia|text=...et quamvis ''commendo'' dicamus tamen '''''commando''''' in consuetudine est.<ref>https://latin.packhum.org/loc/1374/1/12#12</ref>|t=...and although we may say ''commendo'', '''''commando''''' is still in use.}}
===== คำสืบทอด =====
{{top2}}
* Balkan Romance:
** {{desc|rup|cumãndu|alt=cumãndu, cumãndari}}
** {{desc|ro|comânda|cumânda}}
* Italo-Romance:
** {{desc|dlm|comanduar}}
** {{desctree|it|comandare}}
** {{desc|nap|commannare}}
** {{desctree|scn|cumannari}}
* North Italian:
** {{desc|egl|cmandèr}}
** {{desc|fur|comandâ}}
** {{desc|lld|cumander}}
** {{desc|rm|commander}}
** {{desc|vec|comandar}}
* Gallo-Romance:
** {{desctree|fro|comander}}
* Occitano-Romance:
** {{desc|ca|comanar}} {{desc|ca|encomanar|recomanar|der=1|nolang=1}}
** {{desc|oc|comandar}}
*** {{desc|ca|comandar|bor=1|unc=1}}
{{bottom}}
=== รากศัพท์ 2 ===
{{ety|la|id=to chew|title=commandō|:af|con-|mandō<id:chew>|text=+|tree=1}}
==== คำกริยา ====
{{la-verb|3|commandō|command|commāns}} {{tlb|la|la-lat}}
# [[เคี้ยว]]
=== อ้างอิง ===
* {{R:FEW|2|948|commendare}}
{{reflist}}
=== อ่านเพิ่ม ===
* {{R:la:L&S}}
== ภาษาอังกฤษ ==
=== รากศัพท์ ===
จาก{{bor|en|af|kommando}}, จาก{{der|en|pt|comando||คำสั่ง}},<ref>{{R:Online Etymology Dictionary}}</ref> จาก{{der|en|la-lat||*commandare}}, จาก{{der|en|la|commendare}}
=== การออกเสียง ===
* {{IPA|en|/kəˈmɑːn.dəʊ/|a=UK}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-commando.wav|a=Southern England}}
:* {{rhymes|en|ɑːndəʊ}}
* {{IPA|en|/kəˈmændoʊ/|a=US}}
=== คำนาม ===
{{wp|en:}}
{{en-noun|s|es}}
# [[คอมมานโด]], [[หน่วยรบ]][[ขนาด]][[เล็ก]][[ที่]][[ได้]][[รับ]][[การฝึกฝน]][[มา]][[เป็น]][[พิเศษ]] [[สำหรับ]][[การโจมตี]][[ทำลายล้าง]][[อย่าง]][[รวดเร็ว]][[ต่อ]][[พื้นที่]][[ที่]][[ฝ่าย]][[ศัตรู]][[ยึดครอง]]
#* {{quote-book|en|year=1977|author=w:Alistair Horne|title=A Savage War of Peace|location=New York|publisher=Review Books|year_published=2006|page=89
|passage=The most important objective was at Batna itself, where a group of three '''commandos''' each comprising ten men was to attack Deleplanque's sub-prefecture {{...}}.}}
# [[นายทหาร]][[ใน]][[หน่วย]]คอมมานโด
#: {{syn|en|commandoman|q1=dated}}
#* {{quote-web|en|url=https://www.theguardian.com/world/2022/mar/08/tory-mps-son-among-uk-ex-servicemen-heading-to-ukrainian-front-line|title=Tory MP’s son among UK ex-servicemen heading to Ukrainian front line|date=2022-03-08|work=the Guardian|passage=Ben Grant, 30, who spent more than five years as a '''commando''' in the Royal Marines, is part of group of seven ex-servicemen who arrived in Ukraine over the weekend to fight invading Russian forces.}}
# {{senseid|en|South Africa}} {{lb|en|historical}} กองกำลังทหาร[[โบเออร์]]ที่จัดตั้งขึ้นใน[[แอฟริกาใต้]]; การโจมตีโดยกองกำลังดังกล่าว
==== ลูกคำ ====
{{col|en|commandolike|commandoman|go commando|steak commando| commando cloth}}
==== คำสืบทอด ====
* {{desc|nl|commando|bor=1}}
* {{desc|el|κομάντο|bor=1}}
=== อ้างอิง ===
<references/>
{{C|en|Collectives}}
== ภาษาอิตาลี ==
=== การออกเสียง ===
{{it-pr}}
=== คำนาม ===
{{it-noun|m}}
# [[คอมมานโด]] {{gl|หน่วยรบ}}
smf8pvpsv2zjq1ntm530j84h4nbgzh6
Abänderer
0
2332905
5754472
5727479
2026-08-06T06:27:57Z
Octahedron80
267
/* รากศัพท์ */
5754472
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== รากศัพท์ ===
{{ety|de|:af|abändern<t:เปลี่ยน, ดัดแปลง>|-er}}
{{suffix|de|abändern|er|gloss1=เปลี่ยน, ดัดแปลง}}
=== การออกเสียง ===
* {{IPA|de|/ˈap.ɛndɐʁɐ/}}
* {{hyph|de|Ab|än|de|rer}}
=== คำนาม ===
{{de-noun|m|f=Abänderin}}
# {{agent noun of|de|abändern}}: คนที่เปลี่ยนหรือดัดแปลงบางสิ่ง
==== การผันรูป ====
{{de-ndecl|m}}
k0gwahfigv19nie3mpocl24sxqbqjq6
Benutzer
0
2332990
5754475
5727699
2026-08-06T07:12:47Z
OctraBot
3198
update template use
5754475
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== รากศัพท์ ===
{{ety|de|:af|benutzen|-er<id:agent noun>}}
{{suffix|de|benutzen|er}}
=== การออกเสียง ===
* {{IPA|de|[bəˈnʊtsɐ]}}
* {{audio|de|De-Benutzer.ogg}}
* {{audio|de|De-Benutzer2.ogg|a=<<Germany>> (<<Berlin>>)}}
* {{hyph|de|Be|nut|zer}}
=== คำนาม ===
{{de-noun|m}}
# [[ผู้ใช้]]
#: {{syn|de|Nutzer}}
==== การผันคำนาม ====
{{de-ndecl|m}}
==== คำที่เกี่ยวข้อง ====
* {{l|de|Benutzerin}}
* {{l|de|Benutzerfreundlichkeit}}
* {{l|de|Benutzername}}
=== อ่านเพิ่มเติม ===
* {{R:de:Duden}}
* {{R:de:DWDS}}
e7esz1z4jvu5rw8tm9wh7osgdavpego
frio
0
2333037
5754499
5727752
2026-08-06T07:51:27Z
OctraBot
3198
/* รากศัพท์ */ เก็บกวาด
5754499
wikitext
text/x-wiki
== ภาษากาลิเซีย-โปรตุเกสเก่า ==
=== รากศัพท์ ===
{{inh+|roa-opt|la|frīgidus|frīgidum|เย็น}}
=== การออกเสียง ===
* {{q|Galicia}} {{IPA|roa-opt|/ˈfɾi.o/}}
* {{q|Portugal}} {{IPA|roa-opt|/ˈfɾi.ʊ/}}
* {{rhymes|roa-opt|io|s=2}}
=== คำคุณศัพท์ ===
{{head|roa-opt|คำคุณศัพท์|plural|frios|feminine|fria|feminine plural|frias}}
# [[เย็น]]
=== คำนาม ===
{{roa-opt-noun|m}}
# [[ความเย็น]]
=== คำสืบทอด ===
* {{desc|gl|frío}}
* {{desc|pt|frio}}
== ภาษาชาบากาโน ==
=== รากศัพท์ ===
{{inh+|cbk|es|frío||เย็น}}, จาก{{der|cbk|osp|frio}}, จาก{{der|cbk|la|frīgidus||เย็น}}
=== การออกเสียง ===
{{cbk-IPA|frío}}
* {{hyph|cbk|fri|o}}
=== คำคุณศัพท์ ===
{{cbk-adj}}
# [[เย็น]]; เย็น[[ด้วย]][[น้ำแข็ง]]
==== คำเกี่ยวข้อง ====
{{col3|cbk|frialdad}}
== ภาษาโปรตุเกส ==
=== รากศัพท์ ===
{{inh+|pt|roa-opt|frio}}, จาก{{inh|pt|la|frīgidus|5=เย็น}}, จาก{{m|la|frīgeō|t=เย็น (ก.)}}, จาก{{m|la|frigus||เย็น, ความเย็น}}, จาก{{der|pt|ine-pro|*sriHgos-}}, {{m|ine-pro|*sriges-}}, {{m|ine-pro|*sriHges-}}; เทียบ{{cog|gl,es|frío}}, {{cog|ast|fríu}}, {{cog|ca|fred}}, {{cog|it|freddo}}; {{doublet|pt|frígido}}
=== การออกเสียง ===
{{pt-IPA}}
* {{IPA|pt|[ˈfɾiw]|a=Southern Portugal}}
* {{audio|pt|Pt-frio.ogg}}
* {{audio|pt|LL-Q5146 (por)-Santamarcanda-frio.wav|a=<<Portugal>> (<<Porto>>)}}
* {{rhymes|pt|iu|iw|s1=2|s2=1}}
* {{hyphenation|pt|fri|o}}
=== คำคุณศัพท์ ===
{{pt-adj|sup=+abs,frigidíssimo|dim=friozinho,+}}
# [[เย็น]]
## มีอุณหภูมิต่ำ
## {{lb|pt|figuratively}} [[เย็นชา]]
=== คำนาม ===
{{pt-noun|m|-}}
# [[ความเย็น]]
=== คำเกี่ยวข้อง ===
{{col2|pt|esfriar|friorento|frigidez|frígido|frialdade|friagem}}
=== คำสืบทอด ===
* {{desc|pov|friu}}
* {{desc|kea|friu}}
* {{desc|pap|friu}}
=== อ่านเพิ่ม ===
* {{R:pt:Aulete}}
* {{R:pt:Priberam}}
== ภาษาละติน ==
=== รากศัพท์ ===
{{etymon|la|:af|itc-pro:*frios<ety:inh<ine-pro:<alt:*bʰriH-o-s><ety:from<*bʰreyH->>>>|-ō<id:denominative>|tree=1|title=friō}}
Denominative to {{inh|la|itc-pro|*frios}}, จาก{{inh|la|ine-pro||*bʰriH-o-s}}, จาก{{der|la|ine-pro|*bʰreyH-|t=ตัด}}<ref>{{R:itc:EDL|pages=243-4}}</ref>
=== การออกเสียง ===
* {{la-IPA|friō}}
=== คำกริยา ===
{{la-verb|1+|friō}}
# {{lb|la|transitive}} [[บด]], [[ขัดสี]], ทำให้[[แตก]]เป็นชิ้น ๆ
==== การผันรูป ====
{{la-conj|1+|friō}}
==== ลูกคำ ====
* {{l|la|friābilis}}
* {{l|la|fricō}}
==== คำเกี่ยวข้อง ====
* {{l|la|frīvolus}}
=== อ้างอิง ===
* {{R:la:L&S}}
* {{R:la:Gaffiot}}
* {{R:ine:IEW|page=166}}
* Palmer, L.R. (1906) The Latin Language, London, Faber and Faber
<references />
== ภาษาลาดิโน ==
=== รูปแบบอื่น ===
* {{l|lad|friyo}}
=== รากศัพท์ ===
จาก{{inh|lad|osp|frio}}, จาก{{inh|lad|la|frīgidus||เย็น}}
=== คำคุณศัพท์ ===
{{lad-adj}}
# [[เย็น]]
#: {{syn|lad|yelado}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|freír}}
== ภาษาอังกฤษเก่า ==
=== การออกเสียง ===
* {{ang-IPA|frīo|frēo}}
* {{rhymes|ang|i͜uː|e͜oː|s=1}}
=== รากศัพท์ 1 ===
==== คำคุณศัพท์ ====
{{ang-adj|head=frīo}} {{tlb|ang|Anglian}}
# {{alternative form of|ang|frēo}}
===== การผันรูป =====
{{ang-adecl|frīo}}
=== รากศัพท์ 2 ===
==== คำกริยา ====
{{head|ang|รูปกริยา|head=frīo}} {{tlb|ang|Anglian}}
# {{inflection of|ang|frīoġan//frīġan||s|pres|imp}}
kmnnl1mfketuhr5avlyxyodk042wl3m
friera
0
2333065
5754481
5727784
2026-08-06T07:27:36Z
OctraBot
3198
update template use
5754481
wikitext
text/x-wiki
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== รากศัพท์ 1 ===
{{ety|es|:af|frío|-era|text=+|tree=1}}
==== คำนาม ====
{{es-noun|f}}
# {{lb|es|pathology}} [[น้ำแข็งกัด]]
#: {{syn|es|sabañón}}
=== รากศัพท์ 2 ===
{{ety|es|:af|frío|-era|text=+|tree=1}}
==== คำกริยา ====
{{head|es|รูปกริยา}}
# {{es-verb form of|freír}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
{{C|es|โรค}}
13zj9zqtbs8p09k9mtevlo5clqh7x9m
5754482
5754481
2026-08-06T07:28:39Z
OctraBot
3198
5754482
wikitext
text/x-wiki
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== รากศัพท์ 1 ===
{{ety|es|:af|frío|-era|text=+|tree=1}}
==== คำนาม ====
{{es-noun|f}}
# {{lb|es|pathology}} [[น้ำแข็งกัด]]
#: {{syn|es|sabañón}}
=== รากศัพท์ 2 ===
{{ety|es|nl=1}}
==== คำกริยา ====
{{head|es|รูปกริยา}}
# {{es-verb form of|freír}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
{{C|es|โรค}}
t6cv6h5zatxw9689djuwqsggnmi0d72
Sängerin
0
2333621
5754476
5728815
2026-08-06T07:13:19Z
OctraBot
3198
update template use
5754476
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== รากศัพท์ ===
{{ety|de|:af|Sänger|-in<id:feminine>}}
จาก{{af|de|Sänger|-in}}
=== การออกเสียง ===
* {{IPA|de|/ˈzɛŋɡəʁɪn/}}
* {{audio|de|De-Sängerin.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำนาม ===
{{de-noun|f|m=Sänger}}
# [[นักร้อง]][[หญิง]]
==== การผันรูป ====
{{de-ndecl|f}}
==== คำที่เกี่ยวข้อง ====
{{col5|de
|Altsängerin
|Bühnensängerin
|Chorsängerin
|Frontsängerin
|Hintergrundsängerin
|Kneipensängerin
|Opernsängerin
|Schlagersängerin
|Solosängerin
|Sopransängerin
}}
=== อ่านเพิ่ม ===
* {{R:de:DWDS}}
* {{R:de:UniLeipzig}}
* {{R:de:Duden}}
{{C|de|ดนตรี}}
jnr6usvzlbnola9h4fi4jdw33qzztpn
คุยกับผู้ใช้:อภิยุทธ มีฮุง
3
2356302
5754328
2026-08-05T12:56:55Z
New user message
2698
เพิ่ม[[Template:Welcome|สารต้อนรับ]]ในหน้าคุยของผู้ใช้ใหม่
5754328
wikitext
text/x-wiki
{{Template:Welcome|realName=|name=อภิยุทธ มีฮุง}}
-- [[ผู้ใช้:New user message|New user message]] ([[คุยกับผู้ใช้:New user message|คุย]]) 19:56, 5 สิงหาคม 2569 (+07)
7p7hhg5gknak52hnmv33cack3grdq35
ᨣᩢ᩠᩵ᨦ
0
2356303
5754329
2026-08-05T21:15:35Z
Alifshinobi
397
สร้างหน้าด้วย "== ภาษาคำเมือง == === รูปแบบอื่น === {{nod-alt|l=คั่ง|s=กั้ง}} === การออกเสียง === * {{IPA|nod|/kaŋ˦˨/|a=เชียงใหม่}} === รากศัพท์ 1 === ==== คำกริยา ==== {{nod-verb}} # {{lb|nod|อกรรม}} [[คั่ง]] {{gl|ออกัน, ประดังกัน}} === รากศัพท์ 2 === ==== คำก..."
5754329
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
{{nod-alt|l=คั่ง|s=กั้ง}}
=== การออกเสียง ===
* {{IPA|nod|/kaŋ˦˨/|a=เชียงใหม่}}
=== รากศัพท์ 1 ===
==== คำกริยา ====
{{nod-verb}}
# {{lb|nod|อกรรม}} [[คั่ง]] {{gl|ออกัน, ประดังกัน}}
=== รากศัพท์ 2 ===
==== คำกริยา ====
{{nod-verb}}
# {{lb|nod|อกรรม}} {{altform|nod|ᨣᩖᩢ᩵ᨦ|t=[[ละเมอ]], [[บ้าจี้]]}}
=== อ้างอิง ===
{{รายการอ้างอิง}}
* ''พจนานุกรมภาษาล้านนา = The Lanna dictionary'' (พิมพ์ครั้งที่ 2). (พ.ศ. 2550). เชียงใหม่: สถาบันภาษา ศิลปะและวัฒนธรรม มหาวิทยาลัยราชภัฏเชียงใหม่.
b8cycdaj50u7r3t4gv084br87v365qw
deos
0
2356304
5754353
2026-08-06T02:07:31Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754353
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== คำนาม ===
{{pt-noun|m|#es|f=#a}}
# {{obsolete spelling of|pt|deus}}
== ภาษาละติน ==
=== คำนาม ===
{{head|la|รูปนาม|head=deōs|g=m}}
# {{inflection of|la|deus||acc|p|t=เทพเจ้า, เทพ}}
== ภาษาอังกฤษ ==
=== คำนาม ===
{{head|en|รูปนาม}}
# {{plural of|en|deo}}
=== คำสลับอักษร ===
* {{anagrams|en|a=deos|Does|SOED|deso|does|dose|odes}}
== ภาษาอัสตูเรียส ==
=== คำนาม ===
{{head|ast|รูปนาม}}
# {{plural of|ast|deu}}
== ภาษาอินเทอร์ลิงกวา ==
=== คำนาม ===
{{head|ia|รูปนาม}}
# {{plural of|ia|deo}}
pbktatqvjk91y5tqi6cdfq5ogqb49xm
deosa
0
2356305
5754354
2026-08-06T02:07:45Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5754354
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== คำนาม ===
{{pt-noun|f}}
# {{female equivalent of|pt|deos}}
23d02p5n2rt1u5sb61jhhdj6omtz0qi
deosas
0
2356306
5754355
2026-08-06T02:07:49Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5754355
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== คำนาม ===
{{head|pt|รูปนาม}}
# {{feminine plural of|pt|deos}}
om0co7jeuzate099gvpq8thx16wsym0
dosen
0
2356307
5754365
2026-08-06T02:30:48Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754365
wikitext
text/x-wiki
== ภาษานอร์เวย์แบบนือนอสก์ ==
=== คำนาม ===
{{head|nn|รูปนาม|g=m}}
# {{inflection of|nn|dose||def|s}}
== ภาษานอร์เวย์แบบบุ๊กมอล ==
=== คำนาม ===
{{head|nb|รูปนาม|g=m}}
# {{inflection of|nb|dose||def|s}}
== ภาษาสวีเดน ==
=== คำนาม ===
{{head|sv|รูปนาม}}
# {{noun form of|sv|dos||def|s}}
=== คำสลับอักษร ===
* {{anagrams|sv|a=denos|Odens}}
== ภาษาอินโดนีเซีย ==
{{wp|id:}}
=== รากศัพท์ ===
จาก{{bor|id|nl|docent|t=[[ครู]], [[วิทยากร]]}}, จาก{{der|id|la|docēns}}, รูปกริยาขยายปัจจุบันกาลของ {{m|la|doceō||สอน}}
=== การออกเสียง ===
{{id-pr|do.sèn}}
=== คำนาม ===
{{id-noun|head=dosèn|a}}
# {{lb|id|education}} วิทยากร; [[ผู้บรรยาย]] (โดยปกติหมายถึงคนในมหาวิทยาลัย ต่างจากครูในโรงเรียน)
#: {{syn|id|pensyarah<q:พบได้ยาก>}}
==== คำพ้องความ ====
* {{l|ms|pensyarah}} {{q|บรูไน|มาเลเซีย|สิงคโปร์}}
==== ลูกคำ ====
{{col2|id|
|dosen luar biasa
|dosen tamu
|dosen terbang
|asisten dosen
}}
=== อ่านเพิ่ม ===
* {{R:KBBI Daring}}
08etcvo2ood4l8znsez0ioi89d8yvji
5754366
5754365
2026-08-06T02:31:21Z
Octahedron80
267
/* ภาษาอินโดนีเซีย */
5754366
wikitext
text/x-wiki
== ภาษานอร์เวย์แบบนือนอสก์ ==
=== คำนาม ===
{{head|nn|รูปนาม|g=m}}
# {{inflection of|nn|dose||def|s}}
== ภาษานอร์เวย์แบบบุ๊กมอล ==
=== คำนาม ===
{{head|nb|รูปนาม|g=m}}
# {{inflection of|nb|dose||def|s}}
== ภาษาสวีเดน ==
=== คำนาม ===
{{head|sv|รูปนาม}}
# {{noun form of|sv|dos||def|s}}
=== คำสลับอักษร ===
* {{anagrams|sv|a=denos|Odens}}
== ภาษาอินโดนีเซีย ==
{{wp|id:}}
=== รากศัพท์ ===
จาก{{bor|id|nl|docent|t=ครู, วิทยากร}}, จาก{{der|id|la|docēns}}, รูปกริยาขยายปัจจุบันกาลของ {{m|la|doceō||สอน}}
=== การออกเสียง ===
{{id-pr|do.sèn}}
=== คำนาม ===
{{id-noun|head=dosèn|a}}
# {{lb|id|education}} [[วิทยากร]]; [[ผู้บรรยาย]] (โดยปกติหมายถึงคนใน[[มหาวิทยาลัย]] ต่างจาก[[ครู]]ใน[[โรงเรียน]])
#: {{syn|id|pensyarah<q:พบได้ยาก>}}
==== คำพ้องความ ====
* {{l|ms|pensyarah}} {{q|บรูไน|มาเลเซีย|สิงคโปร์}}
==== ลูกคำ ====
{{col2|id|
|dosen luar biasa
|dosen tamu
|dosen terbang
|asisten dosen
}}
=== อ่านเพิ่ม ===
* {{R:KBBI Daring}}
qc8tbdkam9ojw5w6y6bgebw4ccux796
dosar
0
2356308
5754367
2026-08-06T02:35:31Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754367
wikitext
text/x-wiki
== ภาษานอร์เวย์แบบนือนอสก์ ==
=== คำนาม ===
{{head|nn|รูปนาม|g=m}}
# {{inflection of|nn|dose||indef|p}}
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA}}
* {{hyph|pt|do|sar}}
=== คำกริยา ===
{{pt-verb}}
# [[ให้]][[ยา]][[ตาม]][[ปริมาณ]]
# [[สั่ง]][[จ่าย]]ยา
==== การผันรูป ====
{{pt-conj}}
=== อ่านเพิ่ม ===
* {{R:pt:Aulete}}
* {{R:pt:Priberam}}
== ภาษาโรมาเนีย ==
=== รากศัพท์ ===
{{bor+|ro|fr|dossier}}
=== คำนาม ===
{{ro-noun|n|dosare}}
# [[เอกสาร]][[เรื่อง]][[เดียว]][[กัน]][[ที่]][[เก็บ]][[รวม]]กัน ([[dossier]])
# [[แฟ้ม]] {{gloss|บรรจุภัณฑ์เก็บเอกสาร}}
==== คำสืบทอด ====
* {{desc|hu|doszár|bor=1}}
sm37plehhie2ee7sfz97n5fyyhax1n8
dosane
0
2356309
5754368
2026-08-06T02:36:42Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754368
wikitext
text/x-wiki
== ภาษานอร์เวย์แบบนือนอสก์ ==
=== คำนาม ===
{{head|nn|รูปนาม|g=m}}
# {{inflection of|nn|dose||def|p}}
== ภาษาอังกฤษกลาง ==
=== คำนาม ===
{{head|enm|คำนาม|altform=1}}
# {{lb|enm|Sc}} {{alternative form of|enm|doseyne}}
somdqst9y111wk5ipyjufqsy4u5qtlp
doso
0
2356310
5754369
2026-08-06T02:37:30Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754369
wikitext
text/x-wiki
== ภาษาบาลี ==
=== รูปแบบอื่น ===
{{pi-alt|Thai=โทโส}}
=== คำนาม ===
{{head|pi|รูปนาม}}
# {{inflection of|pi|dosa||nom|s}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dosar}}
== ภาษาเวเนโต ==
=== รูปแบบอื่น ===
* {{l|vec|indoso}}
=== รากศัพท์ ===
เทียบ{{cog|it|addosso}}
=== คำกริยาวิเศษณ์ ===
{{head|vec|คำกริยาวิเศษณ์}}
# [[บน]] (ตัวบุคคล)
== ภาษาอิตาลี ==
=== การออกเสียง ===
{{it-pr|dòso}}
=== คำกริยา ===
{{head|it|รูปกริยา}}
# {{inflection of|it|dosare||1|s|pres|indc}}
=== คำสลับอักษร ===
* {{anagrams|it|a=doos|sodo}}
129zxgwwdmqucmapn3e37wwkkwl8bg7
dosado
0
2356311
5754370
2026-08-06T02:38:55Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754370
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== รูปกริยาขยาย ===
{{pt-pp}}
# {{past participle of|pt|dosar}}
== ภาษาอังกฤษ ==
=== คำนาม ===
{{en-noun}}
# {{alternative form of|en|dos a dos}}
=== คำกริยา ===
{{en-verb}}
# {{lb|en|transitive|intransitive}} เต้นรำท่า dos a dos; เดินวนรอบ (ใครบางคน) โดยใช้ท่า dos a dos
6qyr1lkmqtiivcznt6fczj1mk0saypm
dosados
0
2356312
5754371
2026-08-06T02:39:10Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754371
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== รูปกริยาขยาย ===
{{head|pt|รูปผันรูปกริยาขยายอดีตกาล|g=m-p}}
# {{masculine plural of|pt|dosado}}
== ภาษาอังกฤษ ==
=== คำนาม ===
{{head|en|รูปนาม}}
# {{plural of|en|dosado}}
1hl38b720nsjf96djac15q4xptg7i3q
dosada
0
2356313
5754372
2026-08-06T02:39:59Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754372
wikitext
text/x-wiki
== ภาษาเซอร์โบ-โครเอเชีย ==
=== รากศัพท์ 1 ===
{{inh+|sh|sla-pro|*dosada}}
==== คำนาม ====
{{sh-noun|dȍsada|f}}
# [[ความเบื่อ]]
#: {{uxi|sh|Ne tražim ništa, tu sam iz '''dosade'''.|I'm not looking for anything, I'm here out of '''boredom'''.}}
===== การผันรูป =====
{{sh-decl-noun
|dosada|dosade
|dosade|dosada
|dosadi|dosadama
|dosadu|dosade
|dosado|dosade
|dosadi|dosadama
|dosadom|dosadama
}}
==== อ่านเพิ่ม ====
* {{R:sh:HJP|fF9mWBM%3D}}
=== รากศัพท์ 2 ===
{{compound|sh|do|sad}}
==== คำกริยาวิเศษณ์ ====
{{sh-adv|dòsada}}
# {{alternative form of|sh|dòsad}}
== ภาษาโปรตุเกส ==
=== รูปกริยาขยาย ===
{{head|pt|รูปผันรูปกริยาขยายอดีตกาล|g=f-s}}
# {{feminine singular of|pt|dosado}}
nee706f14s96zrp5dncl0leg2rbs6q9
dosadas
0
2356314
5754373
2026-08-06T02:40:05Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5754373
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== รูปกริยาขยาย ===
{{head|pt|รูปผันรูปกริยาขยายอดีตกาล|g=f-p}}
# {{feminine plural of|pt|dosado}}
23azxvda13v1adl8e1l2zgpf410wtrh
dosando
0
2356315
5754374
2026-08-06T02:40:47Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754374
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยาเป็นนาม}}
# {{pt-verb form of|dosar}}
== ภาษาอิตาลี ==
=== คำกริยา ===
{{head|it|รูปกริยาเป็นนาม}}
# {{gerund of|it|dosare}}
2c3m6e171h7lxx4mgmgfd7n1pb8l42f
dosas
0
2356316
5754375
2026-08-06T02:40:55Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754375
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dosar}}
== ภาษาฝรั่งเศส ==
=== คำกริยา ===
{{head|fr|รูปกริยา}}
# {{inflection of|fr|doser||2|s|phis}}
=== คำสลับอักษร ===
* {{l|fr|sados}}, {{l|fr|sodas}}
== ภาษาสวีเดน ==
=== คำนาม ===
{{head|sv|รูปนาม}}
# {{noun form of|sv|dosa||indef|gen|s}}
=== คำสลับอักษร ===
* {{anagrams|sv|a=adoss|sodas}}
== ภาษาอังกฤษ ==
=== คำนาม ===
{{head|en|รูปนาม}}
# {{plural of|en|dosa}}
=== คำสลับอักษร ===
* {{anagrams|en|a=adoss|Sodas|sodas}}
3mx2jjzks4nk38j7el2zjdxdyz1p0fw
dosava
0
2356317
5754376
2026-08-06T02:41:00Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754376
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dosar}}
== ภาษาอิตาลี ==
=== คำกริยา ===
{{head|it|รูปกริยา}}
# {{inflection of|it|dosare||3|s|impf|indc}}
=== คำสลับอักษร ===
* {{anagrams|it|a=aadosv|vadosa}}
2l4o8k8i2o0wqercyewp8vv9z1icws8
dosaste
0
2356318
5754377
2026-08-06T02:41:05Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754377
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dosar}}
== ภาษาอิตาลี ==
=== คำกริยา ===
{{head|it|รูปกริยา}}
# {{inflection of|it|dosare||2|p|phis|;|2|p|impf|subj}}
=== คำสลับอักษร ===
* {{anagrams|it|a=adeosst|detasso|detassò|dotasse}}
4ao8c2pimqkjhstsef5y9w4husup76t
dosais
0
2356319
5754378
2026-08-06T02:41:12Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754378
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dosar}}
== ภาษาฝรั่งเศส ==
=== คำกริยา ===
{{head|fr|รูปกริยา}}
# {{inflection of|fr|doser||1//2|s|impf|indc}}
== ภาษาอังกฤษ ==
=== คำนาม ===
{{head|en|รูปนาม}}
# {{plural of|en|dosai}}
oc3vqzbc0u9ew1huqx4fgs9s7n9t87n
dosará
0
2356320
5754379
2026-08-06T02:41:17Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5754379
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== รากศัพท์ ===
{{ety|pt|nl=1}}
=== การออกเสียง ===
{{pt-IPA}}
* {{rhymes|pt|a|s=3}}
* {{hyph|pt|do|sa|rá}}
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dosar}}
7vfm6xes8u7zu6u95bw13g4do00uh1n
dosasses
0
2356321
5754380
2026-08-06T02:41:22Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754380
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dosar}}
== ภาษาฝรั่งเศส ==
=== คำกริยา ===
{{head|fr|รูปกริยา}}
# {{inflection of|fr|doser||2|s|impf|subj}}
=== คำสลับอักษร ===
* {{l|fr|désossas}}
8qtjbhyicor92dtrnm9z3jq9xeb6oyi
dosem
0
2356322
5754381
2026-08-06T02:41:27Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754381
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dosar}}
== ภาษาละติน ==
=== คำนาม ===
{{head|la|รูปนาม}}
# {{inflection of|la|dosis||acc|s}}
0mmy4mb63ayrt3yah5ermri3ubi8mk4
dosai
0
2356323
5754382
2026-08-06T02:41:51Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754382
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dosar}}
== ภาษาฝรั่งเศส ==
=== คำกริยา ===
{{head|fr|รูปกริยา}}
# {{inflection of|fr|doser||1|s|phis}}
== ภาษาอังกฤษ ==
=== รากศัพท์ ===
{{ety|en|:bor|ta:தோசை|text=+|tree=1}}
=== คำนาม ===
{{en-noun}}
# {{alternative spelling of|en|dosa||แพนเค้กชนิดหนึ่ง}}
== ภาษาอิตาลี ==
=== คำกริยา ===
{{head|it|รูปกริยา}}
# {{inflection of|it|dosare||1|s|phis}}
trjj8rj58sh3vcbadg74fkhzv5t6p7p
sados
0
2356324
5754383
2026-08-06T02:42:06Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754383
wikitext
text/x-wiki
== ภาษาฝรั่งเศส ==
=== การออกเสียง ===
* {{fr-IPA}}
=== คำคุณศัพท์ ===
{{head|fr|รูปคุณศัพท์}}
# {{plural of|fr|sado}}
=== คำนาม ===
{{head|fr|รูปนาม|g=m-p|g2=f-p}}
# {{plural of|fr|sado}}
=== คำสลับอักษร ===
* {{l|fr|dosas}}, {{l|fr|sodas}}
== ภาษาฟร็องโก-พรอว็องส์ ==
=== คำคุณศัพท์ ===
{{head|frp|รูปคุณศัพท์}}
# {{inflection of|frp|sado||m|p}}
== ภาษาสเปน ==
=== คำนาม ===
{{head|es|รูปนาม|g=m-p}}
# {{noun form of|es|sado||p}}
kvfgckruo9yhm4hbd1wy9w3nhndaqg0
sodas
0
2356325
5754384
2026-08-06T02:43:53Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754384
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== คำนาม ===
{{head|pt|รูปนาม}}
# {{plural of|pt|soda}}
== ภาษาฝรั่งเศส ==
=== คำนาม ===
{{head|fr|รูปนาม|g=p}}
# {{plural of|fr|soda}}
=== คำสลับอักษร ===
* {{l|fr|dosas}}, {{l|fr|sados}}
== ภาษาลัตเวีย ==
=== คำนาม ===
{{head|lv|รูปนาม|g=f}}
# {{inflection of|lv|soda||gen|s}}
== ภาษาลิทัวเนีย ==
=== รากศัพท์ ===
จาก{{cog|ine-bsl-pro|*sādas|t=garden}}, หรือมิฉะนั้นก็ยืมมาจาก{{der|lt|sla-pro|*sȃdъ|t=พืช, สวน}}; เกี่ยวข้องกับ{{cog|lv|sàds|t=สวน, สวนผลไม้}}, {{cog|lt|sodìnti|t=จัดตั้ง, ปลูก}}; ดูเพิ่มที่คำหลัง<ref>{{R:EDBIL|416-7|sodas}}</ref>
=== การออกเสียง ===
{{lt-pr|sõdas}}
=== คำนาม ===
{{lt-noun|m|sõdai|2|head=sõdas}}
# [[สวน]]
==== การผันรูป ====
{{lt-noun-m-as-2|sod|sõd}}
=== อ้างอิง ===
<references />
== ภาษาสเปน ==
=== คำนาม ===
{{head|es|รูปนาม}}
# {{plural of|es|soda}}
== ภาษาสวีเดน ==
=== คำนาม ===
{{head|sv|รูปนาม}}
# {{noun form of|sv|soda||indef|gen|s}}
=== คำสลับอักษร ===
* {{anagrams|sv|a=adoss|dosas}}
== ภาษาอังกฤษ ==
=== การออกเสียง ===
* {{audio|en|LL-Q1860 (eng)-Wodencafe-sodas.wav|a=US}}
=== คำนาม ===
{{head|en|รูปนาม}}
# {{plural of|en|soda}}
=== คำสลับอักษร ===
* {{anagrams|en|a=adoss|dosas}}
pqm2wl1p6e7tl3q2517m0rybuyk4ka1
5754385
5754384
2026-08-06T02:44:06Z
Octahedron80
267
/* รากศัพท์ */
5754385
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== คำนาม ===
{{head|pt|รูปนาม}}
# {{plural of|pt|soda}}
== ภาษาฝรั่งเศส ==
=== คำนาม ===
{{head|fr|รูปนาม|g=p}}
# {{plural of|fr|soda}}
=== คำสลับอักษร ===
* {{l|fr|dosas}}, {{l|fr|sados}}
== ภาษาลัตเวีย ==
=== คำนาม ===
{{head|lv|รูปนาม|g=f}}
# {{inflection of|lv|soda||gen|s}}
== ภาษาลิทัวเนีย ==
=== รากศัพท์ ===
จาก{{cog|ine-bsl-pro|*sādas|t=สวน}}, หรือมิฉะนั้นก็ยืมมาจาก{{der|lt|sla-pro|*sȃdъ|t=พืช, สวน}}; เกี่ยวข้องกับ{{cog|lv|sàds|t=สวน, สวนผลไม้}}, {{cog|lt|sodìnti|t=จัดตั้ง, ปลูก}}; ดูเพิ่มที่คำหลัง<ref>{{R:EDBIL|416-7|sodas}}</ref>
=== การออกเสียง ===
{{lt-pr|sõdas}}
=== คำนาม ===
{{lt-noun|m|sõdai|2|head=sõdas}}
# [[สวน]]
==== การผันรูป ====
{{lt-noun-m-as-2|sod|sõd}}
=== อ้างอิง ===
<references />
== ภาษาสเปน ==
=== คำนาม ===
{{head|es|รูปนาม}}
# {{plural of|es|soda}}
== ภาษาสวีเดน ==
=== คำนาม ===
{{head|sv|รูปนาม}}
# {{noun form of|sv|soda||indef|gen|s}}
=== คำสลับอักษร ===
* {{anagrams|sv|a=adoss|dosas}}
== ภาษาอังกฤษ ==
=== การออกเสียง ===
* {{audio|en|LL-Q1860 (eng)-Wodencafe-sodas.wav|a=US}}
=== คำนาม ===
{{head|en|รูปนาม}}
# {{plural of|en|soda}}
=== คำสลับอักษร ===
* {{anagrams|en|a=adoss|dosas}}
gde30zb8eyvzivfj0mti5uvyejpy0oh
vadosa
0
2356326
5754386
2026-08-06T02:45:00Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754386
wikitext
text/x-wiki
== ภาษาละติน ==
=== คำคุณศัพท์ ===
{{head|la|รูปคุณศัพท์|head=vadōsa}}
# {{inflection of|la|vadōsus||nom//voc|f|s|;|nom//acc//voc|n|p}}
=== คำคุณศัพท์ ===
{{head|la|รูปคุณศัพท์|head=vadōsā}}
# {{inflection of|la|vadōsus||abl|f|s}}
== ภาษาสเปน ==
=== คำคุณศัพท์ ===
{{head|es|รูปคุณศัพท์|g=f}}
# {{adj form of|es|vadoso||f|s}}
== ภาษาอิตาลี ==
=== คำคุณศัพท์ ===
{{head|it|รูปคุณศัพท์}}
# {{feminine singular of|it|vadoso}}
=== คำสลับอักษร ===
* {{anagrams|it|a=aadosv|dosava}}
lhxcpj8kdrm07sf416oi74z6z2m6ega
dotasse
0
2356327
5754387
2026-08-06T02:45:19Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754387
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dotar}}
== ภาษาฝรั่งเศส ==
=== การออกเสียง ===
* {{fr-IPA|pos=v}}
=== คำกริยา ===
{{head|fr|รูปกริยา}}
# {{inflection of|fr|doter||1|s|impf|subj}}
=== คำสลับอักษร ===
* {{l|fr|dosâtes}}
== ภาษาละติน ==
=== คำกริยา ===
{{head|la|รูปกริยา|head=dōtāsse}}
# {{inflection of|la|dōtō||perf|actv|inf}}
== ภาษาอิตาลี ==
=== คำกริยา ===
{{head|it|รูปกริยา}}
# {{inflection of|it|dotare||3|s|impf|subj}}
=== คำสลับอักษร ===
* {{anagrams|it|a=adeosst|detasso|detassò|dosaste}}
dgcr150k00pvmdsbe39fydxn4j2piob
detasso
0
2356328
5754388
2026-08-06T02:45:33Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5754388
wikitext
text/x-wiki
== ภาษาอิตาลี ==
=== คำกริยา ===
{{head|it|รูปกริยา}}
# {{inflection of|it|detassare||1|s|pres|indc}}
=== คำสลับอักษร ===
* {{anagrams|it|a=adeosst|dosaste|dotasse}}
8px8ibxq6vbzxptj05kpshrjohwkq0r
detassò
0
2356329
5754389
2026-08-06T02:45:37Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5754389
wikitext
text/x-wiki
== ภาษาอิตาลี ==
=== คำกริยา ===
{{head|it|รูปกริยา}}
# {{inflection of|it|detassare||3|s|phis}}
=== คำสลับอักษร ===
* {{anagrams|it|a=adeosst|dosaste|dotasse}}
jxykh5e7b7rezp4lqk7a1164fz641ii
dosi
0
2356330
5754390
2026-08-06T02:49:16Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754390
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== การออกเสียง ===
* {{ca-IPA|ò}}
* {{audio|ca|LL-Q7026 (cat)-Unjoanqualsevol-dosi.wav|a=Catalonia}}
=== คำนาม ===
{{ca-noun|f}}
# [[ปริมาณ]][[ยา]]
==== คำเกี่ยวข้อง ====
* {{l|ca|dosar}}
* {{l|ca|dosatge}}
=== อ่านเพิ่ม ===
* {{R:ca:IEC2}}
* {{R:ca:GDLC}}
* {{R:ca:DNV}}
* {{R:ca:DCVB}}
== ภาษาครีโอลกาบูเวร์ดี ==
=== รากศัพท์ ===
จาก{{der|kea|pt|doce}}
=== คำคุณศัพท์ ===
{{head|kea|adjectives}}
# [[หวาน]]
== ภาษาซรานันโตโง ==
=== รากศัพท์ ===
{{rfe|srn}}
=== คำนาม ===
{{head|srn|คำนาม}}
# {{topics|srn|อาหาร}} [[ขนมปัง]][[มันสำปะหลัง]]สอด[[ไส้]][[มะพร้าว]]หวาน
== ภาษาตงเซียง ==
=== รากศัพท์ ===
จาก{{der|sce|fa|دوست||tr=dôst}}; เทียบ{{cog|ug|دوست}}
=== การออกเสียง ===
{{sce-IPA|'tosi|etyl=fa}}
=== คำนาม ===
{{sce-noun}}
# [[เพื่อน]]
#: {{ux|sce|Ede bi '''dosi'''ne kide echine.|I'm going to my friend's house.}}
==== คำพ้องความ ====
* {{l|sce|anda}}
==== ลูกคำ ====
* {{l|sce|dosiqi}}, {{l|sce|dosidan|t=เพื่อนร่วมศาสนา เพื่อนร่วมศาสนาอิสลาม}}
==== ดูเพิ่ม ====
* {{l|sce|nokie|t=เพื่อนร่วมทาง, คู่หู}}
== ภาษาโรมาเนีย ==
=== รากศัพท์ ===
จาก{{m|ro|dos}}
=== การออกเสียง ===
* {{IPA|ro|/doˈsi/}}
=== คำกริยา ===
{{ro-verb|dosește|dosit}}
# [[ซ่อน]]
==== การผันรูป ====
{{ro-conj-i-esc}}
=== อ่านเพิ่ม ===
* {{R:DEX}}
== ภาษาลัตเวีย ==
=== คำกริยา ===
{{head|lv|รูปกริยา}}
# {{inflection of|lv|dot||2|s|fut|ind}}
== ภาษาอิตาลี ==
=== คำนาม ===
{{head|it|รูปนาม|g=f}}
# {{plural of|it|dose}}
=== คำกริยา ===
{{head|it|รูปกริยา}}
# {{inflection of|it|dosare||2|s|pres|indc|;|1//2//3|s|pres|subj|;|3|s|impr}}
=== คำสลับอักษร ===
* {{anagrams|it|a=dios|sido|sodi}}
mpq511j2ggnej97hp9uelpiw5fz7sx6
แม่แบบ:sce-noun
10
2356331
5754391
2026-08-06T02:50:18Z
Octahedron80
267
นำเข้าจาก enwikt
5754391
wikitext
text/x-wiki
{{head|sce|คำนาม|head={{{head|}}}|sort={{{sort|}}}|{{#if:{{{1|}}}|รูปสะกด [[w:Xiao'erjing|tuhuani orou]] |}}|{{{1|}}}|f1sc={{#if:{{{1|}}}|Arab|}}|tr={{{tr|}}}}}<!--
--><noinclude>{{documentation}}</noinclude>
bvwhw4zuabepnbxhdcrcuxgbwts4gjv
dosit
0
2356332
5754392
2026-08-06T02:51:24Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา เรียงลำดับหัวเรื่องภาษา
5754392
wikitext
text/x-wiki
== ภาษาโรมาเนีย ==
=== รากศัพท์ ===
รูปกริยาขยายอดีตกาลของ {{m|ro|dosi}}
=== คำคุณศัพท์ ===
{{ro-adj}}
# [[ที่]][[ซ่อน]][[แล้ว]]
==== การผันรูป ====
{{ro-decl-adj}}
== ภาษาลัตเวีย ==
=== คำกริยา ===
{{head|lv|รูปกริยา}}
# {{inflection of|lv|dot||2|p|fut|ind}}
f0cj43aqyxc717h9uburj5mtmbdxhnq
sodi
0
2356333
5754393
2026-08-06T02:52:49Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754393
wikitext
text/x-wiki
== ภาษากาตาลา ==
{{chemical element box|ca}}
=== การออกเสียง ===
* {{ca-IPA|ò}}
* {{audio|ca|LL-Q7026 (cat)-Millars-sodi.wav|a=Valencia}}
=== คำนาม ===
{{ca-noun|m|-}}
# [[โซเดียม]]
==== ลูกคำ ====
* {{l|ca|sòdic}}
=== อ่านเพิ่ม ===
* {{R:ca:IEC2}}
* {{R:ca:GDLC}}
* {{R:ca:DNV}}
* {{R:ca:DCVB}}
== ภาษาฟินแลนด์ ==
=== การออกเสียง ===
{{fi-pronunciation|soDi*}}
=== คำกริยา ===
{{head|fi|รูปกริยา}}
# {{inflection of|fi|sotia||pres|act|ind|conn|;|2|s|pres|imp|;|2|s|pres|act|imp|conn}}
=== คำสลับอักษร ===
* {{anagrams|fi|a=dios|sido}}
== ภาษาลัตเวีย ==
=== คำนาม ===
{{head|lv|รูปนาม|g=m}}
# {{inflection of|lv|sods||nom//voc|p}}
== ภาษาสโลวีเนีย ==
=== คำนาม ===
{{head|sl|รูปนาม}}
# {{inflection of|sl|sod||nom//ins|p}}
== ภาษาอิตาลี ==
=== คำคุณศัพท์ ===
{{head|it|รูปคุณศัพท์}}
# {{masculine plural of|it|sodio}}
=== คำสลับอักษร ===
* {{anagrams|it|a=dios|dosi|sido}}
2b4t9grlk2qb0f2ao0pmbdjll4kwdrv
sods
0
2356334
5754394
2026-08-06T02:53:23Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754394
wikitext
text/x-wiki
== ภาษาลัตเวีย ==
=== การออกเสียง ===
* {{lv-IPA|sùots|falling}}
=== คำนาม ===
{{lv-noun|m|1st}}
# [[โทษ]], [[การลงโทษ]]
{{attention|lv|Missing sense for a [[fine]]? This Latvian word is in that English word's translation table}}
==== การผันรูป ====
{{lv-decl-noun|sod|s|1st}}
==== ลูกคำ ====
* {{l|lv|nāvessods}}, {{l|lv|nāves sods}}
== ภาษาอังกฤษ ==
=== คำนาม ===
{{head|en|รูปนาม}}
# {{plural of|en|sod}}
=== คำกริยา ===
{{head|en|รูปกริยา}}
# {{inflection of|en|sod||s-verb-form}}
=== คำสลับอักษร ===
* {{anagrams|en|a=doss|Doss|doss|DSOs|SDOs|OSDs|dsos|DoSs|DOSS}}
let9369hpdyd0jq5q02e0vix4px8azq
nāvessods
0
2356335
5754395
2026-08-06T02:54:40Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5754395
wikitext
text/x-wiki
== ภาษาลัตเวีย ==
{{swp|lv:}}
[[ไฟล์:Exécution de Marie Antoinette le 16 octobre 1793.jpg|thumb|250px|Nāvessods (Francijā)]]
=== รูปแบบอื่น ===
* {{l|lv|nāves sods}}
=== รากศัพท์ ===
จาก{{compound|lv|nāves|sods|gloss1=ความตาย (สัมพันธการก)|gloss2=โทษ}}
=== การออกเสียง ===
{{rfap|lv}}
=== คำนาม ===
{{lv-noun|m|1st}}
# [[โทษ]][[ประหาร]][[ชีวิต]], [[การลงโทษ]]ประหารชีวิต
#: {{ux|lv|mūsdienu Latvijā '''nāvessods''' nav piemērojams|in modern Latvia the '''death penalty''' is not applied|inline=1}}
#: {{ux|lv|decembrī, Valmieras pamalē, Karātavu kalnā, izpildīja lauka karatiesas piespriestos '''nāvessodus''' vienpadsmit komunistiem un komjauniešiem|in December, in the outskirts of Valmiera, on Karatāvu hill, (they) carried out the '''death penalties''', ordered by military tribunal, of eleven communists and Komosomol members|inline=1}}
==== การผันรูป ====
{{lv-decl-noun|nāvessod|s|1st}}
==== คำเกี่ยวข้อง ====
* {{l|lv|nāvēt}}
* {{l|lv|nāvīgs}}
* {{l|lv|nāvinieks}}, {{l|lv|nāviniece}}
{{C|lv|Death|Law}}
nxsaodec4a9letz3gqh1h8iwtsemcel
nāves sods
0
2356336
5754396
2026-08-06T02:55:10Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5754396
wikitext
text/x-wiki
== ภาษาลัตเวีย ==
=== คำนาม ===
{{lv-noun|m|1st|head=[[nāves]] [[sods]]}}
# [[โทษ]][[ประหาร]][[ชีวิต]], [[การลงโทษ]]ประหารชีวิต; {{alternative form of|lv|nāvessods}}
==== การผันรูป ====
{{lv-decl-noun|nāves sod|s|1st}}
26dh8mkg1689n5k19m184230983b7hj
SDOs
0
2356337
5754397
2026-08-06T02:55:59Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5754397
wikitext
text/x-wiki
== ภาษาอังกฤษ ==
=== คำนาม ===
{{head|en|รูปนาม}}
# {{inflection of|en|SDO||p}}
=== คำสลับอักษร ===
* {{anagrams|en|a=doss|Doss|doss|DSOs|OSDs|dsos|sods|DoSs|DOSS}}
7pr7g60hzygfg1rvuby23qwvsk2wh82
sodio
0
2356338
5754398
2026-08-06T02:58:37Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754398
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
{{wp|gl:}}
=== คำนาม ===
{{gl-noun|m|-}}
# [[โซเดียม]]
{{C|gl|ธาตุเคมี|โลหะ}}
== ภาษาเวเนโต ==
=== คำนาม ===
{{vec-noun|sod|m|io|i}}
# [[โซเดียม]]
{{C|vec|ธาตุเคมี|โลหะ}}
== ภาษาสเปน ==
{{chemical element box|es}}
=== รากศัพท์ ===
{{bor+|es|la-new|sodium}}, จาก{{der|es|it|soda}}; บัญญัติโดย [[w:Humphrey Davy|H. Davy]], 1778-1829, นักฟิสิกส์และนักเคมีชาวอังกฤษผู้ค้นพบสิ่งนี้
=== การออกเสียง ===
{{es-pr|+<audio:LL-Q1321 (spa)-Millars-sodio.wav>}}
=== คำนาม ===
{{es-noun|m|-}}
# [[โซเดียม]]
==== ลูกคำ ====
{{col|es
|bicarbonato de sodio
|bisulfato de sodio
|bomba de sodio
|cloruro de sodio
|nitrato de sodio
}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
{{C|es|โลหะ}}
== ภาษาอารากอน ==
{{wp|an:}}
=== คำนาม ===
{{an-noun|m|-}}
# [[โซเดียม]]
{{C|an|ธาตุเคมี|โลหะ}}
== ภาษาอิตาลี ==
{{wp|it:}}
{{chemical element box|it}}
=== รากศัพท์ ===
จาก{{uder|it|la-new|sodium}}, เป็นไปได้ว่ารับมาจาก{{uder|it|ar|صُدَاع||อาการปวดหัว}} เนื่องจากมีคุณสมบัติช่วยบรรเทาอาการปวดหัว
=== การออกเสียง ===
{{it-pr|sòdio}}
=== คำนาม ===
{{it-noun|m}}
# {{lb|it|chemistry}} [[โซเดียม]]
==== ลูกคำ ====
{{col4|it
|acetato di sodio
|allume di sodio
|alluminato di sodio
|azoturo di sodio
|benzoato di sodio
|bicarbonato di sodio
|bisolfito di sodio
|bromuro di sodio
|carbonato di sodio
|cianuro di sodio
|cloruro di sodio
|etanolato di sodio
|etilato di sodio
|fluoruro di sodio
|fosfato di sodio
|idrossido di sodio
|ioduro di sodio
|ipoclorito di sodio
|metafosfato di sodio
|metanolato di sodio
|metilato di sodio
|molibdato di sodio
|nitrato di sodio
|nitruro di sodio
|salicilato di sodio
|selenito di sodio
|sodio-autunite
|sodio-betpakdalite
|sodio-boltwoodite
|sodio-farmacosiderite
|sodio-uranospinite
|sodio-zippeite
|sodio azide
|sodio boroidruro
|sodio cromoglicato
|sodio meta-autunite
|solfato di sodio
|solfuro di sodio
|tiosolfato di sodio
}}
==== คำเกี่ยวข้อง ====
{{col4|it
|soda
|soda caustica
|sodare
|sodico
}}
=== คำสลับอักษร ===
* {{anagrams|it|a=dioos|Dosio}}
{{C|it|โลหะแอลคาไล|โลหะ|ธาตุเคมี}}
csynm54au0zw8bp7cjob60zbcdhtr5a
sedò
0
2356339
5754399
2026-08-06T03:00:31Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5754399
wikitext
text/x-wiki
== ภาษาอิตาลี ==
=== คำกริยา ===
{{head|it|รูปกริยา}}
# {{inflection of|it|sedare||3|s|phis}}
=== คำสลับอักษร ===
* {{anagrams|it|a=deos|dose|sode}}
hnm27azxwouo7nlk715lfxzjyejc0ch
trese
0
2356340
5754400
2026-08-06T03:01:25Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754400
wikitext
text/x-wiki
== ภาษาเซบัวโน ==
{{number box|ceb}}
=== รากศัพท์ ===
{{bor+|ceb|es|trece}}
=== การออกเสียง ===
* {{ceb-IPA}}
* {{hyph|ceb|tre|se}}
=== เลข ===
{{ceb-num|trése|b=+}}
# {{cln|ceb|cardinal numbers}} [[สิบสาม]]
== ภาษาเซอร์โบ-โครเอเชีย ==
=== คำกริยา ===
{{sh-verb form}}
# {{inflection of|sh|tresti||3|s|pres}}
== ภาษาตากาล็อก ==
{{number box|tl}}
=== รากศัพท์ ===
{{ety|tl|:bor|es:trece<t:thirteen>|text=+|tree=1}}
=== การออกเสียง ===
{{tl-pr|audio=LL-Q34057 (tgl)-Geoffjop0908-trese.wav}}
=== เลข ===
{{tl-num|b=+}}
# {{cln|tl|cardinal numbers}} [[สิบสาม]]
#: {{syn|tl|labintatlo}}
#* {{quote-book
|tl
|year=2000
|author=Estrellita Valeros-Gruenberg
|title=The De La Salle University Reader: Writings from the Different Regions of the Philipines
|url=https://books.google.com/books?id=8YhkAAAAMAAJ&q=&redir_esc=y
|page=228
|text='''Trese''' anyos pa lamang ako'y lumayas na ako sa amin.
|t=I was only '''thirteen''' years old when I left my home.
}}
==== คำเกี่ยวข้อง ====
{{col3|tl|Trece|Trece Martires|a-trese|tres|Biyernes Trese}}
=== อ่านเพิ่ม ===
* {{R:Pambansang Diksiyonaryo}}
== ภาษาบีโคลตอนกลาง ==
{{number box|bcl}}
=== รากศัพท์ ===
{{bor+|bcl|es|trece}}
=== การออกเสียง ===
* {{bcl-IPA}}
* {{hyph|bcl|tre|se}}
=== เลข ===
{{bcl-head|numeral|trése|b=+}}
# [[สิบสาม]]
#: {{syn|bcl|kagtulo|sampulo may tulo}}
==== ดูเพิ่ม ====
{{col|bcl|tres|treynta|tres siyentos|tres mil}}
{{cln|bcl|cardinal numbers}}
== ภาษาอีโลกาโน ==
=== รูปแบบอื่น ===
* {{alt|ilo|trece||obsolete|Abecedario orthography}}
=== รากศัพท์ ===
{{bor+|ilo|es|trece}}
=== การออกเสียง ===
* {{ilo-IPA}}
* {{hyph|ilo|tre|se}}
=== เลข ===
{{ilo-head|numeral|trése|b=+}}
# {{cln|ilo|cardinal numbers}} [[สิบสาม]]
#: {{syn|ilo|sangapulo ket tallo}}
930umu3qd1y86nrmc1basp8gcwijtxh
5754401
5754400
2026-08-06T03:01:41Z
Octahedron80
267
/* รากศัพท์ */
5754401
wikitext
text/x-wiki
== ภาษาเซบัวโน ==
{{number box|ceb}}
=== รากศัพท์ ===
{{bor+|ceb|es|trece}}
=== การออกเสียง ===
* {{ceb-IPA}}
* {{hyph|ceb|tre|se}}
=== เลข ===
{{ceb-num|trése|b=+}}
# {{cln|ceb|cardinal numbers}} [[สิบสาม]]
== ภาษาเซอร์โบ-โครเอเชีย ==
=== คำกริยา ===
{{sh-verb form}}
# {{inflection of|sh|tresti||3|s|pres}}
== ภาษาตากาล็อก ==
{{number box|tl}}
=== รากศัพท์ ===
{{ety|tl|:bor|es:trece<t:สิบสาม>|text=+|tree=1}}
=== การออกเสียง ===
{{tl-pr|audio=LL-Q34057 (tgl)-Geoffjop0908-trese.wav}}
=== เลข ===
{{tl-num|b=+}}
# {{cln|tl|cardinal numbers}} [[สิบสาม]]
#: {{syn|tl|labintatlo}}
#* {{quote-book
|tl
|year=2000
|author=Estrellita Valeros-Gruenberg
|title=The De La Salle University Reader: Writings from the Different Regions of the Philipines
|url=https://books.google.com/books?id=8YhkAAAAMAAJ&q=&redir_esc=y
|page=228
|text='''Trese''' anyos pa lamang ako'y lumayas na ako sa amin.
|t=I was only '''thirteen''' years old when I left my home.
}}
==== คำเกี่ยวข้อง ====
{{col3|tl|Trece|Trece Martires|a-trese|tres|Biyernes Trese}}
=== อ่านเพิ่ม ===
* {{R:Pambansang Diksiyonaryo}}
== ภาษาบีโคลตอนกลาง ==
{{number box|bcl}}
=== รากศัพท์ ===
{{bor+|bcl|es|trece}}
=== การออกเสียง ===
* {{bcl-IPA}}
* {{hyph|bcl|tre|se}}
=== เลข ===
{{bcl-head|numeral|trése|b=+}}
# [[สิบสาม]]
#: {{syn|bcl|kagtulo|sampulo may tulo}}
==== ดูเพิ่ม ====
{{col|bcl|tres|treynta|tres siyentos|tres mil}}
{{cln|bcl|cardinal numbers}}
== ภาษาอีโลกาโน ==
=== รูปแบบอื่น ===
* {{alt|ilo|trece||obsolete|Abecedario orthography}}
=== รากศัพท์ ===
{{bor+|ilo|es|trece}}
=== การออกเสียง ===
* {{ilo-IPA}}
* {{hyph|ilo|tre|se}}
=== เลข ===
{{ilo-head|numeral|trése|b=+}}
# {{cln|ilo|cardinal numbers}} [[สิบสาม]]
#: {{syn|ilo|sangapulo ket tallo}}
b9tzexrj2wgabd0eqb1rfuqku5ulksd
หมวดหมู่:เลขภาษาอีโลกาโน
14
2356341
5754402
2026-08-06T03:01:53Z
Octahedron80
267
สร้างหมวดหมู่อัตโนมัติ
5754402
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
หมวดหมู่:เลขภาษาบีโคลตอนกลาง
14
2356342
5754403
2026-08-06T03:01:55Z
Octahedron80
267
สร้างหมวดหมู่อัตโนมัติ
5754403
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
หมวดหมู่:เลขภาษาเซบัวโน
14
2356343
5754404
2026-08-06T03:02:04Z
Octahedron80
267
สร้างหมวดหมู่อัตโนมัติ
5754404
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
katorse
0
2356344
5754405
2026-08-06T03:02:47Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754405
wikitext
text/x-wiki
== ภาษาเซบัวโน ==
{{number box|ceb}}
=== รากศัพท์ ===
{{bor+|ceb|es|catorce}}
=== การออกเสียง ===
* {{ceb-IPA}}
* {{hyph|ceb|ka|tor|se}}
=== เลข ===
{{ceb-num|katórse|b=+}}
# [[สิบสี่]]
#: {{syn|ceb|napulog upat}}
{{cln|ceb|cardinal numbers}}
== ภาษาตากาล็อก ==
{{number box|tl}}
=== รากศัพท์ ===
{{ety|tl|:bor|es:catorce|text=+|tree=1}}
=== การออกเสียง ===
{{tl-pr|audio=LL-Q34057 (tgl)-Geoffjop0908-katorse.wav}}
=== เลข ===
{{tl-num|b=+}}
# [[สิบสี่]]
#: {{syn|tl|labing-apat}}
#* {{quote-web|tl|year=2017|author=Angellic Jordan|work=Radyo Inquirer 990 AM|title=14-anyos na babae, patay dahil sa dengue sa Albay|url=https://radyo.inquirer.net/81124/14-anyos-na-babae-patay-dahil-sa-dengue-sa-albay|text=Patay ang isang '''katorse''' anyos na babae sa probinsya ng Albay dahil sa sakit na dengue.|t=A '''fourteen'''-year-old woman in the province of Albay died of dengue illness.}}
==== คำเกี่ยวข้อง ====
{{col3|tl|a-katorse|kuwatro}}
=== คำสลับอักษร ===
* {{anagrams|tl|a=aekorst|orkesta}}
{{cln|tl|cardinal numbers}}
== ภาษาบีโคลตอนกลาง ==
=== รากศัพท์ ===
{{bor+|bcl|es|catorce}}
=== การออกเสียง ===
* {{bcl-IPA}}
* {{hyph|bcl|ka|tor|se}}
=== เลข ===
{{bcl-head|numeral|katórse|b=+}}
# [[สิบสี่]]
#: {{syn|bcl|kag-apat|sampulo may apat}}
==== ดูเพิ่ม ====
{{col|bcl|kuwatro|kuwarena|kuwatro siyentos}}
== ภาษาอีโลกาโน ==
=== รูปแบบอื่น ===
* {{alt|ilo|catorce||obsolete|Abecedario orthography}}
=== รากศัพท์ ===
{{bor+|ilo|es|catorce}}
=== การออกเสียง ===
* {{ilo-IPA}}
* {{hyph|ilo|ka|tor|se}}
=== เลข ===
{{ilo-head|numeral|katórse|b=+}}
# {{cln|ilo|cardinal numbers}} [[สิบสี่]]
#: {{syn|ilo|sangapulo ket uppat}}
1wrysgqfn53y562jqzbggejb1jhr77f
kinse
0
2356345
5754408
2026-08-06T03:26:08Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754408
wikitext
text/x-wiki
== ภาษาเซบัวโน ==
{{number box|ceb}}
=== รากศัพท์ ===
{{bor+|ceb|es|quince}}
=== การออกเสียง ===
* {{ceb-IPA}}
* {{hyph|ceb|kin|se}}
=== เลข ===
{{ceb-num|kínse|b=+}}
# [[สิบห้า]]
#: {{syn|ceb|napulog lima}}
==== คำเกี่ยวข้อง ====
{{col|ceb|kinsena}}
{{cln|ceb|cardinal numbers}}
== ภาษาตากาล็อก ==
{{number box|tl}}
=== การออกเสียง ===
{{tl-pr|audio=LL-Q34057 (tgl)-Geoffjop0908-kinse.wav}}
=== รากศัพท์ 1 ===
{{ety|tl|id=fifteen|:bor|es:quince|tree=1}}
{{bor+|tl|es|quince}}, จาก{{der|tl|osp|quinze}}, จาก{{der|tl|la|quīndecim}}
==== เลข ====
{{tl-num|b=+}}
# [[สิบห้า]]
#: {{syn|tl|labinlima}}
#* {{quote-book|tl|year=1999|title=Gleanings: Lessons in Community-based Coastal Resources Management|url=https://books.google.com/books?id=ZejaAAAAMAAJ&q=&redir_esc=y|page=22|text=Labing-walo kami. '''Kinseng''' lalaki at tatlong babae.|t=We are eighteen in total. '''Fifteen''' men and three women.}}
===== ลูกคำ =====
{{col3|tl|kinse-kinse|tigkinse|tigkikinse|ikakinse}}
===== คำเกี่ยวข้อง =====
{{col3|tl|kinsena|kinsenal|singko|diyes|a-kinse}}
=== รากศัพท์ 2 ===
{{ety|tl|id=foreshank|:bor<unc>|nan-hbl:腱子<tr:kiān-chí>|text=++|tree=1}}
==== คำนาม ====
{{tl-noun|b=+}}
# เนื้อส่วนหน้า[[แข้ง]]ของ[[วัว]] ใช้ทำ[[ซุป]]
=== อ่านเพิ่ม ===
* {{R:Pambansang Diksiyonaryo}}
* {{R:tl:Chan-Yap 1980|page=136}}
{{cln|tl|cardinal numbers}}
{{C|tl|สิบห้า|Cuts of meat|เนื้อ}}
== ภาษาบีโคลตอนกลาง ==
{{number box|bcl}}
=== รากศัพท์ ===
{{bor+|bcl|es|quince}}
=== การออกเสียง ===
* {{bcl-IPA}}
* {{hyph|bcl|kin|se}}
=== เลข ===
{{bcl-head|numeral|kínse|b=+}}
# [[สิบห้า]]
#: {{syn|bcl|kaglima|sampulo may lima}}
==== คำเกี่ยวข้อง ====
{{col|bcl|kinsena|kiniyentos|singko|singkuwenta}}
== ภาษาอีโลกาโน ==
=== รูปแบบอื่น ===
* {{alt|ilo|quince||obsolete|Abecedario orthography}}
=== รากศัพท์ ===
{{bor+|ilo|es|quince}}
=== การออกเสียง ===
* {{ilo-IPA}}
* {{hyph|ilo|kin|se}}
=== เลข ===
{{ilo-head|numeral|kinse|b=+}}
# {{cln|ilo|cardinal numbers}} [[สิบห้า]]
#: {{syn|ilo|sangapulo ket lima}}
== ภาษาแอลเบเนีย ==
=== รากศัพท์ ===
{{univerbation|sq}} ของ {{m|sq|[[kini]] [[se]]||คุณมีว่า, คุณสันนิษฐานว่า}}
=== คำสันธาน ===
{{head|sq|คำสันธาน}}
# เช่นว่า, เหมือนกับ, ราวกับว่า
#: {{syn|sq|gjoja}}
==== คำเกี่ยวข้อง ====
{{col|sq|kish|se}}
9pm36k09x92in91z4djs0np63ejd5ox
หมวดหมู่:คำสันธานภาษาแอลเบเนีย
14
2356346
5754412
2026-08-06T03:45:54Z
Octahedron80
267
สร้างหมวดหมู่อัตโนมัติ
5754412
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
calendier
0
2356347
5754413
2026-08-06T03:51:49Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754413
wikitext
text/x-wiki
== ภาษาอุตซิตา ==
=== รูปแบบอื่น ===
* {{alter|oc|calendari||Gascony}}
* {{alter|oc|calendièr||Languedoc}}
=== รากศัพท์ ===
จาก{{inh|oc|pro|calendier}}, จาก{{inh|oc|la-lat|calendārium}}, จาก{{inh|oc|la|calendae}}
=== คำนาม ===
{{oc-noun|m}} {{lb|oc|Limousin}}
# [[ปฏิทิน]] (ระบบอธิบายเวลา)
# ปฏิทิน (วัตถุ)
{{c|oc|เวลา}}
== ภาษาอุตซิตาเก่า ==
=== รากศัพท์ ===
จาก{{inh|pro|la-lat|calendārium}}, จาก{{inh|pro|la|calendae}}
=== คำนาม ===
{{pro-noun|m}}
# [[ปฏิทิน]] (ระบบอธิบายเวลา)
# ปฏิทิน (วัตถุ)
==== คำสืบทอด ====
{{top2}}
* {{desc|oc|calendier|calendièr}}
{{bottom}}
{{c|pro|เวลา}}
0bjf9tojw1r7979twl881j9hbtl0e3w
kalendertje
0
2356348
5754418
2026-08-06T04:08:31Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5754418
wikitext
text/x-wiki
== ภาษาดัตช์ ==
=== การออกเสียง ===
* {{audio|nl|Nl-kalendertje.ogg}}
=== คำนาม ===
{{nl-noun-dim}}
# {{diminutive of|nl|kalender}}
k944pcn31jyj24xnb24wxyato06oznw
kalendre
0
2356349
5754419
2026-08-06T04:08:47Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5754419
wikitext
text/x-wiki
== ภาษานอร์เวย์แบบบุ๊กมอล ==
=== รูปแบบอื่น ===
* {{alt|nb|kalendere}}
* {{alt|nb|kalendrer}}
=== คำนาม ===
{{head|nb|รูปนาม|g=m}}
# {{inflection of|nb|kalender||indefinite|p}}
6xvuprcv1chhuwksk7gutb0y6jisi0c
kalendrer
0
2356350
5754420
2026-08-06T04:08:50Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5754420
wikitext
text/x-wiki
== ภาษานอร์เวย์แบบบุ๊กมอล ==
=== รูปแบบอื่น ===
* {{alt|nb|kalendere}}
* {{alt|nb|kalendre}}
=== คำนาม ===
{{head|nb|รูปนาม|g=m}}
# {{inflection of|nb|kalender||indefinite|p}}
dkcshfqzurf13eamve44fxngnfi6y04
kalendrene
0
2356351
5754421
2026-08-06T04:08:53Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5754421
wikitext
text/x-wiki
== ภาษานอร์เวย์แบบบุ๊กมอล ==
=== รูปแบบอื่น ===
* {{alt|nb|kalenderne}}
=== คำนาม ===
{{head|nb|รูปนาม|g=m}}
# {{inflection of|nb|kalender||definite|p}}
etvenctun7l6svborg51jngyw8oad5r
kalendrar
0
2356352
5754425
2026-08-06T04:09:39Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754425
wikitext
text/x-wiki
== ภาษานอร์เวย์แบบนือนอสก์ ==
=== คำนาม ===
{{head|nn|รูปนาม|head=kalendrar|g=m}}
# {{inflection of|nn|kalender||indef|p}}
== ภาษาสวีเดน ==
=== คำนาม ===
{{head|sv|รูปนาม}}
# {{noun form of|sv|kalender||indef|p}}
kz87euvl0vimm2fl33gjkddcrslrty6
kalendrane
0
2356353
5754426
2026-08-06T04:09:42Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5754426
wikitext
text/x-wiki
== ภาษานอร์เวย์แบบนือนอสก์ ==
=== คำนาม ===
{{head|nn|รูปนาม|head=kalendrane|g=m}}
# {{inflection of|nn|kalender||def|p}}
lwez0cnfmert6xup4hwbmg3g5enk41o
kalendyn
0
2356354
5754427
2026-08-06T04:10:11Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5754427
wikitext
text/x-wiki
== ภาษาวีลามอวิตแซ ==
=== คำนาม ===
{{head|wym|รูปนาม}}
# {{plural of|wym|kalender}}
7zqqxefkbjjqv8y0mgtfiacrv43nbbf
calendder
0
2356355
5754428
2026-08-06T04:10:29Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5754428
wikitext
text/x-wiki
== ภาษาอังกฤษกลาง ==
=== คำนาม ===
{{head|enm|คำนาม|altform=1}}
# {{alternative form of|enm|kalender}}
21tnp6yrfkxepitjso8z91bxrl4szp1
calendre
0
2356356
5754429
2026-08-06T04:10:46Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5754429
wikitext
text/x-wiki
== ภาษาอังกฤษกลาง ==
=== คำนาม ===
{{head|enm|คำนาม|altform=1}}
# {{alternative form of|enm|kalender}}
21tnp6yrfkxepitjso8z91bxrl4szp1
kalunder
0
2356357
5754430
2026-08-06T04:10:50Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5754430
wikitext
text/x-wiki
== ภาษาอังกฤษกลาง ==
=== คำนาม ===
{{head|enm|คำนาม|altform=1}}
# {{alternative form of|enm|kalender}}
21tnp6yrfkxepitjso8z91bxrl4szp1
calundere
0
2356358
5754431
2026-08-06T04:10:53Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5754431
wikitext
text/x-wiki
== ภาษาอังกฤษกลาง ==
=== คำนาม ===
{{head|enm|คำนาม|altform=1}}
# {{alternative form of|enm|kalender}}
21tnp6yrfkxepitjso8z91bxrl4szp1
หมวดหมู่:รูปนามภาษาวีลามอวิตแซ
14
2356359
5754432
2026-08-06T04:10:57Z
Octahedron80
267
สร้างหมวดหมู่อัตโนมัติ
5754432
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
หมวดหมู่:รูปผันภาษาวีลามอวิตแซ
14
2356360
5754433
2026-08-06T04:10:58Z
Octahedron80
267
สร้างหมวดหมู่อัตโนมัติ
5754433
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
calendr
0
2356361
5754434
2026-08-06T04:11:28Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5754434
wikitext
text/x-wiki
== ภาษาเวลส์ ==
=== รูปแบบอื่น ===
* {{alt|cy|calendar|calender|calander|clander}}
=== รากศัพท์ ===
{{bor+|cy|enm|calender}}
=== คำนาม ===
{{cy-noun|m|calendrau}}
# [[ปฏิทิน]]
==== ลูกคำ ====
* {{l|cy|calendraidd}}
* {{l|cy|calendro}}
=== อ่านเพิ่ม ===
* {{R:cy:Gweiadur}}
* {{R:cy:GPC}}
{{c|cy|เวลา}}
oeshegy6opq0eh06ef11siyw59rmf3s
หมวดหมู่:ศัพท์ภาษาอินโดนีเซียที่รับมาจากภาษาฝรั่งเศสกลาง
14
2356362
5754435
2026-08-06T04:12:07Z
Octahedron80
267
สร้างหมวดหมู่อัตโนมัติ
5754435
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
almanacka
0
2356363
5754436
2026-08-06T04:13:26Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5754436
wikitext
text/x-wiki
== ภาษาสวีเดน ==
=== คำนาม ===
{{sv-noun|c}}
# [[ปฏิทิน]]
#: {{syn|sv|kalender}}
# [[กาลานุกรม]]
==== การผันรูป ====
{{sv-infl-noun-c-or}}
=== อ้างอิง ===
* {{R:svenska.se|so}}
* {{R:svenska.se|saob}}
h4n8jys4992ukvdgbp34j8df7r0j8fp
มอดูล:etymon/tracking
828
2356364
5754441
2026-08-06T04:31:39Z
Octahedron80
267
สร้างหน้าด้วย "--[=[ Documentation: [[WT:Tracking#Etymon]]. ]=] local export = {} local M = require("Module:module loader").init({ require = { track = "Module:debug/track", }, }) local DEPTH_RANGES = { { min = 50, label = "extremely-deep" }, { min = 20, label = "20+" }, { min = 10, max = 19, label = "10-19" }, { min = 5, max = 9, label = "5-9" }, { min = 3, max = 4, label = "3-4" }, { max = 2, label = "1-2" }, } local NODE_RANGES = { { min = 100,..."
5754441
Scribunto
text/plain
--[=[
Documentation: [[WT:Tracking#Etymon]].
]=]
local export = {}
local M = require("Module:module loader").init({
require = {
track = "Module:debug/track",
},
})
local DEPTH_RANGES = {
{ min = 50, label = "extremely-deep" },
{ min = 20, label = "20+" },
{ min = 10, max = 19, label = "10-19" },
{ min = 5, max = 9, label = "5-9" },
{ min = 3, max = 4, label = "3-4" },
{ max = 2, label = "1-2" },
}
local NODE_RANGES = {
{ min = 100, label = "extremely-large" },
{ min = 50, label = "50+" },
{ min = 20, max = 49, label = "20-49" },
{ min = 10, max = 19, label = "10-19" },
{ min = 5, max = 9, label = "5-9" },
{ max = 4, label = "1-4" },
}
local LANGUAGE_RANGES = {
{ min = 10, label = "10+" },
{ min = 5, max = 9, label = "5-9" },
{ min = 3, max = 4, label = "3-4" },
{ exact = 2, label = "2" },
{ exact = 1, label = "1" },
}
local TERM_PAGE_NORMALIZERS = {
{
pattern = "^Reconstruction:[^/]+/(.+)$",
normalize = function(term)
if term:sub(1, 1) ~= "*" then
return "*" .. term
end
return term
end,
},
{
pattern = "^Appendix:[^/]+/(.+)$",
normalize = function(term)
return term
end,
},
}
local function normalize_term_page(term_page)
local page = tostring(term_page)
for _, rule in ipairs(TERM_PAGE_NORMALIZERS) do
local term = page:match(rule.pattern)
if term then
return rule.normalize(term)
end
end
return page
end
local function sanitize_term_page(term_page)
return normalize_term_page(term_page):gsub(":", "-"):gsub("/", "-"):gsub(" ", "_")
end
local function sanitize_track_segment(value)
return tostring(value):gsub(":", "-"):gsub("/", "-"):gsub(" ", "_")
end
local function track_path(page_lang_code, path)
M.track(path)
if page_lang_code then
M.track("etymon/lang/" .. page_lang_code .. "/" .. path:match("^etymon/(.+)$"))
end
end
local function term_path(term_lang_code, term_page, ...)
local safe_term = sanitize_term_page(term_page)
local parts = { "etymon", "term", term_lang_code, safe_term }
for i = 1, select("#", ...) do
local segment = select(i, ...)
if segment then
table.insert(parts, segment)
end
end
return table.concat(parts, "/")
end
local function term_id_path(term_lang_code, term_page, id_value, suffix)
return term_path(term_lang_code, term_page, "id", sanitize_track_segment(id_value), suffix)
end
local function idless_term_path(term_lang_code, term_page, outcome)
return term_path(term_lang_code, term_page, outcome)
end
local function mismatched_term_path(term_lang_code, term_page, id_value)
return term_id_path(term_lang_code, term_page, id_value, "mismatched")
end
local function record_term_id(id_stats, term_lang_code, term_page, id_value, is_override)
if not term_page or term_page == "" or not id_value or id_value == "" then
return
end
id_stats.term_ids[term_lang_code] = id_stats.term_ids[term_lang_code] or {}
id_stats.term_ids[term_lang_code][term_page] = id_stats.term_ids[term_lang_code][term_page] or {}
local entry = id_stats.term_ids[term_lang_code][term_page][id_value]
if not entry then
entry = { count = 0, override = false }
id_stats.term_ids[term_lang_code][term_page][id_value] = entry
end
entry.count = entry.count + 1
if is_override then
entry.override = true
end
end
local function record_idless_term(id_stats, term_lang_code, term_page)
if not term_page or term_page == "" then
return
end
id_stats.idless_terms[term_lang_code] = id_stats.idless_terms[term_lang_code] or {}
local entry = id_stats.idless_terms[term_lang_code][term_page]
if not entry then
entry = { count = 0, outcomes = {} }
id_stats.idless_terms[term_lang_code][term_page] = entry
end
entry.count = entry.count + 1
end
local function track_ranges(base_key, value, ranges, lang_code)
M.track("etymon/" .. base_key .. "/" .. value)
if lang_code then
M.track("etymon/lang/" .. lang_code .. "/" .. base_key .. "/" .. value)
end
for _, range in ipairs(ranges) do
local matches = false
if range.min and range.max then
matches = value >= range.min and value <= range.max
elseif range.min then
matches = value >= range.min
elseif range.max then
matches = value <= range.max
elseif range.exact then
matches = value == range.exact
end
if matches then
M.track("etymon/" .. base_key .. "/" .. range.label)
if lang_code then
M.track("etymon/lang/" .. lang_code .. "/" .. base_key .. "/" .. range.label)
end
break
end
end
end
function export.track_term(rest)
if rest == "" then
M.track("etymon/term/empty")
elseif rest == "?" then
M.track("etymon/term/question-mark")
elseif rest == "-" then
M.track("etymon/term/hyphen")
end
end
function export.track_title_pagename_mismatch(lang)
local lang_code = lang:getCode()
M.track("etymon/title/pagename-mismatch-after-strip-diacritics")
M.track("etymon/lang/" .. lang_code .. "/title/pagename-mismatch-after-strip-diacritics")
end
function export.record_keyword_usage(keyword_stats, keyword, target_lang, source_lang, is_toplevel)
if not is_toplevel then
return
end
if not keyword_stats[keyword] then
keyword_stats[keyword] = {
count = 0,
target_langs = {},
source_langs = {},
}
end
local keyword_data = keyword_stats[keyword]
keyword_data.count = keyword_data.count + 1
local target_code = target_lang:getCode()
keyword_data.target_langs[target_code] = (keyword_data.target_langs[target_code] or 0) + 1
if source_lang then
local source_code = source_lang:getCode()
keyword_data.source_langs[source_code] = (keyword_data.source_langs[source_code] or 0) + 1
end
end
function export.track_tree_metrics(opts)
local max_depth = opts.max_depth_reached
if not max_depth or max_depth <= 0 then
return
end
local lang_code = opts.lang:getCode()
local total_nodes = opts.total_nodes
local language_count = opts.language_count
track_ranges("depth", max_depth, DEPTH_RANGES, lang_code)
track_ranges("nodes", total_nodes, NODE_RANGES, lang_code)
local unique_languages = 0
for _ in pairs(language_count) do
unique_languages = unique_languages + 1
end
track_ranges("unique-languages", unique_languages, LANGUAGE_RANGES, lang_code)
if total_nodes == max_depth + 1 then
track_ranges("linear-depth", max_depth, DEPTH_RANGES, lang_code)
end
end
function export.track_keywords(keyword_stats, target_lang)
local target_lang_code = target_lang:getCode()
for keyword, keyword_data in pairs(keyword_stats) do
M.track("etymon/keyword/" .. keyword)
M.track("etymon/keyword/" .. keyword .. "/target/" .. target_lang_code)
for source_code in pairs(keyword_data.source_langs) do
M.track("etymon/keyword/" .. keyword .. "/source/" .. source_code)
M.track("etymon/keyword/" .. keyword .. "/target/" .. target_lang_code .. "/source/" .. source_code)
end
end
end
function export.record_term_id_usage(id_stats, etymon_data, term_page)
local term_lang_code = etymon_data.lang:getCode()
if etymon_data.id and etymon_data.id ~= "" then
record_term_id(id_stats, term_lang_code, term_page, etymon_data.id, etymon_data.override)
else
record_idless_term(id_stats, term_lang_code, term_page)
end
end
function export.record_mismatched_id_usage(id_stats, term_lang, term_page, id_value)
if not term_page or term_page == "" or not id_value or id_value == "" then
return
end
local term_lang_code = term_lang:getCode()
id_stats.mismatched_ids[term_lang_code] = id_stats.mismatched_ids[term_lang_code] or {}
id_stats.mismatched_ids[term_lang_code][term_page] = id_stats.mismatched_ids[term_lang_code][term_page] or {}
id_stats.mismatched_ids[term_lang_code][term_page][id_value] =
(id_stats.mismatched_ids[term_lang_code][term_page][id_value] or 0) + 1
end
function export.record_idless_resolution(id_stats, term_lang, term_page, outcome)
if not term_page or term_page == "" then
return
end
local term_lang_code = term_lang:getCode()
id_stats.idless_terms[term_lang_code] = id_stats.idless_terms[term_lang_code] or {}
local entry = id_stats.idless_terms[term_lang_code][term_page]
if not entry then
entry = { count = 0, outcomes = {} }
id_stats.idless_terms[term_lang_code][term_page] = entry
end
entry.outcomes[outcome] = (entry.outcomes[outcome] or 0) + 1
end
function export.track_text_stop_lang_missing(page_lang, stop_code)
if not stop_code or stop_code == "" then
return
end
local page_lang_code = page_lang:getCode()
M.track("etymon/text/stop-lang/missing/" .. stop_code)
M.track("etymon/lang/" .. page_lang_code .. "/text/stop-lang/missing/" .. stop_code)
end
function export.track_page_id(page_lang, id)
local lang_code = page_lang:getCode()
if id and id ~= "" then
M.track("etymon/page-id/set")
M.track("etymon/lang/" .. lang_code .. "/page-id/set")
else
M.track("etymon/page-id/unset")
M.track("etymon/lang/" .. lang_code .. "/page-id/unset")
end
end
function export.track_ids(id_stats, page_lang)
local page_lang_code = page_lang:getCode()
for term_lang_code, terms in pairs(id_stats.term_ids or {}) do
for term_page, ids in pairs(terms) do
for id_value, entry in pairs(ids) do
if entry.count > 0 then
track_path(page_lang_code, term_id_path(term_lang_code, term_page, id_value))
if entry.override then
track_path(page_lang_code, term_id_path(term_lang_code, term_page, id_value, "override"))
end
end
end
end
end
for term_lang_code, terms in pairs(id_stats.idless_terms or {}) do
for term_page, entry in pairs(terms) do
if entry.count > 0 then
track_path(page_lang_code, idless_term_path(term_lang_code, term_page))
end
for outcome, count in pairs(entry.outcomes or {}) do
if count > 0 then
track_path(page_lang_code, idless_term_path(term_lang_code, term_page, outcome))
end
end
end
end
for term_lang_code, terms in pairs(id_stats.mismatched_ids or {}) do
for term_page, ids in pairs(terms) do
for id_value, count in pairs(ids) do
if count > 0 then
track_path(page_lang_code, mismatched_term_path(term_lang_code, term_page, id_value))
end
end
end
end
end
function export.new_id_stats()
return {
term_ids = {},
idless_terms = {},
mismatched_ids = {},
}
end
return export
1a6uqo8jj8m8p5gt11ki7rx17qdrf11
มอดูล:etymon/descendants
828
2356365
5754443
2026-08-06T04:37:07Z
Octahedron80
267
สร้างหน้าด้วย "local export = {} local M = require("Module:module loader").init({ require = { template_parser = "Module:template parser", links = "Module:links", languages = "Module:languages", }, }) local TRACKABLE_KEYWORDS = { inherited = true, bor = true, lbor = true, slbor = true, derived = true, uder = true, } local DESCENDANT_TEMPLATES = { ["desc"] = true, ["descendant"] = true, ["desctree"] = true, ["descendants tree"] = true, } local..."
5754443
Scribunto
text/plain
local export = {}
local M = require("Module:module loader").init({
require = {
template_parser = "Module:template parser",
links = "Module:links",
languages = "Module:languages",
},
})
local TRACKABLE_KEYWORDS = {
inherited = true,
bor = true,
lbor = true,
slbor = true,
derived = true,
uder = true,
}
local DESCENDANT_TEMPLATES = {
["desc"] = true,
["descendant"] = true,
["desctree"] = true,
["descendants tree"] = true,
}
local SKIPPED_TERMS = {
[""] = true,
["-"] = true,
}
local CHECK_MISSING_HEADER = { missing_header = true, missing_entry = false }
local STRIPPED_REF_TEMPLATES = {
ref = true,
refn = true,
}
local ENABLE_DESCENDANTS_TRACKING = false
local function _resolve_explicit_cache_id(explicit_id, parent_etymon)
if parent_etymon then
return parent_etymon.id or "*"
end
return explicit_id
end
local function _resolve_single_cache_id(id_data)
return (type(id_data) == "table" and id_data.id) or id_data or "*"
end
local function _resolve_cache_id(lookup)
if not lookup then
return nil
end
if lookup.id then
return lookup.id
end
if lookup.explicit_id then
return _resolve_explicit_cache_id(lookup.explicit_id, lookup.parent_etymon)
end
if lookup.id_data ~= nil then
return _resolve_single_cache_id(lookup.id_data)
end
return nil
end
local function _get_cached_check(cache_table, is_toplevel, base_key, cache_id)
if not is_toplevel or not cache_table or not base_key or not cache_id then
return nil
end
return cache_table[base_key .. ":" .. cache_id]
end
local function _store_checks(cache_table, lang_page_key, checks_by_id, redirected_from)
if not cache_table or not lang_page_key or not checks_by_id then
return
end
for id, check in pairs(checks_by_id) do
cache_table[lang_page_key .. ":" .. id] = check
end
if redirected_from then
for id, check in pairs(checks_by_id) do
cache_table[redirected_from .. ":" .. id] = check
end
end
end
local function _strip_refs(value)
if type(value) ~= "string" or value == "" then
return value
end
local get_node_class = M.template_parser.class_else_type
local function trim_local(text)
return (type(text) == "string" and text:match("^%s*(.-)%s*$")) or ""
end
local function lower_local(text)
return text and mw.ustring.lower(text) or text
end
local function template_name_unexpanded(template_node)
return lower_local(trim_local(tostring(template_node[1]) or ""))
end
local function stringify_without_ref_templates(node)
if type(node) ~= "table" then
return node == nil and "" or tostring(node)
end
local node_class = get_node_class(node)
if node_class == "template" and STRIPPED_REF_TEMPLATES[template_name_unexpanded(node)] then
return ""
end
if node_class == "template" then
return tostring(node)
end
if node_class == "heading" then
return tostring(node)
end
if node_class and node_class ~= "wikitext" then
return tostring(node)
end
local pieces = {}
for i = 1, #node do
pieces[i] = stringify_without_ref_templates(node[i])
end
return table.concat(pieces)
end
local parsed = M.template_parser.parse(value)
local cleaned = stringify_without_ref_templates(parsed)
local changed = true
while changed do
local next_cleaned = mw.ustring.gsub(cleaned, "<%s*[Rr][Ee][Ff][^>]-/>", "")
next_cleaned = mw.ustring.gsub(next_cleaned, "<%s*[Rr][Ee][Ff][^>]*>.-<%s*/%s*[Rr][Ee][Ff]%s*>", "")
next_cleaned = mw.ustring.gsub(next_cleaned, "{{%s*[Rr][Ee][Ff]%s*}}", "")
next_cleaned = mw.ustring.gsub(next_cleaned, "{{%s*[Rr][Ee][Ff]%s*|[^{}]-}}", "")
changed = next_cleaned ~= cleaned
cleaned = next_cleaned
end
return cleaned
end
local function _trim(value)
if type(value) ~= "string" then
return nil
end
return value:match("^%s*(.-)%s*$")
end
local function _lower(value)
return value and mw.ustring.lower(value) or value
end
local function _is_index_in_range(index, start_index, end_index)
return index and index >= start_index and index <= end_index
end
local function _build_parse_index(lang_section)
local parsed = M.template_parser.parse(lang_section)
local headings = {}
local templates = {}
for heading in parsed:iterate_nodes("heading") do
local heading_name = heading:get_name()
table.insert(headings, {
index = heading.index or 1,
level = heading.level or 0,
name = heading_name and _lower(_trim(heading_name) or "") or nil,
length = #tostring(heading),
})
end
for template in parsed:iterate_nodes("template") do
local template_name = template:get_name()
local template_args = template:get_arguments()
table.insert(templates, {
index = template.index or 1,
name = template_name and _lower(_trim(template_name) or "") or "",
args = template_args or {},
})
end
return {
headings = headings,
templates = templates,
}
end
local function _build_regions(lang_section, headings)
local content_length = #lang_section
local etymology_headings = {}
for _, heading in ipairs(headings) do
if heading.level == 3 and heading.name and mw.ustring.match(heading.name, "^etymology") then
table.insert(etymology_headings, heading)
end
end
if #etymology_headings == 0 then
return {
{ start_index = 1, end_index = content_length }
}
end
local regions = {}
for i = 1, #etymology_headings do
local heading = etymology_headings[i]
local next_heading = etymology_headings[i + 1]
local start_index = heading.index
local end_index = next_heading and (next_heading.index - 1) or content_length
if i == 1 and heading.index > 1 then
local preamble = lang_section:sub(1, heading.index - 1)
if preamble:match("%S") then
start_index = 1
end
end
table.insert(regions, {
start_index = start_index,
end_index = end_index,
})
end
return regions
end
local function _count_region_etymons(region, templates, etymon_lang_code)
local count = 0
for _, template in ipairs(templates) do
if _is_index_in_range(template.index, region.start_index, region.end_index)
and template.name == "etymon"
and template.args[1] == etymon_lang_code then
count = count + 1
end
end
return count
end
local function _get_descendants_sections(region, headings)
local sections = {}
for i = 1, #headings do
local heading = headings[i]
if _is_index_in_range(heading.index, region.start_index, region.end_index)
and heading.name == "descendants" then
local body_start = heading.index + heading.length
local body_end = region.end_index
for j = i + 1, #headings do
local next_heading = headings[j]
if next_heading.index > region.end_index then
break
end
if next_heading.level <= heading.level then
body_end = next_heading.index - 1
break
end
end
table.insert(sections, {
start_index = body_start,
end_index = body_end,
})
end
end
return sections
end
local function _template_lang_matches_entry(template_lang_code, entry_full_code, cache)
local normalized_code = _trim(template_lang_code)
if not normalized_code or normalized_code == "" then
return false
end
local cached = cache[normalized_code]
if cached ~= nil then
return cached
end
local template_lang = M.languages.getByCode(normalized_code, nil, true)
local is_match = template_lang and template_lang:getFullCode() == entry_full_code or false
cache[normalized_code] = is_match
return is_match
end
local function _template_lists_target(template_args, first_term_index, target_page_lower, entry_lang)
for arg_index = first_term_index, #template_args do
local template_term = _trim(template_args[arg_index])
if template_term and not SKIPPED_TERMS[template_term] then
if _lower(template_term) == target_page_lower then
return true
end
local template_page = M.links.get_link_page(template_term, entry_lang)
if _lower(template_page) == target_page_lower then
return true
end
end
end
return false
end
local function _is_target_listed_in_descendants(descendants_sections, templates, entry_title, entry_lang)
if #descendants_sections == 0 then
return false
end
local target_page = M.links.get_link_page(entry_title, entry_lang)
local target_page_lower = _lower(target_page)
local entry_full_code = entry_lang:getFullCode()
local lang_match_cache = {}
for _, section in ipairs(descendants_sections) do
for _, template in ipairs(templates) do
if _is_index_in_range(template.index, section.start_index, section.end_index)
and DESCENDANT_TEMPLATES[template.name] then
local lang_arg_index = nil
for arg_index = 1, #template.args do
if _template_lang_matches_entry(template.args[arg_index], entry_full_code, lang_match_cache) then
lang_arg_index = arg_index
break
end
end
if lang_arg_index and _template_lists_target(template.args, lang_arg_index + 1, target_page_lower, entry_lang) then
return true
end
end
end
end
return false
end
local function _region_has_descendant_template(region, templates)
for _, template in ipairs(templates) do
if _is_index_in_range(template.index, region.start_index, region.end_index)
and DESCENDANT_TEMPLATES[template.name] then
return true
end
end
return false
end
local function _get_region_check(region, parsed_index, entry_title, entry_lang)
local descendants_sections = _get_descendants_sections(region, parsed_index.headings)
if #descendants_sections == 0 then
if _region_has_descendant_template(region, parsed_index.templates) then
local fallback_sections = { {
start_index = region.start_index,
end_index = region.end_index,
} }
return {
missing_header = false,
missing_entry = not _is_target_listed_in_descendants(fallback_sections, parsed_index.templates, entry_title, entry_lang),
}
end
return CHECK_MISSING_HEADER
end
return {
missing_header = false,
missing_entry = not _is_target_listed_in_descendants(descendants_sections, parsed_index.templates, entry_title, entry_lang),
}
end
local function _build_checks_by_id(lang_section, etymon_lang_code, found_templates_for_lang, entry_title, entry_lang)
local checks_by_id = {}
local parsed_index = _build_parse_index(lang_section)
local regions = _build_regions(lang_section, parsed_index.headings)
local template_list_index = 1
local mapping_failed = false
for _, region in ipairs(regions) do
local region_etymon_count = _count_region_etymons(region, parsed_index.templates, etymon_lang_code)
local region_check = nil
if region_etymon_count > 0 then
region_check = _get_region_check(region, parsed_index, entry_title, entry_lang)
end
for _ = 1, region_etymon_count do
local found_template_args = found_templates_for_lang[template_list_index]
if not found_template_args then
mapping_failed = true
break
end
checks_by_id[found_template_args.id or "*"] = region_check
template_list_index = template_list_index + 1
end
if mapping_failed then
break
end
end
if mapping_failed or template_list_index ~= (#found_templates_for_lang + 1) then
local global_region = { start_index = 1, end_index = #lang_section }
local fallback_check = _get_region_check(global_region, parsed_index, entry_title, entry_lang)
checks_by_id = {}
for _, template_args in ipairs(found_templates_for_lang) do
checks_by_id[template_args.id or "*"] = fallback_check
end
end
return checks_by_id
end
local function _compute_checks_for_page(opts)
opts = opts or {}
local found_templates_for_lang = opts.found_templates_for_lang or {}
if #found_templates_for_lang == 0 then
return {}
end
local entry_title = opts.entry_title
local entry_lang = opts.entry_lang
local etymon_lang_code = opts.etymon_lang_code
if not entry_title or not entry_lang or not etymon_lang_code then
return {}
end
local sanitized_lang_section = _strip_refs(opts.lang_section or "")
return _build_checks_by_id(
sanitized_lang_section,
etymon_lang_code,
found_templates_for_lang,
entry_title,
entry_lang
)
end
function export.cache_page_checks(opts)
if not ENABLE_DESCENDANTS_TRACKING then
return {}
end
opts = opts or {}
local cache_table = opts.cached_descendants_checks
local lang_page_key = opts.lang_page_key
if not cache_table or not lang_page_key then
return {}
end
local checks_by_id = _compute_checks_for_page(opts)
_store_checks(cache_table, lang_page_key, checks_by_id, opts.redirected_from)
return checks_by_id
end
function export.get_lookup_check(opts)
if not ENABLE_DESCENDANTS_TRACKING then
return nil
end
opts = opts or {}
return _get_cached_check(
opts.cached_descendants_checks,
opts.is_toplevel,
opts.base_key,
_resolve_cache_id(opts.lookup)
)
end
function export.get_term_sync_flags(keyword, term_status, descendants_check)
if not ENABLE_DESCENDANTS_TRACKING then
return false, false
end
local should_track = term_status == "ok"
and TRACKABLE_KEYWORDS[keyword] == true
and descendants_check ~= nil
if not should_track then
return false, false
end
return descendants_check.missing_header or false, descendants_check.missing_entry or false
end
return export
njoa75ldlbxvifpj024ykipfx44kfcd
5754447
5754443
2026-08-06T04:47:08Z
Octahedron80
267
5754447
Scribunto
text/plain
local export = {}
local M = require("Module:module loader").init({
require = {
template_parser = "Module:template parser",
links = "Module:links",
languages = "Module:languages",
},
})
local TRACKABLE_KEYWORDS = {
inherited = true,
bor = true,
lbor = true,
slbor = true,
derived = true,
uder = true,
}
local DESCENDANT_TEMPLATES = {
["desc"] = true,
["descendant"] = true,
["desctree"] = true,
["descendants tree"] = true,
}
local SKIPPED_TERMS = {
[""] = true,
["-"] = true,
}
local CHECK_MISSING_HEADER = { missing_header = true, missing_entry = false }
local STRIPPED_REF_TEMPLATES = {
ref = true,
refn = true,
}
local ENABLE_DESCENDANTS_TRACKING = false
local function _resolve_explicit_cache_id(explicit_id, parent_etymon)
if parent_etymon then
return parent_etymon.id or "*"
end
return explicit_id
end
local function _resolve_single_cache_id(id_data)
return (type(id_data) == "table" and id_data.id) or id_data or "*"
end
local function _resolve_cache_id(lookup)
if not lookup then
return nil
end
if lookup.id then
return lookup.id
end
if lookup.explicit_id then
return _resolve_explicit_cache_id(lookup.explicit_id, lookup.parent_etymon)
end
if lookup.id_data ~= nil then
return _resolve_single_cache_id(lookup.id_data)
end
return nil
end
local function _get_cached_check(cache_table, is_toplevel, base_key, cache_id)
if not is_toplevel or not cache_table or not base_key or not cache_id then
return nil
end
return cache_table[base_key .. ":" .. cache_id]
end
local function _store_checks(cache_table, lang_page_key, checks_by_id, redirected_from)
if not cache_table or not lang_page_key or not checks_by_id then
return
end
for id, check in pairs(checks_by_id) do
cache_table[lang_page_key .. ":" .. id] = check
end
if redirected_from then
for id, check in pairs(checks_by_id) do
cache_table[redirected_from .. ":" .. id] = check
end
end
end
local function _strip_refs(value)
if type(value) ~= "string" or value == "" then
return value
end
local get_node_class = M.template_parser.class_else_type
local function trim_local(text)
return (type(text) == "string" and text:match("^%s*(.-)%s*$")) or ""
end
local function lower_local(text)
return text and mw.ustring.lower(text) or text
end
local function template_name_unexpanded(template_node)
return lower_local(trim_local(tostring(template_node[1]) or ""))
end
local function stringify_without_ref_templates(node)
if type(node) ~= "table" then
return node == nil and "" or tostring(node)
end
local node_class = get_node_class(node)
if node_class == "template" and STRIPPED_REF_TEMPLATES[template_name_unexpanded(node)] then
return ""
end
if node_class == "template" then
return tostring(node)
end
if node_class == "heading" then
return tostring(node)
end
if node_class and node_class ~= "wikitext" then
return tostring(node)
end
local pieces = {}
for i = 1, #node do
pieces[i] = stringify_without_ref_templates(node[i])
end
return table.concat(pieces)
end
local parsed = M.template_parser.parse(value)
local cleaned = stringify_without_ref_templates(parsed)
local changed = true
while changed do
local next_cleaned = mw.ustring.gsub(cleaned, "<%s*[Rr][Ee][Ff][^>]-/>", "")
next_cleaned = mw.ustring.gsub(next_cleaned, "<%s*[Rr][Ee][Ff][^>]*>.-<%s*/%s*[Rr][Ee][Ff]%s*>", "")
next_cleaned = mw.ustring.gsub(next_cleaned, "{{%s*[Rr][Ee][Ff]%s*}}", "")
next_cleaned = mw.ustring.gsub(next_cleaned, "{{%s*[Rr][Ee][Ff]%s*|[^{}]-}}", "")
changed = next_cleaned ~= cleaned
cleaned = next_cleaned
end
return cleaned
end
local function _trim(value)
if type(value) ~= "string" then
return nil
end
return value:match("^%s*(.-)%s*$")
end
local function _lower(value)
return value and mw.ustring.lower(value) or value
end
local function _is_index_in_range(index, start_index, end_index)
return index and index >= start_index and index <= end_index
end
local function _build_parse_index(lang_section)
local parsed = M.template_parser.parse(lang_section)
local headings = {}
local templates = {}
for heading in parsed:iterate_nodes("heading") do
local heading_name = heading:get_name()
table.insert(headings, {
index = heading.index or 1,
level = heading.level or 0,
name = heading_name and _lower(_trim(heading_name) or "") or nil,
length = #tostring(heading),
})
end
for template in parsed:iterate_nodes("template") do
local template_name = template:get_name()
local template_args = template:get_arguments()
table.insert(templates, {
index = template.index or 1,
name = template_name and _lower(_trim(template_name) or "") or "",
args = template_args or {},
})
end
return {
headings = headings,
templates = templates,
}
end
local function _build_regions(lang_section, headings)
local content_length = #lang_section
local etymology_headings = {}
for _, heading in ipairs(headings) do
if heading.level == 3 and heading.name and mw.ustring.match(heading.name, "^รากศัพท์") then
table.insert(etymology_headings, heading)
end
end
if #etymology_headings == 0 then
return {
{ start_index = 1, end_index = content_length }
}
end
local regions = {}
for i = 1, #etymology_headings do
local heading = etymology_headings[i]
local next_heading = etymology_headings[i + 1]
local start_index = heading.index
local end_index = next_heading and (next_heading.index - 1) or content_length
if i == 1 and heading.index > 1 then
local preamble = lang_section:sub(1, heading.index - 1)
if preamble:match("%S") then
start_index = 1
end
end
table.insert(regions, {
start_index = start_index,
end_index = end_index,
})
end
return regions
end
local function _count_region_etymons(region, templates, etymon_lang_code)
local count = 0
for _, template in ipairs(templates) do
if _is_index_in_range(template.index, region.start_index, region.end_index)
and template.name == "etymon"
and template.args[1] == etymon_lang_code then
count = count + 1
end
end
return count
end
local function _get_descendants_sections(region, headings)
local sections = {}
for i = 1, #headings do
local heading = headings[i]
if _is_index_in_range(heading.index, region.start_index, region.end_index)
and heading.name == "คำสืบทอด" then
local body_start = heading.index + heading.length
local body_end = region.end_index
for j = i + 1, #headings do
local next_heading = headings[j]
if next_heading.index > region.end_index then
break
end
if next_heading.level <= heading.level then
body_end = next_heading.index - 1
break
end
end
table.insert(sections, {
start_index = body_start,
end_index = body_end,
})
end
end
return sections
end
local function _template_lang_matches_entry(template_lang_code, entry_full_code, cache)
local normalized_code = _trim(template_lang_code)
if not normalized_code or normalized_code == "" then
return false
end
local cached = cache[normalized_code]
if cached ~= nil then
return cached
end
local template_lang = M.languages.getByCode(normalized_code, nil, true)
local is_match = template_lang and template_lang:getFullCode() == entry_full_code or false
cache[normalized_code] = is_match
return is_match
end
local function _template_lists_target(template_args, first_term_index, target_page_lower, entry_lang)
for arg_index = first_term_index, #template_args do
local template_term = _trim(template_args[arg_index])
if template_term and not SKIPPED_TERMS[template_term] then
if _lower(template_term) == target_page_lower then
return true
end
local template_page = M.links.get_link_page(template_term, entry_lang)
if _lower(template_page) == target_page_lower then
return true
end
end
end
return false
end
local function _is_target_listed_in_descendants(descendants_sections, templates, entry_title, entry_lang)
if #descendants_sections == 0 then
return false
end
local target_page = M.links.get_link_page(entry_title, entry_lang)
local target_page_lower = _lower(target_page)
local entry_full_code = entry_lang:getFullCode()
local lang_match_cache = {}
for _, section in ipairs(descendants_sections) do
for _, template in ipairs(templates) do
if _is_index_in_range(template.index, section.start_index, section.end_index)
and DESCENDANT_TEMPLATES[template.name] then
local lang_arg_index = nil
for arg_index = 1, #template.args do
if _template_lang_matches_entry(template.args[arg_index], entry_full_code, lang_match_cache) then
lang_arg_index = arg_index
break
end
end
if lang_arg_index and _template_lists_target(template.args, lang_arg_index + 1, target_page_lower, entry_lang) then
return true
end
end
end
end
return false
end
local function _region_has_descendant_template(region, templates)
for _, template in ipairs(templates) do
if _is_index_in_range(template.index, region.start_index, region.end_index)
and DESCENDANT_TEMPLATES[template.name] then
return true
end
end
return false
end
local function _get_region_check(region, parsed_index, entry_title, entry_lang)
local descendants_sections = _get_descendants_sections(region, parsed_index.headings)
if #descendants_sections == 0 then
if _region_has_descendant_template(region, parsed_index.templates) then
local fallback_sections = { {
start_index = region.start_index,
end_index = region.end_index,
} }
return {
missing_header = false,
missing_entry = not _is_target_listed_in_descendants(fallback_sections, parsed_index.templates, entry_title, entry_lang),
}
end
return CHECK_MISSING_HEADER
end
return {
missing_header = false,
missing_entry = not _is_target_listed_in_descendants(descendants_sections, parsed_index.templates, entry_title, entry_lang),
}
end
local function _build_checks_by_id(lang_section, etymon_lang_code, found_templates_for_lang, entry_title, entry_lang)
local checks_by_id = {}
local parsed_index = _build_parse_index(lang_section)
local regions = _build_regions(lang_section, parsed_index.headings)
local template_list_index = 1
local mapping_failed = false
for _, region in ipairs(regions) do
local region_etymon_count = _count_region_etymons(region, parsed_index.templates, etymon_lang_code)
local region_check = nil
if region_etymon_count > 0 then
region_check = _get_region_check(region, parsed_index, entry_title, entry_lang)
end
for _ = 1, region_etymon_count do
local found_template_args = found_templates_for_lang[template_list_index]
if not found_template_args then
mapping_failed = true
break
end
checks_by_id[found_template_args.id or "*"] = region_check
template_list_index = template_list_index + 1
end
if mapping_failed then
break
end
end
if mapping_failed or template_list_index ~= (#found_templates_for_lang + 1) then
local global_region = { start_index = 1, end_index = #lang_section }
local fallback_check = _get_region_check(global_region, parsed_index, entry_title, entry_lang)
checks_by_id = {}
for _, template_args in ipairs(found_templates_for_lang) do
checks_by_id[template_args.id or "*"] = fallback_check
end
end
return checks_by_id
end
local function _compute_checks_for_page(opts)
opts = opts or {}
local found_templates_for_lang = opts.found_templates_for_lang or {}
if #found_templates_for_lang == 0 then
return {}
end
local entry_title = opts.entry_title
local entry_lang = opts.entry_lang
local etymon_lang_code = opts.etymon_lang_code
if not entry_title or not entry_lang or not etymon_lang_code then
return {}
end
local sanitized_lang_section = _strip_refs(opts.lang_section or "")
return _build_checks_by_id(
sanitized_lang_section,
etymon_lang_code,
found_templates_for_lang,
entry_title,
entry_lang
)
end
function export.cache_page_checks(opts)
if not ENABLE_DESCENDANTS_TRACKING then
return {}
end
opts = opts or {}
local cache_table = opts.cached_descendants_checks
local lang_page_key = opts.lang_page_key
if not cache_table or not lang_page_key then
return {}
end
local checks_by_id = _compute_checks_for_page(opts)
_store_checks(cache_table, lang_page_key, checks_by_id, opts.redirected_from)
return checks_by_id
end
function export.get_lookup_check(opts)
if not ENABLE_DESCENDANTS_TRACKING then
return nil
end
opts = opts or {}
return _get_cached_check(
opts.cached_descendants_checks,
opts.is_toplevel,
opts.base_key,
_resolve_cache_id(opts.lookup)
)
end
function export.get_term_sync_flags(keyword, term_status, descendants_check)
if not ENABLE_DESCENDANTS_TRACKING then
return false, false
end
local should_track = term_status == "ok"
and TRACKABLE_KEYWORDS[keyword] == true
and descendants_check ~= nil
if not should_track then
return false, false
end
return descendants_check.missing_header or false, descendants_check.missing_entry or false
end
return export
njkt84sxzs7ezbb24rflqm0wvm11e85
มอดูล:etymon/data/text allowed
828
2356366
5754444
2026-08-06T04:37:33Z
Octahedron80
267
สร้างหน้าด้วย "--[=[ Languages and families that may use the {{etymon}} `text=` parameter (language-community consensus). ]=] return { -- Mode: "off" = disabled, "warn" = warn only, "error" = enforce. default_mode = "warn", langs = { ["ak"] = true, ["amf"] = true, ["bg"] = true, ["bnt-sab-pro"] = true, ["cs"] = true, ["en"] = true, ["eo"] = true, ["es"] = true, ["ext"] = true, ["fa"] = true, ["hsb"] = true, ["iir-pro"] = true, ["jbo"]..."
5754444
Scribunto
text/plain
--[=[
Languages and families that may use the {{etymon}} `text=` parameter (language-community consensus).
]=]
return {
-- Mode: "off" = disabled, "warn" = warn only, "error" = enforce.
default_mode = "warn",
langs = {
["ak"] = true,
["amf"] = true,
["bg"] = true,
["bnt-sab-pro"] = true,
["cs"] = true,
["en"] = true,
["eo"] = true,
["es"] = true,
["ext"] = true,
["fa"] = true,
["hsb"] = true,
["iir-pro"] = true,
["jbo"] = true,
["jdt"] = true,
["la"] = true,
["mul"] = true,
["ota"] = true,
["pap"] = true,
["ps"] = true,
["ro"] = true,
["sk"] = true,
["sw"] = true,
["tg"] = true,
["tl"] = true,
["tr"] = true,
["uk"] = true,
["uz"] = true,
["rsk"] = true,
["zlw-ocs"] = true,
["zlw-osk"] = true,
["zle-ono"] = true,
["sla-pro"] = true,
-- Austronesian
["map-pro"] = true,
["map-ata-pro"] = true,
["poz-pro"] = true,
["poz-btk-pro"] = true,
["poz-cet-pro"] = true,
["pqe-pro"] = true,
["poz-hce-pro"] = true,
["poz-oce-pro"] = true,
["poz-pol-pro"] = true,
["poz-pnp-pro"] = true,
["poz-pep-pro"] = true,
["poz-mic-pro"] = true,
["poz-lgx-pro"] = true,
["poz-msa-pro"] = true,
["poz-mcm-pro"] = true,
["cmc-pro"] = true,
["poz-mly-pro"] = true,
["poz-swa-pro"] = true,
["btk-pro"] = true,
["phi-pro"] = true,
["phi-kal-pro"] = true,
["poz-ssw-pro"] = true,
["dru-pro"] = true,
},
families = {
["ber"] = true, -- Berber
["dra"] = true, -- Dravidian
["inc"] = true, -- Indo-Aryan
["iir-nur"] = true, -- Nuristani
["mun"] = true, -- Munda
["roa-gap"] = true, -- Galician-Portuguese
["sem-ara"] = true, -- Aramaic
["sem-arb"] = true, -- Arabic
["tup"] = true, -- Tupian
["zlw-lch"] = true, -- Lechitic
},
}
ldni2a8freb3ayizw39d5qjebwlza0p
มอดูล:etymon/doc
828
2356367
5754450
2026-08-06T04:54:10Z
Octahedron80
267
สร้างหน้าด้วย "local export = {} local M = require("Module:module loader").init({ require = { families = "Module:families", languages = "Module:languages", inflection_table = "Module:inflection-table", }, loadData = { text_allowed = "Module:etymon/data/text_allowed", }, }) function export.text_allowed_list(frame) local data = M.text_allowed or {} local langs = data.langs or {} local families = data.families or {} local lang_cod..."
5754450
Scribunto
text/plain
local export = {}
local M = require("Module:module loader").init({
require = {
families = "Module:families",
languages = "Module:languages",
inflection_table = "Module:inflection-table",
},
loadData = {
text_allowed = "Module:etymon/data/text_allowed",
},
})
function export.text_allowed_list(frame)
local data = M.text_allowed or {}
local langs = data.langs or {}
local families = data.families or {}
local lang_codes = {}
for code in pairs(langs) do
table.insert(lang_codes, code)
end
table.sort(lang_codes)
local family_codes = {}
for code in pairs(families) do
table.insert(family_codes, code)
end
table.sort(family_codes)
local function wrap_lang_code(lang_code)
local lang_obj = M.languages.getByCode(lang_code, nil, true)
local lang_name = lang_obj and lang_obj.getCanonicalName and lang_obj:getCanonicalName()
if lang_name and lang_name ~= "" then
return "<code>" .. lang_code .. "</code> <small>(" .. lang_name .. ")</small>"
end
return "<code>" .. lang_code .. "</code>"
end
local function wrap_family_code(family_code)
local family_obj = M.families.getByCode(family_code)
if not family_obj then
return "<code>" .. family_code .. "</code>"
end
local family_name = family_obj.getCanonicalName and family_obj:getCanonicalName()
if family_name and family_name ~= "" then
return "<code>" .. family_code .. "</code> <small>(" .. family_name .. ")</small>"
end
return "<code>" .. family_code .. "</code>"
end
local function is_etymology_only_lang(lang_code)
local lang_obj = M.languages.getByCode(lang_code, nil, true)
return lang_obj and lang_obj.hasType and lang_obj:hasType("language", "etymology-only")
end
local function get_family_lang_codes(family_code)
local family_obj = M.families.getByCode(family_code)
if not family_obj or not family_obj.getDescendantCodes then
return nil
end
local codes = family_obj:getDescendantCodes()
if not codes or #codes == 0 then
return nil
end
table.sort(codes)
local out = {}
for _, lang_code in ipairs(codes) do
if not is_etymology_only_lang(lang_code) then
out[#out + 1] = lang_code
end
end
if #out == 0 then
return nil
end
return out
end
local wikicode = M.inflection_table.make_top{
title = "Text allowlist",
tall = "yes",
}
wikicode = wikicode .. "|-\n"
wikicode = wikicode .. '! Code / family !! Languages'
if #lang_codes > 0 then
local lang_parts = {}
for _, lang_code in ipairs(lang_codes) do
if not is_etymology_only_lang(lang_code) then
lang_parts[#lang_parts + 1] = wrap_lang_code(lang_code)
end
end
if #lang_parts > 0 then
wikicode = wikicode .. "\n|-\n"
wikicode = wikicode .. "| '''Language codes''' || " .. table.concat(lang_parts, ", ")
end
end
for _, family_code in ipairs(family_codes) do
local codes = get_family_lang_codes(family_code)
local lang_list
if codes and #codes > 0 then
local lang_parts = {}
for _, code in ipairs(codes) do
lang_parts[#lang_parts + 1] = wrap_lang_code(code)
end
lang_list = table.concat(lang_parts, ", ")
else
lang_list = ""
end
wikicode = wikicode .. "\n|-\n"
wikicode = wikicode .. "| " .. wrap_family_code(family_code) .. " || " .. lang_list
end
wikicode = wikicode .. "\n" .. M.inflection_table.make_bottom{}
wikicode = wikicode .. "\n\nThe list is maintained in [[Module:etymon/data/text_allowed]]. Mode is <code>" .. (data.default_mode or "off") .. "</code> (<code>off</code> = disabled, <code>warn</code> = warning only, <code>error</code> = enforce)."
return wikicode
end
return export
lbpjeun1f643cd4lm8957y719kfvmo0
มอดูล:etymon/documentation
828
2356368
5754451
2026-08-06T04:54:44Z
Octahedron80
267
สร้างหน้าด้วย "This module implements the template {{tl|etymon}}. {{module cat|-|Etymology}}"
5754451
wikitext
text/x-wiki
This module implements the template {{tl|etymon}}.
{{module cat|-|Etymology}}
tler1s7m55nf6sqc8fir6d2oofs3lar
แม่แบบ:etymon/documentation
10
2356369
5754453
2026-08-06T05:01:19Z
Octahedron80
267
สร้างหน้าด้วย "{{documentation subpage}} {{uses lua|etymon|etymon/tree|etymon/text|etymon/categories|etymon/data|etymon/tracking|etymon/doc}} {{uses templatestyles|Module:etymon/styles.css}} {{shortcut|ety}} This template is used to indicate the entry term's immediate ancestor ({{m|en|etymon}}). Note that generally, an "etymon" can refer to any kind of etymological ancestor, but on this page, "etymon" will be used specifically for an immediate ancestor. For exam..."
5754453
wikitext
text/x-wiki
{{documentation subpage}}
{{uses lua|etymon|etymon/tree|etymon/text|etymon/categories|etymon/data|etymon/tracking|etymon/doc}}
{{uses templatestyles|Module:etymon/styles.css}}
{{shortcut|ety}}
This template is used to indicate the entry term's immediate ancestor ({{m|en|etymon}}).
Note that generally, an "etymon" can refer to any kind of etymological ancestor, but on this page, "etymon" will be used specifically for an immediate ancestor. For example, the etymon of {{m+|en|nexus}} is {{m+|la|nexus}}, and the etymon of {{m+|la|nexus}} is {{m+|la|nectō}}. Terms can have multiple etymons, so the etymons of {{m+|en|toothbrush}} are both {{m|en|tooth}} and {{m|en|brush}}.
'''Current features:''' automatic categorization, tree generation, text generation, reference support.
==Usage==
Suppose that the etymon of {{m+|en|sow|t=female pig}} is set to {{m+|enm|sowe}}, and the etymon of {{m|enm||sowe}} is set to {{m+|ang|sugu}}. The template is then able to intelligently connect {{m|en||sow}} and {{m|ang||sugu}}, even though they are two steps apart. The template thus reduces duplication across entries by making it unnecessary to manually specify that {{m|en||sow}} and {{m|ang||sugu}} are connected.
===Etymon IDs===
Etymon IDs are used to distinguish between multiple etymologies for the same term (''{{lg|homograph|homographs}}''), in order to ensure that the template is able to traverse these etymological chains without getting confused.
This mirrors the practice of the ''{{w|Oxford English Dictionary}}''. For example, the two main senses of {{m|en||sow}} are identified as [https://doi.org/10.1093/OED/9086735656 9086735656] ({{m-g|to plant seeds}}) and [https://doi.org/10.1093/OED/9710708293 9710708293] ({{m-g|female pig}}). On Wiktionary, the identifier should be a word or short phrase which summarizes the definition of the term rather than a meaningless string of numbers. In the case of {{m|en||sow}}, the two IDs might be <code>plant seeds</code> and <code>female pig</code>.
For terms with only one etymology, no ID is required either in the template's {{para|id}} parameter or in the etymon parameters. If a page has multiple etymon templates for the same language, {{em|all}} of them must have unique IDs—the template will throw an error if it finds multiple etymon templates where at least one is missing an ID.
==Parameters==
The template takes the following parameters:
; {{para|1|req=1}}
: The language code of the current entry.
; {{para|id}}
: The etymology ID. This parameter creates an anchor to the current section. For example, if the template at {{m+|en|father|id=male parent}} is {{tl|1=etymon|2=en|3=id=male parent}}, this etymology section is directly linked to by [[father#English: male parent]]. The ID must have at least two characters and must not be the same as the page title. This parameter is optional when there is only one etymology for the term, but required when there are multiple etymologies.
; {{para|title}}
: This parameter manually overrides the current page title. For example, if an etymology tree is created at {{m+|la|pōnō}} (located at [[pono]]) it is necessary to specify {{para|title|pōnō}} to ensure that the macrons are displayed.
; {{para|pos}}
: Indicates the part of speech of the current entry, which allows descendants to intelligently categorize themselves. Usually only necessary for Proto-Indo-European. Current allowed values are: <code>prefix</code>, <code>suffix</code>, <code>interfix</code>, <code>infix</code>, <code>root</code>, <code>word</code>.
; {{para|exnihilo}}
: If set to anything, adds the entry to the category <code>[[:Category:Terms coined ex nihilo by language|<language> terms coined ex nihilo]]</code>.
; {{para|etydate}}
: Specifies the date or time period when the term was first attested. Supports inline modifiers for references and formatting. For example: <code>etydate=1500s<ref:{{temp|R:OED}}></code> or <code>etydate=late 14c<nocap></code>. Ranges can also be given, e.g. <code>etydate=r,1501,1558<ref:{{temp|R:pl:SXVI|artykuł|5767}}></code>
; {{para|rfe}}
: Adds a request for etymology notice. Can be set to <code>1</code> for a standard notice, or to custom text for a specific request. Supports inline modifiers: <code><nocat></code>, <code><noes></code>, <code><box></code>, <code><sort:key></code>, <code><y:year></code>, <code><m:month></code>, <code><fragment:section></code>, <code><section:name></code>. For example: {{para|rfe|1}}, <code>rfe=Need more details<nocat></code>, or <code>rfe=1<box><sort:custom></code>.
; {{para|nl}}
: If set to anything, consider the entry a [[WT:Lemmas|non-lemma]].
; {{para|nodot}}
: If set to anything, removes the final period from the generated etymology text. Useful when combining with other text or templates.
; {{para|nocat}}
: If set to anything, suppresses automatic categorization.
; {{para|tree}}
: If set to anything, displays an etymology tree.
; {{para|text}}
: If set to anything, displays some text describing the etymology. The text modes are:
:* <code>+</code> — single step (immediate parent only)
:* <code>++</code> — all steps (full etymology chain)
:* <code>*</code> — to the nearest blue link (stops when it reaches an existing entry)
:* A number (e.g., <code>3</code>) — show up to that many steps
:* <code>:langcode</code> (e.g., <code>:ar</code>) — show steps until reaching a term in the specified language
:* <code>:langcode*</code> (e.g., <code>:ota*</code>) — stop at the specified language if it's a blue link, otherwise continue to the first blue link
: For more information, see {{slink|#Text}}.
; {{para|2}}, {{para|3}}, ...
: These are the etymon parameters. Each etymon parameter can be either an ''etymon'' or a ''derivation keyword''. There can be any number of etymon parameters.
===Etymons===
Etymons must be written using the following format: <code>languagecode:term<id:identifier><ref:reference></code>. For example: <code>en:pay<id:give money></code> represents {{m+|en|pay}} (etymology 1). As a shortcut, it is possible to omit the language code (i.e., just writing <code>pay<id:give money></code>). In this case, the template will assume that the language is the same as the one set in {{para|1}}.
The ID is not mandatory - simple etymons can be written as just <code>languagecode:term</code> (e.g., <code>en:father</code>) or <code>term</code> (e.g., <code>father</code> when the language matches parameter 1). However, if there are multiple etymologies for the same term on the target page, an ID must be specified to distinguish between them.
To suppress the term display (show only the language), use <code>-</code> as the term, e.g., <code>la:-</code>.
Additional inline modifiers can be used:
* <code><id:identifier></code> - specifies the etymology ID. Prefix with <code>!</code> (e.g., <code><id:!forced></code>) to force the ID even when disambiguation would normally not require it.
* <code><t:gloss></code> - provides gloss/translation
* <code><tr:transliteration></code> - provides transliteration
* <code><ts:transcription></code> - provides transcription
* <code><alt:alternative display></code> - alternative display text. Use this to suppress linking when referring to proto-language entries with a single descendant, which, according to policy, should not be created.
* <code><pos:part of speech></code> - part of speech annotation
* <code><ety:inline etymology></code> - inline etymology for redlinks (see section below)
* <code><unc></code> - when set, marks the corresponding step or element as uncertain. Note that discredited, dubious, or speculative etymologies should not be added to the template at all.
* <code><ref:reference text></code> - adds references (see References section)
* <code><aftype:type></code> - specifies the affix type when used with <code>:af</code>. Valid values: <code>prefix</code>/<code>pre</code>, <code>suffix</code>/<code>suf</code>, <code>infix</code>/<code>in</code>, <code>interfix</code>/<code>inter</code>, <code>circumfix</code>/<code>circum</code>, <code>non-affix</code>/<code>naf</code>, <code>root</code>.
* <code><postype:type></code> - specifies whether a term should be treated as a <code>root</code> or <code>word</code> for categorization purposes. Overrides the default detected from the linked page's {{para|pos}}.
* <code><bor></code> - when used on a term under <code>:af</code>, adds borrowing categories for that specific component (for affixed terms where one component is borrowed). <code><lbor></code> and <code><slbor></code> are also valid term modifiers.
* <code><senseid></code> - used for senseid's, see below on semantic loans. Multiple can be given by separating the id's with !!, e.g. <nowiki><senseid:sense1!!sense2></nowiki>.
===Inline etymology===
For terms that don't have their own entry (redlinks) or are missing an etymon template, you can specify the etymology inline using the <code><ety:...></code> modifier. This allows the tree to continue beyond redlinks.
The syntax is: <code><ety:keyword<etymon1><etymon2>...></code>
For example:
* <code>enm:example<ety:inh<ang:example>></code> - specifies that the Middle English term is inherited from Old English
* <code>la:verbum<ety:der<grc:ῥῆμα>></code> - specifies that the Latin term is derived from Greek
The inline etymology is only used when the target page is a redlink or is missing an etymon template. If the target page has a valid etymon template, the inline etymology is ignored (and a tracking category is added).
===Derivation keywords===
Each derivation keyword applies to all the etymons that follow it. Derivation keywords must be prefixed with a colon (<code>:</code>). A derivation keyword is reset by another derivation keyword. For example, <code>|:inh|etymon1|etymon2|:bor|etymon3|etymon4</code> means that a term is inherited from both etymon1 and etymon2 and also borrowed from both etymon3 and etymon4.
Using an unknown keyword (i.e. one not listed below) produces an error message.
====Keyword modifiers====
Keywords can have inline modifiers attached using angle brackets:
* <code><unc></code>: marks the derivation as uncertain; for example, <code>:bor<unc></code> means "possibly borrowed from".
* <code><ref:reference text></code>: adds a reference to the keyword (same syntax as etymon references).
* <code><conj:conjunction></code>: specifies a custom conjunction when there are multiple etymons under the same keyword (default is "or"); Examples:
** <code>:bor<conj:and/or>|es:cruzado|pt:cruzado</code> produces "Borrowed from Spanish ''cruzado'' and/or Portuguese ''cruzado''."
** <code>:bor<conj:and>|etymon1|etymon2</code> produces "...''etymon1'' and ''etymon2''."
* <code><surf></code> - used for surface analysis.
====Basic derivation====
* '''<code>:from</code>''': (default) unspecified derivation type within a language; corresponds to {{tl|from}}; only valid for same-language derivations.
* '''<code>:derived</code>''' (or '''<code>:der</code>''' in short): used when a term is derived from another language; corresponds to {{tl|derived}}.
* '''<code>:inherited</code>''' (or '''<code>:inh</code>'''): used when a term comes directly from the parent language unchanged; corresponds to {{tl|inherited}}. The template validates that the source language is a valid ancestor.
* '''<code>:uder</code>''' (short for ''undefined derivation''; no long form yet): used when the exact relationship is unclear; adds to "undefined derivations" category.
====Borrowings====
* '''<code>:bor</code>''' (alias '''<code>:borrowed</code>'''): used when a term is borrowed from another language directly; corresponds to {{tl|borrowed}}.
* '''<code>:lbor</code>''' (short for ''learned borrowing''): used for a {{lg|learned borrowing}}, that is a term is borrowed intentionally rather than through normal language contact; corresponds to {{tl|learned borrowing}}.
* '''<code>:slbor</code>''' (short for ''semi-learned borrowing''): used for a learned borrowing which is reshaped somewhat; corresponds to {{tl|semi-learned borrowing}}.
* '''<code>:obor</code>''' (short for ''orthographic borrowing''): used for {{lg|orthographic borrowing}}s; corresponds to {{tl|orthographic borrowing}}.
* '''<code>:ubor</code>''' (short for ''unadapted borrowing''): used for direct borrowings that retain original orthography; corresponds to {{tl|unadapted borrowing}}.
====Semantic relationships====
* '''<code>:calque</code>''' (aliases '''<code>:cal</code>''' or '''<code>:clq</code>'''): used for {{lg|calque}}s; corresponds to {{tl|calque}}; non-transitive (does not follow the chain further).
* '''<code>:partial calque</code>''' (or '''<code>:pcal</code>'''): used for {{lg|partial calque}}s; corresponds to {{tl|partial calque}}; non-transitive.
* '''<code>:semantic loan</code>''' (or '''<code>:sl</code>'''): used for {{lg|semantic loan}}s; corresponds to {{tl|semantic loan}}; non-transitive; the loaned sense may be linked using <nowiki><senseid></nowiki>, so long as {{temp|senseid}} is present near the appropriate definition.
* '''<code>:influence</code>''' (no short form yet): used when a term is influenced in some way by another (e.g. the modern meaning of {{m+|en|discomfit}} is influenced by the unrelated word {{m|en|discomfort}}); non-transitive.
====Word formation====
* '''<code>:affix</code>''' (or '''<code>:af</code>'''): used for compounds, affixation, and any other template whose output contains a <code>+</code> between two terms; parameter order matters: <code>|:af|etymon1|etymon2</code> means etymon1 + etymon2; corresponds to {{tl|affix}}, {{tl|compound}}, and others; generates affix categories automatically. Keywords like ``:af`` or ``:deverbal`` can be marked with <nowiki><surf></nowiki> for surface analysis.
* '''<code>:afeq</code>''' (short for "equivalent affix"): used as a "hidden {{tl|af}}", meaning that etymons with this keyword shall be invisible in tree and text output, but their respective categories shall still be generated; as an example, {{m|en|childhood}}, from {{m+|enm|childhode}} (pronounced ''cheeld-hohd''), is {{em|equivalent}} to {{af|en|child|-hood}}.
* '''<code>:blend</code>''': used for {{lg|blend}}s; corresponds to {{tl|blend}}.
* '''<code>:reduplication</code>''' (or '''<code>:redup</code>'''): used for {{lg|reduplication|reduplications}}; corresponds to {{tl|reduplication}}.
* '''<code>:abbreviation</code>''' (or '''<code>:abbr</code>'''): used for {{lg|abbreviation|abbreviations}}; corresponds to {{tl|abbreviation}}.
* '''<code>:syllabic abbreviation</code>''' (or '''<code>:sylabbr</code>'''): used for {{lg|syllabic abbreviation|syllabic abbreviations}}; corresponds to {{tl|syllabic abbreviation}}.
* '''<code>:acronym</code>''' (alias '''<code>:acro</code>'''): used for {{lg|acronym}}s; corresponds to {{tl|acronym}}.
* '''<code>:initialism</code>''' (alias '''<code>:init</code>'''): used for {{lg|initialism}}s; corresponds to {{tl|initialism}}.
* '''<code>:clipping</code>''' (or '''<code>:clip</code>'''): used for {{lg|clipping}}s; corresponds to {{tl|clipping}}.
* '''<code>:ellipsis</code>''' (alias '''<code>:ellip</code>'''): used for {{lg|ellipsis|elliptical forms}}; corresponds to {{tl|ellipsis}}.
* '''<code>:univerbation</code>''' (or '''<code>:univ</code>'''): used for {{lg|univerbation}}; corresponds to {{tl|univerbation}}.
* '''<code>:back-formation</code>''' (alias '''<code>:bf</code>'''): used for {{lg|back-formation|back-formations}}; corresponds to {{tl|back-formation}}.
* '''<code>:apheretic</code>''' (alias '''<code>:apheresis</code>''' or '''<code>:aphetic</code>'''): used for {{lg|apheresis|apheretic forms}}.
* '''<code>:denominal</code>''' (alias '''<code>:denom</code>'''): used for {{lg|denominal}}s; corresponds to {{tl|denominal verb}}.
* '''<code>:deverbal</code>''': used for {{lg|deverbal}}s; corresponds to {{tl|deverbal}}.
* '''<code>:sa-af</code>''': used for Sanskritic formations.
* '''<code>:vrd-af</code>''': used for Sanskrit vṛddhi derivatives with an affix. See '''<code>:vrd</code>''' below.
====Other====
* '''<code>:transliteration</code>''' (or '''<code>:translit</code>'''): used when a term is transliterated from another script; corresponds to {{tl|transliteration}}.
* '''<code>:vrd</code>''' (short for "vṛddhi derivative"): used for Sanskrit vṛddhi derivatives.
* '''<code>:root</code>''': marks the following etymons as roots for categorization purposes. The etymons will be categorized under "terms belonging to the root X" or "terms derived from the root X". This keyword is invisible in tree and text output.
===References===
References can be added to etymons using inline modifiers with the syntax <code><ref:reference text></code>. Multiple references can be separated by <code> !!! </code> (with spaces around the exclamation marks). References support the same syntax as other Wiktionary reference templates, including named references and groups (see [[Module:references]]). References are only displayed when {{para|text}} is set and only on the same entry they are defined, not on any descendants.
Examples:
* <code>la:verbum<ref:{{temp|R:L&S}}></code> - single reference
** Equivalent to <code><nowiki><ref>{{R:L&S}}</ref></nowiki></code>
* <code>la:verbum<ref:{{temp|R:L&S}}<<name:LS>> !!! {{temp|R:Gaffiot}}></code> - multiple references with naming
** Equivalent to <code><nowiki><ref name="LS">{{R:L&S}}</ref><ref>{{R:Gaffiot}}</ref></nowiki></code>
* <code>la:verbum<ref:<<name:LS>>></code> - reference to previously named reference
** Equivalent to <code><nowiki><ref name="LS"/></nowiki></code>
* <code>la:verbum<ref:{{temp|R:L&S}}<<name:LS>><<group:etymology>>></code> - named reference with group
** Equivalent to <code><nowiki><ref name="LS" group="etymology">{{R:L&S}}</ref></nowiki></code>
===Trees===
{{shortcut|WT:ETYTREE}}<!-- Creating shortcuts from project namespace as this normally would be in a policy page. -->
If the parameter {{para|tree|1}} is set, an etymology tree is inserted.
Per an April 2024 vote, each language community decides when it is appropriate to show a tree on a particular entry.<ref>[[Wiktionary:Votes/2024-04/Allowing etymology trees on entries]]</ref> Additionally, trees should not be displayed for clear open compounds like {{m|en|United States of America}}.<ref>{{section link|Wiktionary:Beer parlour/2024/June#Use of etymology trees made with Template:etymon in the entries for multi-word terms}}</ref>
Keywords with <code>no_child_categories</code> (such as <code>:calque</code>, <code>:sl</code>, <code>:pcal</code>, <code>:influence</code>) will have their subtrees hidden in the tree display, as these represent non-transitive relationships where the further etymology is not directly relevant. Similarly, duplicate nodes (when the same term appears multiple times in a tree) do not re-display their ancestry. In both cases, an L-shaped dotted connector indicates hidden ancestry, and duplicate nodes are additionally styled with dashed borders.
===Text===
{{anchor|Text allowlist}}
{{shortcut|WT:ETYTEXT}}<!-- See ETYTREE above. -->
The {{para|text}} parameter may be set to automatically generate a text description from the given data. The parameter should only be used in entries under the languages whose editing communities have explicitly approved it and as long as this does not imply the removal of valuable information which cannot be produced by the module.<ref>[[Wiktionary:Votes/2026-01/Reconsidering the parameters text and tree of etymon]]</ref>
The following languages and families have allowed its usage. Any language in an allowed family (e.g. Indo-Aryan for family code <code>inc</code>) is also allowed.
{{#invoke:etymon/doc|text_allowed_list}}
==Language-specific behavior==
Some languages have special handling configured in the module:
===Chinese===
Etymology trees and text are disabled for Chinese languages (those in the <code>zhx</code> family, excluding contact languages (e.g. creoles, pidgins, mixed languages)). See [[Wiktionary:Beer parlour/2025/May#Template:etymon for Chinese]] for discussion. Categories are also suppressed, and transliterations are not displayed.
===Finnish===
The <code>:af</code> keyword is non-transitive for Finnish, meaning the etymology chain stops at affixed terms.
==Examples==
<code>{{tlf|etymon|en|id=male parent|:inh|enm:fader<id:father>}}</code> (on {{m+|en|father|id=male parent}})
This means: ''father'' is inherited from Middle English ''fader''.
<code>{{tlf|etymon|en|:inh|enm:fader}}</code> (on a page with only one etymology)
This also works when there is only one etymology—no ID required on either side.
<code>{{tlf|etymon|ine-pro|id=father|:af|*peh₂-<id:protect><unc>|*-tḗr<id:agent noun><unc>}}</code> (on {{m+|ine-pro|*ph₂tḗr|id=father}})
This means: ''*ph₂tḗr'' might come from ''*peh₂'' + ''*-tḗr''. In this case, the etymons are associated with the derivation keyword ":af". Note that since the language is not specified for either etymon, the template assumes that the two etymons are <code>ine-pro</code> (Proto-Indo-European).
<code>{{tlf|etymon|pl|:deverbal|podłożyć<id:put>}}</code> (on {{m+|pl|podłoga}})
This means: ''podłoga'' comes from Polish ''podłożyć''.
<code>{{tlf|etymon|en|id=bundle of flowers|:bor|fr:bouquet<id:bundle><ref:{{temp|R:TLFi}}>|text=+}}</code>
This means: ''bouquet'' is borrowed from French ''bouquet'', with a reference to the TLFi dictionary. The reference will appear after the period in the generated text: "Borrowed from French ''bouquet''.<sup>[1]</sup>"
<code>{{tlf|etymon|en|id=example|:af|un-|happy<aftype:naf>}}</code>
Using <code><aftype:naf></code> to mark "happy" as a non-affix (the base word) rather than letting auto-detection determine the affix type.
<code>{{tlf|etymon|en|id=example|:root|ine-pro:*bʰer-<id:carry>}}</code>
Using <code>:root</code> to categorize the term under "English terms derived from the Proto-Indo-European root *bʰer-" without showing this in the tree or text.
<code>{{tlf|etymon|en|id=example|:der|la:exemplum<ety:inh<la:eximō>>}}</code>
Using inline etymology to specify that Latin ''exemplum'' is inherited from ''eximō'', useful when the Latin page doesn't have an etymon template.
<code>{{tlf|etymon|en|:bor<conj:and/or>|es:cruzado|pt:cruzado|text=+}}</code>
Using the <code><conj:and/or></code> modifier to specify a custom conjunction. This produces: "Borrowed from Spanish ''cruzado'' and/or Portuguese ''cruzado''."
===Suppressed terms===
<code>{{tlf|etymon|en|id=example|:inh|enm:-<t:some term>}}</code>
Using <code>-</code> as the term to suppress the term display and show only the language. The gloss and other modifiers are still displayed.
===Text output modes===
<code>{{tlf|etymon|en|id=example|:inh|enm:word|text=+}}</code>
Using {{para|text|+}} to show only the immediate etymon (one step).
<code>{{tlf|etymon|en|id=example|:inh|enm:word|text=++}}</code>
Using {{para|text|++}} to show the full etymology chain (all steps, following through to the ultimate origin).
<code>{{tlf|etymon|en|id=example|:inh|enm:word|text=*}}</code>
Using {{para|text|*}} to show the etymology chain until reaching the first existing entry (blue link).
<code>{{tlf|etymon|en|id=example|:inh|enm:word|text=3}}</code>
Using {{para|text|3}} to show up to 3 steps in the etymology chain.
<code>{{tlf|etymon|en|id=example|:der|ar:كلمة|text=:ar}}</code>
Using {{para|text|:ar}} to show the etymology chain until reaching an Arabic term. Invalid language codes will trigger a warning and default to showing the full chain.
<code>{{tlf|etymon|en|id=title|:bor|ota:پاشا<tr:paşa><ety:bor<fa-cls:پَادْشَاه>>|text=:ota*}}</code>
Using {{para|text|:ota*}} on {{m+|en|pasha}} to stop at Ottoman Turkish if it exists, otherwise continue to Persian.
===Multiple etymon sources===
<code>{{tlf|etymon|en|id=example|:bor<unc>|es:palabra|pt:palavra}}</code>
Multiple etymons under the same keyword with uncertainty. The <code><unc></code> modifier on the keyword marks the entire derivation as uncertain ("Possibly borrowed from...").
<code>{{tlf|etymon|en|id=example|:inh|enm:word|:bor|fr:mot}}</code>
Multiple keywords in sequence. This indicates the term is both inherited from Middle English ''word'' and also borrowed from French ''mot'' (e.g., for different senses or competing etymologies).
<code>{{tlf|etymon|en|id=example|:af|un-<aftype:pre>|happy<aftype:naf>|-ness<aftype:suf>}}</code>
Complex affixation with explicit affix types. The <code><aftype:...></code> modifier specifies whether each component is a prefix (<code>pre</code>), suffix (<code>suf</code>), infix (<code>in</code>), interfix (<code>inter</code>), circumfix (<code>circum</code>), non-affix base word (<code>naf</code>), or root (<code>root</code>).
===Semantic relationships===
<code>{{tlf|etymon|en|id=modern sense|:influence|en:comfort<id:ease>}}</code>
Using <code>:influence</code> to indicate semantic influence. This is non-transitive (does not continue the etymology chain). Useful for cases like ''discomfit'' being influenced by ''discomfort''.
<code>{{tlf|etymon|en|id=example|:calque|de:Weltanschauung}}</code>
Using <code>:calque</code> for calques. Non-transitive; the etymology of the source term is not followed.
<code>{{tlf|etymon|en|id=example|:pcal|fr:gratte-ciel}}</code>
Using <code>:pcal</code> (partial calque). Also non-transitive.
<code>{{tlf|etymon|en|id=example|:sl|la:musculus<id:muscle>}}</code>
Using <code>:sl</code> (semantic loan). Also non-transitive.
===Specialized borrowings===
<code>{{tlf|etymon|en|id=example|:lbor|la:exemplum}}</code>
Using <code>:lbor</code> for learned borrowings (terms borrowed through literary or scholarly transmission rather than natural language contact).
<code>{{tlf|etymon|es|id=example|:slbor|la:capitulum}}</code>
Using <code>:slbor</code> for semi-learned borrowings (learned borrowings that have been partially adapted to native phonology).
<code>{{tlf|etymon|en|id=example|:ubor|fr:déjà vu}}</code>
Using <code>:ubor</code> for unadapted borrowings (terms borrowed with original orthography intact).
<code>{{tlf|etymon|ja|id=example|:obor|zh:電話}}</code>
Using <code>:obor</code> for orthographic borrowings (borrowing of written characters/script).
===Word formation===
<code>{{tlf|etymon|en|id=example|:blend|motor|hotel}}</code>
Using <code>:blend</code> for blends (portmanteau words).
<code>{{tlf|etymon|en|id=example|:univ|good|bye}}</code>
Using <code>:univerbation</code> (or <code>:univ</code>) for univerbation (multiple words becoming one).
<code>{{tlf|etymon|en|id=example|:clip|advertisement}}</code>
Using <code>:clipping</code> (or <code>:clip</code>) for clippings.
<code>{{tlf|etymon|en|id=example|:bf|editor}}</code>
Using <code>:back-formation</code> (or <code>:bf</code>) for back-formations.
<code>{{tlf|etymon|en|id=example|:apheretic|esquire}}</code>
Using <code>:apheretic</code> (or <code>:apheresis</code>) for apheretic forms (loss of initial unstressed vowel).
<code>{{tlf|etymon|en|id=example|:denominal|hammer}}</code>
Using <code>:denominal</code> (or <code>:denom</code>) for denominal verbs (verbs derived from nouns).
<code>{{tlf|etymon|en|id=example|:deverbal|speak}}</code>
Using <code>:deverbal</code> for deverbals (nouns/adjectives derived from verbs).
===Inline etymology for redlinks===
<code>{{tlf|etymon|en|id=example|:der|xno:mot<ety:inh<fro:mot<ety:inh<la:muttum>>>>}}</code>
Using nested inline etymologies to specify a full chain for terms without entries. This specifies that Anglo-Norman ''mot'' is inherited from Old French ''mot'', which is inherited from Latin ''muttum''.
<code>{{tlf|etymon|en|id=example|:der|enm:word<ety:af<ang:word><-s>>}}</code>
Inline etymology with affixation—specifies the Middle English term is formed from Old English ''word'' + ''-s''.
===References===
<code>{{tlf|etymon|en|id=example|:bor|fr:mot<ref:{{temp|R:TLFi}} !!! {{temp|R:Larousse}}>}}</code>
Multiple references on a single etymon, separated by <code> !!! </code> (with spaces).
<code>{{tlf|etymon|en|id=example|:bor<ref:{{temp|R:OED}}>|fr:mot}}</code>
Reference on the keyword itself (applies to the derivation relationship, not just the term).
<code>{{tlf|etymon|en|id=example|:der|la:verbum<ref:<<name:LS>>{{temp|R:L&S}}>}}</code>
Named reference using <code><<name:LS>></code> syntax, which allows re-use elsewhere with <code><ref:<<name:LS>>></code>.
<code>{{tlf|etymon|en|id=example|:der|la:verbum<ref:<<group:etymology>>{{temp|R:L&S}}>}}</code>
Reference with a group, for use with grouped reference lists.
===Tree display===
<code>{{tlf|etymon|en|id=example|:inh|enm:word|tree=1}}</code>
Using {{para|tree|1}} to display an etymology tree.
===Combined features===
<code>{{tlf|etymon|en|id=give money|:inh|enm:payen<id:pay><ref:{{temp|R:MED}}>|text=++|tree=1}}</code>
Comprehensive example combining: etymology ID, inheritance keyword, etymon with ID and reference, full text output, and tree display.
<code>{{tlf|etymon|en|id=example|etydate=1500s<ref:{{temp|R:OED}}>|:bor<unc>|fr:exemple<t:example><tr:ɛɡzɑ̃pl>|text=+|nodot=1}}</code>
Example with attestation date, uncertain borrowing, gloss and transliteration, single-step text output, and no final period (for combining with additional text).
See [[Template:etymon/testcases]] for test cases and more examples of use.
==Categorization==
The template generates various categories depending on how it is used, including the ones within:
* [[:Category:Entries referencing ambiguous etymons by language]]
* [[:Category:Entries referencing etymons with mismatched IDs by language]]
* [[:Category:Entries with etymology trees by language]]
* [[:Category:Entries with etymology texts by language]]
* [[:Category:Pages with etymology trees]]
* [[:Category:Pages with inline etymon for redlinks]]
* [[:Category:Pages with redundant inline etymon]]
* [[:Category:Pages using etymon with no ID]]
* [[:Category:Terms coined ex nihilo by language]]
as well as various standard etymology categories depending on what entries exist in the tree:
* Borrowing categories (e.g., [[:Category:English terms borrowed from French]])
* Inheritance categories (e.g., [[:Category:English terms inherited from Middle English]])
* Affix categories (e.g., [[:Category:English terms prefixed with un-]])
* Root categories (e.g., [[:Category:English terms derived from the Proto-Indo-European root *bʰer-]])
* Specialized borrowing categories (learned, semi-learned, orthographic, unadapted)
* Calque, partial calque, and semantic loan categories
==Tracking==
{{hatnote|See also: [[Wiktionary:Tracking#Etymon]].}}
The module tracks various statistics for debugging and analysis:
* Tree depth (how many generations deep the etymology goes)
* Number of nodes (total terms in the tree)
* Number of unique languages
* Linear vs. branching trees
These can be found in the tracking categories under <code>Template:tracking/etymon/</code>.
==References==
{{reflist}}
==TemplateData==
{{TemplateData header}}
<templatedata>
{
"description": "This template may be used indicate a term's immediate ancestor(s).",
"params": {
"1": {
"label": "Language",
"description": "The language of the current entry.",
"type": "string",
"required": true,
"suggested": true,
"example": "en"
},
"2": {
"label": "Etymon parameter #1",
"description": "The first etymon parameter. Typically for derivation keyword.",
"type": "string",
"example": ":der, alternatively - enm:fader<id:father>"
},
"3": {
"label": "Etymon parameter #2",
"description": "The second etymon parameter.",
"type": "string"
},
"4": {
"label": "Etymon parameter #3",
"description": "The third etymon parameter.",
"type": "string"
},
"5": {
"label": "Etymon parameter #4",
"description": "The fourth etymon parameter.",
"type": "string"
},
"6": {
"label": "Etymon parameter #5",
"description": "The fifth etymon parameter.",
"type": "string"
},
"7": {
"label": "Etymon parameter #6",
"description": "The sixth etymon parameter.",
"type": "string"
},
"8": {
"label": "Etymon parameter #7",
"description": "The seventh etymon parameter.",
"type": "string"
},
"9": {
"label": "Etymon parameter #8",
"description": "The eighth etymon parameter.",
"type": "string"
},
"id": {
"label": "Etymology ID",
"description": "The ID of the current etymology section. Required when there are multiple etymologies for the same term.",
"type": "string",
"suggested": true,
"example": "male parent"
},
"title": {
"label": "Title",
"description": "The title of the current entry (if different from the page title)",
"type": "string",
"example": "father"
},
"pos": {
"label": "Part of speech",
"description": "The part of speech (prefix, suffix, interfix, infix, root, word)",
"type": "string",
"example": "root"
},
"etydate": {
"label": "Etymology date",
"description": "The date or time period when the term was first attested",
"type": "string",
"example": "1500s<ref:{{R:OED}}>"
},
"rfe": {
"label": "Request for etymology",
"description": "Adds a request for etymology notice. Set to 1 for standard notice, or provide custom text. Supports inline modifiers.",
"type": "string",
"example": "1, or Need more details<nocat>"
},
"exnihilo": {
"label": "Ex nihilo",
"description": "Set to categorize as a term coined ex nihilo",
"type": "boolean"
},
"nl": {
"label": "Non-lemma",
"description": "Set to consider the entry a non-lemma",
"type": "boolean"
},
"nocat": {
"label": "No categories",
"description": "Set to suppress automatic categorization",
"type": "boolean"
},
"nodot": {
"label": "No dot",
"description": "Set to remove the final period from generated text",
"type": "boolean"
},
"tree": {
"label": "Tree",
"description": "Set this to \"1\" to display a tree.",
"type": "string",
"example": "1"
},
"text": {
"label": "Text",
"description": "Automatically generates some text. Values: + (single step), ++ (all steps), * (to nearest blue link), a number (max steps), :langcode (stop at language), :langcode* (stop at language or first blue link if redlink)",
"type": "string",
"example": "++"
}
},
"paramOrder": [
"1",
"id",
"title",
"pos",
"rfe",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"etydate",
"exnihilo",
"text",
"tree",
"nl",
"nocat",
"nodot"
],
"format": "inline"
}
</templatedata>
<includeonly>
[[Category:Etymology templates]]
</includeonly>
gg3jxcylqanm8wqksoanoyo2nmrn9nj
แม่แบบ:em
10
2356370
5754454
2026-08-06T05:01:35Z
Octahedron80
267
นำเข้าจาก enwikt
5754454
wikitext
text/x-wiki
<includeonly><em {{#if:{{{role|}}}|role="{{{role}}}"}} {{#if:{{{class|}}}|class="{{{class}}}"}} {{#if:{{{id|}}}|id="{{{id}}}"}} {{#if:{{{style|}}}|style="{{{style}}}"}} {{#if:{{{title|}}}|title="{{{title}}}"}}>{{{1|}}}</em></includeonly><!--
--><noinclude>{{documentation}}</noinclude>
ip3xyuvn2mypgby6n7nuivbndw1rt05
แม่แบบ:slink
10
2356371
5754455
2026-08-06T05:02:01Z
Octahedron80
267
นำเข้าจาก enwikt
5754455
wikitext
text/x-wiki
#REDIRECT [[Template:section link]]
25rnn1o0nixw6g8mzkdpljt6yyj1fa4
nemmen
0
2356372
5754466
2026-08-06T06:03:42Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5754466
wikitext
text/x-wiki
== ภาษาคิมบรี ==
=== รากศัพท์ ===
จาก{{inh|cim|gmh|nëmen}}, จาก{{inh|cim|goh|neman}}, จาก{{inh|cim|gmw-pro|*neman}}, จาก{{inh|cim|gem-pro|*nemaną||เอา}}; ร่วมเชื้อสายกับ{{cog|de|nehmen}}, {{cog|en|nim}}
=== คำกริยา ===
{{cim-verb-strong|class=4|||håm}}
# {{lb|cim|Luserna}} [[เอา]]
=== อ้างอิง ===
* {{R:Patuzzi}}
* {{R:CLM}}
ioiwl4j5c8nyzme62xk5ysjd5t2vffn
nemnen
0
2356373
5754467
2026-08-06T06:04:09Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5754467
wikitext
text/x-wiki
== ภาษาเยอรมันสูงเก่า ==
=== รากศัพท์ ===
{{etymon|goh|id=to name|:inh|gmw-pro:*namnijan<id:to name>}}
จาก{{inh|goh|gmw-pro|*namnijan}}, จาก{{inh|goh|gem-pro|*namnijaną}}
=== คำกริยา ===
{{goh-verb}}
# {{lb|goh|transitive}} [[ตั้ง]][[ชื่อ]]
==== การผันรูป ====
{{goh-conj-wk1|nemn|nan}}
==== คำสืบทอด ====
* {{desc|gmh|nemnen|nennen}}
** {{desc|de|nennen}}
tffque0ihisq33m5uxvfhwfhidr2tep
แม่แบบ:RQ:Heyking Orgelpfeifen
10
2356374
5754470
2026-08-06T06:15:41Z
Octahedron80
267
นำเข้าจาก enwikt
5754470
wikitext
text/x-wiki
{{#invoke:quote|call_quote_template
|de
|chapter=s:de:Die Orgelpfeifen
|title=Zwei Erzählungen
|author=w:Elisabeth von Heyking
|year=1918
|publisher=Phillipp Reclam jun. Verlag
|location=Leipzig
|pageurl=https://www.deutschestextarchiv.de/book/view/heyking_erzaehlungen_1918?p={{#expr: {{{page|0}}} + 2}}
|propagateparams=page,t,translation
}}<noinclude>{{documentation}}</noinclude>
b6m6z8ts8blbqm9d7mcjhn9fzd6k222
ᨩ᩠ᨿᨦᨡᩕᩬᨦ
0
2356375
5754474
2026-08-06T07:11:44Z
Ai Ku Karng
17824
สร้างหน้าด้วย "== ภาษาคำเมือง == === รูปแบบอื่น === {{nod-alt|l=เชียงขรอง|s=เจียงฃอง}} === รากศัพท์ === {{com|nod|ᨩ᩠ᨿᨦ|ᨡᩕᩬᨦ|t1=เชียง, เมือง|t2=โขง, แม่น้ำโขง}} === การออกเสียง === * {{IPA|nod|/t͡ɕiaŋ˧˧.xɔːŋ˨˦/|a=เชียงใหม่}} === คำวิสามานยน..."
5754474
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
{{nod-alt|l=เชียงขรอง|s=เจียงฃอง}}
=== รากศัพท์ ===
{{com|nod|ᨩ᩠ᨿᨦ|ᨡᩕᩬᨦ|t1=เชียง, เมือง|t2=โขง, แม่น้ำโขง}}
=== การออกเสียง ===
* {{IPA|nod|/t͡ɕiaŋ˧˧.xɔːŋ˨˦/|a=เชียงใหม่}}
=== คำวิสามานยนาม ===
{{nod-proper noun}}
# (อำเภอ) [[เชียงของ]]
{{topics|nod|เชียงราย}}
2w59m8frtdu71xbklefkswf8vtkblgw
แม่แบบ:PIE word
10
2356376
5754505
2026-08-06T07:57:22Z
OctraBot
3198
นำเข้าจาก enwikt
5754505
wikitext
text/x-wiki
{{#invoke:checkparams|error}}<!-- Validate template parameters
-->{{#if:{{{nobox|}}}||<table class="wikitable floatright PIE-word" style="text-align: center;"><!--
--><tr><th>PIE word</th></tr><!--
--><tr><td>{{l|ine-pro|*{{{2|<noinclude>deywós</noinclude>}}}|id={{{id|}}}}}</td></tr><!--
--></table><!--
-->}}{{word|{{{1|<noinclude>und</noinclude>}}}|ine|{{{2|<noinclude>deywós</noinclude>}}}|id={{{id|}}}}}<!--
--><noinclude>{{documentation}}</noinclude>
6yesa77e8h00ekdsroy4xn84xiag8vm
5754506
5754505
2026-08-06T07:59:56Z
OctraBot
3198
5754506
wikitext
text/x-wiki
{{#invoke:checkparams|error}}<!-- Validate template parameters
-->{{#if:{{{nobox|}}}||<table class="wikitable floatright PIE-word" style="text-align: center;"><!--
--><tr><th>ศัพท์ PIE</th></tr><!--
--><tr><td>{{l|ine-pro|*{{{2|<noinclude>deywós</noinclude>}}}|id={{{id|}}}}}</td></tr><!--
--></table><!--
-->}}{{word|{{{1|<noinclude>und</noinclude>}}}|ine|{{{2|<noinclude>deywós</noinclude>}}}|id={{{id|}}}}}<!--
--><noinclude>{{documentation}}</noinclude>
fqpxp8ebabmje2pcg2qr4hyp0as9phm
แม่แบบ:word
10
2356377
5754507
2026-08-06T08:20:43Z
OctraBot
3198
นำเข้าจาก enwikt
5754507
wikitext
text/x-wiki
{{#invoke:checkparams|error}}<!-- Validate template parameters
--><includeonly><!--
-->{{dercat|{{{1}}}|{{{2}}}-pro}}<!--
-->{{catlangname|{{{1}}}|ศัพท์ที่รับมาจากภาษา{{langname|{{{2}}}-pro}} *{{{3}}} {{#if:{{{id|}}}|({{{id|}}})}}}}<!--
--></includeonly><noinclude>{{documentation}}</noinclude>
csnyv41phdbg7hedt713tjy94va4pvb
qus
0
2356378
5754534
2026-08-06T09:12:19Z
OctraBot
3198
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5754534
wikitext
text/x-wiki
== ภาษาร่วม ==
=== รากศัพท์ ===
{{abbrev|mul|en:[['''Qu'''echua]], [['''S'''antiagueño]]}}.
=== สัญลักษณ์ ===
{{mul-symbol}}
# {{ISO 639|3|Santiagueño Quechua}}
== ภาษาการากัลปัก ==
=== รากศัพท์ ===
จาก{{inh|kaa|trk-pro|*kuĺ}}
=== คำนาม ===
{{kaa-noun}}
# [[นก]]
=== อ้างอิง ===
* {{R:kaa:Baskakov|қус}}
== ภาษาฝรั่งเศส ==
=== การออกเสียง ===
* {{fr-IPA}}
* {{audio|fr|LL-Q150 (fra)-Lyokoï-qus.wav|a=<<France>> (<<Lyon>>)}}
=== คำนาม ===
{{head|fr|รูปนาม|g=m}}
# {{plural of|fr|qu}}
s06ubmdp2ozogn8byym3p7p0foc1pen
ihm
0
2356379
5754557
2026-08-06T10:34:11Z
Ponpan
693
เก็บกวาด
5754557
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== รูปแบบอื่น ===
* {{l|de|jm}}, {{l|de|jhm}}, {{l|de|ym}}, {{l|de|yhm}} {{qual|เยอรมันสูงใหม่ตอนต้น}}
* {{l|de|ihme}} {{qual|ล้าสมัย}}
=== การออกเสียง ===
* {{qualifier|มาตรฐาน}} {{IPA|de|/iːm/}}
:* {{audio|de|De-ihm.ogg}}
:* {{audio|de|De-ihm2.ogg|a=<<Germany>> (<<Berlin>>)}}
:* {{rhymes|de|iːm}}
* {{qualifier|ภาษาพูดในตำแหน่งที่ไม่เน้นเสียง}} {{IPA|de|/əm/}}
=== คำสรรพนาม ===
{{head|de|รูปสรรพนาม}}
# {{lb|de|สรรพนามบุคคล}} {{inflection of|de|er||dat|t=เขา (ผู้ชาย)}}; [[แก่]]เขา, [[ให้]]เขา, [[เพื่อ]]เขา เป็นต้น
#: {{ux|de|Könntest du '''ihm''' deinen Stift geben? ({{audio|de|De-Könntest du ihm deinen Stift geben..ogg}})|เธอช่วยเอาปากกาของเธอให้เขาได้ไหม?}}
#: {{ux|de|Schnell! Gib '''ihm''' das! ({{audio|de|De-Schnell! Gib ihm das!.ogg}})|เร็วเข้า! ส่งสิ่งนั้นให้เขา!}}
# {{lb|de|สรรพนามบุคคล}} {{inflection of|de|es||dat|t=มัน}}; [[แก่]]มัน, [[ให้]]มัน, [[เพื่อ]]มัน เป็นต้น
==== ดูเพิ่ม ====
{{german personal pronouns}}
=== อ่านเพิ่ม ===
* {{R:de:Duden}}
* {{R:de:DWDS}}
2jy8cwif1ax26auut8dz9hcwct0k7dt
5754558
5754557
2026-08-06T10:35:40Z
Ponpan
693
/* คำสรรพนาม */
5754558
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== รูปแบบอื่น ===
* {{l|de|jm}}, {{l|de|jhm}}, {{l|de|ym}}, {{l|de|yhm}} {{qual|เยอรมันสูงใหม่ตอนต้น}}
* {{l|de|ihme}} {{qual|ล้าสมัย}}
=== การออกเสียง ===
* {{qualifier|มาตรฐาน}} {{IPA|de|/iːm/}}
:* {{audio|de|De-ihm.ogg}}
:* {{audio|de|De-ihm2.ogg|a=<<Germany>> (<<Berlin>>)}}
:* {{rhymes|de|iːm}}
* {{qualifier|ภาษาพูดในตำแหน่งที่ไม่เน้นเสียง}} {{IPA|de|/əm/}}
=== คำสรรพนาม ===
{{head|de|รูปสรรพนาม}}
# {{lb|de|บุรุษสรรพนาม}} {{inflection of|de|er||dat|t=เขา (ผู้ชาย)}}; [[แก่]]เขา, [[ให้]]เขา, [[เพื่อ]]เขา เป็นต้น
#: {{ux|de|Könntest du '''ihm''' deinen Stift geben? ({{audio|de|De-Könntest du ihm deinen Stift geben..ogg}})|เธอช่วยเอาปากกาของเธอให้เขาได้ไหม?}}
#: {{ux|de|Schnell! Gib '''ihm''' das! ({{audio|de|De-Schnell! Gib ihm das!.ogg}})|เร็วเข้า! ส่งสิ่งนั้นให้เขา!}}
# {{lb|de|บุรุษสรรพนาม}} {{inflection of|de|es||dat|t=มัน}}; [[แก่]]มัน, [[ให้]]มัน, [[เพื่อ]]มัน เป็นต้น
==== ดูเพิ่ม ====
{{german personal pronouns}}
=== อ่านเพิ่ม ===
* {{R:de:Duden}}
* {{R:de:DWDS}}
iwgbstpccd5tp4iktxuyval2l3xj6cq
5754559
5754558
2026-08-06T10:37:50Z
Ponpan
693
/* รูปแบบอื่น */
5754559
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== รูปแบบอื่น ===
* {{l|de|jm}}, {{l|de|jhm}}, {{l|de|ym}}, {{l|de|yhm}} {{qual|เยอรมันสูงใหม่ตอนต้น}}
* {{l|de|ihme}} {{qual|เลิกใช้}}
=== การออกเสียง ===
* {{qualifier|มาตรฐาน}} {{IPA|de|/iːm/}}
:* {{audio|de|De-ihm.ogg}}
:* {{audio|de|De-ihm2.ogg|a=<<Germany>> (<<Berlin>>)}}
:* {{rhymes|de|iːm}}
* {{qualifier|ภาษาพูดในตำแหน่งที่ไม่เน้นเสียง}} {{IPA|de|/əm/}}
=== คำสรรพนาม ===
{{head|de|รูปสรรพนาม}}
# {{lb|de|บุรุษสรรพนาม}} {{inflection of|de|er||dat|t=เขา (ผู้ชาย)}}; [[แก่]]เขา, [[ให้]]เขา, [[เพื่อ]]เขา เป็นต้น
#: {{ux|de|Könntest du '''ihm''' deinen Stift geben? ({{audio|de|De-Könntest du ihm deinen Stift geben..ogg}})|เธอช่วยเอาปากกาของเธอให้เขาได้ไหม?}}
#: {{ux|de|Schnell! Gib '''ihm''' das! ({{audio|de|De-Schnell! Gib ihm das!.ogg}})|เร็วเข้า! ส่งสิ่งนั้นให้เขา!}}
# {{lb|de|บุรุษสรรพนาม}} {{inflection of|de|es||dat|t=มัน}}; [[แก่]]มัน, [[ให้]]มัน, [[เพื่อ]]มัน เป็นต้น
==== ดูเพิ่ม ====
{{german personal pronouns}}
=== อ่านเพิ่ม ===
* {{R:de:Duden}}
* {{R:de:DWDS}}
9xleffsy32mom6r9focgljnsq3lh68a
ihn
0
2356380
5754560
2026-08-06T10:46:16Z
Ponpan
693
เก็บกวาด
5754560
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{qualifier|มาตรฐาน}} {{IPA|de|/iːn/}}
:* {{audio|de|De-ihn.ogg}}
:* {{audio|de|De-ihn2.ogg|a=<<Germany>> (<<Berlin>>)}}
:* {{rhymes|de|iːn}}
* {{qualifier|ภาษาพูดในตำแหน่งที่ไม่เน้นเสียง}} {{IPA|de|/ən/}}
=== คำสรรพนาม ===
{{head|de|รูปสรรพนาม}}
# {{lb|de|บุรุษสรรพนาม}} {{inflection of|de|er||acc|t=[[เขา]] (ผู้ชาย), [[มัน]] (คำนามเพศชาย)}}
#: {{ux|de|Ich suche Matthias. Hast du '''ihn''' gesehen? ({{audio|de|De-Ich suche Matthias. Hast du ihn gesehen..ogg}})|ฉันกำลังตามหามัททีอัส เธอเห็น'''เขา'''ไหม}}
#: {{ux|de|Ich suche den Dosenöffner. Hast du '''ihn''' gesehen? ({{audio|de|De-Ich suche den Dosenöffner. Hast du ihn gesehen..ogg}})|ฉันกำลังหาที่เปิดกระป๋อง เธอเห็น'''มัน'''ไหม}}
# {{lb|de|บุรุษสรรพนาม}} {{label|de|obsolete}} {{inflection of|de|sie||dat|t=พวกเขา}}
#: {{ux|de|Den will sie doch und soll '''ihn''' haben.|This is what they want and what '''they''' should have.}}
==== ดูเพิ่ม ====
{{german personal pronouns}}
=== อ่านเพิ่ม ===
* {{R:de:Duden}}
* {{R:de:DWDS}}
4zb594p76jhr18bvjt4wvyxpojh9shj