Wiktionary
siwiktionary
https://si.wiktionary.org/wiki/%E0%B7%80%E0%B7%92%E0%B6%9A%E0%B7%8A%E0%B7%82%E0%B6%B1%E0%B6%BB%E0%B7%92:%E0%B6%B8%E0%B7%94%E0%B6%BD%E0%B7%8A_%E0%B6%B4%E0%B7%92%E0%B6%A7%E0%B7%94%E0%B7%80
MediaWiki 1.47.0-wmf.4
case-sensitive
මාධ්යය
විශේෂ
සාකච්ඡාව
පරිශීලක
පරිශීලක සාකච්ඡාව
වික්ෂනරි
වික්ෂනරි සාකච්ඡාව
ගොනුව
ගොනුව සාකච්ඡාව
මාධ්යවිකි
මාධ්යවිකි සාකච්ඡාව
සැකිල්ල
සැකිලි සාකච්ඡාව
උදවු
උදවු සාකච්ඡාව
ප්රවර්ගය
ප්රවර්ග සාකච්ඡාව
TimedText
TimedText talk
Module
Module talk
Event
Event talk
Portuguese
0
2181
235468
186020
2026-06-02T10:58:49Z
Lee
19
/* නාම පදය */
235468
wikitext
text/x-wiki
== ඉංග්රීසි ==
=== උච්චාරණය ===
* {{IPA|en|/ˌpɔː.t͡ʃəˈɡiːz/|a=UK}}
* {{IPA|en|/ˈpɔɹ.t͡ʃə.ɡiz/|a=GA}}
* {{audio|en|en-uk-Portuguese.ogg|a=UK}}
* {{audio|en|en-us-Portuguese.ogg|a=US}}
* {{rhymes|en|iːz|s=3}}
=== නාම පදය ===
{{en-noun|*|s<l:archaic>}}
# ''[[පෘතුගීසි]]''
=== සංඥා නාම පදය ===
{{en-prop}}
# {{senseid|en|Q5146}} ''[[පෘතුගීසි]]''
==== අමතර අවධානයට ====
* {{langcat|pt}}
* {{langlist}}
{{C|en|Portuguese|Ethnonyms|Languages|Nationalities|Portugal}}
{{cln|en|terms suffixed with -ese}}
rzzrtmxenh25xjg6j50fy07cbbmmr8a
v
0
3277
235406
228555
2026-06-02T04:42:27Z
Pinthura
2424
යොමු තොරතුරු පරිවර්තනය
235406
wikitext
text/x-wiki
{{also|V|Appendix:Variations of "v"|∨}}
{{character info}}
{{character info/var|ᵛ|ⅴ|v}}
{{minitoc}}
== සර්ව භාෂාමය ==
=== නිරුක්තිය 1 ===
[[File:Greek uc upsilon.svg|thumb|right|60px|Greek letter Υ, from which Latin V derived]]
Minuscule variation of Latin {{m|mul|V}}, from seventh century Old Latin adoption of Old Italic letter {{m|mul|𐌖|tr=V}}, from {{der|mul|grc|-}} letter {{m|el|Υ||Upsilon}}.
==== අකුර ====
{{mul-letter|upper=V|lower=v|sc=Latn}}
# The twenty-second letter of the [[Appendix:Latin script|basic modern Latin alphabet]].
===== අමතර අවධානයට =====
{{Latn-script}}
* {{qualifier|select symbols}} [[ʌ]] [[ʋ]] [[ᵥ]]
* {{qualifier|other scripts}} Cyrillic {{m|mul|sc=Cyrl|в|tr=v||ve}}, Greek {{m|mul|sc=Grek|υ|tr=y||upsilon}}, Hebrew {{m|mul|sc=Hebr|ו|tr=w||vav}}
* {{pedia}}
=== නිරුක්තිය 2 ===
Lower case form of upper case roman numeral [[V]], from abbreviation of IIIIΛ or IIIIV (representing 5), from tally stick markings resembling \\\\⋁ or ////⋀, from the practice of designating each fifth notch with a double cut, like the corresponding Western tally mark, {{l|mul|𝍸}}.
==== වෙනත් ආකාර ====
* {{l|mul|V}}, {{l|mul|Ⅴ}}, {{l|mul|ⅴ}}
==== සංඛ්යාංකය ====
{{head|mul|numeral|lower case Roman numeral||upper case|V}}
# [[cardinal number|cardinal]] number [[five]] (5).
==== අමතර අවධානයට ====
* Previous: [[iv]] ([[four|4]])
* Next: [[vi]] ([[six|6]])
* [[w:Roman numerals|Roman numerals]]
=== නිරුක්තිය 3 ===
==== උච්චාරණය ====
* {{audio|mul|Voiced labiodental fricative.ogg|Pronunciation of IPA {{IPAfont|[ɑvvɑʔ]}} with the sound {{IPAfont|[v]}}}}
==== සංකේතය ====
{{head|mul|symbol}}
# {{lb|mul|physics}} [[velocity]]
# {{lb|mul|IPA}} a {{w|voiced labiodental fricative}}.
# {{lb|mul|superscript {{angbr IPA|ᵛ}}|IPA}} {{IPAfont|[v]}}-fricated [[release]] of a plosive (e.g. {{IPAfont|[bᵛ]}}, sometimes implying an [[affricate]] {{IPAfont|[b͜v]}}); {{IPAfont|[v]}}-coloring; or a weak, fleeting or epenthetic {{IPAfont|[v]}}.
# {{lb|mul|UPA}} a {{w|voiced labiodental approximant}} (IPA {{IPAfont|[ʋ]}}, which it resembles in italic typeface).
===Gallery===
<gallery caption="Letter styles" perrow=3 mode=packed>
File:Latin V.png|Uppercase and lowercase versions of '''V''', in normal and italic type
File:Fraktur letter v.svg|Uppercase and lowercase '''V''' in [[Fraktur]]
</gallery>
=== අමතර අවධානයට ===
{{Letter
|page=V
|NATO=Victor
|Morse=···–
|Braille=⠧
}}
{{C|mul|Five}}
== ඉංග්රීසි ==
=== නිරුක්තිය 1 ===
From {{der|en|enm|-}} lower case letter {{m|enm|v}} (also written {{m|enm|u}}), from {{der|en|ang|-}} lower case {{m|ang|u}} and respelling of {{der|en|ang|f}} between vowels and voiced consonants.
* [[File:Rune-Feoh.png|10px|Anglo-Saxon Futhorc letter {{m|mul||ᚠ|tr=f|feoh}}]] {{der|en|ang|-}} lower case {{m|ang|f}} from 7th century replacement by Latin lower case {{m|la|f}} of the Anglo-Saxon Futhorc letter {{m|mul|ᚠ|tr=f||feoh}}, derived from Etruscan letter {{m|mul|𐌅|tr=v}}.
* [[File:Rune-Ur.png|10px|Anglo-Saxon Futhorc letter {{m|mul||ᚢ|tr=u|ur}}]] {{der|en|ang|-}} lower case {{m|ang|u}} from 7th century replacement by Latin lower case {{m|la|v}} of the Anglo-Saxon Futhorc letter {{m|mul|ᚢ|tr=u||ur}}, derived from Raetic letter {{m|mul||u}}.
Before the 1700s, the pointed form {{m|en|v}} was written at the beginning of a word, while a rounded form {{m|en|u}} was used elsewhere, regardless of sound. So whereas {{m|en|valor}} and {{m|en|excuse}} appeared as in modern printing, {{m|en|have}} and {{m|en|upon}} were printed {{m|en||haue}} and {{m|en||vpon}}. Eventually, in the 1700s, to differentiate between the consonant and vowel sounds, the {{m|en|v}} form was used to represent the consonant, and {{m|en|u}} the vowel sound. {{m|en|v}} then preceded {{m|en|u}} in the alphabet, but the order has since reversed.
==== උච්චාරණය ====
* {{sense|phoneme}} {{IPA|en|/v/}}
* {{sense|letter name}} {{IPA|en|/viː/}} (spelled {{m|en|vee}})
** {{audio|en|en-us-v.ogg|a=US}}
** {{rhymes|en|iː|s=1}}
==== අකුර ====
{{en-letter}}
# {{Latn-def|en|letter|22|vee}}
===== අමතර අවධානයට =====
{{list:Latin script letters/en}}
==== නාම පදය ====
{{en-noun|s|v's}}
# a shape resembling the letter {{m|en|v}}
#: {{ux|en|The impact was so strong, it bent the bar into a '''v'''.}}
=== නිරුක්තිය 2 ===
{{abbrev|en|versus}}.
====Preposition====
{{en-prep}}
# {{lb|en|UK|Ireland|and|Commonwealth|_|except Canada}} {{abbreviation of|en|versus}}
#: {{syn|en|v.|vs.}}
#: {{uxi|en|England '''v''' Scotland}}
#* {{quote-journal|en|date=3 March 2023|author=Eleanor Flegg|title=The comfort '''v''' style dilemma: Thought you couldn’t combine the two? Think again — our experts explain exactly how|journal=w:Irish Independent|volume=132|issue=53|location=Dublin|section=“Property” section|page=4|pageurl=https://www.newspapers.com/newspage/1167524333/|issn=0021-1222|oclc=500345272|nocolon=1}}
===== භාවිත සටහන් =====
* In legal contexts, usage is typically restricted to {{w|Case citations|case citations}}, and the pronunciation may be as {{l|en| versus}}, {{l|en|vee}}, {{l|en|against}}, or {{l|en|and}}, depending on the region and nature of the case.
=== නිරුක්තිය 3 ===
{{abbrev|en|very}}.
==== ක්රියා විශේෂණ පදය ====
{{head|en|adverb}}
# {{lb|en|informal|text messaging}} {{abbreviation of|en|very}}
#: {{ux|en|You were acting '''v''' rude to his boyfriend on New Year's.}}
#* {{quote-book|en|passage=I'm '''v''' tired. I slept '''v''' badly, awake from 3–6 a.m., so I've slept all afternoon.|title=Life After Darkness: A Doctor's Journey Through Severe Depression|author=Cathy Wield|page=109|publisher=Radcliffe Publishing|year=2006|location=Seattle, WA|url=https://books.google.com/books?id=EVbTWWmv4AUC&pg=PA109|isbn=9781857757293}}
#* {{quote-book|en|title=Deep and Meaningful Diaries from Planet Janet|passage=I said it wasn't a crush, I just thought he was '''v''' attractive.|page=253|author=Dyan Sheldon|year=2007|publisher=Candlewick Press|location=Somerville, MA|isbn=978-0763632168}}
#* {{quote-journal|en|passage=Since becoming social media official, Cara Delevingne and Ashley Benson have been sashaying around town together and being '''v''' cute|journal=Pedestrian|url=https://www.pedestrian.tv/entertainment/ashley-benson-cara-delevingne-tatt/|date=July 23, 2019|accessdate=August 12, 2019|archiveurl=https://web.archive.org/web/20190723050529/https://www.pedestrian.tv/entertainment/ashley-benson-cara-delevingne-tatt/|archivedate=July 23, 2019|author=Matt Galea|title=Punters Reckon Ashley Benson's New Tatt Is A Tribute To Girlfriend Cara Delevingne}}
#* {{quote-journal|en|date=2024-10-08|author=Lauren Gruber; Megan Uy|title=We Found Sooo Many Viral TikTok Items on Sale for October Prime Day|journal=w:[[Cosmopolitan (magazine)|Cosmopolitan]]|url=https://www.cosmopolitan.com/style-beauty/fashion/g36623568/viral-tiktok-items-amazon-sale/|passage=Sometimes a trip to the spa is not in the cards, even if your gel manicure has seen ''waaaay'' better days. These polish remover tools help cut costs and keep your natural nails looking '''v''' nice.}}
=== නිරුක්තිය 4 ===
Abbreviations.
'''{{PAGENAME}}'''
# {{lb|en|stenoscript}} {{abbreviation of|en|of}}
# {{lb|en|stenoscript}} {{abbreviation of|en|very}}
# {{lb|en|stenoscript}} the suffix or final syllable '''''{{m|en|-tive}}''''' or '''''{{m|en|-ive}}'''''
=== අමතර අවධානයට ===
{{col3|en|ctrl-v|delta-v|little v|v-chip|v-fib|v-line|v-mail|v-perfect|v-ring|v-tach|v-word|v-ball}}
==Azerbaijani==
=== උච්චාරණය ===
* {{qualifier|phoneme}} {{IPA|az|/v/}}
=== අකුර ===
{{az-letter|upper=V|lower=v}}
# {{Latn-def|az|letter|30}}
==== අමතර අවධානයට ====
{{list:Latin script letters/az}}
==Basque==
=== උච්චාරණය ===
{{eu-IPA|uve}}
=== අකුර ===
{{eu-letter|upper=V|lower=v}}
# {{Latn-def|eu|letter|23|uve}}
==== භාවිත සටහන් ====
* Used chiefly in recent loanwords and foreign proper nouns.
==== අමතර අවධානයට ====
{{list:Latin script letters/eu}}
==Catalan==
=== උච්චාරණය ===
* {{ca-IPA|vé,vé baixa}}
=== අකුර ===
{{ca-letter|upper=V|lower=v}}
# {{Latn-def|ca|letter|22|ve|ve baixa}}
==== අමතර අවධානයට ====
{{list:Latin script letters/ca}}
==Czech==
=== වෙනත් ආකාර ===
* {{alt|cs|ve}}
=== නිරුක්තිය ===
{{inh+|cs|zlw-ocs|v}}, {{m|zlw-ocs|ve}}, from {{inh|cs|sla-pro|*vъ(n)}}, from {{inh|cs|ine-pro|*h₁n̥}}.
=== උච්චාරණය ===
* {{IPA|cs|/v/}}
* {{audio|cs|Cs-v.ogg}}
===Preposition===
{{head|cs|preposition}}
# [[in]] (inside, for an enclosed space) {{+obj|cs|loc}}
#: {{uxi|cs|On je '''v''' divadle.|He is '''in''' the theater.}}
# [[at]] (''indicating time'') {{+obj|cs|acc}}
#: {{coi|cs|'''v''' šest hodin|'''at''' six o'clock}}
# [[on]] (''indicating a day'') {{+obj|cs|acc}}
#: {{coi|cs|'''v''' pátek|'''on''' Friday}}
# [[in]] (''indicating a year'') {{+obj|cs|loc}}
#: {{coi|cs|'''v''' roce 2007|'''in''' the year 2007}}
# [[in]] (''indicating a month'') {{+obj|cs|loc}}
#: {{coi|cs|'''v''' lednu|'''in''' January}}
# [[in]] (used after certain verbs) {{+obj|cs|acc}}
#: {{coi|cs|věřit '''v''' Boha|to believe '''in''' God}}
==== භාවිත සටහන් ====
* The more usual form is '''v''', while '''ve''' is used before words starting with '''f''', '''v''', '''w''' and certain [[consonant]] [[cluster]]s.
=== වැඩිදුර් කියවීම සඳහා ===
* {{R:cs:PSJC}}
* {{R:cs:SSJC}}
{{cln|cs|words without vowels}}
== ඕලන්ද ==
=== උච්චාරණය ===
* {{audio|nl|Nl-v.ogg}}
* {{rhymes|nl|eː|s=1}}
* {{sense|letter name}} {{IPA|nl|/veː/}}
=== අකුර ===
{{head|nl|letter|lower case||upper case|V}}
# the twenty-second letter of the Dutch alphabet
=== අමතර අවධානයට ===
* Previous letter: [[u#Dutch|u]]
* Next letter: [[w#Dutch|w]]
== එස්පෙරාන්තො ==
=== උච්චාරණය ===
* {{sense|letter name}} {{IPA|eo|/vo/}}
* {{sense|phoneme}} {{IPA|eo|/v/}}
* {{audio|eo|Eo-v.ogg}}
=== අකුර ===
{{eo-letter|upper=V|lower=v}}
# {{Latn-def|eo|letter|27|vo}}
==== අමතර අවධානයට ====
{{list:Latin script letters/eo}}
==Faroese==
=== උච්චාරණය ===
* {{IPA|fo|/v/}}
=== අකුර ===
{{head|fo|letter|upper case|V}}
# {{Latn-def|fo|letter|25|ve}}
==== අමතර අවධානයට ====
{{list:Latin script letters/fo}}
== ෆින්ලන්ත ==
=== නිරුක්තිය ===
{{fi-ety-letter}}
=== උච්චාරණය ===
* {{audio|fi|Fi-v.ogg|text=[[vee]], [[veivi]], [[tavuviiva]], [[vee]]}}
=== අකුර ===
{{fi-letter|upper=V|lower=v}}
# {{Latn-def|fi|letter|22|vee}}
==== ව්යුත්පන්න යෙදුම් ====
{{col|fi|title=compounds
|kaksois-v
|tupla-v
|yksöis-v
}}
==== අමතර අවධානයට ====
{{list:Latin script letters/fi}}
=== නාම පදය ===
{{fi-noun}}
# {{abbreviation of|fi|vuosi}}
# {{abbreviation of|fi|-vuotias}}
== ප්රංශ ==
=== උච්චාරණය ===
* {{q|letter name}} {{fr-IPA|vé}}
* {{audio|fr|LL-Q150 (fra)-Jules78120-v.wav}}
=== අකුර ===
{{fr-letter|upper=V|lower=v}}
# the twenty-second letter of the [[Appendix:Latin script|basic modern Latin alphabet]]
#* {{quote-book|fr|year=1837|author=Louis Viardot|title=L’Ingénieux Hidalgo Don Quichotte de la Manche|url=[s:fr: L’Ingénieux Hidalgo Don Quichotte de la Manche{{!}}fr.Wikisource]|original=El ingenioso hidalgo Don Quijote de la Mancha|by=Miguel de Cervantes Saavedra|section=Volume I, Chapter I|passage=Lui cherchant alors un nom qui ne s’écartât pas trop du sien, qui sentît et représentât la grande dame et la princesse, il '''v'''int à l’appeler ''Dulcinée du Toboso'', parce qu’elle était nati'''v'''e de ce '''v'''illage : nom harmonieux à son a'''v'''is, rare et distingué, et non moins expressif que tous ceux qu’il a'''v'''ait donnés à son équipage et à lui-même.|t=Through searching himself thus for a name that did not diverge too much from his own, that would suit and represent the great lady and princess, he came to call her ''Dulcinea del Toboso'', because she was a native of this village [Toboso]: a name in his opinion harmonious, rare and distinguished, and no less expressive than all the ones that he had given to his team and to himself.}}
== හංගේරියානු ==
=== උච්චාරණය ===
* {{sense|phoneme}} {{hu-IPA}}
* {{sense|letter name}} {{hu-IPA|vé}}
=== අකුර ===
{{hu-letter|upper=V|lower=v}}
# {{Latn-def|hu|letter|38|vé}}
==== වරනැඟීම ====
{{hu-infl-nom|v-|e}}{{hu-pos-tek|v-}}
=== අමතර අවධානයට ===
{{list:Latin script letters/hu}}
=== වැඩිදුර් කියවීම සඳහා ===
* {{R:ErtSz}}
== අයිස්ලන්ත ==
=== උච්චාරණය ===
* {{IPA|is|/vafː/|a=letter name}}
=== අකුර ===
{{head|is|letter|upper case|V}}
# {{Latn-def|is|letter|26}}
=== අමතර අවධානයට ===
{{list:Latin script letters/is}}
==Ido==
=== උච්චාරණය ===
* {{IPA|io|/v/|a=context pronunciation}}
* {{IPA|io|/ve/|a=letter name}}
=== අකුර ===
{{head|io|letter|upper case|V}}
# {{Latn-def|io|letter|22}}
==== අමතර අවධානයට ====
{{list:Latin script letters/io}}
== ඉතාලි ==
=== අකුර ===
{{it-letter}}
# {{Latn-def-lite|langname=Italian|it|letter|20|vu|vi}}
== ජපන් ==
=== විරාම ලක්ෂණය ===
{{head|ja|punctuation mark}}
# {{lb|ja|texting|internet slang|dated}} {{l|mul|<3}}
==== සමාන පද ====
* {{ja-l|♥}}
=== මූලාශ්ර ===
* https://www.wdic.org/w/WDIC/v
{{cln|ja|terms written in foreign scripts}}
==Kankanaey==
=== නිරුක්තිය ===
{{bor+|kne|tl|v}}. Letter pronunciation is influenced by {{der|kne|en|v}}.
=== උච්චාරණය ===
{{kne-pr|vi<a:letter name>|v<a:phoneme>}}
=== අකුර ===
{{kne-head|letter}}
# {{Latn-def|kne|letter|24|vi}}
==== අමතර අවධානයට ====
{{list:Latin script letters/kne}}
=== මූලාශ්ර ===
* {{R:kne:Ortograpiya 2016|page=10-11}}
==Khoekhoe==
=== අකුර ===
{{head|naq|letter|upper case|V}}
# {{lb|naq|obsolete|Tindall orthography}} {{ng|A letter of the Khoekhoe alphabet; modern ''[[ǂ]]''.}}
== ලතින් ==
=== වෙනත් ආකාර ===
* {{l|la|u}} {{qualifier|post-Classical}}
=== උච්චාරණය ===
* {{sense|phoneme}} {{IPA|la|/w/|/u/|/uː/}}
=== අකුර ===
{{head|la|letter|lower case||upper case|V}}
# {{lb|la|sometimes with ''[[littera]]''}} The 20th letter of the [[Latin]] alphabet.
=== අමතර අවධානයට ===
* Previous letter: [[t]]
* Next letter: [[x]]
=== මූලාශ්ර ===
* {{R:du Cange}}
* {{R:Peck}}
{{cln|la|letters|sort=V}}
==Latvian==
{{wikipedia|lang=lv}}
=== නිරුක්තිය ===
Proposed in 1908 as part of the new Latvian spelling by the scientific commission headed by [[w:Kārlis Mīlenbahs|K. Mīlenbahs]], which was accepted and began to be taught in schools in 1909. Prior to that, Latvian had been written in German [[Fraktur]], and sporadically in [[Cyrillic]].
=== උච්චාරණය ===
* {{lv-IPA|v}}
{{rfap|lv}}
=== අකුර ===
[[File:Latin alphabet Vv.svg|thumb|200px|V]]
{{lv-letter|upper=V|lower=v}}
# {{Latn-def|lv|letter|31|vē}}
==== අමතර අවධානයට ====
* ''Letters of the Latvian alphabet:''
*: '''{{l|lv|burts|burti}}:''' {{l|lv|A}}{{l|lv|a}}, {{l|lv|Ā}}{{l|lv|ā}}, {{l|lv|B}}{{l|lv|b}}, {{l|lv|C}}{{l|lv|c}}, {{l|lv|Č}}{{l|lv|č}}, {{l|lv|D}}{{l|lv|d}}, {{l|lv|E}}{{l|lv|e}}, {{l|lv|Ē}}{{l|lv|ē}}, {{l|lv|F}}{{l|lv|f}}, {{l|lv|G}}{{l|lv|g}}, {{l|lv|Ģ}}{{l|lv|ģ}}, {{l|lv|H}}{{l|lv|h}}, {{l|lv|I}}{{l|lv|i}}, {{l|lv|Ī}}{{l|lv|ī}}, {{l|lv|J}}{{l|lv|j}}, {{l|lv|K}}{{l|lv|k}}, {{l|lv|Ķ}}{{l|lv|ķ}}, {{l|lv|L}}{{l|lv|l}}, {{l|lv|Ļ}}{{l|lv|ļ}}, {{l|lv|M}}{{l|lv|m}}, {{l|lv|N}}{{l|lv|n}}, {{l|lv|Ņ}}{{l|lv|ņ}}, {{l|lv|O}}{{l|lv|o}}, {{l|lv|P}}{{l|lv|p}}, {{l|lv|R}}{{l|lv|r}}, {{l|lv|S}}{{l|lv|s}}, {{l|lv|Š}}{{l|lv|š}}, {{l|lv|T}}{{l|lv|t}}, {{l|lv|U}}{{l|lv|u}}, {{l|lv|Ū}}{{l|lv|ū}}, {{l|lv|V}}{{l|lv|v}}, {{l|lv|Z}}{{l|lv|z}}, {{l|lv|Ž}}{{l|lv|ž}}
==Livonian==
=== උච්චාරණය ===
* {{qualifier|phoneme}} {{liv-IPA|v}}
=== අකුර ===
{{head|liv|letter|upper case|V}}
# {{Latn-def|liv|letter|37}}
=== අමතර අවධානයට ===
{{list:Latin script letters/liv}}
==Malay==
=== අකුර ===
{{ms-letter|upper=V|lower=v}}
# {{Latn-def|ms|letter|22}}
==== අමතර අවධානයට ====
{{list:Latin script letters/ms}}
==Maltese==
=== උච්චාරණය ===
* {{IPA|mt|/v/}}
* {{IPA|mt|/f/}} {{q|by final devoicing or assimilation to a following voiceless obstruent}}
* With very few exceptions, this letter occurs only in borrowings.
=== අකුර ===
{{head|mt|letter|lower case||upper case|V}}
# {{Latn-def|mt|letter|26}}
=== අමතර අවධානයට ===
{{list:Latin script letters/mt}}
==Mandarin==
=== අකුර ===
{{cmn-pinyin|notr=1}}
# {{nonstandard form of|cmn|ü}}
==== භාවිත සටහන් ====
{{orth|v}} is sometimes used as a substitute for {{orth|ü}} in Hanyu Pinyin-based input systems. As a result, it occasionally appears in print as well, though this is nonstandard.
==Mapudungun==
=== උච්චාරණය ===
* {{qualifier|phoneme}} {{IPA|arn|/ɨ/}}
=== අකුර ===
{{head|arn|letter|upper case|V}}
# {{Latn-def|arn|letter|24}}
==== අමතර අවධානයට ====
{{list:Latin script letters/arn}}
There are multiple alphabets for writing Mapudungun. The letters that are not in brackets are from the unified alphabet, while the ones in brackets are from the four other alphabets.
== මධ්යකාලීන ප්රංශ ==
=== නිරුක්තිය ===
{{inh|frm|la|u}}, {{m|la|v}}.
=== අකුර ===
{{head|frm|letter}}
# {{l|mul|u}} (letter)
# {{l|mul|v}} (letter)
==== භාවිත සටහන් ====
* ''u'' and ''v'' were represented by a single character in Middle French, although scholars consider them to be separate letters both in terms of usage and in terms of pronunciation.{{attention|frm|citation needed!}}
==North Frisian==
=== උච්චාරණය ===
* Like {{m|frr|w}}, which see.
=== අකුර ===
{{head|frr|letter|lower case||upper case|V}}
# {{lb|frr|chiefly|Sylt}} {{Latn-def|frr|letter|indef=1}}
==== නිරුක්තිය ====
* Sylt Frisian regularly replaces ⟨{{l|frr|w}}⟩ with ⟨{{l|frr||v}}⟩ word-finally after a long or unstressed vowel.
* Otherwise ⟨{{l|frr||v}}⟩ may be retained in Latinate words, but the usual practice in all dialects (including Sylt) is to use ⟨{{l|frr|w}}⟩ like in native words (e.g. {{m|frr|witamiin}} for less common {{m|frr||vitamiin}}).
=== අමතර අවධානයට ===
* {{sense|North Frisian letters}} {{l|frr|[[a]], [[ä]], [[å]], [[ā]], [[b]], [[c]], [[d]], [[đ]], [[e]], [[ē]], [[f]], [[g]], [[h]], [[i]], [[j]], [[k]], [[l]], [[m]], [[n]], [[o]], [[ö]], [[p]], [[r]], [[s]], [[t]], [[u]], [[ü]], [[v]], [[w]] ([[q]], [[x]], [[y]], [[z]])}}
== නෝර්වීජියානු ==
=== උච්චාරණය ===
* {{sense|letter name}} {{IPA|no|/ʋeː/}}
* {{sense|phoneme}} {{IPA|no|/ʋ/|/v/|/f/}}
* {{audio|nb|LL-Q9043 (nor)-Jon Harald Søby (WMNO)-v.wav}}
=== අකුර ===
{{head|no|letter}}
# ''The 22nd letter of the Norwegian alphabet''.
==Nupe==
=== උච්චාරණය ===
* {{sense|phoneme}} {{IPA|nup|/v/}}
=== අකුර ===
{{nup-letter|upper=V|lower=v}}
# {{Latn-def|nup|letter|26}}
==== අමතර අවධානයට ====
{{list:Latin script letters/nup}}
==Old Czech==
=== වෙනත් ආකාර ===
* {{alt|zlw-ocs|u||often before labial consonants}}
=== නිරුක්තිය ===
{{inh+|zlw-ocs|sla-pro|*vъ(n)}} , from {{inh|zlw-ocs|ine-pro|*h₁n̥}}.
===Preposition===
{{head|zlw-ocs|preposition}}
# [[in]] (inside, for an enclosed space) (''followed by the [[locative case]]'')
# [[in]] (used after certain verbs) (''followed by the [[accusative case]]'')
#: {{uxi|zlw-ocs|vyjěti '''v''' boj|go '''into''' battle}}
====Descendants====
* {{desc|cs|v}}
=== වැඩිදුර් කියවීම සඳහා ===
* {{R:zlw-ocs:Gebauer}}
== පෘතුගීසි ==
=== අකුර ===
{{pt-letter|upper=V|lower=v}}
# {{Latn-def|pt|letter|22|vê}}
==== අමතර අවධානයට ====
{{list:Latin script letters/pt}}
==Romani==
=== උච්චාරණය ===
* {{IPA|rom|/v/}}
=== අකුර ===
{{head|rom|letter|lower case||upper case|V}}
# {{lb|rom|International Standard}} {{Latn-def|rom|letter|29}}
# {{lb|rom|Pan-Vlax}} {{Latn-def|rom|letter|30}}
==== අමතර අවධානයට ====
{{list:Latin script letters/rom}}
== රුමේනියානු ==
=== උච්චාරණය ===
* {{IPA|ro|/v/}}
=== අකුර ===
{{ro-letter|upper=V|lower=v}}
# {{Latn-def|ro|letter|27|ve|vî}}
==== අමතර අවධානයට ====
{{list:Latin script letters/ro}}
== සර්බෝ-ක්රොඒෂියානු ==
=== වෙනත් ආකාර ===
* {{alt|sh|V||uppercase|}}
=== උච්චාරණය ===
* {{qualifier|phoneme}} {{IPA|sh|/ʋ/}}
=== අකුර ===
{{sh-letter}}
# The 28th letter of the Serbo-Croatian Latin alphabet ([[gajica]]), preceded by {{l|sh|u}} and followed by {{l|sh|z}}.
# {{obsolete form of|sh|u}}
===Preposition===
{{sh-preposition}}
# {{lb|sh|Kajkavian}} [[in]], [[at]] {{+obj|sh|loc}}
# {{lb|sh|Kajkavian}} [[to]], [[into]] {{+obj|sh|acc}}
# {{lb|sh|Kajkavian}} [[on]], [[in]], [[at]], [[during]] {{qualifier|in expressions concerning time}} {{+obj|sh|acc}}
# {{lb|sh|Kajkavian}} [[in]], [[during]] {{qualifier|in expressions concerning time}} {{+obj|sh|loc}}
==== සමාන පද ====
* {{l|sh|u}}, {{l|sh|vu}}, {{l|sh|f}}
==Skolt Sami==
=== උච්චාරණය ===
* {{qualifier|phoneme}} {{IPA|sms|/v/}}
=== අකුර ===
{{head|sms|letter|upper case|V}}
# {{Latn-def|sms|letter|32}}
=== අමතර අවධානයට ===
{{list:Latin script letters/sms}}
==Slovak==
=== වෙනත් ආකාර ===
* {{alt|sk|vo}}
=== නිරුක්තිය ===
{{inh+|sk|sla-pro|*vъ(n)}}.
=== උච්චාරණය ===
* {{sk-IPA}}
===Preposition===
{{head|sk|preposition}}
{{rfdef|sk}}
=== වැඩිදුර් කියවීම සඳහා ===
* {{R:sk:SDK}}
==Slovene==
=== නිරුක්තිය 1 ===
==== අකුර ====
{{sl-letter|r}}
# {{Latn-def|sl|letter|23|ve}}
# {{Latn-def|sl|letter|31|alphabet name=Resian}}
# {{Latn-def|sl|letter|24|alphabet name=Natisone Valley dialect}}
===== වෙනත් ආකාර =====
* (''uppercase'') {{l|sl|V}}
===== අමතර අවධානයට =====
{{list:Latin script letters/sl}}
=== නිරුක්තිය 2 ===
From {{inh|sl|sla-pro|*vъ(n)}}.
==== උච්චාරණය ====
* {{sl-IPA|v}}
====Preposition====
{{sl-head|prep|-}}
# (''answering question [[where]]'') (''with [[locative case|locative]]'') [[in]], [[inside]], [[at]]
# (''answering question [[where]] to'') (''with [[accusative case|accusative]]'') [[to]], [[into]]
# (''indicating a day'') (''with [[accusative case|accusative]]'') [[on]], [[in]], [[at]], [[during]] (in expressions concerning time)
# (''indicating a [[month]] or period of time'') (''with [[locative case|locative]]'') [[in]], [[during]]
#: {{uxi|sl|'''V''' tem aprilu je veliko deževalo.|This April it was raining a lot.}}
#: {{uxi|sl|'''V''' petih letih ni padla niti kapljica dežja.|Within five years not even a droplet of rain has fallen.}}
=== වැඩිදුර් කියවීම සඳහා ===
* {{R:sl:Fran}}
== ස්පාඤ්ඤ ==
=== උච්චාරණය ===
{{es-pr
|raw:/b/<q:phoneme>
|ve<q:letter name><qq:traditional, spelled {{m|es|ve}}>,uve<qq:common in most countries, spelled {{m|es|uve}}><audio:Letter v es es.flac<a:Spain>>
}}
* {{q|common in some countries}}{{es-pr
|ve corta<qq:spelled {{m|es|ve corta}}><bullets:2>
|ve baja<qq:spelled {{m|es|ve baja}}><bullets:2>
|ve pequeña<qq:spelled {{m|es|ve pequeña}}><bullets:2>
|ve chica<qq:spelled {{m|es|ve chica}}><bullets:2>
}}
=== අකුර ===
{{head|es|letter|lower case||upper case|V}}
# the twenty-third (23rd) letter of the Spanish alphabet
==== භාවිත සටහන් ====
* The common letter names, as well as phrases like {{m|es|ve de vaca}} are used to distinguish the letter {{m|es|v}} from the letter {{m|es|b}}. This is done because the two letters represent a single phoneme in modern Spanish, causing their traditional names {{m|es|be}} and {{m|es|ve}} both to be pronounced as {{IPAchar|/ˈbe/}}.
==== අමතර අවධානයට ====
{{list:Latin script letters/es}}
==Tagalog==
=== නිරුක්තිය ===
{{bor+|tl|es|v}}. Each pronunciation has a different source:
* Filipino alphabet pronunciation is influenced by {{der-lite|tl|en|v}}.
* Abecedario pronunciation is from {{der-lite|tl|es|v}}.
=== උච්චාරණය ===
{{tl-pr
|ví<qq:letter name, Filipino alphabet>
|vé<qq:letter name, Abecedario>
|+<qq:phoneme>
}}
=== අකුර ===
{{tl-letter|b=vi}}
# {{tl-letter-def|24|vi|alph=fil}}
# {{lb|tl|historical}} {{tl-letter-def|25|ve|alph=abec}}
==== භාවිත සටහන් ====
* This letter is mostly used only in proper nouns, unadapted loanwords, or Spanish-based spellings.
* Some purists of Tagalog replace ''v'' in words with {{m|tl|b}}.
==== අමතර අවධානයට ====
{{list:Latin script letters/tl}}
=== වැඩිදුර් කියවීම සඳහා ===
* {{R:Pambansang Diksiyonaryo}}
==Turkish==
=== අකුර ===
{{tr-letter|upper=V|lower=v}}
# {{Latn-def|tr|letter|27|ve}}
==== අමතර අවධානයට ====
{{list:Latin script letters/tr}}
== වියට්නාම ==
=== උච්චාරණය 1 ===
{{vi-IPA|vờ}}
=== උච්චාරණය 2 ===
{{vi-IPA|vê}}
=== නිරුක්තිය 1 ===
Borrowed from {{bor|vi|fr|v}}.
==== අකුර ====
{{vi-letter|lower=v|upper=V}}
# {{Latn-def|vi|letter|24|vờ|vê}}
==== අමතර අවධානයට ====
* {{see-temp|list:Latin script letters/vi}}
=== නිරුක්තිය 2 ===
==== ක්රියා විශේෂණ පදය ====
{{vi-adv}}
# {{lb|vi|slang|Internet|text messaging}} {{abbreviation of|vi|[[vậy]]}}
====Particle====
{{vi-particle}}
# {{lb|vi|slang|Internet|text messaging}} {{abbreviation of|vi|[[vậy]]}}
{{cln|vi|1-letter abbreviations}}
==Yele==
=== උච්චාරණය ===
*{{IPA|yle|/β/}}
=== අකුර ===
{{head|yle|letter|upper case|V}}
# {{ng|A letter of the [[Yele]] alphabet.}}
==== ව්යුත්පන්න යෙදුම් ====
There is a digraph for palatalized {{angbr|vy}}.
==== අමතර අවධානයට ====
{{list:Latin script letters/yle}}
==Zulu==
=== අකුර ===
{{zu-letter}}
# {{Latn-def|zu|letter|22}}
==== අමතර අවධානයට ====
{{list:Latin script letters/zu}}
nw4cltx9boihfgo4h7t7gdzghq5d6yg
go
0
3984
235401
204472
2026-06-02T04:38:16Z
Lee
19
/* ක්රියා පදය */
235401
wikitext
text/x-wiki
== ඉංග්රීසි ==
==== උච්චාරණය ====
* {{enPR|gō}}, {{IPA|en|/ɡoʊ/}}
** {{IPA|en|[ɡəʊ]|a=RP}}
** {{IPA|en|/ɡoʊ/|a=GA}}
** {{IPA|en|[ɡəʉ]|a=Australia}}
** {{IPA|en|[ɡɐʉ]|a=New Zealand}}
** {{IPA|en|[ɡu]|a={{w|Black Country}}}}
* {{audio|en|en-uk-to go.ogg|text=to go|a=UK}}
* {{audio|en|en-us-go.ogg|a=US}}
* {{audio|en|EN-AU ck1 go.ogg|a=AU}}
* {{hyph|en|go}}
* {{rhymes|en|əʊ|s=1}}
==== ක්රියා පදය ====
{{en-verb|go<goes,,went:yode[obsolete]:goed[nonstandard],gone:went[nonstandard]>}}
# {{l|si|යන්න}}
# {{l|si|යනවා}}
{{cln|en|contranyms|irregular verbs|nouns with irregular plurals|suppletive verbs|two-letter words|verbs with weak preterite but strong past participle}}
{{C|en|Gaits}}
pg55g9hm3c75m3byz0zkpqwh1zxrcij
daughter
0
4939
235353
214152
2026-06-01T15:13:07Z
Lee
19
235353
wikitext
text/x-wiki
== ඉංග්රීසි ==
=== නිරුක්තිය ===
From {{inh|en|enm|doughter}}, {{m|enm|doghter}}, from {{inh|en|ang|dohtor|t=daughter}}, from {{inh|en|gmw-pro|*dohter}}, from {{inh|en|gem-pro|*duhtēr}}, from {{inh|en|ine-pro|*dʰugh₂tḗr}}.
=== උච්චාරණය ===
* {{enPR|dôʹtər|a=RP}}, {{IPA|en|/ˈdɔːtə(ɹ)/}}
* {{audio|en|En-uk-daughter.ogg|a=UK}}
* {{enPR|dô'tər|a=GA}}, {{IPA|en|/ˈdɔ.tɚ/|/ˈdɔ.t̬ɚ/|[ˈdɔ.ɾɚ]}}
* {{enPR|dä'tər|a=cot-caught}}, {{IPA|en|/ˈdɑ.tɚ/|[ˈdɑ.ɾɚ]}}
* {{audio|en|en-us-daughter.ogg|a=US}}
* {{enPR|dô'tŭ|a=Australia}}, {{IPA|en|/ˈdoːtɐ/}}
* {{homophones|en|dotter|aa=cot-caught}}
* {{hyphenation|en|daugh|ter}}
* {{rhymes|en|ɔːtə(ɹ)|s=2}}
=== නාම පදය ===
{{en-noun|s|daughtren<l:archaic>}}
# [[දුව]]
{{cln|en|endearing terms|terms of address}}
{{C|en|Female family members}}
opbish802obpn77rfjeftwxcdhzt2v3
උපග්රන්ථය:ගැටපද විවරණය
0
5232
235337
211761
2026-06-01T14:33:29Z
Lee
19
/* O */
235337
wikitext
text/x-wiki
'''A glossary of terms used in the body of this dictionary.''' See also ''[[Wiktionary:Glossary]]'', which contains terms used elsewhere in the Wiktionary community, and ''[[Appendix:Glossary of rhetoric]]'', which explains commonly used [[#rhetoric|rhetorical]] terms.
{{compactTOC|num=yes}}
==0–9==
; 1st person
: ''See '''{{glossary|first person}}'''.''
; 2nd person
: ''See '''{{glossary|second person}}'''.''
; 3rd person
: ''See '''{{glossary|third person}}'''.''
==Symbols==
; *
: An [[asterisk#Noun|asterisk]] appearing before a term (an affix, a root, a word, etc.), indicates the term is not attested but reconstructed; for example, {{m|ine-pro|*werdʰh₁om}} is the reconstructed Proto-Indo-European word for ''word''.
; [ ]
: [[bracket#Noun|Brackets]] surrounding a quotation indicate that the quotation either contains a mere mention of a term (for example, "some people find the word '''''manoeuvre''''' hard to spell") rather than an actual use of it (for example, "we need to '''manoeuvre''' carefully to avoid causing upset"), or does not provide an actual instance of a term but provides information about a related term.
; †
: In a Chinese entry, a [[dagger#Noun|dagger]] indicates that a sense is obsolete in Modern Standard Chinese, though it may be preserved in fossilized compounds and expressions or other varieties of Chinese.
==අ==
; {{anchor|අනතීත}}{{anchor|අනතීත}}[[අනතීත]]
: වර්තමාන-අනාගත
==A==
; {{anchor|a.}}[[a]].
: "[[ante|Ante]]" (Latin for "before"). Hence, a quotation from "''a.'' 1924" is a quotation from no later than the year 1923.
; {{anchor|abbreviation}}[[abbreviation]]
: A shortened form of a word or phrase, such as an [[#initialism|initialism]], [[#acronym|acronym]], or [[#clipping|clipping]].
; {{anchor|අවදි}}{{anchor|අවදි විබත්}}{{anchor|ablative case}}{{anchor|ablative}} [[අවදි විබත්]] ([[ablative case]])
: A [[#case|case]] that indicates separation, or moving away from something. It is used alone or with certain [[#preposition|prepositions]]. For example, if English had a fully [[#productive|productive]] case system that included the ablative case, then in the phrase ''came from the city'', either "the city" or "from the city" would likely be in the ablative. In some languages, such as Latin, this case has acquired many other uses and does not strictly indicate separation anymore.
; {{anchor|ablaut}}{{anchor|grade}}[[ablaut]]
: In [[Proto-Indo-European]], or any of its descendants (the [[Indo-European]] languages), a system of [[#vowel|vowel]] alternation in which the vowels that are used in various parts of the word can change depending on meaning. The system is used for purposes of [[#inflection|inflection]] and word derivation. In the Germanic languages, it forms the basis of the [[#strong verb|strong verbs]]. A specific form of ablaut is referred to as a '''grade'''; see for instance [[#zero-grade|zero-grade]]. (More at {{pedia|Indo-European ablaut}})
; {{anchor|absolutive}}{{anchor|absolutive case}}[[absolutive case]]
: A [[#case|case]] used to indicate the [[patient#Noun|patient]] or [[experiencer]] of a [[#verb|verb]]'s action.
; {{anchor|abstract noun}}[[abstract noun]]
: A [[#noun|noun]] that denotes an idea, emotion, feeling, quality or other abstract or intangible concept, as opposed to a concrete item, or a physical object. [[#antonym|Antonym]] of [[#concrete noun|concrete noun]].
; {{anchor|abstract verb}}{{anchor|abstract}}[[abstract verb]]
: In the {{w|Slavic languages}}, a verb of motion whose motion is multidirectional (as opposed to unidirectional) or indirect, or whose action is repeated or in a series ([[#iterative|iterative]]). Also called an [[#indeterminate verb|indeterminate verb]]. The opposite type of verb, which expresses a single, completed action, is termed a [[#concrete verb|concrete verb]] (or a [[#determinate verb|determinate verb]]). Motion verbs in the {{w|Slavic languages}} come in abstract/concrete lexical pairs, e.g. {{cog|ru|ходи́ть||to [[go]] (abstract)}} vs. {{m|ru|идти́||to [[go]] (concrete)}}, {{m|ru|бе́гать||to run (abstract)}} vs. {{m|ru|бежа́ть||to run (concrete)}}, {{m|ru|носи́ть||to carry (abstract)}} vs. {{m|ru|нести́||to carry (concrete)}}. English does not make this distinction. For example, "I went to the post office" could be abstract (if I went there and came back, i.e. multidirectional) or concrete (if I am there now, i.e. unidirectional), and different Russian verbs would be used to translate "went" in these two circumstances. In Polish coming back does not cause abstract verbs to be used, only doing something many times (''Chodzę do biura.'' 'I go to the office (every day).' vs. ''Idę do biura'' 'I am going to the office (now).') or moving without target (''Chodzę po pokoju'' 'I am walking around the room.' vs. ''Idę przez pokój.'' 'I am walking across the room.') does. Abstract verbs are always [[#imperfective aspect|imperfective]] in {{glossary|aspect}}, even with prefixes that are normally associated with the [[#perfective aspect|perfective aspect]] (e.g. Polish ''przybiegać'').
; {{anchor|accusative case}}{{anchor|accusative}}{{anchor|acc.}}[[accusative case]], acc.
: A [[#case|case]] that is usually used as the [[#direct object|direct object]] of a [[#verb|verb]]. For example, if English had a fully [[#productive|productive]] case system, then ''ball'' in "The man threw the ball" would most likely be in the accusative.
; {{anchor|acronym}}[[acronym]]
: An [[#abbreviation|abbreviation]] that is pronounced as the “word” it would spell, such as ''[[NATO]]''.
; {{anchor|active}}{{anchor|active voice}}[[active voice]]
: The [[#voice|voice]] verb form in which the grammatical [[#subject|subject]] is the person or thing doing the action ([[cf.]] [[#passive voice|passive voice]]), e.g. ''The boy kicked the ball.'' (See also {{pedia|Voice (grammar)}})
; {{anchor|acute}}{{anchor|acute accent}}[[acute accent]]
: A [[#diacritic|diacritic]] mark ( ´ ) used that can be placed above a number of letters in many languages of the Latin, Greek and Cyrillic writing systems.
; {{anchor|AD}}[[AD]]
: Anno Domini. Year-numbering system equivalent to [[CE]].
; ''adj''
: ''See '''{{glossary|adjective}}'''.''
; {{anchor|adjective}}[[adjective]]
: A word like {{m|en|big}} or {{m|en|childish}} that usually serves to modify a [[#noun|noun]].
; {{anchor|adverb}}[[adverb]]
: A word like {{m|en|very}}, {{m|en|wickedly}} or {{m|en|often}} that usually serves to modify an [[#adjective|adjective]], [[#verb|verb]], or other adverb.<!-- Compare ''{{glossary|modifier}}''. -->
; {{anchor|adverbial}}[[adverbial]]
: Relating to an [[#adverb|adverb]]. For example, an ''adverbial participle'' is a [[#participle|participle]] that functions like an adverb in a sentence.
; {{anchor|adverbial clause}}[[adverbial clause]]
: A type of [[#dependent clause|dependent clause]] that modifies a verb in an [[#adverbial|adverbial]] fashion. Examples are '''''When my friend arrives''', I will take him out to dinner'' and '''''If it rains''', I will go home'' (the latter example being specifically a ''conditional clause'').
; {{anchor|affix}}{{anchor|af}}{{anchor|agent nouns}}[[affix]]
: A [[bound morpheme]] added to a word’s stem; a [[prefix]], [[suffix]], [[interfix]], etc. In the narrow sense, {{syn of|und|#suffix|suffix|nocap=1}}.
; {{anchor|agentive}}{{anchor|agent noun}}{{anchor|agent nouns}}[[agent noun]]
: A noun that denotes an agent who does the action denoted by the verb from which the noun is derived, such as "cutter" derived from "to cut".
; {{anchor|AHD}}AHD
: The ''[[w:American Heritage Dictionary|American Heritage Dictionary]]''. For historical reasons, this abbreviation is sometimes used here to identify a respelled pronunciation that is given in [[#enPR|enPR]] form.
; {{anchor|alternative form}}Alternative form
: A word etymologically related but varying somehow to another.
; {{anchor|ambitransitive verb}}{{anchor|ambitransitive}}[[ambitransitive verb]]
: Capable of being either {{glossary|transitive}} or {{glossary|intransitive}} depending on usage. For instance, {{m|en|eat}} and {{m|en|read}} optionally take a [[#direct object|direct object]]: "I eat daily", "She likes to read" (both intransitive), "Read this book", "I do not eat meat" (both transitive). [[#ergative verb|Ergative verbs]] (q.v.) are a kind of ambitransitive verb.
; {{anchor|anglicisation}}{{anchor|anglicization}}{{anchor|anglicised}}{{anchor|anglicized}}[[anglicisation]], [[anglicization]]
: The modification of a foreign ([[#loanword|borrowed]]) word to make it more English in form.
; {{anchor|angry register}}[[angry]] [[#register|register]]
: Belonging to the angry linguistic [[#register|register]], used only when the speaker is angry. This register is quite rare, but is found in the {{w|Bikol languages}} of the central Philippines.
; {{anchor|animate}}{{anchor|animacy}}[[animate]]
: Having a [[referent]] that includes a human or animal. Many languages (such as the {{w|Slavic languages}}) classify nouns based on animacy, using different [[#inflection|inflection]]s or words with animate and inanimate nouns. (See also {{pedia|Animacy}})
; {{anchor|antepenultima}}{{anchor|antepenultimate}}{{anchor|antepenult}}[[antepenultima]]
: The third-to-last [[#syllable|syllable]] of a word, before the [[#penultima|penultima]].
; {{anchor|antonym}}{{anchor|antonymous}}[[antonym]]
: A word with a meaning that is the opposite of a meaning of another word. For example, {{m|en|good}} is an antonym of {{m|en|bad}}. Contrast [[#synonym|synonym]].
; {{anchor|aorist}}{{anchor|aorist tense}}[[aorist]]
: A grammatical category of [[#verb|verbs]] that is often a [[#perfective|perfective]] past. (See also {{pedia|aorist}})
; {{anchor|apheresis}}{{anchor|apheretic}}{{anchor|aphaeresis}}{{anchor|aphaeretic}}[[apheresis]]
: The removal of a letter or sound from the beginning of a word.
; {{anchor|aphesis}}{{anchor|aphetic}}[[aphesis]]
: The removal of an initial unstressed sound from a word, the process by which {{m|en|escarp}} became {{m|en|scarp}}. Words derived in this way are called aphetic.
; {{anchor|apocopic}}{{anchor|apocope}}{{anchor|apocopate}}{{anchor|apocopated}}{{anchor|apocopation}}[[apocope]]
: Omission of the final sound or syllable of a word without changing its morphological structure or meaning. Occurs in Italian, Spanish, and other languages.
; {{anchor|approximant}}[[approximant]]
: A [[#consonant|consonant]] sound produced by restricting the air flow through the mouth only slightly, resulting in a smooth sound. In English, the approximants are {{IPAchar|/l/}}, {{IPAchar|/ɹ/}}, {{IPAchar|/w/}}, {{IPAchar|/j/}} (as in the initial sounds of ''loo'', ''rue'', ''woo'' and ''you''). Approximants are distinguished from [[#fricative|fricative]]s, in which the air is constricted enough to cause a rough, hissing or buzzing sound, and [[#plosive|plosive]]s, in which the air is blocked completely for a short period of time.
; {{anchor|archaic}}{{anchor|archaism}}[[archaic]]
: No longer in general use, but still found in some contemporary texts that aim for an antique style, like historical novels. For example, {{m|en|thee}} and {{m|en|thou}} are archaic pronouns, having been completely superseded by {{m|en|you}}.<!--Sometimes understood by educated people, but rarely used in current texts or speech.--> ''Archaic'' is a stronger term than ''[[#dated|dated]]'', but not as strong as ''[[#obsolete|obsolete]]''. (See [[Wiktionary:Obsolete and archaic terms]].) Whereas an archaic term names a still-extant thing or non-outdated concept, a [[#historical|historical]] term names a former thing or outdated concept.
; {{anchor|areal}}{{anchor|areal feature}}[[areal]] {{nobold|{{wikipedia|Areal feature}}}}
: Distributed across multiple languages inhabiting a particular area, due to [[w:language contact|language contact]] among them rather than due to [[inheritance]] from a common ancestor. The term can be applied either to words (see ''{{glossary|loanword}}'') or features of languages such as in [[w:grammar|grammar]], [[w:morphology|morphology]], and [[w:phonology|phonology]]. See also ''{{glossary|Wanderwort}}'' and ''{{glossary|stratum}}''.
; {{anchor|article}}[[article]]
: A type of [[#determiner|determiner]] that is used as a grammatical indicator in some languages, and is usually central to the grammar and syntax of that language. In English, the articles are the [[#definite|definite]] article {{m|en|the}}, and the [[#indefinite|indefinite]] articles {{m|en|a}} and {{m|en|an}}. Some languages may have more articles, such as the French [[#partitive|partitive]] articles {{m|fr|du}}, {{m|fr|de la}} and {{m|fr|des}}, while many languages lack articles altogether.
; {{anchor|aspect}}[[aspect]] {{nobold|{{wikipedia|Grammatical aspect}}}}
: A property of a verb form indicating the nature of an action as [[#perfective|perfective]] (complete) or [[#imperfective|imperfective]] (incomplete or continuing).
; {{anchor|aspirated_h}}[[aspirated h]]
: In French, an initial ⟨h⟩ that is treated as a [[#consonant|consonant]]; that is to say, [[liaison]] and [[elision]] are not permitted at the beginning of a word with an aspirated ⟨h⟩.
; {{anchor|assimilation}}{{anchor|assimilate}}{{anchor|assimilated}}[[assimilation]] {{nobold|{{wikipedia|Assimilation (phonology)}}}}
: Assimilation is a common phonological process by which one sound becomes more like a nearby sound. This can occur either within a word or between words. See also ''{{glossary|dissimilation}}''.
; {{anchor|attributive}}{{anchor|attributively}}[[attributive]]
:# An adjective that stands in a syntactic position where it directly modifies a noun, as opposed to a [[#predicative|predicative]] adjective, which stands in a [[#predicate|predicate]] position but which modifies the [[#subject|subject]] of the [[#clause|clause]]. For example, in ''the big green house'', ''big'' and ''green'' are attributive adjectives, whereas in ''The house is big and green'', ''big'' and ''green'' are predicative adjectives. Some adjectives are only-attributive like {{m|en|close#Adjective}} (in ''a close friend'') or {{m|en|plain}} (in ''plain nonsense'').
:# A noun or adjective (or phrase) that names a real object with the ''attributes'' of another real object. This is in contrast to a [[#substantive|substantive]] noun or adjective, which names a real object that is the actual ''substance'' named by the noun or adjective.
; {{anchor|augment}}{{anchor|augmented}}[[augment]] {{nobold|{{wikipedia|Augment (linguistics)}}}}
: In some Indo-European languages, a prefixed [[#vowel|vowel]] (usually '''e-'''; '''έ''' or '''ή''' in Greek, '''a-''' in Sanskrit) indicating a past tense in a verb.
; {{anchor|augmentative}}[[augmentative]]
: A word form expressing large size, importance, intensity, or seniority.
; {{anchor|auxiliary verb}}[[auxiliary verb]] or {{anchor|auxiliary}}[[auxiliary]]
: A verb that accompanies another verb in a clause. It is used to indicate distinctions in {{glossary|tense}}, {{glossary|mood}}, {{glossary|voice}}, {{glossary|aspect}} or other grammatical nuances. English examples are {{m|en|can}}, {{m|en|will}}, {{m|en|have}}, {{m|en|be}}.
; {{anchor|avoidance}}[[avoidance]] term
: A word standardly used to replace a [[taboo]] word. (See also {{pedia|Naming taboo}})
==B==
; {{anchor|back-formation}}[[back-formation]]
: A term formed by removing an apparent or real prefix or suffix from an older term; for example, the noun {{m|en|pea}} arose because the final {{IPAchar|/z/}} sound in {{m|en|pease}} sounded like a plural suffix. Similarly, the verb {{m|en|edit}} is a back-formation from the earlier noun {{m|en|editor}}. Not to be confused with [[#clipping|clipping]], which just shortens a word without changing meaning or part of speech.
; {{anchor|back vowel}} [[back vowel]]
: Vowel sound produced in the back of the mouth. Examples in English include /uː/ in {{l|en|rule}} or /əʊ/ in {{l|en|pole}}. Contrasts to a [[#front vowel|front vowel]].
; {{anchor|backronym}}[[backronym]]
: A word that is either not an [[#acronym|acronym]] but is taken to be one and for which a full form is invented by [[#back-formation|back-formation]], or is an acronym and for which an alternative full form is invented by back-formation.
; {{anchor|backslang}}[[backslang]]
: A form of [[#slang|slang]] in which the spelling of words is reversed.
; {{anchor|bahuvrihi}}[[bahuvrihi]]
: Another term for an ''[[#exocentric|exocentric]] compound''. Contrast [[#tatpurusa|tatpurusa]], [[#karmadharaya|karmadharaya]] and [[#dvandva|dvandva]].
; {{anchor|barytone}}[[barytone]]
: With the stress elsewhere than upon the final syllable. Compare with [[#oxytone|oxytone]], [[#paroxytone|paroxytone]], and [[#proparoxytone|proparoxytone]].
; {{anchor|BC}}[[BC]]
: Before Christ. Year-numbering system equivalent to [[#BCE|BCE]].
; {{anchor|BCE}}[[BCE]]
: Before the Common, Current or Christian Era. Year-numbering system equivalent to [[BC]]. [[AD]] is expressed as [[#CE|CE]]. To automatically switch most dates to use the "BC"/"AD" style, visit [[WT:Per-browser preferences]].
; {{anchor|blend}}[[blend]]
: A word or name that combines two words, typically starting with the start of one word and ending with the end of another, such as {{m|en|smog}} (from {{m|en|smoke}} and {{m|en|fog}}) or {{m|en||Wiktionary}} (from {{m|en|wiki}} and {{m|en|dictionary}}). Many blends are [[#portmanteau|portmanteaus]].
; {{anchor|bowdlerization}}[[bowdlerize|bowdleriz]]ation
: The removal, from a text, of words or phrases that are considered offensive or vulgar.
; {{anchor|broadly}}{{anchor|broad}}[[broadly]]
: Indicates a less precise (wider) use of words; short for ''broadly speaking''. For most practical purposes, synonymous with ''[[#loosely|loosely]]''<!--because the differentiable nuance whereby "loosely" can sometimes imply some degree of prescriptive deprecation, whereas "broadly" less often and less strongly does so, is beyond-scope for this glossary; that is, for this glossary's purposes, "broadly" and "loosely" are interchangeable in practice-->. Contrast ''[[#strict|strict]]'' (''narrow'') senses.
==C==
; {{g|c}}
: ''See '''{{glossary|common gender}}'''.''
; {{anchor|c.}}{{anchor|ca.}}c., ca.
: "[[circa|Circa]]" ("about"). Hence, a quotation from "c. 1924" or "ca. 1924" is a quotation from approximately 1924.
; {{anchor|calque}}{{anchor|loan translation}}{{anchor|calqued}}[[calque]]
: A borrowing by word-for-word translation: a [[loan translation]]. For example, the English expression ''[[it goes without saying]]'' is a calque (a literal, word-for-word translation) of {{m+|fr|ça va sans dire}}, and ''[[flea market]]'' is a calque of {{m+|fr|marché aux puces|lit=[[market]] with [[flea]]s}}. Contrariwise, the term ''[[skyscraper]]'' was calqued into French as {{m|fr|gratte-ciel|lit=scrapes-sky}}. A semantic calque, also known as [[#semantic loan|semantic loan]], works similarly but does not create new terms. (''see'' {{pedia|Calque}})
; {{anchor|case}}[[case]]
: One of the forms of a noun, used to indicate its function in the phrase or sentence. Examples include: [[#nominative case|nominative]], [[#accusative case|accusative]], [[#genitive case|genitive]], [[#dative case|dative]].
; cat.
: Abbreviation for {{m|en|category}}.
: Without the period, the [[w:ISO 639-3|ISO 639-3]] code for the Catalan language.
; {{anchor|category}}[[category]]
: A collection of entries, used to categorize or group entries of words that are similar in syntax (for example, English plural nouns) or in sense (for example, English words pertaining to sports); ''see'' [[Wiktionary:Categorization]].
; {{anchor|catenative}}{{anchor|catenative verb}}[[catenative]] verb
: A [[#verb|verb]] able to be immediately followed by the full or bare [[#infinitive|infinitive]], or [[#gerund|gerund]] (i.e. non-finite verbs).
: → [[Appendix:English catenative verbs]]
; {{anchor|causative}}{{anchor|causative verb}}[[causative]] verb
: A transitive verb that is derived from another verb, and expresses the act of making someone/something do the action of the base verb. Examples in English are: {{m|en|lay}} (cause to {{m|en|lie}}), {{m|en|set}} (cause to {{m|en|sit}}) and {{m|en|raise}} (cause to {{m|en|rise}}). Compare '''[[#factitive|factitive verb]]s''' (e.g. {{m|en|shorten}}, {{m|en|enslave}}), which are similar but are derived from adjectives or nouns.
; {{anchor|CE}}[[CE]]
: Common, Current or Christian Era. Year-numbering system equivalent to [[AD]]. To automatically switch most dates to use the "BC"/"AD" style, visit [[WT:Per-browser preferences]].
; {{anchor|cf.}}[[cf.]]
: "Confer"; "see"; "compare" – often used to indicate a word with similar, or opposite meaning.
; {{anchor|circumlocutory}}[[circumlocutory]]
: Refers to a roundabout or indirect way of speaking; the use of more words than necessary to express an idea.
; {{anchor|CJKV}}{{anchor|CJKV}}[[CJK]], [[CJKV]]
: Chinese, Japanese, Korean{{,}} (and Vietnamese); [[w:CJK characters|CJK characters]].
; {{anchor|classifier}}[[classifier]]
: See [[#counter|counter]].
; {{anchor|clause}}[[clause]]
: A word or group of words that functions as a single unit in the [[#syntax|syntax]] of a [[#sentence|sentence]], where the [[#head|head]] (or central) word is a [[#verb|verb]]; normally distinguished from a [[#phrase|phrase]], which is a similar unit where the head word is some other [[#part of speech|part of speech]], such as a [[#noun|noun]], [[#adjective|adjective]] or [[#preposition|preposition]]. For example, the [[#sentence|sentence]] ''The man entered the house, which was large and blue'' contains two clauses, the [[#independent clause|independent clause]] ''The man entered the house'' and the [[#dependent clause|dependent clause]] ''which was large and blue'' (here the dependent clause is specifically a [[#relative clause|relative clause]], although not all dependent clauses are relative clauses).
; {{anchor|ක්ලිප් කිරීම්}}{{anchor|clipping}} [[ක්ලිප් කිරීම්]] ([[clipping]])
: A shortening of a word, without changing meaning or part of speech. Not to be confused with [[#back-formation|back-formation]], which changes meaning, or [[#ellipsis|ellipsis]], which shortens by omission of whole words. Also differs from [[#abbreviation|abbreviation]], which shortens the written—rather than spoken—form of a word or phrase. See also ''[[#apheresis|apheresis]]'', ''[[#apocope|apocope]]''.
: → {{pedia|Clipping (morphology)}}
; {{anchor|clitic}}[[clitic]]
: A word that attaches to a phrase and cannot be used on its own, such as English ''[['s|-'s]]''. Many languages have clitic [[#pronouns|pronouns]] ([[#weak_pronoun|weak pronouns]]), which may be contrasted with [[#emphatic|emphatic]] or [[#strong|strong]] pronouns; for example, English ''[['em]]'' is a clitic version of ''[[them]]'', and always attaches to the preceding word (usually the [[#verb|verb]]).
; {{anchor|cognate}}[[cognate]]
: [[descend|Descended]] from the same source [[#lexeme|lexeme]] of an [[ancestor]] language.
; {{anchor|coinage}}{{anchor|coined}}[[coinage]]
: A new word intentionally created with a definite meaning.
; {{anchor|collective}}{{anchor|collectively}}{{anchor|collective noun}}[[collective]]
: Expressing a collection or aggregate of individuals by a [[#singular|singular]] form.
: → [[:Category:Collective nouns by language]]<!-- lb collective, collectively -->
; {{anchor|colloquial}}[[colloquial]]
: Denotes words belonging to a spoken or vernacular variety of a language. These words are only properly used in a casual or familiar context. This label is only used with some languages; with others it is treated as a synonym of ''[[#informal|informal]]''. If used, ''colloquial'' is stronger than ''informal'' (a general rule of thumb is that informal words may be used in the running text of a newspaper article, while a colloquial term would likely not appear without quotation marks).
: '''Note:''' It is a common misconception that ''colloquial'' somehow denotes "local" or a word being "[[#regional|regional]]". This is incorrect; the word root for ''colloquial'' is related to {{m|en|locution}}, not {{m|en|location}}.
; {{anchor|c}}{{anchor|common}}{{anchor|common gender}} [[common gender]], {{g|c}}
: "Of common [[#gender|gender]]". Some languages have a distinct common gender that combines [[#masculine|masculine]] and [[#feminine|feminine]] but is distinguished from [[#neuter|neuter]]. In other languages, a "noun of common gender" is a pair of nouns, one masculine and one feminine, that are identical in form, and that have the same sense except that one refers to men and the other to women. Distinguish [[#epicene|epicene]].
; {{anchor|comparable}}[[comparable]]
: Of an adjective or adverb: able to be compared, having [[#comparative|comparative]] and [[#superlative|superlative]] forms that end in ''-er'' and ''-est'' (adjectives only), or in conjunction with the words ''more'' or ''most'', or sometimes ''further'' or ''furthest''. Examples: ''big'', ''bigger'', and ''biggest''; ''talented'', ''more talented'', and ''most talented''; ''upstairs'', ''further upstairs'', and ''furthest upstairs''. Some adjectives are truly '''[[#uncomparable|uncomparable]]''', such as ''daily'', ''additional'', and ''else''. Many other adjectives, such as ''unique'', ''existential'', and ''bearable'' are generally considered uncomparable, but controversially so, where examples can be readily cited of something being "''more bearable''" or "''most perfect''".
; {{anchor|comparative}}[[comparative]]
: An [[#inflection|inflection]], or different form, of a '''[[#comparable|comparable]]''' adjective showing a relative quality, usually denoting "to a greater extent" but not "to the ultimate extent". (See also ''[[#superlative|superlative]]'' and ''[[#degrees of comparison|degrees of comparison]]''.) In English, the ''comparative'' form is usually formed by appending ''-er'', or using the word ''more''. For example, the comparative of ''hard'' is "''harder''"; of ''difficult'', "''more difficult''".
; {{anchor|compound}}[[compound]]
: A word or name that combines two or more words without altering them, such as ''[[dishcloth]]'' (from ''[[dish]]'' and ''[[cloth]]'') or ''[[keyboard]]'' (from ''[[key]]'' and ''[[board]]''). Compound terms are indicated in etymologies using {{temp|compound}}. (See also ''[[WT:ETY#Compound]]''.)
; {{anchor|concrete noun}}[[concrete noun]]
: A [[#noun|noun]] that denotes something tangible or material, such as a person or place. [[#antonym|Antonym]] of [[#abstract noun|abstract noun]].
; {{anchor|concrete verb}}{{anchor|concrete}}[[concrete verb]]
: In the {{w|Slavic languages}}, a verb of motion whose motion is unidirectional and expresses a single, completed action. Opposed to [[#abstract verb|abstract verbs]], whose motion is multidirectional or indirect, or whose action is repeated or in a series ([[#iterative|iterative]]). Also called a [[#determinate verb|determinate verb]]. See ''[[#abstract verb|abstract verb]]'' for more discussion.
; {{anchor|conditional}}{{anchor|conditional mood}}[[conditional mood]]
: The [[#mood|mood]] of a [[#verb|verb]] used to signify that something is [[contingent]] upon the outcome of something else. The conditional mood in English is normally introduced by the word ''would'', as in ''If I were rich, I would be happy''.
; {{anchor|conjugation}}[[conjugation]]
: The [[#inflection|inflection]] of [[#verb|verb]]s. See also ''[[#declension|declension]]''.
; {{anchor|conjunction}}[[conjunction]]
: A word used to join other words or phrases together into sentences.
; {{anchor|connegative}}[[connegative]]
: A [[verb]] form used with the [[#negative verb|negative verb]].
; {{anchor|consonant}}[[consonant]]
: Any sound that is not the dominant sound of a [[#syllable|syllable]], the dominant sound generally being a [[#vowel|vowel]].
; {{anchor|consonantism}}[[consonantism]]
: The sequence of [[#consonant|consonants]], or the quality peculiar to the consonants of a given word or group of words.
; {{anchor|construct state}}[[construct state]]
: In some languages, a grammatical form that is used in construing a noun or adjective with another noun or adjective. In the [[Semitic]] languages, the construct form is usually a noun modified by a following noun in a genitive construction. The construct state of such a noun ''X'' can usually be translated to English as ''X of''. In [[Persian]], the construct state is typically used for all nouns and adjectives in a [[noun phrase]] except the very last.
; {{anchor|contamination}}[[contamination]]
: Influence of one term on the development of another term whereby they come to have similar meanings or similar sound, [[conflation]].
; {{anchor|contraction}}{{anchor|contracted}}[[contraction]]
: A word or phrase shortened in speech, sometimes represented in writing with a [[punctuation mark]] in place of missing letters (e.g. {{noncog|en|-}} {{m|en|do}} {{m|en|not}} → {{m|en|don't}} or {{noncog|ro|-}} {{m|ro|nu}} {{m|ro|e}} → {{m|ro|nu-i}}).
; {{anchor|contranym}}[[contranym]]
: A term with two opposite meanings.
; {{anchor|conversion}}[[conversion]]
: The process whereby a new word is created without changing the form, often by allowing the word to function as a new part of speech.
; {{anchor|coordinate term}}[[coordinate term]]
: A term that is a different type of the same [[#hypernym|hypernym]] (loosely "category"). ''Car'' and ''bicycle'' are coordinate terms to each other, both being [[#hyponym|hyponyms]] of a shared [[#hypernym|hypernym]] ''vehicle''. Although the term can be applied broadly – e.g. ''car'' and ''asteroid'' are both ''things'' –, such usage is not useful in Wiktionary.
; {{anchor|coordinative}}[[coordinative]] [[compound]]
: A [[#nominal|nominal]] [[#compound|compound]] in which the two parts are coordinated and the intended meaning of the compound as a whole is a combination of the two parts. Also known as a ''[[#dvandva|dvandva]] compound''. Examples in English are not common but are found in many other languages, e.g. {{m+|el|μαχαιροπίρουνο||cutlery|lit=knife-fork}} and {{m+|yi|טאַטע־מאַמע||parents|lit=papa-mama}}. Contrast [[#exocentric|exocentric]] and [[#endocentric|endocentric]] compounds.
; {{anchor|copula}}{{anchor|copulative}}[[copula]]
: A verb that links and equates its [[#subject|subject]] with its object; also called a [[#linking verb|linking verb]]. The most common copula is the verb ''to be'', but others exist, such as ''to seem'', ''to appear'' and ''to sound''. The object of a copula often has special properties. For example, it can be an [[#adjective|adjective]] (''John is '''very tall''''') when most verbs require their objects to be [[#noun|noun]]s or [[#pronoun|pronoun]]s. In addition, in languages with [[#case|case]] distinctions, the object of a copula is most commonly in the [[#nominative|nominative]] case, while the object of other verbs is usually in a different case, such as the [[#accusative|accusative]] case. Many languages (e.g. {{cog|ru|-}}, {{cog|he|-}}, and {{cog|ar|-}}) use a ''null copula'' (i.e. no word at all) in the present tense when English would use the words ''am'', ''are'' or ''is''.
; {{anchor|corruption}}{{l|en|corruption|id=usage prescription}}
: A [[#nonstandard|nonstandard]] form of a word, expression, or text, assigned a value judgment as being [[debase]]d, especially when resulting from [[misunderstanding]], [[transcription]] error, or [[mishear]]ing; this term is applied in usage prescription but not in modern linguistic science.<!--[[w:Language change]] addresses the epistemological problem with the value judgment, even when misapprehension was the causative factor.-->
; {{anchor|countable}}[[countable]], countable noun, [[count noun]]
: Describes a noun which can be freely used with the [[indefinite article]] (''a'' or ''an'' in English) and with numbers, and which therefore has a [[plural]] form. [[#antonym|Antonym]]: ''[[#uncountable|uncountable]]'' or ''mass noun''.
; {{anchor|counter}}[[counter]]
: In linguistics, counters, [[measure word]]s or [[classifier]]s are words that are used in combination with a numeral to indicate an amount of something represented by some noun. They denote a unit or measurement and are used with [[mass noun]]s, and sometimes also with [[count noun]]s. (Compare ''[[#singulative|singulative]].'')
==D==
; {{anchor|dated}}[[dated]]
: Formerly in common use, and still in occasional use, but now unfashionable; for example, ''[[wireless]]'' in the sense of "broadcast radio tuner", ''[[groovy]]'', and ''[[gay]]'' in the sense of "bright" or "happy" are all dated. ''Dated'' is not as strong as ''[[#archaic|archaic]]'' or ''[[#obsolete|obsolete]]''. See [[Wiktionary:Obsolete and archaic terms]].
; {{anchor|සපදන් විබත්}}{{anchor|dative case}}{{anchor|dative}}{{anchor|dat}}[[සපදන් විබත්]] ([[dative case]]), dat.
: A [[#case|case]] that is usually used as the [[#indirect object|indirect object]] of a verb. For example, if English had a fully [[#productive|productive]] case system, then ''him'' in "She gave him the ball" would most likely be in the dative.
; {{anchor|declension}}[[declension]]
: The [[#inflection|inflection]] of [[#noun|noun]]s and words like them, or used together with them (i.e. [[#nominal|nominal]]s). See also ''[[#conjugation|conjugation]]''.
; {{anchor|defective}}[[defective]]
: Normally would be expected to have a full set of [[#inflection|inflected]] forms, but some of the inflections do not exist or are never used. English examples are the defective verbs {{m|en|can}} and {{m|en|shall}}, which do not have [[#infinitive|infinitive]] forms (there is no ''to can'' or ''to shall'').
; {{anchor|defective spelling}}defective spelling
: In languages with [[mater lectionis|matres lectionis]] ([[#consonant|consonant]] letters representing [[#vowel|vowels]]), the form including no additional ones, this may still include a mater lectionis.
; {{anchor|definite}}[[definite]]
: Refers to forms of words that present something as known, identified, or immediately identifiable; in English, this is the basic meaning of the [[#article|article]] ''[[the]]''; in some languages, this is a nominal or adjectival [[#inflection|inflection]]. In the Germanic languages, adjectives inflected as definite are referred to as "weak". In Hungarian, the definite conjugation is used to indicate [[:w:Hungarian verbs#Definite and indefinite conjugations|definite objects]], including ''him, her, it, them,'' and the formal ''you.''
; {{anchor|degrees of comparison}}[[degrees of comparison]]
: [[#inflection|Inflections]] of adjectives and adverbs which allow comparisons. English has three ''degrees of comparison'': [[#positive|positive]], [[#comparative|comparative]] and [[#superlative|superlative]]. Some other languages have other degrees, e.g.: [[comparative superlative]], [[relative superlative]], [[elative]].
; {{anchor|denominal}}[[denominal]]
: Derived from a [[#noun|noun]].
; {{anchor|dependent}}[[dependent]]
: (In Greek and in the Gaelic languages) A verb form which is not used independently but preceded by a particle to form the negative or a tense form.
; {{anchor|dependent clause}}[[dependent clause]]
: A [[#clause|clause]] that cannot stand on its own as a complete [[#sentence|sentence]], as opposed to an [[#independent clause|independent clause]]. Also known as a [[#subordinate clause|subordinate clause]]. Logically, a dependent clause modifies a word in another clause in the sentence. Common examples are (1) [[#relative clause|relative clause]]s (also known as "adjective clauses" or "adjectival clauses"), which modify nouns (e.g. ''The man '''whom I saw yesterday''' is leaving today''); (2) [[#adverbial clause|adverbial clause]]s, which modify verbs in an adverbial fashion (e.g. '''''When it is time to leave''', I will go home''), and [[#noun clause|noun clause]]s, which take the place of nouns (e.g. ''I said '''that my name is John''''' or ''I suggested '''that he leave'''''). (''see'' {{pedia|Dependent clause}})
; {{anchor|deponent}}[[deponent]]
: (In Greek, Latin, and some Gaelic and Nordic languages) A verb with an active meaning which conjugates in a passive manner.
; {{anchor|derived terms}}[[Wiktionary:Entry layout explained#Derived terms|derived terms]]
: A post-[[POS]] heading listing terms in the same language that are morphological derivatives.
; [[derogatory]]
: ''See '''{{glossary|pejorative}}'''.''
; {{anchor|descendants}}[[Wiktionary:Entry layout explained#Descendants|descendants]]
: A post-[[POS]] heading listing terms in other languages that have borrowed or inherited the word.
; {{anchor|descriptive}}[[descriptive]] [[compound]]
: A [[#nominal|nominal]] [[#compound|compound]] in which one part modifies the other, where both parts refer to the intended meaning of the compound as a whole. Also known as a ''[[karmadharaya]] compound''. The intended meaning of the compound as a whole is an extension of the sum-of-parts meaning of the compound. Examples in English are "[[blackboard]]" (a type of board which is [often] black) and "[[houseboat]]" (a boat which is also a house). Contrast [[#determinative|determinative]] compounds, where the modified component but not the modifier refer to the intended meaning as a whole, as in "[[rainbow]]" and "[[footstool]]". Descriptive compounds are a subtype of [[#endocentric|endocentric]] compounds, which are in turn contrasted with [[#exocentric|exocentric]] and [[#coordinative|coordinative]] compounds.
;{{anchor|desiderative}}[[desiderative]]
: A verb form indicating a wish.
; {{anchor|determinate verb}}{{anchor|determinate}}[[determinate verb]]
: In the {{w|Slavic languages}}, another term for ''[[#concrete verb|concrete verb]]''.
; {{anchor|determinative}}[[determinative]] [[compound]]
: A [[#nominal|nominal]] [[#compound|compound]] in which one part modifies the other, where the modified component (but not the modifier) refers to the intended meaning of the compound as a whole. Also known as a ''[[tatpurusa]] compound''. Examples in English are "[[rainbow]]" (a type of [[bow]], caused by the rain) and "[[footstool]]" (a type of [[stool]], intended for one's feet). Contrast [[#descriptive|descriptive]] compounds, where both the modifier and modified component refer to the intended meaning as a whole, as in "[[blackboard]]" or "[[houseboat]]". Determinative compounds are a subtype of [[#endocentric|endocentric]] compounds, which in turn are contrasted with [[#exocentric|exocentric]] and [[#coordinative|coordinative]] compounds.
; {{anchor|determiner}}[[determiner]]
: A noun modifier that expresses the in-context reference or quantity of a noun or noun phrase. Determiners are often considered adjectives, but in fact are not quite the same; for example, in English, {{m|en|big}} is an adjective, so “the big car” is grammatical while *“He saw big car” is not, but {{m|en|some}} is a determiner, so *“the some car” is not grammatical while “He saw some car” is. In English, adjectives can ''sometimes'' stand alone without a noun, while determiners nearly ''always'' can (contrast *“He saw big” with “He saw some”), such that they are sometimes considered pronouns as well as adjectives.
; {{anchor|deverbal}}[[deverbal]]
: A word, often a [[#substantive|substantive]], derived from a [[#verb|verb]]. Contrast ''[[#denominal|denominal]]''.
; {{anchor|diachrony}}{{anchor|diachronic}}{{anchor|diachronically}}[[diachrony]] {{nobold|{{wikipedia|Diachrony_and_synchrony|Diachrony and synchrony}}}}
: A viewpoint of analysis of a language or phrase within a language which considers the [[historical linguistics|historical changes]] over time which have shaped its state at a given later time. The term is typically used to contrast with ''{{glossary|synchrony}}''.
; {{anchor|diacritic}}{{anchor|diacritical}}{{anchor|diacritical mark}}[[diacritic]]
: A diacritic – also diacritical mark, diacritical point, diacritical sign, or an accent – is a [[#glyph|glyph]] added to a letter, or basic glyph. Examples: [[#acute|acute]] ( ´ ), double acute ( ˝ ), [[#breve|breve]] ( ˘ ), inverted breve ( ̑ ), [[#cedilla|cedilla]] ( ¸ ), [[#diaeresis|diaeresis]]/[[#umlaut|umlaut]] ( ¨ ), [[#macron|macron]] ( ¯ ), [[overring|overring]] ( ˚ ), [[#perispomene|perispomene]] ( ͂ ), etc. The main use of a diacritical mark is to change the sound-values of the letters or cadence of a word to which they are added. Examples are the diaereses in the borrowed French words {{m|en|naïve}} and {{m|en|Noël}}, which show that the vowel with the diaeresis mark is pronounced separately from the preceding vowel; the acute and [[#grave|grave]] accents, which can indicate that a final vowel is to be pronounced, as in {{m|en|saké}} and poetic ''breathèd''; and the cedilla under the ⟨c⟩ in the borrowed French word {{m|en|façade}}, which shows it is pronounced {{IPAchar|/s/}} rather than {{IPAchar|/k/}}.
; {{anchor|diaeresis}}{{anchor|diaresis}}{{anchor|dieresis}}[[diaeresis]]
: A [[#diacritic|diacritic]] ( ¨ ) placed over a [[#vowel|vowel]] letter indicating that it is sounded separately.
; {{anchor|dialectal}}[[dialectal]]
: Of or relating to a [[dialect]].
; {{anchor|diminutive}}[[අල්පාර්ථ පද]] ([[diminutive]])
: A word form expressing smallness, youth, endearment, unimportance, or contempt.
; {{anchor|direct object}}[[direct object]]
: The [[#noun|noun]] or noun [[#phrase|phrase]] that a [[#verb|verb]] is directly acting upon. In some languages direct objects are marked with the [[#accusative case|accusative case]].
: → [[#transitive verb|transitive verb]], [[#indirect object|indirect object]]
; {{anchor|dissimilation}}{{anchor|dissimilate}}{{anchor|dissimilated}}[[dissimilation]] {{nobold|{{wikipedia|Dissimilation}}}}
: A phonological process whereby one of a pair of similar sounds within a word or phrase becomes dissimilar: for example, the shift l…l > r…l in the derivation of {{m+|frm|coronnel}} from Old Italian {{m|it|colonnello}}. It has an opposite effect to [[#assimilation|assimilation]].
; {{anchor|displaced}}[[displace]]d
: Of an older word: having been replaced by a newer word.
; {{anchor|ditransitive verb}}{{anchor|ditransitive}}[[ditransitive verb]]
: (of a verb) taking two objects, such as {{m|en|give}} in “Give me the ball” (where {{m|en|me}} is an [[#indirect object|indirect object]] and {{m|en|ball|the ball}} is a [[#direct object|direct object]]). Compare [[#intransitive verb|intransitive verb]] and [[#transitive verb|transitive verb]].
; {{anchor|doublet}}[[doublet]]
: One of two (or more) words in a language that have the same [[#etymology|etymological]] root but have come to the modern language through different routes. Doublets can come about e.g., as [[#loanword|loanwords]] from two different but related languages, as loanwords acquired from the same language at two different stages, as one loanword from a related language plus its native [[#cognate|cognate]], or as derivatives formed at two different stages in the history of a language.
; {{anchor|dual}}{{anchor|dual number}}[[dual]], [[dual number]]
: A [[#number|grammatical number]] that indicates exactly two items or individuals. Usually contrasts with [[#singular number|singular]] and [[#plural number|plural]].
; {{anchor|dummy pronoun}} {{w|dummy pronoun}}
: A [[#pronoun|pronoun]] that has no referent. For instance, {{m|en|it}} in ''it is good to know that you are okay'' is a dummy [[#subject|subject]]. It is used in order to provide the verb {{m|en|is}} with a syntactic subject, because English does not allow a [[w:null-subject language|null subject]].
; {{anchor|dvandva}}[[dvandva]]
: Another term for a ''[[#coordinative|coordinative]] compound''. Contrast [[#bahuvrihi|bahuvrihi]], [[#tatpurusa|tatpurusa]] and [[#karmadharaya|karmadharaya]].
; {{anchor|dysphemism}}[[dysphemism]]
: A term carrying negative connotations or imagery to replace a (more) neutral original. Contrast ''[[#euphemism|euphemism]]''.
==E==
; {{anchor|ed.}}ed.
: "[[editor|Editor]]" (or sometimes "edition"). This abbreviation is often used in attributing quotations; the editor of a compilation is generally the individual in charge of selecting what works to include.
; {{anchor|elative}}[[elative]]
: In [[Semitic]] languages, a stage of gradation that can be used both for a [[superlative]] and [[comparative]]. (See also ''[[#degrees of comparison|degrees of comparison]]''.)
; {{anchor|elative case}}[[elative case]]
: A [[#case|case]] which expresses "moving out of".
; {{anchor|elision}}{{anchor|elided}}[[elision]]
: The removal of a [[#phoneme|phoneme]] or sequence of phonemes from a word, particularly at the beginning or end.
; {{anchor|ellipsis}}[[ellipsis]]
: The omission of a word or phrase that can be inferred from the context.
; {{anchor|elongated}}[[elongated]]
: With [[letter]]s added for [[emphasis]], like "stoooop!" Usually this is [[nonstandard]] writing, but in some uses, such as in interjections, this is normal: "awwwww!", "shhhh!"
; {{anchor|emphatic}}[[emphatic]]
: Taking particular stress. English's [[#reflexive|reflexive]] pronouns double as emphatic ones, as in "I myself have not seen it" (where "myself" emphasizes the role of the speaker); some other languages (such as Greek) have emphatic pronouns that they distinguish from ''[[#weak pronoun|weak]]'' or ''[[#clitic|clitic]]'' pronouns.
; {{anchor|enclisis}}[[enclisis]]
: The phonetic joining of a word with the preceding word. In modern Greek this may result in an extra stress on the first word, thus:
::: {{l|el|το όνομα μου είναι|"το όνο<u>μα</u> μου είναι"}} ''becomes'' {{l|el|το όνομά μου είναι|"το όνο<u>μά</u> μου είναι"}}
; {{anchor|endonym}}{{anchor|autonym}}[[endonym]]
: A name used by a group or category of people to refer to themselves or their language (contrast [[#exonym|exonym]]). Also called [[autonym]] or [[selfname]].
; {{anchor|endocentric}}[[endocentric]] [[compound]]
: A [[#nominal|nominal]] [[#compound|compound]] in which one part modifies the other, where the modified compound refer to the intended meaning of the compound as a whole. Examples in English are "[[blackboard]]" (a type of [[board]]), "[[houseboat]]" (a type of [[boat]]), "[[rainbow]]" (a type of [[bow]]) and "[[footstool]]" (a type of stool). Endocentric compounds are categorized into two subtypes, [[#descriptive|descriptive]] compounds (where the modifier also refers to the intended meaning of the compound as a whole, as in [[blackboard]] and [[houseboat]]) and [[#determinative|determinative]] compounds (where the modifier does not refer to the intended meaning of the compound as a whole, as in [[rainbow]] and [[footstool]]). For example, a [[houseboat]] is a type of [[house]] as well as a type of [[boat]], and a [[blackboard]] is (usually) [[black]]. However, a [[rainbow]] is not a type of [[rain]] (rather it is a [[bow]] that is caused ''by'' the rain), and similarly a [[footstool]] is not a type of [[foot]] (it is a stool intended ''for'' the feet). Endocentric compounds are contrasted with [[#exocentric|exocentric]] and [[#coordinative|coordinative]] compounds.
; {{anchor|enPR}}enPR
: Wiktionary's [[Wiktionary:English Phonemic Representation|English Phonemic Representation]] system. Details in the [[Appendix:English pronunciation|English pronunciation key]].
; {{anchor|epenthesis}}{{anchor|epenthetic}}[[epenthesis]]
: The insertion of a [[#phoneme|phoneme]], letter, or [[#syllable|syllable]] into a word, usually to satisfy the phonological constraints of a language or poetic context. In careful use epenthesis only refers to insertions in the middle of a word: cf. [[#prothesis|prothesis]], [[#paragoge|paragoge]].
; {{anchor|epicene}}[[epicene]]
: Having a single form for both male and female referents.
; {{anchor|eponym}}[[eponym]]
: A word formed from a real or fictive person’s name. Compare [[#toponym|toponym]], a word derived from a place name.
; {{anchor|eponymous}}[[eponymous]]
: Using its own name as a title for a work of art.
; {{anchor|equative}}[[equative]]
: A construction showing an equal quality; for example, the equative of {{m|en|happy}} is {{m|en||as happy as}}. In some languages, such as Welsh and Old Irish, the equative is a distinct form of the adjective.
; {{anchor|ergative case}}[[ergative case]]
: A [[#case|case]] used in some languages, which marks the [[#subject|subject]] of a [[#transitive verb|transitive verb]], but not the subject of an [[#intransitive verb|intransitive verb]].
; {{anchor|ergative}}{{anchor|ergative verb}}[[ergative verb]]
: A verb that can be transitive or intransitive, where the intransitive [[#subject|subject]] is the [[patient#Noun|patient]], the same role as the transitive object. Essentially, an ergative is an intransitive verb that is its own [[#causative|causative]] when used transitively. For example, {{m|en|break}} is an ergative verb. The same thing happens to the window in "The window broke" (subject) as in "I broke the window" ([[#direct object|direct object]]), but in the second example there is also an [[#agent|agent]] which causes the window to break.
; {{anchor|etymology}}[[etymology]]
: An account of the origin and historical development of a word.
; {{anchor|etymon}}[[etymon]]
: The source word of a given word.
; {{anchor|euphemism}}[[euphemism]]
: A term that is less vulgar or less offensive than the one it replaces. Contrast ''[[#dysphemism|dysphemism]]''.
; {{anchor|excessive spelling}}excessive spelling
: In languages with [[mater lectionis|matres lectionis]] ([[#consonant|consonant]] letters representing [[#vowel|vowels]]) a form including one or more additional ones. For example in Hebrew {{m|he|אדום||red}} of {{m|he|אָדֹם}}, an added {{m|he||ו|vav}} indicating {{IPAchar|/o/}}.
; {{anchor|excrescent}}[[excrescent]]
: A sound in a word without [[#etymology|etymological]] reason, added for articulatory purposes.
; {{anchor|exocentric}}[[exocentric]] [[compound]]
: A [[#nominal|nominal]] [[#compound|compound]] in which the first part modifies the second and neither part alone conveys the intended meaning. Examples in English are "[[barefoot]]" (i.e. "having bare feet"; neither component refers to a person) and "[[houndstooth]]" (i.e. "resembling a hound's tooth"; neither component refers to fabric). Also known as a ''[[#bahuvrihi|bahuvrihi]] [[#compound|compound]]''. Contrast [[#endocentric|endocentric]] (with its subtypes [[#determinative|determinative]] and [[#descriptive|descriptive]]) and [[#coordinative|coordinative]].
; {{anchor|exonym}}[[exonym]]
: A name for a place, people or language used by foreigners instead of the native-language version (the [[#endonym|endonym]]).
; {{anchor|expletive}}[[expletive]]
: A [[#vulgar|vulgar]] term, an [[#intensifier|intensifier]], or a word without meaning added to fill a syntactic position.
; {{anchor|eye dialect}}{{anchor|eye spelling}}[[eye dialect]] {{nobold|{{wikipedia|eye dialect}}}}
: A deliberate misspelling used in writing to indicate the speech of a poorly educated character; the spelling represents how they would spell the words if they were asked to write them down. As such, it is the functional opposite of [[#pronunciation spelling|pronunciation spelling]].
==F==
; {{g|f}}
: ''See '''{{glossary|feminine}}'''.''
; {{anchor|factitive}}{{anchor|factitive verb}}[[factitive]] verb
: A transitive verb that is derived from an adjective or noun, and expresses the act of making someone/something have the properties (or have more of the properties) of the base adjective or noun. Examples in English are: {{m|en|shorten}} (make {{m|en|shorter}}), {{m|en|strengthen}} (make {{m|en|stronger}}) and {{m|en|enslave}} (make a {{m|en|slave}}). Compare '''[[#causative|causative verb]]s''', which are similar but are derived from other verbs.
; {{anchor|false cognate}}[[false cognate]]
: A word in a language that bears a phonetic and semantic resemblance to a word in another or the same language but is not etymologically related to it and thus not a true [[#cognate|cognate]]. Examples include {{cog|en|day}}/{{cog|pt|dia}}, {{cog|de|Feuer}}/{{cog|fr|feu}} (both meaning "fire"), {{cog|ms|dua}}/{{cog|sa|द्व}} (both meaning "two"), and {{cog|en|dog}}/{{cog|vmb|dog}}.
; {{anchor|false friend}}[[false friend]]
: A word in a language that bears a phonetic resemblance to a word in another language, often because of a common etymology, but has a different meaning. Examples include {{cog|en|parent}}/{{cog|pt|parente||relative}} and {{cog|en|embarrassed}}/{{cog|es|embarazada||pregnant}}.
; {{anchor|familiar}}[[familiar]]
: Describes a context where those conversing, through speech or written word, are well acquainted with one another and in casual situations often use more '''[[#informal|informal]]''' or '''[[#colloquial|colloquial]]''' terms to communicate.
; {{anchor|f}}{{anchor|feminine}}[[feminine]], {{g|f}}
: "Feminine"; said of a word belonging to the feminine [[#gender|gender]], which is usually contrasted with the [[#masculine|masculine]] gender, and also often with a [[#neuter|neuter]] gender.
; {{anchor|figurative}}[[figurative]]
: Not [[#literally|literal]]. Of [[figure of speech|figures of speech]], words or expressions used as [[#metaphorical|metaphors]] or [[#simile|similes]], e.g. saying that a greedy person is a pig or is like a pig, or as [[#metonym|metonyms]], e.g. using 'crown' to refer to the monarchy.
; {{anchor|උත්තම පුරුෂ}}[[උත්තම පුරුෂ]]
: පහත දැක්වෙන [[#first person]] කොටස බලන්න.
; {{anchor|first person}}{{anchor|first-person}}[[first person]], {{anchor|1st person}}[[1st person]]
: A [[#person|grammatical person]] that indicates the speaker him/her/itself, or a group to which the speaker belongs. Examples are the English pronouns {{m|en|I}} and {{m|en|we}}.
; {{anchor|fl.}}[[fl.]]
: "[[floruit|Floruit]]" (Latin for "he/she flourished"). Used when the exact dates of a person's birth and death are unknown to denote a date or period during which the person was known to have been alive or active.
; {{anchor|focus}}[[focus]]
: An adverb that indicates focus within the sentence.
; {{anchor|folk etymology}}{{anchor|folk etymologies}}{{anchor|folk etymological}}[[folk etymology]] {{nobold|{{wikipedia|folk etymology}}}}
: A misunderstanding of the [[#etymology|etymology]] of a word; a false [[#etymology|etymology]] that incorrectly explains the origin of a word.
; {{anchor|formal}}[[formal]]
: Describes word choice and [[syntax]] which is mainly appropriate in formal contexts, such as in official or legal documents, essays, and sometimes when talking with one's superiors or elders. '''[[#informal|Informal]]''' terms, frequently those that originate through casual speech ('''[[#colloquial|colloquial]]'''), are often inappropriate in formal contexts. See also ''[[#higher register|higher register]]''.
; {{anchor|fossil word}}{{anchor|fossil}}{{anchor|fossilised}}{{anchor|fossilized}}[[fossil word]]
: A word that is broadly [[#obsolete|obsolete]] but remains in currency because it is contained within an [[#idiom|idiom]] that is still in use.
; {{anchor|fpl}}''fpl''
: "[[#feminine|Feminine]] [[#plural|plural]]"; of feminine gender and plural number.
; {{anchor|frequentative}}[[frequentative]]
: Expressing [[repetition]] of an action.
; {{anchor|fricative}}[[fricative]]
: A [[#consonant|consonant]] sound produced by air flowing through a constriction in the mouth, and typically producing a sibilant, hissing, buzzing or otherwise "rough" quality. In English, there are fricatives that are [[#voiceless|voiceless]] {{IPAchar|/f/}}, {{IPAchar|/s/}}, {{IPAchar|/ʃ/}}, {{IPAchar|/θ/}} (as in the final sounds of ''buff'', ''bus'', ''bash'' and ''bath''), and there are corresponding [[#voiced|voiced]] sounds {{IPAchar|/v/}}, {{IPAchar|/z/}}, {{IPAchar|/ʒ/}}, {{IPAchar|/ð/}} (as in the final sounds of ''above'', ''buzz'', ''beige'' and ''bathe''). Fricatives are distinguished from [[#plosive|plosive]]s, in which the air is blocked completely for a short period of time, and [[#approximant|approximant]]s, in which the air is not constricted enough to cause the characteristic rough sound of a fricative.
; {{anchor|front vowel}}[[front vowel]]
: A [[#vowel|vowel]] produced in the front of the mouth. In English, the front vowels are {{IPAchar|/æ/}}, {{IPAchar|/ɛ/}}, {{IPAchar|/eɪ/}}, {{IPAchar|/ɪ/}}, {{IPAchar|/i/}} (as in the vowels of ''bat'', ''bet'', ''bait'', ''bit'', and ''beat'' respectively). Contrasts to a [[#back vowel|back vowel]].
; {{anchor|future perfect}}[[future perfect]]
: A [[#tense|tense]] that expresses action completed at some time in the future; in English it is formed by use of ''will have'' (or ''shall have'') and a [[#past|past]] [[#participle|participle]].
; {{anchor|future}}{{anchor|future tense}}[[future tense]]
: The [[#tense|tense]] of a [[#verb|verb]] used to refer to an event, transaction or occurrence that has not yet happened, is expected to happen in the future, or might never happen. An English example is {{m|en|will}} {{m|en|go}} in ''I will go home tomorrow''.
==G==
; {{anchor|gemination}}[[gemination]]
: A phenomenon when a [[#consonant|consonant]] is pronounced for an audibly longer period of time than is done normally.
; {{anchor|ලිංග භේදය}}[[ලිංග භේදය]]
: පහත [[#gender]] වෙත යොමු වන්න.
; {{anchor|gender}}[[gender]]
: A way of classifying [[#noun|nouns]] in some languages. In such languages, each noun has a specific gender (often determined by its meaning and/or form), and other words (especially [[#adjective|adjectives]] and [[#pronouns|pronouns]]) will often change form to agree with the noun's gender. See also [[#noun class|noun class]].
; {{anchor|gender neutral}}{{anchor|gender-neutral}}[[gender-neutral]]
: Of language constructs, not indicating or restricted by gender, and thus applicable to those of any gender and to those of no gender.
; {{anchor|genericized trademark}}[[genericized trademark]]
: A successful brand name or trademark that has come to refer to the generic class of objects rather than the specific brand type.
; {{anchor|සබඳ විබත්}}
{{anchor|genitive}}{{anchor|genitive case}}[[සබඳ විබත්]] ([[genitive case]])
: A [[#case|case]] that expresses possession or relation, equivalent to the English {{m|en|of}}.
; {{anchor|gerund}}[[gerund]]
: Any of various non-finite [[#verb|verb]] forms in various languages. In English, a "gerund" is a verb in its ''[[-ing]]'' form when used in a way that resembles the use of a [[#noun|noun]]. In other languages it often functions as an [[#adverb|adverb]] to form [[#adverbial|adverbial]] phrases or the continuous tense.
; {{anchor|ghost word}}[[ghost word]]
: A [[fictitious]] or [[erroneous]] word, originally meaningless (not used in practice), that has been published in a dictionary or similarly authoritative reference work or otherwise listed as genuine, generally as the result of misinterpretation, misreading, or typographical error.
; grammatical number
: ''See '''{{glossary|number}}'''.''
; grammatical person
: ''See '''{{glossary|person}}'''.''
; {{anchor|grave}}{{anchor|grave accent}}[[grave accent]]
: A [[#diacritic|diacritic]] mark ( ` ) used in many languages to distinguish the pronunciations of [[#vowel|vowels]].
==H==
; {{anchor|habitual}}[[habitual]]
: A verbal [[#aspect|aspect]] specifying an action as occurring habitually: the subject performs the action usually, ordinarily, or customarily. Also called '''[[consuetudinal]]'''.
; {{anchor|hapax legomenon}}[[hapax legomenon]], {{anchor|hapax}}[[hapax]]
: In [[corpus linguistics]], a word that occurs only once within a given corpus, either in the written record of an entire language, in the works of an author, or in a single text.
; {{anchor|haplology}}{{anchor|haplological}}[[haplology]]
: The [[#elision|elision]] or [[#deletion|deletion]] of a part of a word (a sequence of [[#phoneme|phonemes]], or a series of letters) that is repeated (either exactly or with slight change). An example of haplological pronunciation is the UK English pronunciation of {{m|en|library}} as if spelled {{m|en||libry}}, where the sequence of [[#phoneme|phonemes]] {{IPAchar|/ɹəɹ/}} is shortened to {{IPAchar|/ɹ/}}. An example of haplology relating to spelling is {{m|en|symbology}}, from {{affix|en|symbol|-ology}}, where the sequence ''olol'' is shortened to ''ol''. Contrast with [[#reduplication|reduplication]], the repetition of a part of a word.
; {{anchor|hedge}}{{ll|en|hedge|id=pragmatics}}
: In [[pragmatics]], a term (word, phrase, or clause) used to lessen the force of an utterance: for instance, to avoid giving insult or bragging about one's knowledge.
; {{anchor|higher register}}[[higher]] [[#register|register]]
: Belonging to the higher linguistic [[#register|register]], meaning that it might be used when the speaker wishes to sound refined or educated, in [[#formal|formal]] situations, or when writing. Such terms are usually less common or known and are not used in everyday speech. See also ''[[#literary|literary]]'' which is a sub-category.
; {{anchor|historical}}[[historical]]
: Describing an ''object'' or ''concept'' which is no longer extant or current; for example, {{m|en|Czechoslovakia}}, {{m|en|stomacher}}, or {{m|en|phlogiston}}. Distinguish: a ''historical'' term is still in use but refers to a thing which no longer exists; an ''[[#obsolete|obsolete]]'' term is no longer in use, while the thing it once referred to may or may not exist. Whereas an [[#archaic|archaic]] term names a still-extant thing or non-outdated concept, a historical term names a former thing or outdated concept.
; {{anchor|holonym}}[[holonym]]
: A term describing something that is formed by other smaller, somehow combined or related things. For example, ''[[tree]]'' is a holonym of ''[[leaf]]''; ''[[body]]'' is a holonym of ''[[arm]]''; ''[[Canada]]'' is a holonym of ''[[British Columbia]]'' etc. The opposite of holonym, which describes things that are ''part'' of a whole, is called ''[[#meronym|meronym]]''.
; {{anchor|homograph}}[[homograph]]
: A word that is spelled the same as another word, usually having a different [[#etymology|etymology]].
; {{anchor|homophone}}[[homophone]]
: A word which is pronounced the same as another word but differs in spelling, meaning or origin.
; {{anchor|hot word}}[[hot]] word
: A newly coined term, or newly adopted sense of an existing term, that has become very popular in a short time. It is kept provisionally as it is likely to remain in usage, even though it fails the "spanning at least one year" requirement of the [[WT:CFI|Criteria For Inclusion]] on Wiktionary.
; {{anchor|humorous}}[[humorous]]
: A word which is considered inherently [[jocular]] in some way.
; {{anchor|hyperbole}}{{anchor|hyperbolic}}[[hyperbole]]
: Deliberate or unintentional overstatement, particularly if extreme.
; {{anchor|hypercorrect}}{{anchor|hypercorrection}}[[hypercorrect]]
: Incorrect because of the misapplication of a standard rule; for example, {{m|en|octopi}} used as the plural form of {{m|en|octopus}} is hypercorrect because {{m|en|-us}} → {{m|en|-i}} is the rule for forming plurals of [[Appendix:Latin second declension#Masculine|originally-masculine nouns of the Latin second declension]], whereas {{m|en||octopus}} actually derives from Ancient Greek and has the plural form {{m|en|octopodes}} consistent with its etymology.
; {{anchor|hyperforeign}}{{anchor|hyperforeignism}}[[hyperforeign]]
: Incorrectly applying foreign reading rules, such as in pronouncing the "j" in [[Taj Mahal]] or [[Beijing]] as {{IPAchar|[ʒ]}} rather than {{IPAchar|[dʒ]}}, or dropping the {{IPAchar|[t]}} in [[claret]].
; {{anchor|hypernym}}[[hypernym]] or [[hyperonym]]
: A term indicating a [[category]] another term is part of, informally called “blanket” or “umbrella” term. For example, ''[[animal]]'' is a hypernym of ''[[bird]]'', which is in turn a hypernym of ''[[eagle]]''. The opposite of hypernym, which indicates terms pertaining to a category, is ''[[#hyponym|hyponym]]''.
; {{anchor|hyperthesis}}{{anchor|hyperthetic}}[[hyperthesis]]
: A form of [[#metathesis|metathesis]] in which non-contiguous sounds are switched.
; {{anchor|hyphenation}}[[hyphenation]]
: The splitting of a word across a line boundary, with a hyphen at the end of the first part. For example, the hyphenation of {{m|en|hyphenation}} is given as "hy‧phen‧ation" meaning that it is split across a line break as ''hy-phenation'' or as ''hyphen-ation''.
; {{anchor|hyponym}}[[hyponym]]
: A more specific term within a category described by another term, indicating a “type-of” relationship. For instance, ''[[alternative rock]]'' is a hyponym of ''[[rock]]'', which in turn is a hyponym of ''[[music]]''. The opposite of hyponym, which describes larger categories, is [[#hypernym|hypernym]].
==I==
; {{anchor|ideophone}}{{anchor|ideophonic}}[[ideophone]]
: A word that evokes an idea in sound, often a vivid impression of certain sensations or sensory perceptions, e.g. sound, movement, color, shape, or action. They may be more common in East Asian languages. In Chinese lexicography, such sense is usually described as {{lang|zh|……[[的]][[樣子]]}} or {{lang|zh|……[[貌]]}}, i.e. “the appearance of ...”. The attributive form is {{l|en|ideophonic}}.
; {{anchor|idiom}}[[idiom]]
: A phrase whose meaning is unapparent or unobvious from the individual words that make it up, such as {{m|en|beat around the bush||avoid an uncomfortable topic}}, {{m|en|come a cropper||suffer misfortune}}, or {{m|en|pay through the nose||pay an unusually large amount}}. Idioms are often, but not always ''[[#set phrase|set phrases]]'', and are usually distinct from ''[[#proverb|proverbs]]''.
; {{anchor|idiomatic}}[[idiomatic]]
: Pertaining or conforming to the mode of expression characteristic of a language. Idioms, [[collocation]]s{{,}} and [[modal verb]]s are examples of idiomatic language.
; {{anchor|imitative}}{{anchor|Imitative}}[[imitative]]
: [[imitate|Imitating]] or [[represent]]ing the [[sound#Noun|sound]] of something.
; {{anchor|imparisyllabic}}[[imparisyllabic]]
: A word with one or more inflections with more syllables than the lemma form. For example: the Greek {{m|el|μπακάλης|t=grocer}} and {{m|el|μπακάληδες|t=grocers}} and the Latin {{m|la|mens|t=mind}} and {{m|la|mentis|t=minds}} ([[cf.]] [[#parisyllabic|parisyllabic]]).
; {{anchor|imperfect}}[[imperfect]]
: The [[#imperfective past|imperfective past]] tense of a verb, indicating that the action described happened repeatedly, habitually or continuously.
; {{anchor|විධි ක්රියා}}[[විධි ක්රියා]]
: අණ කිරීමක් හෝ නියෝගයක් හඟවන [[#ක්රියා පද|ක්රියා පද]]. සිංහල උදාහරණයක් ලෙස ''යන්න!'' දැක්විය හැකිය.
; {{anchor|imperative}}{{anchor|imperative mood}}[[imperative mood]]
: The [[#mood|mood]] of a [[#verb|verb]] expressing an order or command. An English example is the command ''go!''
; {{anchor|imperfective}}{{anchor|imperfective aspect}}[[imperfective]]
: An [[#aspect|aspect]] of the [[verb]] which denotes an action or condition that does not have a fixed temporal boundary, but is [[habitual]], [[unfinished]], [[continuous]], [[repetitive]] or [[in progress]]. Common in {{w|Slavic languages}} such as {{cog|ru|-}}. Contrast ''[[#perfective|perfective]].'' (''see'' {{pedia|Imperfective aspect}})
; {{anchor|imperfective past}}imperfective past
: A verb form of [[#imperfective|imperfective]] [[#aspect|aspect]] and [[#past|past]] [[#tense|tense]], which is used to describe an action or event which was happening habitually, continuously or repeatedly in the past, as in “Tom was painting the fence” or “Tom used to paint the fence.”
; {{anchor|impersonal}}[[impersonal]]
: A lack of [[#person|grammatical person]] altogether, or an indefinite/undefined person. An example is the English pronoun {{m|en|one}}. See also [[#impersonal verb|impersonal verb]]s.
; {{anchor|impersonal verb}}[[impersonal]] verb
: A verb that cannot take a [[#subject|subject]], or takes a third-person neuter subject pronoun (e.g. {{m|en|it}}) without an [[antecedent]]. The term {{m|en|weather verb}} is also sometimes used in some texts, since such verbs of weather (e.g. {{m|en|rain}}) are impersonal in many languages. Many verbs that are personal and [[#active|active]] in English are expressed in other languages using impersonal constructions. An example is the English sentence "I must do it", expressed in {{cog|fr|-}} using the impersonal verb {{m|fr|falloir||to be [[necessary]]}}, as in {{m|fr|[[il]] [[falloir|faut]] [[que]] [[je]] [[il|le]] [[faire|fasse]]|lit='''It is necessary''' that I do it}}.
; {{anchor|inanimate}}[[inanimate]]
: Having a [[referent]] that does not include a human or animal. Many languages (such as the {{w|Slavic languages}}) classify nouns based on animacy, using different [[#inflection|inflections]] or words with animate and inanimate nouns. For verbs, this indicates that they are usually applied only to inanimate objects or concepts, and rarely used in the first or second persons.
; {{anchor|indeclinable}}[[indeclinable]], {{anchor|undeclinable}}[[undeclinable]], {{anchor|invariable}}[[invariable]] or {{anchor|invariant}}[[invariant]]
: In languages with [[#inflection|inflection]], lacking distinct inflected forms when they would be expected to exist. Indeclinable words have the same form in all cases. For example, the English noun {{m|en|sheep}} is invariable because its plural is also {{m|en|sheep}}. [[#acronym|Acronyms]] and [[#loanword|loanword]]s are often indeclinable in many languages. Poorly-attested words from ancient languages are sometimes denoted "indeclinable" when they can't be assigned to a declension class with certainty.
; {{anchor|indefinite}}[[indefinite]]
: Refers to forms of words that present something as not yet identified or not immediately identifiable; in English, this is the basic meaning of the [[article]] ''[[a]]''; in some languages, this is a nominal or adjectival [[#inflection|inflection]]. In the Germanic languages, adjectives inflected as indefinite are referred to as "strong". In Hungarian, the indefinite conjugation indicates [[#intransitive verb|no object]] or [[:w:Hungarian verbs#Definite and indefinite conjugations|indefinite objects]], including ''me, us,'' and the informal ''you.''
; {{anchor|independent clause}}[[independent clause]]
: A [[#clause|clause]] that can stand on its own as a complete [[#sentence|sentence]], as opposed to a [[#dependent clause|dependent clause]].
; {{anchor|indeterminate verb}}{{anchor|indeterminate}}[[indeterminate verb]]
: In the {{w|Slavic languages}}, another term for ''[[#abstract verb|abstract verb]]''.
; {{anchor|indicative}}{{anchor|indicative mood}}[[indicative mood]]
: The [[#mood|mood]] of a [[#verb|verb]] used in ordinary factual or objective statements.
; {{anchor|indirect object}}[[indirect object]]
: A grammatical role of a [[#ditransitive verb|ditransitive verb]] that usually manifests as a recipient or goal. In some languages indirect objects are marked with the [[#dative case|dative case]].
: → [[#direct object|direct object]]
; {{anchor|infix}}[[infix]]
: A [[morpheme]] or [[affix]] inserted inside a word.
; {{anchor|infinitive}}[[infinitive]]
: A non-[[finite]] verb form considered [[neutral]] with respect to [[#inflection|inflection]]; depending on language variously found used with [[auxiliary verb]]s, in [[subordinate clause]]s, or acting as a [[#gerund|gerund]], and often as the [[dictionary form]]. In English, the infinitive is formed with the word ''[[to]]'', e.g. ''to [[read]]''.
; {{anchor|inflected}}{{anchor|inflection}}{{anchor|inflectional}}[[inflection]]
: The change in form of a word to represent various grammatical categories, such as [[#tense|tense]] (e.g. past tense, present tense, future tense) or [[#number|number]] (e.g. singular, plural). For example, the verb {{m|en|run}} may be inflected to produce {{m|en|runs}}, {{m|en|ran}}, and {{m|en|running}}. In highly inflected languages, such as Latin, there will be many more forms. Two major types of inflection are [[#conjugation|conjugation]] (inflection of [[#verb|verbs]]) and [[#declension|declension]] (inflection of [[#noun|nouns]], [[#adjective|adjectives]], and [[#pronoun|pronouns]]).
; {{anchor|informal}}[[informal]]
: Denotes spoken or written words that are used primarily in a [[#familiar|familiar]] or casual context. Do not confuse with ''[[#slang|slang]]'' or ''[[#nonstandard|nonstandard]]''. See also ''[[#colloquial|colloquial]]''.
; {{anchor|inherited}}[[inherit]]ed
: Denotes words which etymologically are not [[Appendix:Glossary#loanword|borrowings]] but derive through regular or sporadic [[#sound change|sound change]], without additional affixation, from a corresponding term in the language that is its direct historical ancestor. For example, English {{m|en|fairy}} is ''inherited'' from Middle English {{m|enm|fairye}}.
; {{anchor|initialism}}[[initialism]]
: An [[#abbreviation|abbreviation]] that is formed from the initial letters of a sequence of words. Initialisms that are pronounced as words, such as {{m|en|UNICEF}}, are usually called {{m|en||[[#acronym|acronyms]]}}, so the term {{m|en||initialism}} is generally only used for those that are pronounced letter by letter, such as {{m|en|U.S.}}
; {{anchor|inline reference}}inline reference
: A reference whose point of application is indicated in the text.
; {{anchor|කරණ විබත්}}{{anchor|instrumental case}}{{anchor|instrumental}}{{anchor|ins}}[[කරණ විබත්]] ([[instrumental case]]), ins.
: A [[#case|case]] used to express means or agency—and is generally indicated in English by "by" or "with" with the objective.
; {{anchor|intensifier}}{{anchor|intensifying}}[[intensifier]]
: A [[#word|word]] or [[#particle|particle]] that heightens the intensity of meaning of a term.
; {{anchor|interjection}}[[interjection]]
: An expression of emotion ("ouch!", "wow!") or any of several kinds of expression that functions as a replacement of a sentence ([[prosentence]]) or that are not syntactically connected to a sentence, including curses ("damn!"), greetings ("hey", "bye"), response particles ("okay", "oh!", "m-hm", "huh?"), and hesitation markers ("uh", "er", "um"), and perhaps profanities, discourse markers and fillers.
; {{anchor|internationalism}}[[internationalism]]
: A loanword that occurs in several languages with the same or similar meaning and etymology, due to the occurrence of several simultaneous borrowings and/or a chain of successive borrowings happening in quick succession. This commonly results in the exact etymological lineage of a term being difficult or impossible to trace for a given language. For example ''bus, doctor, hotel, internet, taxi,'' or ''television.''<!-- find better, more or fewer examples, if you like: https://en.wikipedia.org/wiki/Internationalism_(linguistics)#Examples -->
; {{anchor|අකර්මක}} {{anchor|අකර්මක ක්රියා පද}}
{{anchor|intransitive verb}}{{anchor|intransitive}}[[අකර්මක ක්රියා පද]] ([[intransitive verb]])
: Of a [[#verb|verb]]: not taking a [[#direct object|direct object]]; not [[#transitive|transitive]]. For example, the verb {{m|en|listen}} does not usually take a direct object; it is grammatically incorrect to say "I listened the concert" (instead of the correct "I listened to the concert" with the [[#indirect object|indirect object]] "to the concert").
: Of an adposition (such as a [[#preposition|preposition]]), or of an [[#adverb|adverb]]: not having a [[#nominal|nominal]] complement. For example, using the following prepositions or adverbs without a complement (here in parentheses): {{m|en|down}} (the stairs), {{m|en|under}} (the bridge), {{m|en|inside}} (the building), {{m|en|aboard}} (the ship), {{m|en|underneath}} (the table), {{m|en|here}}, {{m|en|there}}, {{m|en|abroad}}, {{m|en|downtown}}, {{m|en|afterwards}}, …
; {{anchor|invariable}}[[invariable]]
: ''See '''{{glossary|indeclinable}}'''.''
; {{anchor|invariant}}[[invariant]]
: ''See '''{{glossary|indeclinable}}'''.''
; {{anchor|iotation}}[[iotation]]
: A specific occurrence of [[#palatalization|palatalization]] that occurred in the {{w|Proto-Slavic language}}, in which a [[#consonant|consonant]] combined with the palatal approximant {{IPAchar|/j/}} to form a palatalized [[#consonant|consonant]]. Also, any similar process occurring in a later {{w|Slavic languages|Slavic language}} or elsewhere. For example, under certain circumstances in {{w|Russian language|Russian}}, underlying ''s; z; t; d; k; g'' are iotated to ''š; ž; č or šč; ž; č; ž'' respectively (pronounced {{IPAchar|/ʂ/}}; {{IPAchar|/ʐ/}}; {{IPAchar|/t͡ɕ/}} or {{IPAchar|/ɕː/}}; {{IPAchar|/ʐ/}}; {{IPAchar|/t͡ɕ/}}; {{IPAchar|/ʐ/}} respectively). (See ''[[Appendix:Russian verbs#Slavic iotation]]'' for the full iotation rules in {{w|Russian language|Russian}}; other {{w|Slavic languages}} behave similarly.)
; {{anchor|IPA}}[[IPA]]
: The [[w:International Phonetic Alphabet|International Phonetic Alphabet]]; a standardized system for transcribing the sounds in any spoken language.
; {{anchor|ʾiʿrāb}} [[ʾiʿrāb]]
: Also called [[desinential inflection]]; in Arabic: {{m|ar|إِعْرَابٌ||tr=ʾiʿrāb, ʾiʿrābun}}. A number of [[#inflection|inflectional]] endings, applied to Arabic nouns, adjectives, and verbs, which—with minor exceptions—do not appear in writing, and moreover are not pronounced in [[pausa]], i.e. at the end of a sentence or before a pause. Nevertheless, these endings are a regular and required element of Qur'ānic and Classical Arabic. In Modern Standard Arabic, however, they are rather often avoided due to dialectal influence. In nouns and adjectives, the ʾiʿrāb primarily has the function of marking the cases ([[#nominative|nominative]], [[#genitive|genitive]], [[#accusative|accusative]]), while in verbs it marks the moods ([[#indicative|indicative]], [[#subjunctive|subjunctive]], [[#jussive|jussive]]). All of these are only occasionally distinguishable without application of the ʾiʿrāb. See {{w|ʾIʿrab}} on Wikipedia.
; {{anchor|irregular}}[[irregular]]
: Not following the usual rules of [[#inflection|inflection]]; for example, the plural of English {{m|en|man}} is {{m|en|men}}, which is irregular; the regularly formed plural would have been *''mans''.
; {{anchor|iterative}}[[iterative]]
: Expressive of an action that is repeated with frequency.
==J==
; {{anchor|jussive}}{{anchor|jussive mood}}[[jussive|jussive mood]]
: In certain languages (e.g. Hebrew, Arabic and Esperanto), a [[#mood|mood]] of a [[#verb|verb]] used to indicate a command, permission or agreement with a request (distinct from the [[#imperative mood|imperative]]).
==K==
; {{anchor|karmadharaya}}[[karmadharaya]]
: Another term for a ''[[#descriptive|descriptive]] compound''. Contrast [[#bahuvrihi|bahuvrihi]], [[#tatpurusa|tatpurusa]] and [[#dvandva|dvandva]].
; {{anchor|Katharevousa}}[[Katharevousa]]
: The [[classical language|classically]] based artificial ([[w:standard language|standardized]]) Greek language created at the start of Greece's independence from the [[w:Ottoman Empire|Ottoman Empire]]. It was used for all formal and official purposes until 1976.<br>(Note: In Wiktionary, Katharevousa terms are entered under (modern) [[:Category:Greek language|Greek]].) (See also {{pedia|Katharevousa}})
; {{anchor|Kulturwort}}{{anchor|culture word}}[[Kulturwort]]
: A type of {{glossary|Wanderwort}} which is specific to a particular culture or which is spread by an influential cross-cultural phenomenon. Kulturworts (or ''Kulturwörter'') are often names of products distributed by trade and religious or ideological terms.
==L==
; {{anchor|learned borrowing}}[[learned borrowing]]
: A [[#loanword|loanword]] that was borrowed from a [[classical language]] such as Latin, Ancient Greek or Sanskrit, and which has not undergone significant reshaping due to [[#sound change|sound change]] or analogy with inherited terms. Opposed to [[#semi-learned borrowing|semi-learned borrowings]], which have been significantly reshaped, and [[#inherited|inherited]] terms, which have undergone all the normal sound changes of a language. For example, the Portuguese term {{m|pt|artículo||[[articulus]]}} is a learned borrowing from {{cog|la|articulus||joint, limb, division}}. The term {{m|pt|artigo||article}} is a semi-learned borrowing from the same term, which was borrowed early enough to undergo later sound changes that [[lenite]]d ''c'' into ''g'' and deleted ''l'' between vowels; and the term {{m|pt|artelho||toe}} is inherited from the same Latin term.
; {{anchor|lemma}}[[lemma]]
: The headword or citation form of an [[#inflection|inflected]] word, i.e. the form under which a word is found in a dictionary. For example, in English, nouns are usually listed under their singular form (''apple'', rather than ''apples''), and verbs under their infinitive form (''open'', rather than ''opens'', ''opened'' or ''opening''). Which form is used as the lemma varies from language to language. For verbs, for example, French, German, Spanish and many other European languages use the [[infinitive]], but Latin, Greek and Bulgarian use the [[first-person]] [[singular]] [[present]] [[indicative]], while Macedonian uses the [[third-person]] [[singular]] [[present]] [[indicative]], and Arabic and Hebrew use the [[masculine]] [[third-person]] [[singular]] [[past]] [[indicative]]. See also [[Wiktionary:Lemmas]].
; {{anchor|letter case}}[[letter case]]
: The distinction between [[majuscule]] ([[uppercase]]) and [[minuscule]] ([[lowercase]]) letters.
; {{anchor|lexeme}}[[lexeme]]
: The abstract "word" underlying a set of inflections; for example, {{m|en||gives}} and {{m|en||given}} belong to the same lexeme, which is usually identified by its lemma form {{m|en|give}}. See also: (1) [[w:lexeme|Wikipedia's article on ''lexeme''s]], (2) [[Wiktionary:Languages with more than one grammatical gender]], (3) [[#C|conjugation]] and (4) [[#D|declension]].
; {{anchor|liaison}} [[liaison]]
: The phonological fusion of two consecutive words and the manner in which this occurs, for example intrusion, consonant-vowel linking, etc.
; {{anchor|ligature}} [[ligature]]
: A character that visually combines multiple letters, such as {{m|mul|æ}}, {{m|mul|œ}}, {{m|mul|ß}} or {{m|mul|ij}}.
; {{anchor|linking verb}}[[linking verb]]
: Another term for [[#copula|copula]].
; {{anchor|literally}}[[literally]]
: Exactly as stated; read or understood without additional interpretation; not [[#figurative|figurative]] or [[#metaphorical|metaphorical]].
; {{anchor|literary}}[[literary]]
: A [[#higher register|higher]] [[#register|register]] found mainly in literature.
; {{anchor|litotes}}[[litotes]]
: (from {{cog|grc|-}} [[λιτότης]]) is a rhetorical figure involving ''[[understatement]]'' that consists of saying that something has ''less'' of one thing to mean ''more'' of the opposite. E.g.: ''he is not very clever'' instead of ''he is a stupid idiot'' ; ''she's not very pretty'' instead of ''she's ugly'', etc. Not to be confused with [[#euphemism|euphemism]] (although litotes can be used for the purpose of euphemism) or [[#meiosis|meiosis]], which is a similar figure of speech that also uses understatement.
; {{anchor|loanblend}} [[loanblend]]
: A [[#partial calque|partial calque]].
; {{anchor|loanword}}[[loanword]] (also {{anchor|loan}}[[loan]] or [[borrowing]]){{anchor|borrowed}}{{anchor|borrowing}}
: A word that was adopted (borrowed) from another language, rather than formed within the language or inherited from a more ancient form of the same language. Loanwords may still be recognisably foreign (having non-native spelling or unusual pronunciation), or have become completely assimilated into the language (no longer perceived as foreign). For example, in English, {{m|en|schadenfreude}} is still recognisably German, while {{m|en|cellar}} is fully assimilated and no longer recognisably Latin (from {{m|la|cellārium}}). Sometimes a loanword can be both fully assimilated ''and'' still recognised as foreign, e.g. [[taco]], [[burrito]], etc. Compare [[#calque|loan translation]] ([[calque]]).
; {{anchor|අදර විබත්}}{{anchor|locative case}}{{anchor|locative}}{{anchor|loc}}[[අදර විබත්]] ([[locative case]]), loc.
: "[[locative|Locative]]". A [[#case|case]] used to indicate place, or the place where, or wherein. It corresponds roughly to the English prepositions "in", "on", "at", and "by". Some languages use the same locative case construct to indicate when, so the English phrase "in summer" would use the locative case construct.
; {{anchor|locative-qualitative case}}{{anchor|locative-qualitative}}[[locative-qualitative case]]
: Nouns in the form of the locative-qualitative case are qualifiers in the sentence and signify the locational or temporal mark of the qualified word. The qualifier is not specific but general or universalized. (See also ''[[Appendix:Uyghur nouns]]''.)
; {{anchor|loosely}}{{anchor|loose}}{{anchor|loosely speaking}}[[loosely]]
: Indicates an imprecise use of words (wider, broader); short for ''loosely speaking''. Contrast ''strict'' or ''narrow'' sense; ''[[#strictly|strictly]]''.
==M==
; {{g|m}}
: ''See '''{{glossary|masculine}}'''.''
; m. pl.
: ''See '''{{glossary|mpl}}'''.''
; {{anchor|macron}}{{anchor|macron}}[[macron]]
: A short, straight, horizontal [[#diacritic|diacritical]] mark ( ¯ ) placed over any of various letters, usually to indicate that the pronunciation of a [[#vowel|vowel]] is long.
; {{anchor|m}}{{anchor|masculine}}[[masculine]], {{g|m}}
: Belonging to the male grammatical [[#gender|gender]], in languages that have gender distinctions.
; [[mass noun]]
: ''See '''{{glossary|uncountable}}'''.''
; {{anchor|measure word}}[[measure word]]
: ''See '''{{glossary|counter}}'''.''
; {{anchor|mediopassive}}[[mediopassive]]
: In Ancient Greek, a category of [[#inflection|inflected]] form in certain [[#tense|tenses]] that contrasts with the [[#active voice|active voice]], and may have meanings characteristic of the [[#middle voice|middle voice]] and [[#passive voice|passive voice]].<!-- Middle-voice forms may also be used with a passive meaning, and passive-voice forms with a middle meaning, which complicates the picture. --> In other tenses, there is a three-way contrast between active-, middle-{{,}} and passive-voice forms. See also [[#middle voice|middle voice]].
; {{anchor|meiosis}}[[meiosis]]
: A form of ''[[understatement]]'' that consists of downplaying or diminishing the focal quality of a statement for contrastive, humorous or dramatic effect, sometimes deployed as part of a [[#higher register|higher register]]. E.g.: ''that was actually quite good'' instead of ''that was excellent'' ; ''he is somewhat displeased'' instead of ''he is furious'', etc. Not to be confused with [[#euphemism|euphemism]] (although meiosis can be used for the purpose of euphemism) or [[#litotes|litotes]], which is a similar figure of speech that also uses understatement.
; {{anchor|men's speech}}[[men]]'s [[speech]]
: In certain languages (for example, {{w|Karajá language}}), men and women use or historically used distinct words and inflected forms.
; {{anchor|meronym}}[[meronym]]
: A term that denotes a part of the whole that is denoted by another term. ''The word "arm" is a '''meronym''' of the word "body"''. The term which describes the ''whole'', as being an opposite of meronym, is ''[[#holonym|holonym]]''.
; {{anchor|metaphorical}}{{anchor|metaphor}}[[metaphorical]]
: The use of a word or phrase as a [[metaphor]] to refer to something that it is not, invoking a direct similarity between the word or phrase used and the thing described. See also [[#simile|simile]] and [[#figurative|figurative]].
; {{anchor|metanalysis}}[[metanalysis]]
: See [[#rebracketing|rebracketing]].
; {{anchor|metathesis}}{{anchor|metathetic}}{{anchor|metathesise}}{{anchor|metathesize}}{{anchor|metathesised}}{{anchor|metathesized}}[[metathesis]]
: A [[#sound change|sound change]] in which two sounds or groups of sounds exchange position in a word. A form showing metathesis is described as {{m|en|metathetic}}. The sounds may be adjacent, as in {{m|en|ax}}, the metathetic form of the verb {{m|en|ask}}, or farther apart, as in {{noncog|es|palabra}} from {{noncog|la|parabola}}; there, the sound change is [[#hyperthesis|hyperthesis]].
; {{anchor|metonym}}{{anchor|metonymic}}{{anchor|metonymical}}{{anchor|metonymically}}[[metonym]]
: A word that names an object from a single characteristic of it or of a closely related object, e.g. 'crown' for the sovereign in a monarchy.
; {{anchor|middle voice}}{{anchor|middle-voice}}[[middle voice]]
: The [[#voice|voice]] verb form in which the [[#subject|subject]] of a verb performs some action upon itself, it falls somewhere between the [[#active voice|active]] and [[#passive voice|passive]] voices. Found in a few languages (e.g. [[Sanskrit]], [[Ancient Greek]], [[Icelandic]]). (''see'' {{pedia|Voice (grammar)}})
; {{anchor|minced oath}}[[minced oath]]
: A euphemism based on a profanity that has been altered to reduce or remove the objectionable characteristics of the original expression. Examples in English include {{m|en|heck}} instead of {{m|en|hell}} and {{m|en|dang}} instead of {{m|en|damn}}.
; {{anchor|mixed}}{{anchor|mixed declension}}[[mixed]]
: A type of declension in German that uses endings that are a combination of [[#strong declension|strong]] and [[#weak declension|weak]] endings. In adjectives, the mixed declension is used when accompanied by an indefinite article, or more generally by an {{m|de|ein}}-word (a determiner that has a null ending in the nominative masculine and neuter singular, similar to the indefinite article {{m|de|ein}}). The mixed declension uses strong endings precisely in those inflections where the indefinite article has a null ending, and weak endings otherwise. By analogy, nouns declined according to the mixed declension look like strong nouns in the singular (with genitive in ''-s'' and/or ''-es'') but weak nouns in the plural (with plural in ''-n'' and/or ''-en''). Most mixed nouns were once weak nouns that have transitioned to strong nouns in the singular but maintain the original weak plural ending. See [[:Category:German mixed nouns]] for a list of German mixed nouns.
; {{anchor|monolectic}}[[monolectic]]
: Used of a grammatical form accomplished with one word ([[cf.]] [[#polylectic|polylectic]] and [[#periphrastic|periphrastic]]).
; {{anchor|monosyllable}}[[monosyllable]]
: A word consisting of only one [[#syllable|syllable]].
; {{anchor|mood}}[[grammatical mood|mood]]
: One of the forms of a [[#verb|verb]], used to indicate the speaker's attitude toward what they are saying (e.g. a statement of fact, of desire, of command, etc.). Examples include [[#indicative mood|indicative]], [[#subjunctive mood|subjunctive]], [[#imperative mood|imperative]], [[#conditional mood|conditional]]. (''see'' {{pedia|Grammatical mood}})
; {{anchor|mpl}}''mpl'', ''m. pl.''
: [[#masculine|Masculine]] [[#plural|plural]].
; {{anchor|mute_h}}[[mute h]]
: In French, an initial <h> that is treated like a [[#vowel|vowel]]; that is to say, [[liaison]] and [[elision]] are permitted at the beginning of words that have a mute h.
==N==
; {{g|n}}
: ''See '''{{glossary|neuter}}'''.''
; ''n''
: ''See '''{{glossary|noun}}'''.''
; {{anchor|narrowly}}{{anchor|narrow}}[[narrowly]]
: Indicates a more precise use of words; short for ''narrowly speaking''. For most practical purposes, synonymous with ''[[#strictly|strictly]]''<!--because the differentiable nuance whereby "strictly" can sometimes imply some degree of prescriptive deprecation, whereas "narrowly" less often and less strongly does so, is beyond-scope for this glossary; that is, for this glossary's purposes, "narrowly" and "strictly" are interchangeable in practice-->. Contrast ''[[#loose|loose]]'' (''broad'') senses.
; {{anchor|nasal infix}}nasal infix
: The [[#infix|infix]] {{m|ine-pro||-né-}} or {{m|ine-pro||-n-}} in [[Proto-Indo-European]], one of the affixes marking the [[#imperfective|imperfective]] aspect. It appears in several of the [[:Category:Indo-European languages|Indo-European languages]]: for instance, Latin {{m|la|vincit|vi'''n'''cit|t=wins}}, {{m|la|vīcit|t=has won}}; Ancient Greek {{m|grc|λαμβάνω|λα'''μ'''βάνω|t=I take}}, {{m|grc|ἔλᾰβον|t=I took}}.
; {{anchor|negative polarity}}{{anchor|negative polarity_item}}{{anchor|negative_polarity}}{{anchor|negative_polarity_item}}negative polarity item
: A term or construction that is generally found only in negative sentences, questions, conditionals, and certain other “negative polarity” contexts; for example, {{m|en|anyone}} is a negative polarity item, as one can say "I did not see anyone", "Did you see anyone?" and "If anyone wants this, speak up now", but not *"I saw anyone." Several expressions have similar properties, such as {{m|en|budge an inch}}: "I won't budge an inch" and "Will he even budge an inch?", but not normally *"He budged an inch in the negotiations." (''see'' {{pedia|Polarity item}})
; {{anchor|negative_verb}}[[negative verb]]
: An [[#auxiliary verb|auxiliary verb]] used to form negatives of verbs in some languages. See also ''[[#connegative|connegative]]''.
; {{anchor|neologism}}[[neologism]]
: A newly coined term or meaning. See [[Wiktionary:Neologisms]].
; {{anchor|n}}{{anchor|neuter}}[[neuter]], {{g|n}}
: Of neuter [[#gender|gender]]: having a form which is not [[#masculine|masculine]] nor [[#feminine|feminine]]; or having a form which is not of [[#common gender|common gender]].
; {{anchor|nominal}}[[nominal]]
: Related to [[#noun|noun]]s. See also ''[[#denominal|denominal]]''.
: As a noun, it refers to any [[#part of speech|part of speech]] that is noun-like in some way, and normally includes [[#noun|noun]]s themselves along with [[#adjective|adjective]]s, [[#pronoun|pronoun]]s and [[#determiner|determiner]]s. The [[#inflection|inflection]] of nominals is commonly called [[#declension|declension]].
; {{anchor|පෙර}}{{anchor|පෙර විබත්}}{{anchor|nominative}}{{anchor|nominative case}}[[පෙර විබත්]] ([[nominative case]])
: A [[#case|case]] that is usually used as the [[#subject|subject]] of a [[#verb|verb]]. For example, if English had a fully [[#productive|productive]] case system, then (the) ''man'' in "The man threw the ball" would most likely be in the nominative case.
; {{anchor|nominalisation}}{{anchor|nominalization}}{{anchor|substantivisation}}{{anchor|substantivization}}[[nominalization]] or [[substantivization]]
: The use of a word which is not a [[#noun|noun]] (e.g. a [[#verb|verb]] or [[#adjective|adjective]]) as a noun.
; {{anchor|nonce}}{{anchor|nonce word}}[[nonce word]]
: A word invented for the occasion.
; {{anchor|nonfinite}}{{anchor|non-finite}}[[nonfinite]], [[non-finite]]
: Of a verb – lacking grammatical [[#person|person]] and [[#number|number]] attributes; most nonfinite verbs found in English are [[#infinitive|infinitives]], [[#participle|participles]] and [[#gerund|gerunds]].
; {{anchor|non-past}}{{anchor|non-past tense}}[[non-past|non-past tense]]
: The [[#tense|tense]] of a [[#verb|verb]] that does not pertain to the [[#past|past]]; in particular, applicable to both the [[#present|present]] and the [[#future|future]]. Common in some languages, such as Arabic. In English, the main verb in the sentences ''I am running tomorrow'' and ''I am running now'' can be said to be in the non-past tense, since the same verb can be used to express both the present and the future.
; {{anchor|nonstandard}}[[nonstandard]]
: Not conforming to the language as accepted by the majority of its speakers.
; {{anchor|nonvirile}}[[nonvirile]]
: In Slavic languages, a plural [[#gender|gender]] used for all groups that do not contain men, as well as plurals of [[#masculine|masculine]] animate, masculine inanimate, [[#feminine|feminine]] and [[#neuter|neuter]] nouns. Contrast ''[[#virile|virile]]''.
; not comparable
: ''See '''{{glossary|uncomparable}}'''.''
; {{anchor|noun}}[[noun]]
: A word that refers to a person (such as an {{m|en|actress}}), a place, a physical thing (such as {{m|en|wood}}), or concept (such as {{m|en|beauty}}, {{m|en|joy}}, or {{m|en|time}}). See also [[#countable|countable]], [[#uncountable|uncountable]] and [[#plural|plural]].
; {{anchor|noun class}}[[noun class]]
: In some languages (especially the [[Bantu]] languages), a way of classifying nouns much like [[#gender|gender]], but determined by other considerations such as the type and shape of an object, whether it is [[#animate|animate]] or [[#inanimate|inanimate]], a person or non-person, and so on.
; {{anchor|noun clause}}[[noun clause]]
: A type of [[#dependent clause|dependent clause]] that takes the place of nouns. Examples are ''I said '''that my name is John''''' as well as ''I suggested '''that he leave''''' and '''''That the color of the sky on Mars is pinking-red''' is surprising to me''. Noun clauses can also be [[#nonfinite|nonfinite]] (i.e. with the verb in the form of an [[#infinitive|infinitive]]), as in ''I asked '''him to leave''''' (compare the [[#synonym|synonymous]] ''I asked '''that he leave''''', expressed using a [[#finite|finite]] verb).
; {{anchor|number}}[[number]], {{anchor|grammatical number}}grammatical number
: A grammatical category that indicates how many items or individuals. Examples are [[#singular number|singular]], [[#plural number|plural]] and [[#dual number|dual]].
; {{anchor|number}}[[numeronym]]
:A [[number]]-based [[word]] such as {{l|en|9/11}} and {{l|en|24/7}}.
==O==
; {{anchor|object}}{{anchor|grammatical object}}[[object]] {{nobold|{{wikipedia|Object (grammar)}}}}
: The entity that is acted upon by a [[#verb|verb]]. For example, in the sentence ''Tom studies grammar'', the word ''grammar'' is the object. Contrast [[#subject|subject]].
: → [[#direct object|direct object]], [[#indirect object|indirect object]]
; {{anchor|oblique}}{{anchor|oblique case}}[[oblique case]], {{anchor|කම් විබත්}}{{anchor|objective}}{{anchor|objective case}} [[කම් විබත්]] ([[objective case]])
: Any case that is neither [[#nominative case|nominative]] nor [[#vocative case|vocative]]. The term is therefore often plural ("the oblique cases"); but in some languages, such as [[Hindustani]] and [[Old French]], the oblique is a particular case form, used for example (in Old French) for the [[#direct object|direct object]] and with prepositions.
; {{anchor|අභාවයට ගිය}}{{anchor|obs}}{{anchor|obsolete}} ''[[අභාවයට ගිය]]'', ''[[obsolete]]'', ''obs.''
: No longer in use, and (of a term<!--as opposed to a spelling-->) no longer likely to be understood. ''Obsolete'' is a stronger term than ''[[#archaic|archaic]]'', and a much stronger term than ''[[#dated|dated]]''. See [[Wiktionary:Obsolete and archaic terms]]. Distinguish: an obsolete term is no longer in use, while the thing it once referred to may or may not exist; a historical term is still in use, but refers to a thing which no longer exists.
; {{anchor|OED}}OED
: ''[[w:Oxford English Dictionary|Oxford English Dictionary]]''. Also '''SOED''' (Shorter), '''OED1''' (1st edition), '''OED2''' (2nd edition), '''NOED''' (New).
; {{anchor|offensive}} [[offensive]]
: Language that is intended or likely to cause offense; a kind of [[impolite]] language.
; {{anchor|onomatopoeia}}{{anchor|onomatopoeic}}[[onomatopoeia]]
: A word that is meant to sound like what it represents. English examples are {{m|en|kaboom}}, {{m|en|cuckoo}}, {{m|en|tweet}} and {{m|en|ding dong}}.
; {{anchor|optative mood}}[[optative mood]]
: A category of verb form (a [[#mood|mood]]) that expresses wishes along with other meanings. Such a category occurs in Ancient Greek and Sanskrit.
; {{anchor|orthographic borrowing}}[[orthographic]] [[borrowing]]
: A [[#loanword|loanword]] that has been borrowed in its written form and re-pronounced according to the conventions of the target language, particularly in East Asian languages written with Chinese characters. For example, the Chinese name {{m|zh|毛泽东|tr=Máo Zédōng}} is rendered in Japanese as {{m|ja|毛沢東|tr=Mō Takutō}}: the spelling is the same, but the characters have been pronounced as if they were Japanese words, leading to a significantly different pronunciation. Sometimes, the pronunciations in the source and donor language have no etymological relationship. For example, the Japanese noun {{ja-r|葉%書|は%がき|postcard}} was orthographically borrowed into Korean as {{ko-l|엽서|葉書|postcard}}.
; {{anchor|outdated}}[[outdated]]
: see ''[[#dated|dated]]''
; {{anchor|oxytone}}{{anchor|oxytonic}}[[oxytone]]
: With the stress upon the final syllable (e.g. {{m|el|εθνικός}}). Compare with [[#paroxytone|paroxytone]], [[#proparoxytone|proparoxytone]], and [[#barytone|barytone]].
==P==
; {{anchor|p.}}p.
: ''post'' or after, often used in quotations. Hence, a quotation from "p. 1924" is a quotation from no earlier than 1924.
: ''See '''{{glossary|plural}}'''.''
; {{anchor|palatalization}}[[palatalization]]
# The state or quality of being [[palatalized]], i.e. of pronouncing a sound with the tongue against the [[palate]] of the mouth that normally is not so pronounced. Some languages, such as [[Russian]] and [[Irish]], have pairs of palatalized and unpalatalized [[#consonant|consonant]] [[#phoneme|phonemes]].
# A [[#sound change|sound change]] that involves a change of consonants to become palatalized or move in the direction of the palate; one of the most common of sound changes, and usually triggered by a following {{IPAchar|/e/}}, {{IPAchar|/i/}} or {{IPAchar|/j/}}. In English, palatalization (known as {{w|yod-coalescence}}) converted {{IPAchar|/t/}} {{IPAchar|/d/}} {{IPAchar|/s/}} {{IPAchar|/z/}} to {{IPAchar|/t͡ʃ/}} {{IPAchar|/d͡ʒ/}} {{IPAchar|/ʃ/}} {{IPAchar|/ʒ/}} before a {{IPAchar|/j/}} (which was later lost), resulting in the sounds found in ''na'''t'''ure'', ''proce'''d'''ure'', ''pre'''ss'''ure'', ''mea'''s'''ure'', where the spelling still indicates the sound as it was prior to palatalization. Palatalization still operates [[synchronically]] before a {{IPAchar|/j/}}, producing, for instance, the pronunciations {{m|en|gotcha}} and {{m|en|didja}} from {{m|en|[[got]] [[you]]}} and {{m|en|[[did]] [[you]]}}. (See also {{pedia|Palatalization}})
; {{anchor|palindrome}}[[palindrome]]
: A word, phrase, number or any other [[sequence]] of units which has the property of reading the same [[forwards]] as it does [[backwards]], character for character, sometimes disregarding punctuation, [[capitalization]] and [[diacritic]]s.
; {{anchor|paradigm}} [[paradigm]]
: A set of all forms which contain a common element, especially the set of all [[#inflection|inflectional]] forms of a word or a particular grammatical category.
; {{anchor|paragoge}}{{anchor|paragogic}} [[paragoge]]
: The addition of sounds at the end of a word without changing its morphological structure or meaning.
; {{anchor|parisyllabic}}[[parisyllabic]]
: A word whose inflections contain the same number of syllables as the lemma form ([[cf.]] [[#imparisyllabic|imparisyllabic]]).
; {{anchor|paroxytone}}[[paroxytone]]
: With the stress upon the [[#penultima|penultimate]] (second to last) syllable (e.g. {{m|el|εθνολόγος}}). (Compare with ''[[#oxytone|oxytone]]'', ''[[#proparoxytone|proparoxytone]]'' and ''[[#barytone|barytone]]''.)
; {{anchor|part of speech}}[[part of speech]], {{anchor|POS}}POS, {{anchor|POS}}PoS
: The category that a word belongs to, with respect to how it's used as part of phrases and sentences. Examples are [[#noun|noun]]s, [[#adjective|adjective]]s and [[#verb|verb]]s. The part of speech is inherent in the word itself, and is independent of any specific role that the word may have within any given sentence (e.g. subject, [[#direct object|direct object]]). Words may belong to more than one part of speech: English {{m|en|this}} is both a [[#determiner|determiner]] and a [[#pronoun|pronoun]], while {{m|en|coat}} is both a noun and a verb.
; {{anchor|partial calque}}{{anchor|loan blend}}{{anchor|partially calqued}}[[partial calque]]
: A term which is only in part a [[#calque|calque]] or [[loan translation]], such that some parts have been translated word-for-word and other parts have been [[#loanword|borrowed]] directly. For example, the English term ''[[liverwurst]]'' is a partial calque of {{m+|de|Leberwurst}}; the first part {{m|de|Leber||liver}} was translated, but the second part {{m|de|Wurst||sausage}} was borrowed without translation. A partial calque is also known as a ''[[loanblend]]''. (''see'' {{pedia|Partial calque}})
; {{anchor|participial}}{{anchor|participle}}{{anchor|participles}}[[participle]]
: A form of a [[#verb|verb]] that may function as an [[#adjective|adjective]] or [[#noun|noun]]. {{cog|en|-}} has two types of participles: the [[#present|present]] participle and the [[#past|past]] participle. In other languages, also [[#future|future]], [[#perfect|perfect]], [[#future perfect|future perfect]] participles.
; {{anchor|particle}}[[particle]]
: A word that does not fall into the usual [[#part of speech|part of speech]] categories, but which modifies another word or the sentence as a whole. The English term ''[[like#Particle|like]]'' is used as a particle in many dialects. Particles are more common in other Indo-European languages (e.g. German {{m|de|doch}}, which marks a sentence as being surprising or rebutting a previous statement) and in East Asian languages (e.g. Japanese {{m|ja|は}}, which marks the topic of a sentence). Many [[#clitic|clitics]] are particles.
; {{anchor|partitive}}[[partitive]]
: Indicating partialness or indeterminateness, such as "some water" or "something nice". In Dutch, it is a word form that is used when referring to undetermined things or amounts (example: ''iets interessants'' = "something interesting"). French has special partitive [[#article|article]]s which qualify indefinite [[#mass noun|mass noun]]s (example: ''J'ai '''du''' café'' can be translated as either "I have '''some''' coffee" or simply "I have coffee").
; {{anchor|partitive case}}[[partitive case]]
: A [[#case|case]] that expresses a partial object or an action that is not performed to completion.
; {{anchor|passive}}{{anchor|passive voice}}[[passive voice]]
: the [[#voice|voice]] verb form in which the subject is not the person or thing doing the action, and is usually having the action done on them ([[cf.]] [[#active voice|active voice]]), e.g. ''the ball was kicked (by the boy).'' (See also {{pedia|Voice (grammar)}})
; {{anchor|past}}{{anchor|past tense}}[[past tense]]
: The [[#tense|tense]] of a [[#verb|verb]] used to refer to an event, transaction, or occurrence that did happen or has happened, or an object that existed, at a point in time before now. An English example is {{m|en|saw}} in ''I saw my friend yesterday''.
; {{anchor|past historic}}[[past historic]]
: A [[#tense|tense]] found primarily in writing in some languages, especially certain {{w|Romance languages}}. It has the same meaning as the [[#preterite|preterite]] but is used particularly in [[narrative]].
; {{anchor|past perfect}}past perfect
: Same as ''[[#pluperfect|pluperfect]]''.
; {{anchor|pejorative}}{{anchor|derogatory}}[[pejorative]] (or [[derogatory]])
: A word form expressing a negative or belittling attitude towards the person or thing referred to. Compare {{m+|en|artsy-fartsy}} with the neutral equivalent {{m|en|artistic}}. Some languages have specific prefixes or suffixes for expressing a pejorative attitude, e.g. {{m+|es|-ucho}}/{{m|es|-acho}} or {{m+|en|schm-}}.
; {{anchor|penultima}}{{anchor|penult}}[[penultima]]
: The next-to-last [[#syllable|syllable]] of a word.
; {{anchor|perfect}}[[perfect]]
: The [[#aspect|aspect]] of a verb indicating that the action described is completed. In English, it consists of the verb ''have'' + the past participle, e.g. ''Tom has painted the fence'' or ''Tom has taken medicine''. Depending on the tense of ''have'' one can have present perfect, which are represented in the previous examples, or past perfect: ''Tom had painted the fence'', ''Tom had taken medicine''. ''To have painted'' is a perfect infinitive. See also ''[[#imperfect|Imperfect]]''. Not to be confused with ''[[#perfective|perfective]]''.
; {{anchor|perfective}}{{anchor|perfective aspect}}[[perfective]]
: The [[#aspect|aspect]] of a verb that denotes viewing the event the verb describes as a simple whole rather than as having internal structure. For example, "she sat down" as opposed to "she was sitting down". As this may often lead to an interpretation of completeness of what is expressed by the verb, this aspect is generally associated with the past and future tenses. Common in {{w|Slavic languages}} such as {{cog|ru|-}}. This term is often used interchangeably with ''[[#aorist|aorist]] aspect''. Not to be confused with ''[[#perfect|perfect]]''. (''see'' {{pedia|Perfective aspect}})
; {{anchor|periphrastic}}[[periphrastic]]
: Using more words to produce a grammatical effect. For example, "more fair" is a ''periphrastic'' form of "fairer". The English future tense requires ''periphrastic'' usage: "I ''will write'' an essay." ([[#Cf.|Cf.]] ''[[#monolectic|monolectic]]'' and ''[[#polylectic|polylectic]]''.)
; {{anchor|person}}[[person]], {{anchor|grammatical person}}grammatical person
: A grammatical category that indicates the relationship between the speaker and what is being spoken of. Examples are [[#first person|first person]], [[#second person|second person]] and [[#third person|third person]].
; {{anchor|phoneme}}[[phoneme]]
: An indivisible unit of sound in a given language, an abstraction of the physical speech sounds.
; {{anchor|phono-semantic compound}}[[phono-semantic compound]]
: A Chinese character ([[#CJKV|CJKV]] character) composed of a component which is related to the meaning the character and another component which is related to the sound of the character, example: the character {{zh-l|媽|lit=mother}} ([[Old Chinese|OC]] *maːʔ) is a phono-semantic compound made up of the semantic {{zh-l|*女|lit=female}} (on the left-hand side of {{lang|zh|媽/妈}}) and the phonetic {{zh-l|馬}} (OC *mraːʔ) (on the right-hand side of {{lang|zh|媽/妈}}).
; {{anchor|phono-semantic matching}}[[phono-semantic matching]]
: A word [[#borrowing|borrowed]] into one language from another in a way that completely or partially preserves both the original sound and meaning. Phono-semantic matchings are especially common in Mandarin Chinese; examples are {{zh-l|可口可乐/可口可樂|tr=Kěkǒu kělè|t=Coca-Cola|lit=tasty [and] entertaining}} and {{zh-l|万维网/萬維網|tr=wàn wéi wǎng|t=world wide web|lit=myriad dimensional net}}.
; {{anchor|phrase}}[[phrase]]
# A word or group of words that functions as a single unit in the [[#syntax|syntax]] of a [[#sentence|sentence]], usually consisting of a [[#head|head]], or central word, and elaborating words. Examples are ''the good boy'' (a [[#noun|noun]] phrase), ''very strange'' (an [[#adjective|adjective]] phrase), and ''in the house'' (a [[#preposition|prepositional]] phrase). Normally distinguished from a [[#clause|clause]], a similar group of words that contains a [[#verb|verb]].
# Same as [[#set phrase|set phrase]].
; {{anchor|piecewise doublet}}[[piecewise]] [[doublet]]
: One of two (or more) derived words in a language that consist of components that all have the same [[#etymology|etymological]] roots, but which have been entered the language at different points in time; in other words, one of two (or more) words that can be split into individual components and all of those components are [[#doublet|doublets]] of the equivalent components of the other words.
; pl.
: ''See '''{{glossary|plural}}'''.''
; {{anchor|plosive}}[[plosive]]
: A [[#consonant|consonant]] sound produced by completely blocking the airflow through the mouth for a short time. In English, the plosives are [[#voiceless|voiceless]] {{IPAchar|/p/}}, {{IPAchar|/t/}}, {{IPAchar|/k/}} (as in the initial sounds of ''pea'', ''tea'', ''key'') and the corresponding [[#voiced|voiced]] sounds {{IPAchar|/b/}}, {{IPAchar|/d/}}, {{IPAchar|/ɡ/}} (as in the initial sounds of ''buy'', ''die'', ''guy''). Plosives are distinguished from [[#fricative|fricative]]s, in which the air is mostly but not completely blocked, enough to cause a rough, hissing or buzzing sound, and [[#approximant|approximant]]s, in which the airflow is only slightly constricted, resulting in a smooth sound.
; {{anchor|pluperfect}}[[pluperfect]]
: A verb form of [[#perfect|perfect]] [[#aspect|aspect]] and [[#past|past]] [[#tense|tense]], which is used to describe an action or event which is regarded as having been completed in the past, in relation to a time already in the past. E.g. ''Tom had painted the fence before I got there''.
; {{anchor|බහුවචන}}{{anchor|plural}}{{anchor|Plural}}[[බහුවචන]] ([[plural]]), {{anchor|plural number}}plural number, {{anchor|pl}}{{anchor|pl.}}pl., p.
: A [[#number|grammatical number]] that indicates multiple items or individuals. Most languages contrast it with [[#singular number|singular]], and plural indicates two or more. Some languages also possess the [[#dual number|dual]] or even [[#trial number|trial]] numbers; in these instances the plural indicates more than the highest specific number.
; {{anchor|plurale tantum}}[[plurale tantum]] (plural = pluralia tantum)
: Same as plural only (see below).
; {{anchor|plural only}}{{anchor|plurale tantum}}{{anchor|pluralia tantum}}[[plural]] [[only]]
: A noun (or a sense of a noun) that is inherently plural and is not used (or is not used in the same sense) in the singular, such as ''[[pants]]'' in the senses of "trousers" and "underpants", or ''[[wheels]]'' in the sense of "car", is ''plural only'' or ''a [[plurale tantum]]''. In practice, most pluralia tantum are found in the singular in rare cases. (''See'' [[:Category:English pluralia tantum]].) Contrast words which are '''[[singular]] [[only]] ([[singulare tantum|singularia tantum]])'''.
; {{anchor|polylectic}}[[polylectic]]
: Used of a grammatical form accomplished with more than one word ([[cf.]] [[#monolectic|monolectic]] and [[#periphrastic|periphrastic]]).
; {{anchor|portmanteau}}{{anchor|Portmanteau}}[[portmanteau]]
: A [[#blend|blend]] that combines meanings.
; POS, PoS
: ''See '''{{glossary|part of speech}}'''.''
; {{anchor|positive}}[[positive]]
: The 'normal' form of the [[#degrees of comparison|degrees of comparison]] of an adjective or adverb. Thus [[big]] is the ''positive'' form of the trio ''big'', ''bigger'', ''biggest''.
; {{anchor|possessional adjective}}[[possessional adjective]]
: An adjective indicating that a noun is in possession of some other noun (or a quality of that noun), commonly formed in English by adding the suffix {{m|en|-ed}}, {{m|en|-ful}}, {{m|en|-y}}, {{m|en|-ous}}, {{m|en|-able}}, {{m|en|-ual}}, {{m|en|-ish}}, {{m|en|-ar}}, {{m|en|-esque}} or {{m|en|-like}}. For example, an animal is [[bushy-tailed]] if it is in possession of a bushy tail, a person filled with disdain is [[disdainful]], and a garden is [[leafy]] if there are many leaves on the plants there. Commonly [[#idiomatic|idiomatic]], such as in [[pinheaded]] or [[red-faced]]. Not to be confused with [[#possessive adjective|possessive adjectives]], which indicate who possesses a noun, or [[#relational adjective|relational adjectives]], which are often formed in the same way. See also [[#privative adjective|privative adjectives]], which denote the opposite.
; {{anchor|possessive determiner}}{{anchor|possessive adjective}}[[possessive determiner]] (or possessive adjective)
: A [[#determiner|determiner]] that indicates ownership. For example, in "her book", the word "her" indicates whose book it is. Not to be confused with [[#possessional adjective|possessional adjectives]], which indicate what a noun possesses.
; {{anchor|postpositive}}[[postpositive]]
: Placed after the word modified.
; {{anchor|preconsonantal}}[[preconsonantal]]
: Immediately preceding a [[#consonant|consonant]] or consonant sound.
; {{anchor|predicate}} [[predicate]]
: The part of a [[#sentence|sentence]] that follows the [[#subject|subject]]. This generally consists of the [[#verb|verb]] and any [[#object|object]]s. It can also consist of a [[#linking verb|linking verb]] (e.g. "to be", "to seem", etc.) and a following [[#adjective|adjective]], which is termed a ''predicate adjective'' or ''predicative adjective'' (contrasted with an ''[[#attributive|attributive]] adjective'', which directly modifies a [[#noun|noun]]). An example would be {{m|en|good}} in ''The food is good''. Some languages, such as {{cog|de|-}} and {{cog|ru|-}}, have a special declension for predicate adjectives.
; {{anchor|predicative}}{{anchor|predicatively}}[[predicative]]
: Describes a term that acts as the [[#predicate|predicate]] or part of the predicate of a [[#sentence|sentence]] (e.g. a ''predicative [[#adjective|adjective]]'', such as {{m|en|good}} in ''The food is good''). Some adjectives are only-predicative like {{m|en|afraid}} or {{m|en|glad}} in English.―In {{cog|ru|-}}, it often specifically refers to an adjective-like [[#part of speech|part of speech]] that serves as the entire predicate of a sentence in an [[#impersonal|impersonal]] construction. Such constructions often cannot be translated word-for-word in English. An example is {{m|ru|ску́чно||it is [[boring]]}} in the sentence {{m|ru|[[я|мне]] [[ску́чно]]||I am [[bored]]|lit='''It is boring''' to [[me]]}}.
; {{anchor|prefix}}{{anchor|prefixed}}{{anchor|prefixation}}[[prefix]]
: A [[morpheme]] added to the beginning of a word to modify its meaning.
; {{anchor|prescriptive}}[[prescriptive]]
: (as a context label for a word or phrase) Correct and consistent according to linguistic rules, but not in general use.
; {{anchor|prevocalic}}[[prevocalic]]
: Immediately preceding a [[#vowel|vowel]] or vowel sound.
; {{anchor|preposition}}[[preposition]]
: A word, normally non-[[#inflection|inflect]]ing, that is typically employed to connect a following [[#noun|noun]] or [[#pronoun|pronoun]], in an [[#adjective|adjectival]] or [[#adverb|adverbial]] sense, with some other word. Examples of prepositions in English are ''in'', ''from'' and ''during''. Note that some languages have [[#postposition|postposition]]s instead of prepositions; they function like prepositions but come ''after'' the noun or pronoun being connected.
; {{anchor|prepositional case}}{{anchor|prepositional}}[[prepositional case]]
: A [[#case|case]] used in certain languages, especially {{cog|ru|-}}, after certain [[#preposition|preposition]]s. In {{cog|ru|-}}, it corresponds to the [[#locative case|locative case]] in other {{w|Slavic language}}s.
; {{anchor|present}}{{anchor|present tense}}[[present tense]]
: The [[#tense|tense]] of a [[#verb|verb]] used primarily to refer to an event, transaction, or occurrence happening now or at the present time. The verb {{m|en|see}} in ''I see my friend in the window'' is in the present tense. In many languages, including English, the present tense may also be used to refer to past or future events in certain contexts: ''My plane leaves tomorrow morning'' (where {{m|en|leave}} is a present verb that refers to the future), or: ''John Lennon dies of gunshot wounds'' (as in a headline, where {{m|en|dies}} is a present verb that refers to the past; see [[historical present]]). While such uses are somewhat exceptional in English, the present tense is used much more widely in many languages. For example, the German present tense also covers some or most of the uses of the English future (''I will do'') and present perfect (''I have done'').
; {{anchor|preterite}}[[preterite]] (also spelled [[preterit]])
: A [[#tense|tense]] showing an action at a determined moment in the past. In general it is thus the union of the [[#past tense|past tense]] with the [[#perfective|perfective]] aspect, although in some languages it is little more than a synonym for past tense.
; {{anchor|preterite-present verb}}[[preterite-present verb]]
: In [[Germanic]] languages, a verb that displays (or historically displayed) [[#ablaut|ablaut]] in the present tense, and thereby had ''present'' tense forms resembling the ''past'' (or ''preterite'') tense of a [[#strong verb|strong verb]]. Most languages have no more than a handful of such verbs, and they are often used as [[#auxiliary verb|auxiliary verbs]]. English examples are {{m|en|shall}}, {{m|en|can}}, {{m|en|may}}. Contrast [[#strong verb|strong verb]], [[#weak verb|weak verb]].
; {{anchor|privative adjective}}[[privative adjective]]
# An adjective indicating that a noun refers to an object that is not of the class which that noun ordinarily refers to. For example, in the term "fake weapon", the word "fake" denotes that the object is not a weapon, just as the word "toy" in "toy car" denotes that it is not a car.
# An adjective indicating that a noun lacks some other noun (or a quality of that noun), usually formed in English by adding the suffix {{m|en|-less}} or {{m|en|-free}} to the noun that is absent. For example, someone is [[beardless]] if they don't have a beard, while a coffee might be [[sugar-free]] if it contains no sugar. Commonly [[#idiomatic|idiomatic]], such as in [[brainless]] or [[heartless]]. See also [[#possessional adjective|possessional adjectives]], which denote the opposite.
; {{anchor|productive}}[[productive]]
: Used to form new words and phrases. For example, when a new verb appears in Modern English, the productive suffix {{m|en|-ed}} is used to form its past participle; by contrast, the suffix ''[[-en]]'' appears in many existing past participles, but is not productive, in that it is not (usually) used to form new ones.
; {{anchor|progressive}}[[progressive]]
: The [[#aspect|aspect]] of a verb, indicating that the action described is, was or will be continuing, uncompleted or repeated. A verb form indicating that an action is [[in progress]]. In English, formed from a combination of ''be'' + the present participle (''-ing'' form) of the verb. So one can have present progressive (e.g. '''''is''' painting''), past progressive (e.g. '''''was''' painting''), future progressive (e.g. '''''will be''' painting''), etc. Similar to, but less general than, the [[#imperfective|imperfective]] [[#aspect|aspect]]. (See also ''[[#continuous|continuous]]''.)
; {{anchor|pronominal verb}}{{anchor|pronominal}}[[pronominal verb]]
: A form of [[#verb|verb]] that has an attached [[#pronoun|pronoun]], prominent feature of [[Romance language|Romance]] and Slavic languages. The verb-pronoun combination can have [[#reflexive|reflexive]], [[#reciprocal|reciprocal]], [[#passive|passive]], [[#subjective|subjective]] or [[#idiomatic|idiomatic]] semantics.
; {{anchor|pronoun}}[[pronoun]]
: A [[#part of speech|part of speech]] that acts as a substitute for a [[#noun|noun]] or [[noun phrase]] and refers to a topic of the discussion. Pronouns can refer to a participant in the discussion and can be used instead of a person's name, such as with the pronouns {{m|en|I}} and {{m|en|you}}. Other pronouns, such as {{m|en|he}}, {{m|en|she}}, and {{m|en|it}}, can be used to refer to other people or objects that have already been mentioned without repeating their names.
; {{anchor|pronunciation spelling}}[[pronunciation spelling]] {{nobold|{{wikipedia|pronunciation spelling}}}}
: A deliberate misspelling used in writing, typically to indicate the speech of a particular dialect, even if the speaker may have perfect spelling. As such, it is the functional opposite of [[#eye dialect|eye dialect]].
; {{anchor|proparoxytone}}[[proparoxytone]]
: With the stress upon the [[#antepenultimate|antepenultimate]] (third to last) syllable (e.g. {{m|el|εθνικότητα}}). (Compare with ''[[#oxytone|oxytone]]'', ''[[#paroxytone|paroxytone]]'', and ''[[#barytone|barytone]]''.)
; {{anchor|proper noun}}[[proper noun]]
: A kind of [[#noun|noun]] that usually refers to a specific, unique thing, such as {{m|en|Earth}} and {{m|en|Alps|the Alps}}, though one language's proper noun may translate to another language using a ''common'' (not proper) noun. In English, proper nouns are usually capitalized, as are common nouns and adjectives derived from proper nouns. The same word may have both common-noun and proper-noun senses (such as {{m|en|German}}, which is both a proper noun denoting a certain language, and a common noun denoting a person from Germany), and most proper nouns can sometimes be used as common nouns – e.g. {{m|en|John}} is a proper noun that is a first name, but can be used a common noun with plural {{m|en|Johns}} meaning "people named John".
; {{anchor|proscribed}}[[proscribe]]d
: Some authorities or commentators recommend or warn against the listed usage.
; {{anchor|prothesis}}[[prothesis]]
:The prepending of [[#phoneme|phonemes]] at the beginning of a word without changing its morphological structure, as in {{m|en|nother}}, from {{m|en|other}} (“a whole nother thing”), or Spanish {{m|es|esfera}} from Latin {{m|la|sphaera||sphere}}.
; {{anchor|proverb}}[[proverb]]
: A [[#phrase|phrase]] expressing a basic truth which may be applied to common situations.
; {{anchor|pseudoacronym|pseudo-acronym}}[[pseudo-acronym]]
: A word that has the form of an [[#acronym|acronym]] or [[#initialism|initialism]] but no longer stands for anything. (See also {{pedia|Pseudo-acronym}})
; {{anchor|pseudoanglicism|pseudo-anglicism}}[[pseudo-anglicism]]
: A word in a non-English language that is formed from English elements and may appear to be English, but that does not exist as an English word with the same meaning, such as {{m|de|Flipper||pinball machine}}, {{m|ja|サラリーマン||white-collar worker|tr=sararīman}} and {{m|sv|afterwork||informal gathering after work}}.
; {{anchor|pseudo-loan}}[[pseudo-loan]]
: A word in one language that appears to be a direct borrowing from another language, but does not exist in that language or has an unrelated meaning. Examples are {{m+|fr|footing||jogging}}, {{m+|de|Bodybag||messenger bag, courier bag}}, {{m+|ja|サラリーマン||white-collar worker, '[[salaryman]]'|tr=sararīman}} and {{m+|sv|afterwork||informal gathering after work}}. Depending on the source language, more specific terms may be in use, e.g. ''[[pseudo-anglicism]]'' for pseudo-loans from English; ''{{w|wasei-eigo}}'' specifically for Japanese-language pseudo-loans from English; ''[[:Category:Pseudo-loans from Latin by language|pseudo-Latinism]]'' for pseudo-loans from Latin (cf. [[hocus pocus]], [[noli illegitimi carborundum]]); ''[[:Category:Pseudo-loans_from_Spanish_by_language|pseudo-Hispanism]]'' for pseudo-loans from Spanish (cf. [[no problemo]], [[que sera sera]]); ''[[:Category:Pseudo-loans_from_French_by_language|pseudo-Gallicism]]'' for pseudo-loans from French (cf. [[vive la différence]], [[nom de plume]], [[triple entendre]]); ''[[:Category:Pseudo-loans from German by language|pseudo-Germanism]]'' (from German), ''[[:Category:Pseudo-loans from Japanese by language|pseudo-Japonism]]'' (from Japanese), ''pseudo-Arabism'' (from Arabic), ''pseudo-Italianism'' (from Italian), etc.
==R==
; {{anchor|rare}}[[rare]]
: A term or sense that is attested but not used commonly either in spoken or written language, even less so than [[#uncommon|uncommon]] terms.
; {{anchor|reanalysis}}{{anchor|reanalysed}}{{anchor|reanalyzed}}[[reanalysis]]
: Analysis of a [[#lexeme|lexeme]] with a different structure from its original, often by misunderstanding. For example, ''[[hamburger]]'', which is originally ''[[Hamburg]]'' + ''[[-er]]'', was reanalyzed as ''[[ham]]'' + ''[[-burger]]'', which produced words like ''[[cheeseburger]]''.
; {{anchor|rebracketing}}{{anchor|metanalysis}}[[rebracketing]]
: The process by which a word originally derived from one source is broken down or bracketed into a different set of factors. The understanding of ''[[hamburger]]'' as ''[[ham]] + [[burger]]'' (rather than ''[[Hamburg]]'' + ''[[-er]]'') is an example of rebracketing. Also called '''[[metanalysis]]'''.
; {{anchor|reciprocal}}[[reciprocal]]
: Used to indicate that subjects have other subjects as object. Pronouns can be reciprocal (in English ''[[each other]]''), as well as verbs [[reciprocal]] quality as [[#lexeme|lexeme]]s.
; {{anchor|reconstruction}}{{anchor|reconstructed}}[[reconstruction]]
: A word that is not recorded in actual texts or other media, but has been recreated from its descendant forms, using the [[comparative method]] of linguistics.
; {{anchor|reducible}}[[reducible]]
: In the {{w|Slavic languages}}, a word (especially a noun or adjective) with an alternation between a vowel and no vowel in different forms of the word, pursuant to {{w|Havlík's law|Havlík’s law}}. In Russian, for example, the reducible masculine noun {{m|ru|вене́ц||[[crown]]}} appears unreduced (with /e/ in the final syllable) in the masculine singular, and reduced (with no /e/) in other forms, e.g. genitive singular {{m|ru|венца́}}, nominative plural {{m|ru|венцы́}}.
; {{anchor|reduplication}}{{anchor|reduplicated}} [[reduplication]]
: The repetition of a word or a part of a word (as few as two [[#phoneme|phonemes]] in a word, or the whole sequence of phonemes in the word) with no or slight change. Compare [[#haplology|haplology]], the [[#elision|elision]] of a repeated part of a word.
; {{anchor|reflexive}}[[reflexive]]
: Referring back to the subject, or having an object equal to the subject. Pronouns can be reflexive (e.g. ''[[myself]]'', ''[[oneself]]''). [[Romance language|Romance]] and Slavic languages make extensive use of reflexive verb forms (e.g. {{ncog|it|lavarsi}}, {{ncog|es|lavarse||to wash oneself}}). These are part of a larger group of [[#pronominal verb|pronominal verbs]].
; {{anchor|register}}[[register#English:_language register|register]] {{nobold|{{wikipedia|Register (sociolinguistics)}}}}
: A variety of a language used for a particular purpose or in a particular social setting. Encompasses variants such as [[#slang|slang]], [[#colloquial|colloquial]], [[#informal|informal]], [[#formal|formal]], etc.
; {{anchor|related terms}}[[Wiktionary:Entry layout explained#Related terms|related terms]]
: Words in the same language that have strong etymological connections but are '''not''' derived terms.
; {{anchor|relational}}{{anchor|relational adjective}}[[relational]]
: Refers to a type of adjective in some languages, e.g. {{cog|la|-}}, {{cog|grc|-}} and the {{w|Slavic languages}}, that takes the place of a noun when it modifies another noun. Consider an English phrase such as ''chicken soup''. In English, this phrase can be constructed by simply placing a noun such as ''chicken'' in the position normally occupied by an adjective, i.e. directly before the noun. In languages such as {{cog|ru|-}}, however, this cannot be done, and instead the word {{m|ru|ку́рица||chicken}} must be replaced by the relational adjective {{m|ru|кури́ный||related to chickens}} when forming the Russian equivalent {{m|ru|[[кури́ный]] [[суп]]||chicken soup}}. Generally, adjectives of this sort cannot be qualified by ''more'', ''less'' or ''very''.
; {{anchor|relative}}[[relative]]
:# Marking a [[#relative clause|relative clause]]. Often used of pronouns, such as {{m|en|the tree '''[[which]]'''...}}.
:# In the {{w|Bantu languages}}, a [[#part of speech|part of speech]] that resembles an [[#adjective|adjective]] in function, but behaves morphologically and syntactically like a [[#relative clause|relative clause]].
; {{anchor|relative clause}}[[relative clause]] {{nobold|{{wikipedia|Relative clause}}}}
: A [[#subordinate clause|subordinate clause]] that modifies a [[#noun|noun]]. In ''The man who I saw yesterday is leaving today'', the clause ''who I saw yesterday'' is a relative clause. In English, relative clauses are often introduced by a [[#relative|relative]] [[#pronoun|pronoun]] such as ''who'', ''which'' or ''that'', but other languages often have different strategies for marking relative clauses.
; {{anchor|respelling}}[[respelling]]
: A different spelling of a word, especially to show its pronunciation.
; {{anchor|retronym}}[[retronym]]
: A new word or phrase coined for an old object or concept whose original name has become used for something else or is no longer unique (such as acoustic guitar where guitar used to mean this but can now also refer to an electric guitar).
; {{anchor|rhetoric}}[[rhetoric]]
# The art of effective or persuasive speaking or writing.
# A string of words that are designed to impress or confuse, rather than communicate. (See also ''[[Appendix:Glossary of rhetoric]]''.)
; {{anchor|rhetorical question}}[[rhetorical question]]
: A question to which the speaker does not expect an answer
; {{anchor|rhotacism}}[[rhotacism]], {{anchor|rhotacization}}[[rhotacization]]
: A [[#sound change|sound change]] that converts one consonant (usually a voiced alveolar consonant: /z/, /d/, /l/, or /n/) to a [[rhotic]] consonant in a certain environment, most commonly /z/ to /r/.
; {{anchor|Romanization}}{{anchor|Romanisation}}{{anchor|romanization}}{{anchor|romanisation}}[[Romanization]], [[Romanisation]]
: [[#transliteration|Transliteration]] of a string in a non-Latin script into the Latin or Roman one: for instance, {{m|el|συγγνώμη|tr=-}} can be romanized as ''singnómi''.
; {{anchor|root}}[[root]]
: The part of a word that forms its core and gives its most basic meaning; also the part of the word that is left when all [[#affix|affix]]es are removed. For example, in {{m|en|insubordination}}, the root is {{m|en||ord}}, while in {{m|en|unspeakableness}} it is {{m|en|speak}}. The root is often the first part of the word (as in [[Uralic]] and often in [[Indo-European]] languages), but it may also be the last part, or it may only consist of the consonants of the word (as in the [[Afroasiatic]] languages).
==S==
; s
: ''See '''{{glossary|singular}}'''.''
; {{anchor|SAMPA}}[[SAMPA]]
: [[w:SAMPA|SAMPA]] (Speech Assessment Methods Phonetic Alphabet), a set of systems for representing the phonemes of various languages in plain [[ASCII]] text. Not to be confused with [[w:X–SAMPA|X–SAMPA]], the system for representing the ''full'' International Phonetic Alphabet in plain ASCII text.
; {{anchor|script}}[[script]]
: A writing system adapted to a particular language or set of languages.
; {{anchor|second person}}{{anchor|second-person}}[[second person]], {{anchor|2nd person}}[[2nd person]]
: A [[#person|grammatical person]] that indicates the person or group that one is speaking to. Examples are the English pronouns {{m|en|you}} and {{m|en|thou}}.
; {{anchor|second-person-object}}{{anchor|second-person-object form}}{{anchor|second person object}}second-person-object form
: A type of conjugation in [[Hungarian]] (aside from [[#definite|definite]] and [[#indefinite|indefinite]]) which indicates a first-person singular subject and a second-person (whether singular or plural, but informally addressed) object, for example {{m|hu|szeretlek|szeret'''lek'''|'''I''' love '''you'''}} or {{m|hu|látlak|lát'''lak'''|'''I''' see '''you'''}}.
; {{anchor|semantic loan}}{{anchor|ශබ්දාර්ථවිභාග ණයට ගැනීම්}} [[ශබ්දාර්ථවිභාග ණයට ගැනීම්]] ([[semantic loan]])
: A word or expression created by [[#loanword|borrowing]] a meaning from another language and assigning it to a word or expression that already exists in the borrowing language, also called semantic calque. (Compare [[#calque|calque]], a new word or expression created by translation.) For example, the French word {{m|fr|souris|lit=mouse}} was given the additional meaning ''[[computer]] [[mouse]]'' in imitation of {{m+|en|mouse}}, which already had both meanings. (''see'' {{pedia|Semantic loan}})
; {{anchor|semelfactive}}[[semelfactive]]
: A verbal [[#aspect|aspect]], a subclass of [[#perfective|perfective]], which denotes a [[momentary]] or [[punctual]] event (e.g. to [[sneeze]], to [[blink]], to [[knock]]). In {{w|Slavic languages}} such as {{cog|ru|-}}, often used to express actions performed once. (''See'' {{pedia|Semelfactive}})
; {{anchor|semi-learned borrowing}}[[semi-learned borrowing]]
: A [[#loanword|loanword]] that was borrowed from a [[classical language]] such as Latin or Sanskrit (especially when borrowed into a descendant of the same language), which has been partly reshaped by later [[#sound change|sound change]] or analogy with inherited terms. Opposed to [[#learned borrowing|learned borrowings]], which have not been similarly reshaped, and [[#inherited|inherited]] terms, which have undergone all the normal sound changes of a language. For example, the Portuguese term {{m|pt|artigo||article}} is a semi-learned borrowing from {{cog|la|articulus||joint, limb, division}}, which was borrowed early enough to undergo later sound changes that [[lenite]]d ''c'' into ''g'' and deleted ''l'' between vowels, but did not undergo earlier sound changes, such as lowering short ''i'' to ''e''. In comparison, {{m|pt|artelho||toe}} is inherited from the same Latin term, and {{m|pt|artículo||[[articulus]]}} is a learned borrowing from the same Latin term.
; {{anchor|semivowel}}[[semivowel]]
: A sound which has some qualities of a [[#consonant|consonant]] and some qualities of a [[#vowel|vowel]].
; {{anchor|sentence}}[[sentence]]
: A syntactic unit that expresses a complete thought and consists of one or more [[#clause|clause]]s joined together.
; {{anchor|sentence adverb}} [[sentence adverb]]
: An adverb that modifies an entire clause or sentence rather than a single word or phrase.
; {{anchor|set phrase}}{{anchor|set expression}}{{anchor|multiword phrase}}{{anchor|multiword expression}}[[set phrase]]
: [[w:Set phrase|Set phrase]], a common [[expression]] (a [[#phrase|phrase]]) whose [[wording]] is not subject to [[variation]], or alternately, whose words cannot be replaced by [[#synonym|synonymous]] words without [[compromise|compromising]] the meaning. Set phrases may include [[#idiom|idiom]]s, [[#proverb|proverbs]], and [[#colloquial|colloquialisms]]. For example, ''flight simulator'' is a set phrase because it has a special meaning that ''flying simulator'' doesn't.
; sg.
: ''See '''{{glossary|singular}}'''.''
; SGV
: ''See '''{{glossary|singulative}}'''.''
; {{anchor|shortening}}[[shortening]]
: A shortened form of a word(s), including [[#abbreviation|abbreviations]], [[#acronym|acronyms]], [[#contraction|contractions]], [[#initialism|initialisms]], [[#short form|short forms]].
; {{anchor|short_form}}short form
: A shortened term which is itself a stand-alone term; eg. {{m|en|Acts}}, a short form used to refer to {{m|en|Acts of the Apostles}}.
; {{anchor|sic}}''[[sic]]''
: A Latin adverb meaning "thus, so". It is traditionally placed inside square brackets and used in quotations to indicate that the preceding is not a copying error, but is in fact a verbatim reflection of the source. (For example, if a source contains a typographical error, someone quoting the source might add [sic] to make clear that the error was in the original source.)
; {{anchor|siglum}}[[siglum]] (pl. sigla)
: A letter or other symbol that stands for a word or name; eg. {{m|la|ꝓ}} is a medieval Latin siglum for the word {{m|la|pro}}.
; {{anchor|simile}}[[simile]]
: A [[figure of speech]] in which one thing is compared to another; in English, it generally uses [[like]] or [[as]]; see [[#metaphorical|metaphor]] and [[#figurative|figurative]].
; {{anchor|simplex}}[[simplex]]
: A simple word, one without [[#affix|affixes]].
; {{anchor|ඒක වචන}}[[ඒක වචන]]
: පහත [[#singular]] වෙත යොමු වන්න.
; {{anchor|singular}}{{anchor|Singular}}[[singular]], {{anchor|singular number}}singular number, {{anchor|sg}}{{anchor|sg.}}sg., {{anchor|s}}s
: A [[#number|grammatical number]] that indicates exactly one item or individual. Usually contrasts with [[#plural number|plural]], and, in some languages, with [[#dual number|dual]].
; {{anchor|singulative}}[[singulative]], {{anchor|singulative number}}singulative number, {{anchor|SGV}}SGV
: The marked singular form of an unmarked [[#mass noun|mass noun]].
; {{anchor|Sino-Xenic}}[[Sino-Xenic]]
: Refers to pronunciations in [[Japanese]], [[Korean]] and [[Vietnamese]] languages (grouped with Chinese as [[#CJKV|CJKV]]) of terms or components derived from medieval [[Chinese]].
; {{anchor|s.l.}}[[s.l.#Etymology 2|s.l.]]
: {{noncog|la|[[sine]] [[locō]]|lit=without a place}}, used to indicate that the place of publication is not stated in a work.
; {{anchor|slang}}[[slang]]
: Denotes language that is unique to a particular profession or subject, i.e. [[jargon]]. Also refers to the specialized language of a social group, sometimes used to make what is said unintelligible to those who are not members of the group, i.e. [[cant]]. Such language is usually outside of conventional usage, and is mostly inappropriate in [[#formal|formal]] contexts.
; {{anchor|slavic first palatalization}}{{w|Slavic first palatalization}}
: A specific occurrence of [[#palatalization|palatalization]] that occurred in the {{w|Proto-Slavic language}}, in which the [[#velar|velar]] consonants ''*k *g *x'' when followed by any of the [[#front vowel|front vowel]]s ''*e *ě *ь *i'' became the sounds ''*č *ž *š'', respectively. The Slavic first palatalization is still an active process in many modern {{w|Slavic languages}}. For example, before certain suffixes in {{cog|ru|-}}, the consonants {{lang|ru|к г х ц}} become {{lang|ru|ч ж ш ч}} respectively. Other {{w|Slavic languages}} behave similarly. (''See'' {{pedia|Slavic first palatalization}})
; {{anchor|slavic progressive palatalization}}{{w|Slavic progressive palatalization}}
: A specific occurrence of [[#palatalization|palatalization]] that occurred in the {{w|Proto-Slavic language}}, in which the [[#velar|velar]] consonants ''*k *g *x'' when preceded by either of the [[#front vowel|front vowel]]s ''*ь *i'' (possibly with an intervening ''n'') became the sounds ''*c dz s/š'', respectively, with ''s'' occurring in East and South Slavic but ''š'' occurring in West Slavic. (See also {{pedia|Slavic progressive palatalization}})
; {{anchor|s.n.}}[[s.n.]]
: {{noncog|la|[[sine]] [[nōmine]]|lit=without a name}}, used to indicate that the name of the publisher is not stated in a work.
; {{anchor|snowclone}}[[snowclone]]
: A type of {{l|en|cliché}} which uses an old {{glossary|idiom}} formulaically in a new context. (See also ''[[Appendix:English snowclones]]'' and {{pedia|Snowclone}})
; {{anchor|solemn}} [[solemn]]
: Used to evoke a sense of current events being highly important. Examples of situations where solemn language is likely to be used are liturgical events, various ceremonies, and public speeches. Solemn terms are often dated or archaic, and once belonged in the neutral register.
; {{anchor|sound change}}[[sound change]]
: A change in the pronunciation of a sound in a given language, usually according to regular rules. An example of such a change in English is the deletion of ''h'' in the {{IPAchar|/hw/}} cluster found in words such as ''which'' and ''whale'', making them [[homophonous]] with ''witch'' and ''wail'', respectively. (This sound change is found in most varieties of English, but not in Scottish English or in some conservative American English and Irish English varieties. See {{w|Pronunciation of English ⟨wh⟩}}.)
; {{anchor|sound symbolism}}{{anchor|sound-symbolic}}[[sound symbolism]]
: The idea that [[phoneme]]s or clusters of phonemes carry intrinsic meaning in a language. For example, the phoneme cluster ''gl-'' appears to mean "light" in English in words such as [[gleam]], [[glisten]], [[glare]], [[glossy]] and [[glow]]. (''See'' {{pedia|sound symbolism}} ''Also see'' {{pedia|phonestheme}})
; {{anchor|spelling pronunciation}}[[spelling pronunciation]]
: A pronunciation affected by the written form of the word, diverging from the original inherited form. Some spelling pronunciation are considered mistakes or non-standard, while others have historically become universally accepted and completely replaced the original pronunciations. (''See'' {{pedia|Spelling pronunciation}})
; {{anchor|stem}}[[stem]]
: The part of an [[#inflection|inflected]] word that the ending is attached to. For example, Latin {{m|la||mens-}} (stem, "table") + {{m|la|-ae}} (ending, 1st-declension nominative plural) → {{m|la|mensae}} (full word, "tables", nominative plural).
; {{anchor|stratum}}{{anchor|strate}}{{anchor|adstratum}}{{anchor|adstrate}}[[stratum]] {{nobold|{{wikipedia|stratum (linguistics)}}}}
: A language that influences another by [[w:language contact|contact]], typically due to close geographic proximity (often both spoken simultaneously in the same land) and some form of cultural contact. A stratum can be further classified as [[#substrate|substrate]], [[#superstrate|superstrate]], or adstrate.
; {{anchor|strictly}}{{anchor|strict}}[[strictly]]
: Indicates a more precise use of words; short for ''strictly speaking'' ([[sensu stricto]]). Contrast ''loose'' or ''broad'' (''wide'') sense; ''[[#loosely|loosely]]''.
; {{anchor|strong declension}}{{l|en|strong declension}}
: In German, a declension of adjectives, and of masculine and neuter nouns, that is defined in opposition to the [[#weak declension|weak declension]] and [[#mixed declension|mixed declension]]. Strong nouns (typically) form their genitive in ''-s'' and/or ''-es'' and do not form their plural by adding ''-n'' and/or ''-en''. In adjectives, the strong declension is a set of endings used when the adjective is not accompanied by a definite or indefinite article, and includes a fuller set of endings than that of the weak or mixed declensions (hence the name). Note that "strong", "weak" and "mixed" refer to inherent declensional properties of nouns, but all adjectives can be declined according to all three declensions, depending on whether an article precedes and what type of article it is. By analogy, the term "strong declension" is sometimes used in other inflected Germanic languages such as {{w|Icelandic}} and {{w|Old English}}. In these languages, adjectives are formed similarly to German but there is typically not a single strong noun declension. Rather, a strong noun is any noun that does not follow the weak declension.
; {{anchor|strong pronoun}} strong pronoun
: (''Greek'') An [[#emphatic|emphatic pronoun]].
; {{anchor|strong conjugation}}
; {{anchor|strong verb}} [[strong verb]] and strong conjugation
: In [[Germanic]] languages, a verb that displays [[#ablaut|ablaut]]. More specifically, a verb that has a change in [[#vowel|vowel]] between present and past. An English example is {{m|en|drink}}, {{m|en|drank}}, {{m|en|drunk}}. Note that some verbs show a vowel change, but not as a result of ablaut (e.g. {{m|en|think}}, {{m|en|thought}}); these are not considered strong verbs. Contrast [[#weak verb|weak verb]], [[#preterite-present verb|preterite-present verb]].
; {{anchor|subject}}[[subject]] {{nobold|{{wikipedia|subject (grammar)}}}}
: In a [[#clause|clause]]: the word or word group (usually a noun phrase) that is dealt with. In [[#active voice|active clauses]] with [[#verb|verbs]] denoting an action, the subject and the actor are usually the same. Contrast [[#object|object]].
; {{anchor|subjunctive}}{{anchor|subjunctive mood}}{{anchor|conjunctive}}[[subjunctive mood]]
: The [[#mood|mood]] of a [[#verb|verb]] expressing an action or state which is hypothetical or anticipated rather than actual, including wishes and commands. Some English examples are ''if I '''were''' rich'' and ''it’s important that he '''be''' here''.
; {{anchor|subordinate clause}}[[subordinate clause]]
: Same as [[#dependent clause|dependent clause]].
; {{anchor|substantive}}[[substantive]]
:# A noun or adjective (or phrase), that names a real object with ''substance''. This is in contrast to an [[#attributive|attributive]] noun or adjective, which names a real object that carries the ''attributes'' of the named noun or adjective.
:# In [[Mongolic]] languages, it sometimes refers to a single [[#part of speech|part of speech]] that collectively encompasses nouns, adjectives and adverbs, due to their shared morphological behaviour.
; substantivization
: ''See '''{{glossary|nominalization}}'''.''
; {{anchor|substratum}}{{anchor|substrate}}[[substratum]]
: A language [[#stratum|stratum]] which has lower cultural or political prestige than the one which it influences. Many historical '''substrate''' languages have gone extinct without ever having been attested, and so they must be inferred from their influences on surviving or attested languages. One such example is the [[Pre-Greek]] substratum.
; {{anchor|suffix}}{{anchor|suffixed}}[[suffix]]
: A [[morpheme]] added to the end of a word to modify its meaning.
; {{anchor|superlative}}[[superlative]]
: An [[#inflection|inflection]], or different form, of a '''[[#comparable|comparable]]''' adjective showing a relative quality, denoting "to the ultimate extent". (See also ''[[#comparative|comparative]]'' and ''[[#degrees of comparison|degrees of comparison]]''.) In English, the superlative form is often formed by appending ''-est'', or using the word ''most''. For example, the superlative of ''big'' is "''biggest''"; of ''confident'', "''most confident''".
; {{anchor|superseded}}[[supersede]]d
: Especially of a spelling, formerly standard, and still frequently encountered, but now deprecated in favor of another form as the result of a spelling reform. Examples in Portuguese: {{m|pt|idéia}} instead of {{m|pt|ideia}}, {{m|pt|freqüente}} instead of {{m|pt|frequente}}, {{m|pt|microondas}} instead of {{m|pt|micro-ondas}}, all replaced in the {{w|Portuguese Language Orthographic Agreement of 1990|1990 Orthographic Agreement}}, which was fully implemented only by 2015.
; {{anchor|superstratum}}{{anchor|superstrate}}[[superstratum]]
: A language [[#stratum|stratum]] which has higher cultural or political prestige than the one which it influences. One historical example is the '''superstrate''' effect of [[Old Norman]] French on late [[Old English]] in the centuries following the 11th-century [[w:Norman conquest of England|Norman conquest of England]].
; {{anchor|supine}}[[supine]]
: A term for an [[infinite]] verb form in some languages. In Latin, a type of [[#verbal noun|verbal noun]], used for the [[#ablative|ablative]] and [[#accusative|accusative]] case of an [[#infinitive|infinitive]]. In Swedish, a form related to the [[#past participle|past participle]], used to form [[#perfect|perfect]] tenses. In Slovene and Lower Sorbian, a form related to the infinitive, used to indicate purpose after a verb of movement.
; {{anchor|suppletion}}{{anchor|suppletive}}[[suppletion]], [[suppletive]]
: The situation in which the inflected forms of a word come from two or more unrelated roots: for example, {{m|en|go}} and {{m|en|went}}; {{m|en|be}}, {{m|en|is}}{{,}} and {{m|en|was}}. One or more of these forms, or the entire [[#paradigm|paradigm]] of the word, may then be called suppletive. Examples from various languages may be found from [[:Category:Suppletive verbs by language]].
; {{anchor|surface etymology}}{{anchor|surface analysis}}{{anchor|surface}}{{anchor|equivalent to}}[[surface analysis]], [[surface etymology]]
: The [[apparent]] etymology of a term by an [[analysis]] based on components occurring in the form of the language at a later point in time, i.e. that term's {{glossary|synchronic}} makeup: for example, the analysis {{m|en|earth}} + {{m|en|-en}} for {{m|en|earthen}}, which actually was inherited via Middle English from Old English, in which it occurred as {{m|ang|eorþen|eorthen}}.
; {{anchor|syllable}}[[syllable]]
: A unit of human speech that is interpreted by the listener as a single sound. (''See'' {{pedia|Syllable}})
; {{anchor|synchrony}}{{anchor|synchronic}}{{anchor|synchronically}}[[synchrony]] {{nobold|{{wikipedia|Diachrony_and_synchrony|Diachrony and synchrony}}}}
: The viewpoint of analysis of a language which considers only its state at one point (or period) in time, not accounting for historical language change or etymology (as opposed to {{glossary|diachrony}}). A purely '''synchronic''' analysis of a word or phrase (as e.g. from the intuition of a speaker of the language) which may differ from its true etymological derivation is termed a {{glossary|surface analysis}}.
; {{anchor|syncope}}{{anchor|syncopic}}{{anchor|syncopation}}{{anchor|syncopated}}[[syncope]]
: The deletion or elision of sounds inside a word (not at the beginning or end), most often a single [[#vowel|vowel]], but sometimes a [[#consonant|consonant]] or a sequence of vowels or consonants. Deletion at the beginning of a word is called [[#apheresis|apheresis]], at the end [[#apocope|apocope]].
; {{anchor|syncretism}}<!-- {{anchor|syncretic}} -->[[syncretism]]
: The situation in which two or more [[#inflection|inflected]] forms of a word are identical. For example, {{m+|en|walked}} is both the simple past and the past participle of {{m|en|walk}}, and {{m+|grc|ἄλλο}} is the neuter nominative, accusative{{,}} and vocative singular of {{m|grc|ἄλλος}}.<!-- Is the adjective syncretic used in this context? If so, how? -->
; {{anchor|synonym}}[[synonym]]
: A word or phrase with a meaning that is the same as, or very similar to, another word or phrase. Contrast [[#antonym|antonym]].
==T==
; {{anchor|tashif}}{{m|ar|صحف|تَصْحِيف}}
: When a copyist has set wrong points ([[i'jam|ʾiʿjām]]) upon the skeleton ([[rasm]]) of the (Arabic) script.
; {{anchor|tatpurusa}}[[tatpurusa]]
: Another term for a ''[[#determinative|determinative]] compound''. Contrast [[#bahuvrihi|bahuvrihi]], [[#karmadharaya|karmadharaya]] and [[#dvandva|dvandva]].
; {{anchor|tautology}}[[tautology]]
: Redundant use of words, a [[pleonasm]], an unnecessary and tedious repetition.
; {{anchor|tense}}[[tense]]
: One of the forms of a [[#verb|verb]], used to distinguish when an action or state of being occurs or exists. The basic tenses in many languages are [[#present tense|present]], [[#past tense|past]], [[#future tense|future]]. (''see'' {{pedia|Grammatical tense}})
; {{anchor|thematicization}}[[thematicization]]
: [[insertion|Insertion]] of a [[thematic vowel]] on the [[root]] or [[stem]] of the word to make it [[undergo]] one of the [[productive]] [[vocalic]] inflections.
; {{anchor|අන්ය පුරුෂ}}[[අන්ය පුරුෂ]], {{anchor|ප්රථම පුරුෂ}}[[ප්රථම පුරුෂ]]
: පහත දැක්වෙන [[#third person]] කොටස බලන්න.
; {{anchor|third person}}{{anchor|third-person}}[[third person]], {{anchor|3rd person}}[[3rd person]]
: A [[#person|grammatical person]] that indicates someone or something that is neither the person or group to which the speaker belongs, nor the person or group that the speaker is speaking to. Examples are the English pronouns {{m|en|he}}, {{m|en|she}}, {{m|en|it}}, {{m|en|this}}, {{m|en|that}}, and so on. All [[#noun|nouns]] are generally considered third person. In some languages (like German, Italian, Spanish, Portuguese, and Hungarian), the third-person conjugation is also used to express the formal ''you'' (sometimes combined with the plural and/or capitalizing the personal pronoun in writing).
; {{anchor|tmesis}}{{anchor|diacope}}[[tmesis]]
: The insertion of one or more words between the components of a [[#compound|compound]] word.
; {{anchor|tone}}[[tone]]
: The pitch of a given syllable in languages where changing the pitch changes the basic meaning of the word. In {{w|Mandarin Chinese}}, for example, the word pronounced /ma/ (like English {{m|en|ma}}), when pronounced with a high, level tone means "mother", but when pronounced with a rising tone means "bother", and when pronounced with a falling tone means "scold".
; {{anchor|toponym}}[[toponym]]
: A placename, or a word derived from one.
; {{anchor|topicalized}}[[topicalized]] form
: In some languages, such as Okinawan, a topicalized form of a word is a contraction of that word, used as the phrase [[topic]], with the topic marker.
; {{anchor|tr.}}{{anchor|tran.}}tr., tran.
: Translator or translated, often used in quotations.
; {{anchor|transferred sense}}[[transferred sense]], transf.
: A (usually [[#loosely|looser]]) meaning of a word or [[#phrase|phrase]] developed from a [[#metaphorical|metaphorical]] application of its original signification (for example, ''hunger'' has the primary and original sense “want of food”, “craving appetite”, whence developed the transferred sense of “any strong desire or craving”).
; {{anchor|transgressive}}[[transgressive]]
: A verb form in some Balto-Slavic languages that expresses a coincidentally proceeding or following action.
; {{anchor|සකර්මක}}[[සකර්මක]]
: පහත [[#transitive verb]] වෙත යොමු වන්න.
; {{anchor|transitive verb}}{{anchor|transitive}}[[transitive verb]]
: A verb which requires one or more [[#object|objects]] (e.g. ''I '''kick''' the ball''); contrast '''[[#intransitive verb|intransitive verb]]'''. (See also {{pedia|Transitivity (grammar)}})
; {{anchor|translation hub}}translation hub
: An English multi-word entry that is unidiomatic ([[WT:Glossary#S|sum of parts]]) and exists purely to host translations and enable navigation from one non-English entry to another non-English entry. An example: [[two days after tomorrow]]. See [[:Category:English translation hubs]] for more.
; {{anchor|transliteration}}[[Wiktionary:Transliteration|transliteration]]
: The conversion of text in one [[#script|script]] into an equivalent in another [[#script|script]], or an instance of text so converted (for example, ''Ševčenko'' and ''Shevchenko'' are transliterations of Ukrainian ''Шевченко'' from Cyrillic script to Latin script, according to two different systems). Transliteration is conducted on a letter-by-letter basis (contrasted with [[transcription]] which is converted on the basis of sounds). This may be extended to the conversion of [[#diacritic|diacritical]] marks into alternate forms without diacritical marks in the same script (e.g. Mörder → Moerder).
; {{anchor|transnumeral}}{{anchor|transnumeral number}}[[transnumeral]]
: A [[#number|grammatical number]] that is ambiguous as to whether it refers to the [[#singular|singular]] or [[#plural|plural]]. Found in [[Sino-Tibetan]] languages such as [[Chinese]] and [[Japanese]], as well as some [[Austronesian]] languages such as [[Indonesian]] and [[Malay]]. When a language also has a plural (or some other) number, they are commonly only used for clarity or emphasis.
; {{anchor|troponym}}[[troponym]]
: A verb that indicates more precisely the manner of doing something by replacing a verb of a more generalized meaning, e.g. “to boil” for “to cook”.
; {{anchor|twice-borrowed}}[[twice-borrowed]]
: Terms in one language that were borrowed from a second language that originally borrowed the term from the first language. (More at {{pedia|Reborrowing}})
==U==
; {{anchor|UK}}UK
: UK English, that is, the English of the [[United Kingdom]].
; {{anchor|umlaut}}[[umlaut]]
: A [[#sound change|sound change]] where a [[#vowel|vowel]] is modified to conform more closely to the vowel in the next [[#syllable|syllable]].
; {{anchor|unadapted borrowing}}{{anchor|Unadapted borrowing}}[[unadapted]] [[borrowing]]
: A [[#loanword|loanword]] that has not been conformed to the morpho-syntactic, phonological and/or phonotactical rules of the target language. For example, {{cog|en|cubiculum}} is an unadapted borrowing from {{cog|la|cubiculum}}, while {{cog|en|cubicle}} is a standard borrowing from the same Latin word.
; {{anchor|uncommon}}[[uncommon]]
: A term or sense that is attested but not used commonly either in spoken or written language, but more commonly than [[#rare|rare]] terms.
; {{anchor|uncomparable}}[[uncomparable]], not comparable
: (of adjectives) unable to be compared, or lacking a [[#comparative|comparative]] and [[#superlative|superlative]] function. ''See'' '''[[#comparable|comparable]]'''. Examples of adjectives that are not comparable: ''annual'', ''first'', ''extra'', ''satin'', ''six-figure''.
; {{anchor|uncountable}}{{anchor|Uncountable}}{{anchor|mass_noun}}[[uncountable]], uncountable noun, [[mass noun]]
: A noun that cannot be used freely with numbers or the [[indefinite article]], and which therefore usually takes no [[plural]] form. For example, the English noun {{m|en|information}} is a mass noun, and at least in its principal senses is uncountable in most varieties of English. For those senses, we cannot say that we have *''one information'', nor that we have *''many information'' (or *''many informations''). Many mass noun senses often have corresponding plural [[#countable|count]] senses that denote ''types'' of the mass sense, ''instances'' of the mass sense, or ''portions (servings)'' of the mass sense. For example, the main sense of {{m|en|butter}} is the uncountable sense, so the plural form ''butters'' is seldom used, although it occasionally is used to mean "types of butter" (''many [[herb butter]]s contain garlic'') or "[packets of] butter". Compare also other implicit references to a container and the portion/serving that it contains (''get me a water, order two sodas, have a few beers''). Many languages do not distinguish between countable and uncountable nouns. [[#antonym|Antonym]]: ''[[#countable|countable]]'', or ''count noun''.
; [[undeclinable]]
: ''See '''{{glossary|indeclinable}}'''.''
; {{anchor|univerbation}}{{anchor|Univerbation}}[[univerbation]]
: A single word formed from a fixed expression of several words. For example, the single word ''albeit'' comes from the Middle English expression ''al be it'', in which ''al'' means ''although''.
; {{anchor|usage notes}}usage notes
: Additional information on current and historic use of the term in written or spoken language.
==V==
; ''v''
: ''See '''{{glossary|verb}}'''.''
; {{anchor|var.}}{{anchor|varia lectio}}{{anchor|variae lectiones}}{{anchor|variant reading}}{{anchor|variant}}[[varia lectio]], [[variant reading]], [[variant]]
: Any one of the readings of a given word or passage in a text which differ from copy to copy, from edition to edition, from manuscript to manuscript, or from translation to translation.
; {{anchor|velar}}[[velar]]
: A [[#consonant|consonant]] made with the tongue touching the [[soft palate]] (also known as the [[velum]]). In English these include {{IPAchar|/k/}}, {{IPAchar|/ɡ/}}, {{IPAchar|/ŋ/}}, as in the final consonants of ''sack'', ''sag'', and ''sang'', respectively.
; {{anchor|verb}}{{anchor|verbs}}[[verb]]
: A word that indicates an action, occurrence or state of being. The [[#inflection|inflection]] of verbs is commonly called [[#conjugation|conjugation]].
; {{anchor|verbal noun}}[[verbal noun]]
: A [[noun]] formed from a [[verb]].
; {{anchor|verlan}}[[verlan]]
: A type of [[#backslang|backslang]] used in French, in which the order of the [[#syllable|syllables]] or sounds of words is changed, usually with the last [[#syllable|syllable]] coming first. Examples are {{m|fr|barjot}} from {{m|fr|jobard||crazy}} and {{m|fr|meuf}} from {{m|fr|femme||woman}}. Sometimes this transformation is applied recursively, e.g. {{m|fr|beuteu}}, a verlan form of {{m|fr|teub}}, which is itself a clipped verlan form of {{m|fr|bite||dick}}.
; {{anchor|virile}}[[virile]]
: In Slavic languages, a plural [[#gender|gender]] used for groups that include men and for [[#masculine|masculine]] personal nouns.
; {{anchor|අලප්}}{{anchor|අලප් විබත්}}{{anchor|vocative}}{{anchor|vocative case}} [[අලප් විබත්]] ([[vocative case]])
: A [[#case|case]] which indicates that someone or something is being directly addressed (spoken to), often by name. For example, in the English phrase ''He's dead, Jim'' the name {{m|en|Jim}} would be a vocative.
; {{anchor|voice}}[[voice]]
: A verb characteristic (expressed in some languages by inflection) indicating its relationship with the subject. The usual voices are: [[#active voice|active]], [[#passive voice|passive]] and [[#middle voice|middle]]. (See also {{pedia|Voice (grammar)}}.)
; {{anchor|voiced}}[[voiced]]
: A sound produced with vibration of the [[vocal cord]]s; a type of [[#voicing|voicing]].
; {{anchor|voiceless}}[[voiceless]]
: A sound produced without vibration of the [[vocal cord]]s; a type of [[#voicing|voicing]].
; {{anchor|voicing}}[[voicing]]
: A characteristic of sounds, indicating whether they are produced with vibration of the [[vocal cord]]s. In English, all [[#vowel|vowels]] are voiced, as well as all [[#approximant|approximant]] consonants, but [[#plosive|plosive]] and [[#fricative|fricative]] consonants can be either voiced or voiceless. Examples of voiced sounds in English are {{IPAchar|/v/}}, {{IPAchar|/z/}}, {{IPAchar|/b/}}, {{IPAchar|/d/}}, and the corresponding voiceless sounds are {{IPAchar|/f/}}, {{IPAchar|/s/}}, {{IPAchar|/p/}}, {{IPAchar|/t/}}. Whispering is a type of speech production in which all sounds are pronounced voiceless.
; {{anchor|vowel}}[[vowel]]
: A sound produced by the vocal cords with relatively little restriction of the oral cavity, forming the prominent sound of a [[#syllable|syllable]].
; {{anchor|vulgar}}[[vulgar]]
: Language considered distasteful or obscene.
: See also: '''{{glossary|offensive}}''', '''{{glossary|pejorative}}'''.
==W==
; {{anchor|wanderwort}}{{anchor|wanderword}}[[Wanderwort]] or [[wanderword]]
: A wordform which has spread over a substantial area, or to many regions, outside of that of its language of origin, typically due to cultural exchange resulting from travel and trade. Wanderworts are a type of [[#loanword|loanword]], but a Wanderwort may or may not be an {{glossary|areal}} word. See also ''{{glossary|Kulturwort}}''. Contrast [[#stratum|strata]].
; {{anchor|weak declension}}{{l|en|weak declension}}
: A declension of adjectives and nouns in several {{w|Germanic languages}}, which originally had (and in some languages still have) an ''-n-'' in most of their forms. The weak adjective declension is used in conjunction with [[#definite|definite]] [[#article|article]]s. The weak noun declension is simply one of several possible noun declensions, so-named because it uses the same endings as weak adjectives. See the Wikipedia article on the {{w|weak inflection}} for more information.
; {{anchor|weak pronoun}}{{anchor|weak_pronoun}}{{l|en|weak pronoun}}
: A pronoun of one syllable which is dependent on another word and cannot be used on its own; sometimes called ''[[#clitic|clitic]]''. Compare with [[#emphatic|emphatic]] or [[#strong verb|strong]].
; {{anchor|weak verb}}[[weak verb]]
: In [[Germanic]] languages, a verb that forms the past tense using a suffix containing a [[dental]] consonant (''d'', ''t'', ''ð'' or similar). Verbs of this type are considered "regular" in most Germanic languages, but there are also irregular weak verbs, such as English {{m|en|think}}, {{m|en|thought}} and {{m|en|have}}, {{m|en|had}}. Contrast [[#strong verb|strong verb]], [[#preterite-present verb|preterite-present verb]].
; {{anchor|WMF}}WMF
: Wikimedia Foundation, Inc., the parent organization of Wiktionary and other projects.
; {{anchor|women's speech}}[[women]]'s [[speech]]
: In certain languages (for example, {{w|Karajá language}}), men and women use or historically used distinct words and inflected forms.
==X==
; {{anchor|X-SAMPA}}[[X-SAMPA]]
: [[w:X-SAMPA|Extended SAMPA]], a system for representing the full [[International Phonetic Alphabet]] (IPA) in plain text ([[ASCII]]). For a template that converts X-SAMPA to IPA, see {{temp|x2i}}.
==Y==
==Z==
; {{anchor|zero-grade}}{{anchor|zero grade}}[[zero-grade]]
: In [[Proto-Indo-European]] [[linguistics]], an [[ablaut]] form of a root characterized by the absence of the basic ablauting [[#vowel|vowel]] [[#phoneme|phonemes]] */e/ and */o/. For example, {{m|ine-pro||*bʰr̥-}} is the '''zero-grade''' of the Indo-European root {{m|ine-pro|*bʰer-}} meaning ‘to carry, bear’.
[[ප්රවර්ගය:වික්ෂනරි මූලාශ්ර|Glossary]]
[[en:Appendix:Glossary]]
37k20xmv8xsts1wdju3o513vr24rdqs
235380
235337
2026-06-02T03:37:56Z
Lee
19
/* A */
235380
wikitext
text/x-wiki
'''A glossary of terms used in the body of this dictionary.''' See also ''[[Wiktionary:Glossary]]'', which contains terms used elsewhere in the Wiktionary community, and ''[[Appendix:Glossary of rhetoric]]'', which explains commonly used [[#rhetoric|rhetorical]] terms.
{{compactTOC|num=yes}}
==0–9==
; 1st person
: ''See '''{{glossary|first person}}'''.''
; 2nd person
: ''See '''{{glossary|second person}}'''.''
; 3rd person
: ''See '''{{glossary|third person}}'''.''
==Symbols==
; *
: An [[asterisk#Noun|asterisk]] appearing before a term (an affix, a root, a word, etc.), indicates the term is not attested but reconstructed; for example, {{m|ine-pro|*werdʰh₁om}} is the reconstructed Proto-Indo-European word for ''word''.
; [ ]
: [[bracket#Noun|Brackets]] surrounding a quotation indicate that the quotation either contains a mere mention of a term (for example, "some people find the word '''''manoeuvre''''' hard to spell") rather than an actual use of it (for example, "we need to '''manoeuvre''' carefully to avoid causing upset"), or does not provide an actual instance of a term but provides information about a related term.
; †
: In a Chinese entry, a [[dagger#Noun|dagger]] indicates that a sense is obsolete in Modern Standard Chinese, though it may be preserved in fossilized compounds and expressions or other varieties of Chinese.
==අ==
; {{anchor|අනතීත}}{{anchor|අනතීත}}[[අනතීත]]
: වර්තමාන-අනාගත
==A==
; {{anchor|a.}}[[a]].
: "[[ante|Ante]]" (Latin for "before"). Hence, a quotation from "''a.'' 1924" is a quotation from no later than the year 1923.
; {{anchor|abbreviation}}[[abbreviation]]
: A shortened form of a word or phrase, such as an [[#initialism|initialism]], [[#acronym|acronym]], or [[#clipping|clipping]].
; {{anchor|අවදි}}{{anchor|අවදි විබත්}}{{anchor|ablative case}}{{anchor|ablative}} [[අවදි විබත්]] ([[ablative case]])
: A [[#case|case]] that indicates separation, or moving away from something. It is used alone or with certain [[#preposition|prepositions]]. For example, if English had a fully [[#productive|productive]] case system that included the ablative case, then in the phrase ''came from the city'', either "the city" or "from the city" would likely be in the ablative. In some languages, such as Latin, this case has acquired many other uses and does not strictly indicate separation anymore.
; {{anchor|ablaut}}{{anchor|grade}}[[ablaut]]
: In [[Proto-Indo-European]], or any of its descendants (the [[Indo-European]] languages), a system of [[#vowel|vowel]] alternation in which the vowels that are used in various parts of the word can change depending on meaning. The system is used for purposes of [[#inflection|inflection]] and word derivation. In the Germanic languages, it forms the basis of the [[#strong verb|strong verbs]]. A specific form of ablaut is referred to as a '''grade'''; see for instance [[#zero-grade|zero-grade]]. (More at {{pedia|Indo-European ablaut}})
; {{anchor|absolutive}}{{anchor|absolutive case}}[[absolutive case]]
: A [[#case|case]] used to indicate the [[patient#Noun|patient]] or [[experiencer]] of a [[#verb|verb]]'s action.
; {{anchor|abstract noun}}[[abstract noun]]
: A [[#noun|noun]] that denotes an idea, emotion, feeling, quality or other abstract or intangible concept, as opposed to a concrete item, or a physical object. [[#antonym|Antonym]] of [[#concrete noun|concrete noun]].
; {{anchor|abstract verb}}{{anchor|abstract}}[[abstract verb]]
: In the {{w|Slavic languages}}, a verb of motion whose motion is multidirectional (as opposed to unidirectional) or indirect, or whose action is repeated or in a series ([[#iterative|iterative]]). Also called an [[#indeterminate verb|indeterminate verb]]. The opposite type of verb, which expresses a single, completed action, is termed a [[#concrete verb|concrete verb]] (or a [[#determinate verb|determinate verb]]). Motion verbs in the {{w|Slavic languages}} come in abstract/concrete lexical pairs, e.g. {{cog|ru|ходи́ть||to [[go]] (abstract)}} vs. {{m|ru|идти́||to [[go]] (concrete)}}, {{m|ru|бе́гать||to run (abstract)}} vs. {{m|ru|бежа́ть||to run (concrete)}}, {{m|ru|носи́ть||to carry (abstract)}} vs. {{m|ru|нести́||to carry (concrete)}}. English does not make this distinction. For example, "I went to the post office" could be abstract (if I went there and came back, i.e. multidirectional) or concrete (if I am there now, i.e. unidirectional), and different Russian verbs would be used to translate "went" in these two circumstances. In Polish coming back does not cause abstract verbs to be used, only doing something many times (''Chodzę do biura.'' 'I go to the office (every day).' vs. ''Idę do biura'' 'I am going to the office (now).') or moving without target (''Chodzę po pokoju'' 'I am walking around the room.' vs. ''Idę przez pokój.'' 'I am walking across the room.') does. Abstract verbs are always [[#imperfective aspect|imperfective]] in {{glossary|aspect}}, even with prefixes that are normally associated with the [[#perfective aspect|perfective aspect]] (e.g. Polish ''przybiegać'').
; {{anchor|accusative case}}{{anchor|accusative}}{{anchor|acc.}}[[accusative case]], acc.
: A [[#case|case]] that is usually used as the [[#direct object|direct object]] of a [[#verb|verb]]. For example, if English had a fully [[#productive|productive]] case system, then ''ball'' in "The man threw the ball" would most likely be in the accusative.
; {{anchor|acronym}}[[acronym]]
: An [[#abbreviation|abbreviation]] that is pronounced as the “word” it would spell, such as ''[[NATO]]''.
; {{anchor|active}}{{anchor|active voice}}[[active voice]]
: The [[#voice|voice]] verb form in which the grammatical [[#subject|subject]] is the person or thing doing the action ([[cf.]] [[#passive voice|passive voice]]), e.g. ''The boy kicked the ball.'' (See also {{pedia|Voice (grammar)}})
; {{anchor|acute}}{{anchor|acute accent}}[[acute accent]]
: A [[#diacritic|diacritic]] mark ( ´ ) used that can be placed above a number of letters in many languages of the Latin, Greek and Cyrillic writing systems.
; {{anchor|AD}}[[AD]]
: Anno Domini. Year-numbering system equivalent to [[CE]].
; ''adj''
: ''See '''{{glossary|adjective}}'''.''
; {{anchor|adjective}}[[adjective]]
: A word like {{m|en|big}} or {{m|en|childish}} that usually serves to modify a [[#noun|noun]].
; {{anchor|adverb}}[[adverb]]
: A word like {{m|en|very}}, {{m|en|wickedly}} or {{m|en|often}} that usually serves to modify an [[#adjective|adjective]], [[#verb|verb]], or other adverb.<!-- Compare ''{{glossary|modifier}}''. -->
; {{anchor|adverbial}}[[adverbial]]
: Relating to an [[#adverb|adverb]]. For example, an ''adverbial participle'' is a [[#participle|participle]] that functions like an adverb in a sentence.
; {{anchor|adverbial clause}}[[adverbial clause]]
: A type of [[#dependent clause|dependent clause]] that modifies a verb in an [[#adverbial|adverbial]] fashion. Examples are '''''When my friend arrives''', I will take him out to dinner'' and '''''If it rains''', I will go home'' (the latter example being specifically a ''conditional clause'').
; {{anchor|affix}}{{anchor|af}}{{anchor|agent nouns}}[[affix]]
: A [[bound morpheme]] added to a word’s stem; a [[prefix]], [[suffix]], [[interfix]], etc. In the narrow sense, {{syn of|und|#suffix|suffix|nocap=1}}.
; {{anchor|agentive}}{{anchor|agent noun}}{{anchor|agent nouns}}[[agent noun]]
: A noun that denotes an agent who does the action denoted by the verb from which the noun is derived, such as "cutter" derived from "to cut".
; {{anchor|AHD}}AHD
: The ''[[w:American Heritage Dictionary|American Heritage Dictionary]]''. For historical reasons, this abbreviation is sometimes used here to identify a respelled pronunciation that is given in [[#enPR|enPR]] form.
; {{anchor|alternative form}}Alternative form
: A word etymologically related but varying somehow to another.
; {{anchor|ambitransitive verb}}{{anchor|ambitransitive}}[[ambitransitive verb]]
: Capable of being either {{glossary|transitive}} or {{glossary|intransitive}} depending on usage. For instance, {{m|en|eat}} and {{m|en|read}} optionally take a [[#direct object|direct object]]: "I eat daily", "She likes to read" (both intransitive), "Read this book", "I do not eat meat" (both transitive). [[#ergative verb|Ergative verbs]] (q.v.) are a kind of ambitransitive verb.
; {{anchor|anglicisation}}{{anchor|anglicization}}{{anchor|anglicised}}{{anchor|anglicized}}[[anglicisation]], [[anglicization]]
: The modification of a foreign ([[#loanword|borrowed]]) word to make it more English in form.
; {{anchor|angry register}}[[angry]] [[#register|register]]
: Belonging to the angry linguistic [[#register|register]], used only when the speaker is angry. This register is quite rare, but is found in the {{w|Bikol languages}} of the central Philippines.
; {{anchor|animate}}{{anchor|animacy}}[[animate]]
: Having a [[referent]] that includes a human or animal. Many languages (such as the {{w|Slavic languages}}) classify nouns based on animacy, using different [[#inflection|inflection]]s or words with animate and inanimate nouns. (See also {{pedia|Animacy}})
; {{anchor|antepenultima}}{{anchor|antepenultimate}}{{anchor|antepenult}}[[antepenultima]]
: The third-to-last [[#syllable|syllable]] of a word, before the [[#penultima|penultima]].
; {{anchor|antonym}}{{anchor|antonymous}}[[antonym]]
: A word with a meaning that is the opposite of a meaning of another word. For example, {{m|en|good}} is an antonym of {{m|en|bad}}. Contrast [[#synonym|synonym]].
; {{anchor|aorist}}{{anchor|aorist tense}}[[aorist]]
: A grammatical category of [[#verb|verbs]] that is often a [[#perfective|perfective]] past. (See also {{pedia|aorist}})
; {{anchor|apheresis}}{{anchor|apheretic}}{{anchor|aphaeresis}}{{anchor|aphaeretic}}[[apheresis]]
: The removal of a letter or sound from the beginning of a word.
; {{anchor|aphesis}}{{anchor|aphetic}}[[aphesis]]
: The removal of an initial unstressed sound from a word, the process by which {{m|en|escarp}} became {{m|en|scarp}}. Words derived in this way are called aphetic.
; {{anchor|apocopic}}{{anchor|apocope}}{{anchor|apocopate}}{{anchor|apocopated}}{{anchor|apocopation}}[[apocope]]
: Omission of the final sound or syllable of a word without changing its morphological structure or meaning. Occurs in Italian, Spanish, and other languages.
; {{anchor|approximant}}[[approximant]]
: A [[#consonant|consonant]] sound produced by restricting the air flow through the mouth only slightly, resulting in a smooth sound. In English, the approximants are {{IPAchar|/l/}}, {{IPAchar|/ɹ/}}, {{IPAchar|/w/}}, {{IPAchar|/j/}} (as in the initial sounds of ''loo'', ''rue'', ''woo'' and ''you''). Approximants are distinguished from [[#fricative|fricative]]s, in which the air is constricted enough to cause a rough, hissing or buzzing sound, and [[#plosive|plosive]]s, in which the air is blocked completely for a short period of time.
; {{anchor|පෞරාණික}}{{anchor|archaic}}{{anchor|archaism}}[[පෞරාණික]], [[archaic]]
: No longer in general use, but still found in some contemporary texts that aim for an antique style, like historical novels. For example, {{m|en|thee}} and {{m|en|thou}} are archaic pronouns, having been completely superseded by {{m|en|you}}.<!--Sometimes understood by educated people, but rarely used in current texts or speech.--> ''Archaic'' is a stronger term than ''[[#dated|dated]]'', but not as strong as ''[[#obsolete|obsolete]]''. (See [[Wiktionary:Obsolete and archaic terms]].) Whereas an archaic term names a still-extant thing or non-outdated concept, a [[#historical|historical]] term names a former thing or outdated concept.
; {{anchor|areal}}{{anchor|areal feature}}[[areal]] {{nobold|{{wikipedia|Areal feature}}}}
: Distributed across multiple languages inhabiting a particular area, due to [[w:language contact|language contact]] among them rather than due to [[inheritance]] from a common ancestor. The term can be applied either to words (see ''{{glossary|loanword}}'') or features of languages such as in [[w:grammar|grammar]], [[w:morphology|morphology]], and [[w:phonology|phonology]]. See also ''{{glossary|Wanderwort}}'' and ''{{glossary|stratum}}''.
; {{anchor|article}}[[article]]
: A type of [[#determiner|determiner]] that is used as a grammatical indicator in some languages, and is usually central to the grammar and syntax of that language. In English, the articles are the [[#definite|definite]] article {{m|en|the}}, and the [[#indefinite|indefinite]] articles {{m|en|a}} and {{m|en|an}}. Some languages may have more articles, such as the French [[#partitive|partitive]] articles {{m|fr|du}}, {{m|fr|de la}} and {{m|fr|des}}, while many languages lack articles altogether.
; {{anchor|aspect}}[[aspect]] {{nobold|{{wikipedia|Grammatical aspect}}}}
: A property of a verb form indicating the nature of an action as [[#perfective|perfective]] (complete) or [[#imperfective|imperfective]] (incomplete or continuing).
; {{anchor|aspirated_h}}[[aspirated h]]
: In French, an initial ⟨h⟩ that is treated as a [[#consonant|consonant]]; that is to say, [[liaison]] and [[elision]] are not permitted at the beginning of a word with an aspirated ⟨h⟩.
; {{anchor|assimilation}}{{anchor|assimilate}}{{anchor|assimilated}}[[assimilation]] {{nobold|{{wikipedia|Assimilation (phonology)}}}}
: Assimilation is a common phonological process by which one sound becomes more like a nearby sound. This can occur either within a word or between words. See also ''{{glossary|dissimilation}}''.
; {{anchor|attributive}}{{anchor|attributively}}[[attributive]]
:# An adjective that stands in a syntactic position where it directly modifies a noun, as opposed to a [[#predicative|predicative]] adjective, which stands in a [[#predicate|predicate]] position but which modifies the [[#subject|subject]] of the [[#clause|clause]]. For example, in ''the big green house'', ''big'' and ''green'' are attributive adjectives, whereas in ''The house is big and green'', ''big'' and ''green'' are predicative adjectives. Some adjectives are only-attributive like {{m|en|close#Adjective}} (in ''a close friend'') or {{m|en|plain}} (in ''plain nonsense'').
:# A noun or adjective (or phrase) that names a real object with the ''attributes'' of another real object. This is in contrast to a [[#substantive|substantive]] noun or adjective, which names a real object that is the actual ''substance'' named by the noun or adjective.
; {{anchor|augment}}{{anchor|augmented}}[[augment]] {{nobold|{{wikipedia|Augment (linguistics)}}}}
: In some Indo-European languages, a prefixed [[#vowel|vowel]] (usually '''e-'''; '''έ''' or '''ή''' in Greek, '''a-''' in Sanskrit) indicating a past tense in a verb.
; {{anchor|augmentative}}[[augmentative]]
: A word form expressing large size, importance, intensity, or seniority.
; {{anchor|auxiliary verb}}[[auxiliary verb]] or {{anchor|auxiliary}}[[auxiliary]]
: A verb that accompanies another verb in a clause. It is used to indicate distinctions in {{glossary|tense}}, {{glossary|mood}}, {{glossary|voice}}, {{glossary|aspect}} or other grammatical nuances. English examples are {{m|en|can}}, {{m|en|will}}, {{m|en|have}}, {{m|en|be}}.
; {{anchor|avoidance}}[[avoidance]] term
: A word standardly used to replace a [[taboo]] word. (See also {{pedia|Naming taboo}})
==B==
; {{anchor|back-formation}}[[back-formation]]
: A term formed by removing an apparent or real prefix or suffix from an older term; for example, the noun {{m|en|pea}} arose because the final {{IPAchar|/z/}} sound in {{m|en|pease}} sounded like a plural suffix. Similarly, the verb {{m|en|edit}} is a back-formation from the earlier noun {{m|en|editor}}. Not to be confused with [[#clipping|clipping]], which just shortens a word without changing meaning or part of speech.
; {{anchor|back vowel}} [[back vowel]]
: Vowel sound produced in the back of the mouth. Examples in English include /uː/ in {{l|en|rule}} or /əʊ/ in {{l|en|pole}}. Contrasts to a [[#front vowel|front vowel]].
; {{anchor|backronym}}[[backronym]]
: A word that is either not an [[#acronym|acronym]] but is taken to be one and for which a full form is invented by [[#back-formation|back-formation]], or is an acronym and for which an alternative full form is invented by back-formation.
; {{anchor|backslang}}[[backslang]]
: A form of [[#slang|slang]] in which the spelling of words is reversed.
; {{anchor|bahuvrihi}}[[bahuvrihi]]
: Another term for an ''[[#exocentric|exocentric]] compound''. Contrast [[#tatpurusa|tatpurusa]], [[#karmadharaya|karmadharaya]] and [[#dvandva|dvandva]].
; {{anchor|barytone}}[[barytone]]
: With the stress elsewhere than upon the final syllable. Compare with [[#oxytone|oxytone]], [[#paroxytone|paroxytone]], and [[#proparoxytone|proparoxytone]].
; {{anchor|BC}}[[BC]]
: Before Christ. Year-numbering system equivalent to [[#BCE|BCE]].
; {{anchor|BCE}}[[BCE]]
: Before the Common, Current or Christian Era. Year-numbering system equivalent to [[BC]]. [[AD]] is expressed as [[#CE|CE]]. To automatically switch most dates to use the "BC"/"AD" style, visit [[WT:Per-browser preferences]].
; {{anchor|blend}}[[blend]]
: A word or name that combines two words, typically starting with the start of one word and ending with the end of another, such as {{m|en|smog}} (from {{m|en|smoke}} and {{m|en|fog}}) or {{m|en||Wiktionary}} (from {{m|en|wiki}} and {{m|en|dictionary}}). Many blends are [[#portmanteau|portmanteaus]].
; {{anchor|bowdlerization}}[[bowdlerize|bowdleriz]]ation
: The removal, from a text, of words or phrases that are considered offensive or vulgar.
; {{anchor|broadly}}{{anchor|broad}}[[broadly]]
: Indicates a less precise (wider) use of words; short for ''broadly speaking''. For most practical purposes, synonymous with ''[[#loosely|loosely]]''<!--because the differentiable nuance whereby "loosely" can sometimes imply some degree of prescriptive deprecation, whereas "broadly" less often and less strongly does so, is beyond-scope for this glossary; that is, for this glossary's purposes, "broadly" and "loosely" are interchangeable in practice-->. Contrast ''[[#strict|strict]]'' (''narrow'') senses.
==C==
; {{g|c}}
: ''See '''{{glossary|common gender}}'''.''
; {{anchor|c.}}{{anchor|ca.}}c., ca.
: "[[circa|Circa]]" ("about"). Hence, a quotation from "c. 1924" or "ca. 1924" is a quotation from approximately 1924.
; {{anchor|calque}}{{anchor|loan translation}}{{anchor|calqued}}[[calque]]
: A borrowing by word-for-word translation: a [[loan translation]]. For example, the English expression ''[[it goes without saying]]'' is a calque (a literal, word-for-word translation) of {{m+|fr|ça va sans dire}}, and ''[[flea market]]'' is a calque of {{m+|fr|marché aux puces|lit=[[market]] with [[flea]]s}}. Contrariwise, the term ''[[skyscraper]]'' was calqued into French as {{m|fr|gratte-ciel|lit=scrapes-sky}}. A semantic calque, also known as [[#semantic loan|semantic loan]], works similarly but does not create new terms. (''see'' {{pedia|Calque}})
; {{anchor|case}}[[case]]
: One of the forms of a noun, used to indicate its function in the phrase or sentence. Examples include: [[#nominative case|nominative]], [[#accusative case|accusative]], [[#genitive case|genitive]], [[#dative case|dative]].
; cat.
: Abbreviation for {{m|en|category}}.
: Without the period, the [[w:ISO 639-3|ISO 639-3]] code for the Catalan language.
; {{anchor|category}}[[category]]
: A collection of entries, used to categorize or group entries of words that are similar in syntax (for example, English plural nouns) or in sense (for example, English words pertaining to sports); ''see'' [[Wiktionary:Categorization]].
; {{anchor|catenative}}{{anchor|catenative verb}}[[catenative]] verb
: A [[#verb|verb]] able to be immediately followed by the full or bare [[#infinitive|infinitive]], or [[#gerund|gerund]] (i.e. non-finite verbs).
: → [[Appendix:English catenative verbs]]
; {{anchor|causative}}{{anchor|causative verb}}[[causative]] verb
: A transitive verb that is derived from another verb, and expresses the act of making someone/something do the action of the base verb. Examples in English are: {{m|en|lay}} (cause to {{m|en|lie}}), {{m|en|set}} (cause to {{m|en|sit}}) and {{m|en|raise}} (cause to {{m|en|rise}}). Compare '''[[#factitive|factitive verb]]s''' (e.g. {{m|en|shorten}}, {{m|en|enslave}}), which are similar but are derived from adjectives or nouns.
; {{anchor|CE}}[[CE]]
: Common, Current or Christian Era. Year-numbering system equivalent to [[AD]]. To automatically switch most dates to use the "BC"/"AD" style, visit [[WT:Per-browser preferences]].
; {{anchor|cf.}}[[cf.]]
: "Confer"; "see"; "compare" – often used to indicate a word with similar, or opposite meaning.
; {{anchor|circumlocutory}}[[circumlocutory]]
: Refers to a roundabout or indirect way of speaking; the use of more words than necessary to express an idea.
; {{anchor|CJKV}}{{anchor|CJKV}}[[CJK]], [[CJKV]]
: Chinese, Japanese, Korean{{,}} (and Vietnamese); [[w:CJK characters|CJK characters]].
; {{anchor|classifier}}[[classifier]]
: See [[#counter|counter]].
; {{anchor|clause}}[[clause]]
: A word or group of words that functions as a single unit in the [[#syntax|syntax]] of a [[#sentence|sentence]], where the [[#head|head]] (or central) word is a [[#verb|verb]]; normally distinguished from a [[#phrase|phrase]], which is a similar unit where the head word is some other [[#part of speech|part of speech]], such as a [[#noun|noun]], [[#adjective|adjective]] or [[#preposition|preposition]]. For example, the [[#sentence|sentence]] ''The man entered the house, which was large and blue'' contains two clauses, the [[#independent clause|independent clause]] ''The man entered the house'' and the [[#dependent clause|dependent clause]] ''which was large and blue'' (here the dependent clause is specifically a [[#relative clause|relative clause]], although not all dependent clauses are relative clauses).
; {{anchor|ක්ලිප් කිරීම්}}{{anchor|clipping}} [[ක්ලිප් කිරීම්]] ([[clipping]])
: A shortening of a word, without changing meaning or part of speech. Not to be confused with [[#back-formation|back-formation]], which changes meaning, or [[#ellipsis|ellipsis]], which shortens by omission of whole words. Also differs from [[#abbreviation|abbreviation]], which shortens the written—rather than spoken—form of a word or phrase. See also ''[[#apheresis|apheresis]]'', ''[[#apocope|apocope]]''.
: → {{pedia|Clipping (morphology)}}
; {{anchor|clitic}}[[clitic]]
: A word that attaches to a phrase and cannot be used on its own, such as English ''[['s|-'s]]''. Many languages have clitic [[#pronouns|pronouns]] ([[#weak_pronoun|weak pronouns]]), which may be contrasted with [[#emphatic|emphatic]] or [[#strong|strong]] pronouns; for example, English ''[['em]]'' is a clitic version of ''[[them]]'', and always attaches to the preceding word (usually the [[#verb|verb]]).
; {{anchor|cognate}}[[cognate]]
: [[descend|Descended]] from the same source [[#lexeme|lexeme]] of an [[ancestor]] language.
; {{anchor|coinage}}{{anchor|coined}}[[coinage]]
: A new word intentionally created with a definite meaning.
; {{anchor|collective}}{{anchor|collectively}}{{anchor|collective noun}}[[collective]]
: Expressing a collection or aggregate of individuals by a [[#singular|singular]] form.
: → [[:Category:Collective nouns by language]]<!-- lb collective, collectively -->
; {{anchor|colloquial}}[[colloquial]]
: Denotes words belonging to a spoken or vernacular variety of a language. These words are only properly used in a casual or familiar context. This label is only used with some languages; with others it is treated as a synonym of ''[[#informal|informal]]''. If used, ''colloquial'' is stronger than ''informal'' (a general rule of thumb is that informal words may be used in the running text of a newspaper article, while a colloquial term would likely not appear without quotation marks).
: '''Note:''' It is a common misconception that ''colloquial'' somehow denotes "local" or a word being "[[#regional|regional]]". This is incorrect; the word root for ''colloquial'' is related to {{m|en|locution}}, not {{m|en|location}}.
; {{anchor|c}}{{anchor|common}}{{anchor|common gender}} [[common gender]], {{g|c}}
: "Of common [[#gender|gender]]". Some languages have a distinct common gender that combines [[#masculine|masculine]] and [[#feminine|feminine]] but is distinguished from [[#neuter|neuter]]. In other languages, a "noun of common gender" is a pair of nouns, one masculine and one feminine, that are identical in form, and that have the same sense except that one refers to men and the other to women. Distinguish [[#epicene|epicene]].
; {{anchor|comparable}}[[comparable]]
: Of an adjective or adverb: able to be compared, having [[#comparative|comparative]] and [[#superlative|superlative]] forms that end in ''-er'' and ''-est'' (adjectives only), or in conjunction with the words ''more'' or ''most'', or sometimes ''further'' or ''furthest''. Examples: ''big'', ''bigger'', and ''biggest''; ''talented'', ''more talented'', and ''most talented''; ''upstairs'', ''further upstairs'', and ''furthest upstairs''. Some adjectives are truly '''[[#uncomparable|uncomparable]]''', such as ''daily'', ''additional'', and ''else''. Many other adjectives, such as ''unique'', ''existential'', and ''bearable'' are generally considered uncomparable, but controversially so, where examples can be readily cited of something being "''more bearable''" or "''most perfect''".
; {{anchor|comparative}}[[comparative]]
: An [[#inflection|inflection]], or different form, of a '''[[#comparable|comparable]]''' adjective showing a relative quality, usually denoting "to a greater extent" but not "to the ultimate extent". (See also ''[[#superlative|superlative]]'' and ''[[#degrees of comparison|degrees of comparison]]''.) In English, the ''comparative'' form is usually formed by appending ''-er'', or using the word ''more''. For example, the comparative of ''hard'' is "''harder''"; of ''difficult'', "''more difficult''".
; {{anchor|compound}}[[compound]]
: A word or name that combines two or more words without altering them, such as ''[[dishcloth]]'' (from ''[[dish]]'' and ''[[cloth]]'') or ''[[keyboard]]'' (from ''[[key]]'' and ''[[board]]''). Compound terms are indicated in etymologies using {{temp|compound}}. (See also ''[[WT:ETY#Compound]]''.)
; {{anchor|concrete noun}}[[concrete noun]]
: A [[#noun|noun]] that denotes something tangible or material, such as a person or place. [[#antonym|Antonym]] of [[#abstract noun|abstract noun]].
; {{anchor|concrete verb}}{{anchor|concrete}}[[concrete verb]]
: In the {{w|Slavic languages}}, a verb of motion whose motion is unidirectional and expresses a single, completed action. Opposed to [[#abstract verb|abstract verbs]], whose motion is multidirectional or indirect, or whose action is repeated or in a series ([[#iterative|iterative]]). Also called a [[#determinate verb|determinate verb]]. See ''[[#abstract verb|abstract verb]]'' for more discussion.
; {{anchor|conditional}}{{anchor|conditional mood}}[[conditional mood]]
: The [[#mood|mood]] of a [[#verb|verb]] used to signify that something is [[contingent]] upon the outcome of something else. The conditional mood in English is normally introduced by the word ''would'', as in ''If I were rich, I would be happy''.
; {{anchor|conjugation}}[[conjugation]]
: The [[#inflection|inflection]] of [[#verb|verb]]s. See also ''[[#declension|declension]]''.
; {{anchor|conjunction}}[[conjunction]]
: A word used to join other words or phrases together into sentences.
; {{anchor|connegative}}[[connegative]]
: A [[verb]] form used with the [[#negative verb|negative verb]].
; {{anchor|consonant}}[[consonant]]
: Any sound that is not the dominant sound of a [[#syllable|syllable]], the dominant sound generally being a [[#vowel|vowel]].
; {{anchor|consonantism}}[[consonantism]]
: The sequence of [[#consonant|consonants]], or the quality peculiar to the consonants of a given word or group of words.
; {{anchor|construct state}}[[construct state]]
: In some languages, a grammatical form that is used in construing a noun or adjective with another noun or adjective. In the [[Semitic]] languages, the construct form is usually a noun modified by a following noun in a genitive construction. The construct state of such a noun ''X'' can usually be translated to English as ''X of''. In [[Persian]], the construct state is typically used for all nouns and adjectives in a [[noun phrase]] except the very last.
; {{anchor|contamination}}[[contamination]]
: Influence of one term on the development of another term whereby they come to have similar meanings or similar sound, [[conflation]].
; {{anchor|contraction}}{{anchor|contracted}}[[contraction]]
: A word or phrase shortened in speech, sometimes represented in writing with a [[punctuation mark]] in place of missing letters (e.g. {{noncog|en|-}} {{m|en|do}} {{m|en|not}} → {{m|en|don't}} or {{noncog|ro|-}} {{m|ro|nu}} {{m|ro|e}} → {{m|ro|nu-i}}).
; {{anchor|contranym}}[[contranym]]
: A term with two opposite meanings.
; {{anchor|conversion}}[[conversion]]
: The process whereby a new word is created without changing the form, often by allowing the word to function as a new part of speech.
; {{anchor|coordinate term}}[[coordinate term]]
: A term that is a different type of the same [[#hypernym|hypernym]] (loosely "category"). ''Car'' and ''bicycle'' are coordinate terms to each other, both being [[#hyponym|hyponyms]] of a shared [[#hypernym|hypernym]] ''vehicle''. Although the term can be applied broadly – e.g. ''car'' and ''asteroid'' are both ''things'' –, such usage is not useful in Wiktionary.
; {{anchor|coordinative}}[[coordinative]] [[compound]]
: A [[#nominal|nominal]] [[#compound|compound]] in which the two parts are coordinated and the intended meaning of the compound as a whole is a combination of the two parts. Also known as a ''[[#dvandva|dvandva]] compound''. Examples in English are not common but are found in many other languages, e.g. {{m+|el|μαχαιροπίρουνο||cutlery|lit=knife-fork}} and {{m+|yi|טאַטע־מאַמע||parents|lit=papa-mama}}. Contrast [[#exocentric|exocentric]] and [[#endocentric|endocentric]] compounds.
; {{anchor|copula}}{{anchor|copulative}}[[copula]]
: A verb that links and equates its [[#subject|subject]] with its object; also called a [[#linking verb|linking verb]]. The most common copula is the verb ''to be'', but others exist, such as ''to seem'', ''to appear'' and ''to sound''. The object of a copula often has special properties. For example, it can be an [[#adjective|adjective]] (''John is '''very tall''''') when most verbs require their objects to be [[#noun|noun]]s or [[#pronoun|pronoun]]s. In addition, in languages with [[#case|case]] distinctions, the object of a copula is most commonly in the [[#nominative|nominative]] case, while the object of other verbs is usually in a different case, such as the [[#accusative|accusative]] case. Many languages (e.g. {{cog|ru|-}}, {{cog|he|-}}, and {{cog|ar|-}}) use a ''null copula'' (i.e. no word at all) in the present tense when English would use the words ''am'', ''are'' or ''is''.
; {{anchor|corruption}}{{l|en|corruption|id=usage prescription}}
: A [[#nonstandard|nonstandard]] form of a word, expression, or text, assigned a value judgment as being [[debase]]d, especially when resulting from [[misunderstanding]], [[transcription]] error, or [[mishear]]ing; this term is applied in usage prescription but not in modern linguistic science.<!--[[w:Language change]] addresses the epistemological problem with the value judgment, even when misapprehension was the causative factor.-->
; {{anchor|countable}}[[countable]], countable noun, [[count noun]]
: Describes a noun which can be freely used with the [[indefinite article]] (''a'' or ''an'' in English) and with numbers, and which therefore has a [[plural]] form. [[#antonym|Antonym]]: ''[[#uncountable|uncountable]]'' or ''mass noun''.
; {{anchor|counter}}[[counter]]
: In linguistics, counters, [[measure word]]s or [[classifier]]s are words that are used in combination with a numeral to indicate an amount of something represented by some noun. They denote a unit or measurement and are used with [[mass noun]]s, and sometimes also with [[count noun]]s. (Compare ''[[#singulative|singulative]].'')
==D==
; {{anchor|dated}}[[dated]]
: Formerly in common use, and still in occasional use, but now unfashionable; for example, ''[[wireless]]'' in the sense of "broadcast radio tuner", ''[[groovy]]'', and ''[[gay]]'' in the sense of "bright" or "happy" are all dated. ''Dated'' is not as strong as ''[[#archaic|archaic]]'' or ''[[#obsolete|obsolete]]''. See [[Wiktionary:Obsolete and archaic terms]].
; {{anchor|සපදන් විබත්}}{{anchor|dative case}}{{anchor|dative}}{{anchor|dat}}[[සපදන් විබත්]] ([[dative case]]), dat.
: A [[#case|case]] that is usually used as the [[#indirect object|indirect object]] of a verb. For example, if English had a fully [[#productive|productive]] case system, then ''him'' in "She gave him the ball" would most likely be in the dative.
; {{anchor|declension}}[[declension]]
: The [[#inflection|inflection]] of [[#noun|noun]]s and words like them, or used together with them (i.e. [[#nominal|nominal]]s). See also ''[[#conjugation|conjugation]]''.
; {{anchor|defective}}[[defective]]
: Normally would be expected to have a full set of [[#inflection|inflected]] forms, but some of the inflections do not exist or are never used. English examples are the defective verbs {{m|en|can}} and {{m|en|shall}}, which do not have [[#infinitive|infinitive]] forms (there is no ''to can'' or ''to shall'').
; {{anchor|defective spelling}}defective spelling
: In languages with [[mater lectionis|matres lectionis]] ([[#consonant|consonant]] letters representing [[#vowel|vowels]]), the form including no additional ones, this may still include a mater lectionis.
; {{anchor|definite}}[[definite]]
: Refers to forms of words that present something as known, identified, or immediately identifiable; in English, this is the basic meaning of the [[#article|article]] ''[[the]]''; in some languages, this is a nominal or adjectival [[#inflection|inflection]]. In the Germanic languages, adjectives inflected as definite are referred to as "weak". In Hungarian, the definite conjugation is used to indicate [[:w:Hungarian verbs#Definite and indefinite conjugations|definite objects]], including ''him, her, it, them,'' and the formal ''you.''
; {{anchor|degrees of comparison}}[[degrees of comparison]]
: [[#inflection|Inflections]] of adjectives and adverbs which allow comparisons. English has three ''degrees of comparison'': [[#positive|positive]], [[#comparative|comparative]] and [[#superlative|superlative]]. Some other languages have other degrees, e.g.: [[comparative superlative]], [[relative superlative]], [[elative]].
; {{anchor|denominal}}[[denominal]]
: Derived from a [[#noun|noun]].
; {{anchor|dependent}}[[dependent]]
: (In Greek and in the Gaelic languages) A verb form which is not used independently but preceded by a particle to form the negative or a tense form.
; {{anchor|dependent clause}}[[dependent clause]]
: A [[#clause|clause]] that cannot stand on its own as a complete [[#sentence|sentence]], as opposed to an [[#independent clause|independent clause]]. Also known as a [[#subordinate clause|subordinate clause]]. Logically, a dependent clause modifies a word in another clause in the sentence. Common examples are (1) [[#relative clause|relative clause]]s (also known as "adjective clauses" or "adjectival clauses"), which modify nouns (e.g. ''The man '''whom I saw yesterday''' is leaving today''); (2) [[#adverbial clause|adverbial clause]]s, which modify verbs in an adverbial fashion (e.g. '''''When it is time to leave''', I will go home''), and [[#noun clause|noun clause]]s, which take the place of nouns (e.g. ''I said '''that my name is John''''' or ''I suggested '''that he leave'''''). (''see'' {{pedia|Dependent clause}})
; {{anchor|deponent}}[[deponent]]
: (In Greek, Latin, and some Gaelic and Nordic languages) A verb with an active meaning which conjugates in a passive manner.
; {{anchor|derived terms}}[[Wiktionary:Entry layout explained#Derived terms|derived terms]]
: A post-[[POS]] heading listing terms in the same language that are morphological derivatives.
; [[derogatory]]
: ''See '''{{glossary|pejorative}}'''.''
; {{anchor|descendants}}[[Wiktionary:Entry layout explained#Descendants|descendants]]
: A post-[[POS]] heading listing terms in other languages that have borrowed or inherited the word.
; {{anchor|descriptive}}[[descriptive]] [[compound]]
: A [[#nominal|nominal]] [[#compound|compound]] in which one part modifies the other, where both parts refer to the intended meaning of the compound as a whole. Also known as a ''[[karmadharaya]] compound''. The intended meaning of the compound as a whole is an extension of the sum-of-parts meaning of the compound. Examples in English are "[[blackboard]]" (a type of board which is [often] black) and "[[houseboat]]" (a boat which is also a house). Contrast [[#determinative|determinative]] compounds, where the modified component but not the modifier refer to the intended meaning as a whole, as in "[[rainbow]]" and "[[footstool]]". Descriptive compounds are a subtype of [[#endocentric|endocentric]] compounds, which are in turn contrasted with [[#exocentric|exocentric]] and [[#coordinative|coordinative]] compounds.
;{{anchor|desiderative}}[[desiderative]]
: A verb form indicating a wish.
; {{anchor|determinate verb}}{{anchor|determinate}}[[determinate verb]]
: In the {{w|Slavic languages}}, another term for ''[[#concrete verb|concrete verb]]''.
; {{anchor|determinative}}[[determinative]] [[compound]]
: A [[#nominal|nominal]] [[#compound|compound]] in which one part modifies the other, where the modified component (but not the modifier) refers to the intended meaning of the compound as a whole. Also known as a ''[[tatpurusa]] compound''. Examples in English are "[[rainbow]]" (a type of [[bow]], caused by the rain) and "[[footstool]]" (a type of [[stool]], intended for one's feet). Contrast [[#descriptive|descriptive]] compounds, where both the modifier and modified component refer to the intended meaning as a whole, as in "[[blackboard]]" or "[[houseboat]]". Determinative compounds are a subtype of [[#endocentric|endocentric]] compounds, which in turn are contrasted with [[#exocentric|exocentric]] and [[#coordinative|coordinative]] compounds.
; {{anchor|determiner}}[[determiner]]
: A noun modifier that expresses the in-context reference or quantity of a noun or noun phrase. Determiners are often considered adjectives, but in fact are not quite the same; for example, in English, {{m|en|big}} is an adjective, so “the big car” is grammatical while *“He saw big car” is not, but {{m|en|some}} is a determiner, so *“the some car” is not grammatical while “He saw some car” is. In English, adjectives can ''sometimes'' stand alone without a noun, while determiners nearly ''always'' can (contrast *“He saw big” with “He saw some”), such that they are sometimes considered pronouns as well as adjectives.
; {{anchor|deverbal}}[[deverbal]]
: A word, often a [[#substantive|substantive]], derived from a [[#verb|verb]]. Contrast ''[[#denominal|denominal]]''.
; {{anchor|diachrony}}{{anchor|diachronic}}{{anchor|diachronically}}[[diachrony]] {{nobold|{{wikipedia|Diachrony_and_synchrony|Diachrony and synchrony}}}}
: A viewpoint of analysis of a language or phrase within a language which considers the [[historical linguistics|historical changes]] over time which have shaped its state at a given later time. The term is typically used to contrast with ''{{glossary|synchrony}}''.
; {{anchor|diacritic}}{{anchor|diacritical}}{{anchor|diacritical mark}}[[diacritic]]
: A diacritic – also diacritical mark, diacritical point, diacritical sign, or an accent – is a [[#glyph|glyph]] added to a letter, or basic glyph. Examples: [[#acute|acute]] ( ´ ), double acute ( ˝ ), [[#breve|breve]] ( ˘ ), inverted breve ( ̑ ), [[#cedilla|cedilla]] ( ¸ ), [[#diaeresis|diaeresis]]/[[#umlaut|umlaut]] ( ¨ ), [[#macron|macron]] ( ¯ ), [[overring|overring]] ( ˚ ), [[#perispomene|perispomene]] ( ͂ ), etc. The main use of a diacritical mark is to change the sound-values of the letters or cadence of a word to which they are added. Examples are the diaereses in the borrowed French words {{m|en|naïve}} and {{m|en|Noël}}, which show that the vowel with the diaeresis mark is pronounced separately from the preceding vowel; the acute and [[#grave|grave]] accents, which can indicate that a final vowel is to be pronounced, as in {{m|en|saké}} and poetic ''breathèd''; and the cedilla under the ⟨c⟩ in the borrowed French word {{m|en|façade}}, which shows it is pronounced {{IPAchar|/s/}} rather than {{IPAchar|/k/}}.
; {{anchor|diaeresis}}{{anchor|diaresis}}{{anchor|dieresis}}[[diaeresis]]
: A [[#diacritic|diacritic]] ( ¨ ) placed over a [[#vowel|vowel]] letter indicating that it is sounded separately.
; {{anchor|dialectal}}[[dialectal]]
: Of or relating to a [[dialect]].
; {{anchor|diminutive}}[[අල්පාර්ථ පද]] ([[diminutive]])
: A word form expressing smallness, youth, endearment, unimportance, or contempt.
; {{anchor|direct object}}[[direct object]]
: The [[#noun|noun]] or noun [[#phrase|phrase]] that a [[#verb|verb]] is directly acting upon. In some languages direct objects are marked with the [[#accusative case|accusative case]].
: → [[#transitive verb|transitive verb]], [[#indirect object|indirect object]]
; {{anchor|dissimilation}}{{anchor|dissimilate}}{{anchor|dissimilated}}[[dissimilation]] {{nobold|{{wikipedia|Dissimilation}}}}
: A phonological process whereby one of a pair of similar sounds within a word or phrase becomes dissimilar: for example, the shift l…l > r…l in the derivation of {{m+|frm|coronnel}} from Old Italian {{m|it|colonnello}}. It has an opposite effect to [[#assimilation|assimilation]].
; {{anchor|displaced}}[[displace]]d
: Of an older word: having been replaced by a newer word.
; {{anchor|ditransitive verb}}{{anchor|ditransitive}}[[ditransitive verb]]
: (of a verb) taking two objects, such as {{m|en|give}} in “Give me the ball” (where {{m|en|me}} is an [[#indirect object|indirect object]] and {{m|en|ball|the ball}} is a [[#direct object|direct object]]). Compare [[#intransitive verb|intransitive verb]] and [[#transitive verb|transitive verb]].
; {{anchor|doublet}}[[doublet]]
: One of two (or more) words in a language that have the same [[#etymology|etymological]] root but have come to the modern language through different routes. Doublets can come about e.g., as [[#loanword|loanwords]] from two different but related languages, as loanwords acquired from the same language at two different stages, as one loanword from a related language plus its native [[#cognate|cognate]], or as derivatives formed at two different stages in the history of a language.
; {{anchor|dual}}{{anchor|dual number}}[[dual]], [[dual number]]
: A [[#number|grammatical number]] that indicates exactly two items or individuals. Usually contrasts with [[#singular number|singular]] and [[#plural number|plural]].
; {{anchor|dummy pronoun}} {{w|dummy pronoun}}
: A [[#pronoun|pronoun]] that has no referent. For instance, {{m|en|it}} in ''it is good to know that you are okay'' is a dummy [[#subject|subject]]. It is used in order to provide the verb {{m|en|is}} with a syntactic subject, because English does not allow a [[w:null-subject language|null subject]].
; {{anchor|dvandva}}[[dvandva]]
: Another term for a ''[[#coordinative|coordinative]] compound''. Contrast [[#bahuvrihi|bahuvrihi]], [[#tatpurusa|tatpurusa]] and [[#karmadharaya|karmadharaya]].
; {{anchor|dysphemism}}[[dysphemism]]
: A term carrying negative connotations or imagery to replace a (more) neutral original. Contrast ''[[#euphemism|euphemism]]''.
==E==
; {{anchor|ed.}}ed.
: "[[editor|Editor]]" (or sometimes "edition"). This abbreviation is often used in attributing quotations; the editor of a compilation is generally the individual in charge of selecting what works to include.
; {{anchor|elative}}[[elative]]
: In [[Semitic]] languages, a stage of gradation that can be used both for a [[superlative]] and [[comparative]]. (See also ''[[#degrees of comparison|degrees of comparison]]''.)
; {{anchor|elative case}}[[elative case]]
: A [[#case|case]] which expresses "moving out of".
; {{anchor|elision}}{{anchor|elided}}[[elision]]
: The removal of a [[#phoneme|phoneme]] or sequence of phonemes from a word, particularly at the beginning or end.
; {{anchor|ellipsis}}[[ellipsis]]
: The omission of a word or phrase that can be inferred from the context.
; {{anchor|elongated}}[[elongated]]
: With [[letter]]s added for [[emphasis]], like "stoooop!" Usually this is [[nonstandard]] writing, but in some uses, such as in interjections, this is normal: "awwwww!", "shhhh!"
; {{anchor|emphatic}}[[emphatic]]
: Taking particular stress. English's [[#reflexive|reflexive]] pronouns double as emphatic ones, as in "I myself have not seen it" (where "myself" emphasizes the role of the speaker); some other languages (such as Greek) have emphatic pronouns that they distinguish from ''[[#weak pronoun|weak]]'' or ''[[#clitic|clitic]]'' pronouns.
; {{anchor|enclisis}}[[enclisis]]
: The phonetic joining of a word with the preceding word. In modern Greek this may result in an extra stress on the first word, thus:
::: {{l|el|το όνομα μου είναι|"το όνο<u>μα</u> μου είναι"}} ''becomes'' {{l|el|το όνομά μου είναι|"το όνο<u>μά</u> μου είναι"}}
; {{anchor|endonym}}{{anchor|autonym}}[[endonym]]
: A name used by a group or category of people to refer to themselves or their language (contrast [[#exonym|exonym]]). Also called [[autonym]] or [[selfname]].
; {{anchor|endocentric}}[[endocentric]] [[compound]]
: A [[#nominal|nominal]] [[#compound|compound]] in which one part modifies the other, where the modified compound refer to the intended meaning of the compound as a whole. Examples in English are "[[blackboard]]" (a type of [[board]]), "[[houseboat]]" (a type of [[boat]]), "[[rainbow]]" (a type of [[bow]]) and "[[footstool]]" (a type of stool). Endocentric compounds are categorized into two subtypes, [[#descriptive|descriptive]] compounds (where the modifier also refers to the intended meaning of the compound as a whole, as in [[blackboard]] and [[houseboat]]) and [[#determinative|determinative]] compounds (where the modifier does not refer to the intended meaning of the compound as a whole, as in [[rainbow]] and [[footstool]]). For example, a [[houseboat]] is a type of [[house]] as well as a type of [[boat]], and a [[blackboard]] is (usually) [[black]]. However, a [[rainbow]] is not a type of [[rain]] (rather it is a [[bow]] that is caused ''by'' the rain), and similarly a [[footstool]] is not a type of [[foot]] (it is a stool intended ''for'' the feet). Endocentric compounds are contrasted with [[#exocentric|exocentric]] and [[#coordinative|coordinative]] compounds.
; {{anchor|enPR}}enPR
: Wiktionary's [[Wiktionary:English Phonemic Representation|English Phonemic Representation]] system. Details in the [[Appendix:English pronunciation|English pronunciation key]].
; {{anchor|epenthesis}}{{anchor|epenthetic}}[[epenthesis]]
: The insertion of a [[#phoneme|phoneme]], letter, or [[#syllable|syllable]] into a word, usually to satisfy the phonological constraints of a language or poetic context. In careful use epenthesis only refers to insertions in the middle of a word: cf. [[#prothesis|prothesis]], [[#paragoge|paragoge]].
; {{anchor|epicene}}[[epicene]]
: Having a single form for both male and female referents.
; {{anchor|eponym}}[[eponym]]
: A word formed from a real or fictive person’s name. Compare [[#toponym|toponym]], a word derived from a place name.
; {{anchor|eponymous}}[[eponymous]]
: Using its own name as a title for a work of art.
; {{anchor|equative}}[[equative]]
: A construction showing an equal quality; for example, the equative of {{m|en|happy}} is {{m|en||as happy as}}. In some languages, such as Welsh and Old Irish, the equative is a distinct form of the adjective.
; {{anchor|ergative case}}[[ergative case]]
: A [[#case|case]] used in some languages, which marks the [[#subject|subject]] of a [[#transitive verb|transitive verb]], but not the subject of an [[#intransitive verb|intransitive verb]].
; {{anchor|ergative}}{{anchor|ergative verb}}[[ergative verb]]
: A verb that can be transitive or intransitive, where the intransitive [[#subject|subject]] is the [[patient#Noun|patient]], the same role as the transitive object. Essentially, an ergative is an intransitive verb that is its own [[#causative|causative]] when used transitively. For example, {{m|en|break}} is an ergative verb. The same thing happens to the window in "The window broke" (subject) as in "I broke the window" ([[#direct object|direct object]]), but in the second example there is also an [[#agent|agent]] which causes the window to break.
; {{anchor|etymology}}[[etymology]]
: An account of the origin and historical development of a word.
; {{anchor|etymon}}[[etymon]]
: The source word of a given word.
; {{anchor|euphemism}}[[euphemism]]
: A term that is less vulgar or less offensive than the one it replaces. Contrast ''[[#dysphemism|dysphemism]]''.
; {{anchor|excessive spelling}}excessive spelling
: In languages with [[mater lectionis|matres lectionis]] ([[#consonant|consonant]] letters representing [[#vowel|vowels]]) a form including one or more additional ones. For example in Hebrew {{m|he|אדום||red}} of {{m|he|אָדֹם}}, an added {{m|he||ו|vav}} indicating {{IPAchar|/o/}}.
; {{anchor|excrescent}}[[excrescent]]
: A sound in a word without [[#etymology|etymological]] reason, added for articulatory purposes.
; {{anchor|exocentric}}[[exocentric]] [[compound]]
: A [[#nominal|nominal]] [[#compound|compound]] in which the first part modifies the second and neither part alone conveys the intended meaning. Examples in English are "[[barefoot]]" (i.e. "having bare feet"; neither component refers to a person) and "[[houndstooth]]" (i.e. "resembling a hound's tooth"; neither component refers to fabric). Also known as a ''[[#bahuvrihi|bahuvrihi]] [[#compound|compound]]''. Contrast [[#endocentric|endocentric]] (with its subtypes [[#determinative|determinative]] and [[#descriptive|descriptive]]) and [[#coordinative|coordinative]].
; {{anchor|exonym}}[[exonym]]
: A name for a place, people or language used by foreigners instead of the native-language version (the [[#endonym|endonym]]).
; {{anchor|expletive}}[[expletive]]
: A [[#vulgar|vulgar]] term, an [[#intensifier|intensifier]], or a word without meaning added to fill a syntactic position.
; {{anchor|eye dialect}}{{anchor|eye spelling}}[[eye dialect]] {{nobold|{{wikipedia|eye dialect}}}}
: A deliberate misspelling used in writing to indicate the speech of a poorly educated character; the spelling represents how they would spell the words if they were asked to write them down. As such, it is the functional opposite of [[#pronunciation spelling|pronunciation spelling]].
==F==
; {{g|f}}
: ''See '''{{glossary|feminine}}'''.''
; {{anchor|factitive}}{{anchor|factitive verb}}[[factitive]] verb
: A transitive verb that is derived from an adjective or noun, and expresses the act of making someone/something have the properties (or have more of the properties) of the base adjective or noun. Examples in English are: {{m|en|shorten}} (make {{m|en|shorter}}), {{m|en|strengthen}} (make {{m|en|stronger}}) and {{m|en|enslave}} (make a {{m|en|slave}}). Compare '''[[#causative|causative verb]]s''', which are similar but are derived from other verbs.
; {{anchor|false cognate}}[[false cognate]]
: A word in a language that bears a phonetic and semantic resemblance to a word in another or the same language but is not etymologically related to it and thus not a true [[#cognate|cognate]]. Examples include {{cog|en|day}}/{{cog|pt|dia}}, {{cog|de|Feuer}}/{{cog|fr|feu}} (both meaning "fire"), {{cog|ms|dua}}/{{cog|sa|द्व}} (both meaning "two"), and {{cog|en|dog}}/{{cog|vmb|dog}}.
; {{anchor|false friend}}[[false friend]]
: A word in a language that bears a phonetic resemblance to a word in another language, often because of a common etymology, but has a different meaning. Examples include {{cog|en|parent}}/{{cog|pt|parente||relative}} and {{cog|en|embarrassed}}/{{cog|es|embarazada||pregnant}}.
; {{anchor|familiar}}[[familiar]]
: Describes a context where those conversing, through speech or written word, are well acquainted with one another and in casual situations often use more '''[[#informal|informal]]''' or '''[[#colloquial|colloquial]]''' terms to communicate.
; {{anchor|f}}{{anchor|feminine}}[[feminine]], {{g|f}}
: "Feminine"; said of a word belonging to the feminine [[#gender|gender]], which is usually contrasted with the [[#masculine|masculine]] gender, and also often with a [[#neuter|neuter]] gender.
; {{anchor|figurative}}[[figurative]]
: Not [[#literally|literal]]. Of [[figure of speech|figures of speech]], words or expressions used as [[#metaphorical|metaphors]] or [[#simile|similes]], e.g. saying that a greedy person is a pig or is like a pig, or as [[#metonym|metonyms]], e.g. using 'crown' to refer to the monarchy.
; {{anchor|උත්තම පුරුෂ}}[[උත්තම පුරුෂ]]
: පහත දැක්වෙන [[#first person]] කොටස බලන්න.
; {{anchor|first person}}{{anchor|first-person}}[[first person]], {{anchor|1st person}}[[1st person]]
: A [[#person|grammatical person]] that indicates the speaker him/her/itself, or a group to which the speaker belongs. Examples are the English pronouns {{m|en|I}} and {{m|en|we}}.
; {{anchor|fl.}}[[fl.]]
: "[[floruit|Floruit]]" (Latin for "he/she flourished"). Used when the exact dates of a person's birth and death are unknown to denote a date or period during which the person was known to have been alive or active.
; {{anchor|focus}}[[focus]]
: An adverb that indicates focus within the sentence.
; {{anchor|folk etymology}}{{anchor|folk etymologies}}{{anchor|folk etymological}}[[folk etymology]] {{nobold|{{wikipedia|folk etymology}}}}
: A misunderstanding of the [[#etymology|etymology]] of a word; a false [[#etymology|etymology]] that incorrectly explains the origin of a word.
; {{anchor|formal}}[[formal]]
: Describes word choice and [[syntax]] which is mainly appropriate in formal contexts, such as in official or legal documents, essays, and sometimes when talking with one's superiors or elders. '''[[#informal|Informal]]''' terms, frequently those that originate through casual speech ('''[[#colloquial|colloquial]]'''), are often inappropriate in formal contexts. See also ''[[#higher register|higher register]]''.
; {{anchor|fossil word}}{{anchor|fossil}}{{anchor|fossilised}}{{anchor|fossilized}}[[fossil word]]
: A word that is broadly [[#obsolete|obsolete]] but remains in currency because it is contained within an [[#idiom|idiom]] that is still in use.
; {{anchor|fpl}}''fpl''
: "[[#feminine|Feminine]] [[#plural|plural]]"; of feminine gender and plural number.
; {{anchor|frequentative}}[[frequentative]]
: Expressing [[repetition]] of an action.
; {{anchor|fricative}}[[fricative]]
: A [[#consonant|consonant]] sound produced by air flowing through a constriction in the mouth, and typically producing a sibilant, hissing, buzzing or otherwise "rough" quality. In English, there are fricatives that are [[#voiceless|voiceless]] {{IPAchar|/f/}}, {{IPAchar|/s/}}, {{IPAchar|/ʃ/}}, {{IPAchar|/θ/}} (as in the final sounds of ''buff'', ''bus'', ''bash'' and ''bath''), and there are corresponding [[#voiced|voiced]] sounds {{IPAchar|/v/}}, {{IPAchar|/z/}}, {{IPAchar|/ʒ/}}, {{IPAchar|/ð/}} (as in the final sounds of ''above'', ''buzz'', ''beige'' and ''bathe''). Fricatives are distinguished from [[#plosive|plosive]]s, in which the air is blocked completely for a short period of time, and [[#approximant|approximant]]s, in which the air is not constricted enough to cause the characteristic rough sound of a fricative.
; {{anchor|front vowel}}[[front vowel]]
: A [[#vowel|vowel]] produced in the front of the mouth. In English, the front vowels are {{IPAchar|/æ/}}, {{IPAchar|/ɛ/}}, {{IPAchar|/eɪ/}}, {{IPAchar|/ɪ/}}, {{IPAchar|/i/}} (as in the vowels of ''bat'', ''bet'', ''bait'', ''bit'', and ''beat'' respectively). Contrasts to a [[#back vowel|back vowel]].
; {{anchor|future perfect}}[[future perfect]]
: A [[#tense|tense]] that expresses action completed at some time in the future; in English it is formed by use of ''will have'' (or ''shall have'') and a [[#past|past]] [[#participle|participle]].
; {{anchor|future}}{{anchor|future tense}}[[future tense]]
: The [[#tense|tense]] of a [[#verb|verb]] used to refer to an event, transaction or occurrence that has not yet happened, is expected to happen in the future, or might never happen. An English example is {{m|en|will}} {{m|en|go}} in ''I will go home tomorrow''.
==G==
; {{anchor|gemination}}[[gemination]]
: A phenomenon when a [[#consonant|consonant]] is pronounced for an audibly longer period of time than is done normally.
; {{anchor|ලිංග භේදය}}[[ලිංග භේදය]]
: පහත [[#gender]] වෙත යොමු වන්න.
; {{anchor|gender}}[[gender]]
: A way of classifying [[#noun|nouns]] in some languages. In such languages, each noun has a specific gender (often determined by its meaning and/or form), and other words (especially [[#adjective|adjectives]] and [[#pronouns|pronouns]]) will often change form to agree with the noun's gender. See also [[#noun class|noun class]].
; {{anchor|gender neutral}}{{anchor|gender-neutral}}[[gender-neutral]]
: Of language constructs, not indicating or restricted by gender, and thus applicable to those of any gender and to those of no gender.
; {{anchor|genericized trademark}}[[genericized trademark]]
: A successful brand name or trademark that has come to refer to the generic class of objects rather than the specific brand type.
; {{anchor|සබඳ විබත්}}
{{anchor|genitive}}{{anchor|genitive case}}[[සබඳ විබත්]] ([[genitive case]])
: A [[#case|case]] that expresses possession or relation, equivalent to the English {{m|en|of}}.
; {{anchor|gerund}}[[gerund]]
: Any of various non-finite [[#verb|verb]] forms in various languages. In English, a "gerund" is a verb in its ''[[-ing]]'' form when used in a way that resembles the use of a [[#noun|noun]]. In other languages it often functions as an [[#adverb|adverb]] to form [[#adverbial|adverbial]] phrases or the continuous tense.
; {{anchor|ghost word}}[[ghost word]]
: A [[fictitious]] or [[erroneous]] word, originally meaningless (not used in practice), that has been published in a dictionary or similarly authoritative reference work or otherwise listed as genuine, generally as the result of misinterpretation, misreading, or typographical error.
; grammatical number
: ''See '''{{glossary|number}}'''.''
; grammatical person
: ''See '''{{glossary|person}}'''.''
; {{anchor|grave}}{{anchor|grave accent}}[[grave accent]]
: A [[#diacritic|diacritic]] mark ( ` ) used in many languages to distinguish the pronunciations of [[#vowel|vowels]].
==H==
; {{anchor|habitual}}[[habitual]]
: A verbal [[#aspect|aspect]] specifying an action as occurring habitually: the subject performs the action usually, ordinarily, or customarily. Also called '''[[consuetudinal]]'''.
; {{anchor|hapax legomenon}}[[hapax legomenon]], {{anchor|hapax}}[[hapax]]
: In [[corpus linguistics]], a word that occurs only once within a given corpus, either in the written record of an entire language, in the works of an author, or in a single text.
; {{anchor|haplology}}{{anchor|haplological}}[[haplology]]
: The [[#elision|elision]] or [[#deletion|deletion]] of a part of a word (a sequence of [[#phoneme|phonemes]], or a series of letters) that is repeated (either exactly or with slight change). An example of haplological pronunciation is the UK English pronunciation of {{m|en|library}} as if spelled {{m|en||libry}}, where the sequence of [[#phoneme|phonemes]] {{IPAchar|/ɹəɹ/}} is shortened to {{IPAchar|/ɹ/}}. An example of haplology relating to spelling is {{m|en|symbology}}, from {{affix|en|symbol|-ology}}, where the sequence ''olol'' is shortened to ''ol''. Contrast with [[#reduplication|reduplication]], the repetition of a part of a word.
; {{anchor|hedge}}{{ll|en|hedge|id=pragmatics}}
: In [[pragmatics]], a term (word, phrase, or clause) used to lessen the force of an utterance: for instance, to avoid giving insult or bragging about one's knowledge.
; {{anchor|higher register}}[[higher]] [[#register|register]]
: Belonging to the higher linguistic [[#register|register]], meaning that it might be used when the speaker wishes to sound refined or educated, in [[#formal|formal]] situations, or when writing. Such terms are usually less common or known and are not used in everyday speech. See also ''[[#literary|literary]]'' which is a sub-category.
; {{anchor|historical}}[[historical]]
: Describing an ''object'' or ''concept'' which is no longer extant or current; for example, {{m|en|Czechoslovakia}}, {{m|en|stomacher}}, or {{m|en|phlogiston}}. Distinguish: a ''historical'' term is still in use but refers to a thing which no longer exists; an ''[[#obsolete|obsolete]]'' term is no longer in use, while the thing it once referred to may or may not exist. Whereas an [[#archaic|archaic]] term names a still-extant thing or non-outdated concept, a historical term names a former thing or outdated concept.
; {{anchor|holonym}}[[holonym]]
: A term describing something that is formed by other smaller, somehow combined or related things. For example, ''[[tree]]'' is a holonym of ''[[leaf]]''; ''[[body]]'' is a holonym of ''[[arm]]''; ''[[Canada]]'' is a holonym of ''[[British Columbia]]'' etc. The opposite of holonym, which describes things that are ''part'' of a whole, is called ''[[#meronym|meronym]]''.
; {{anchor|homograph}}[[homograph]]
: A word that is spelled the same as another word, usually having a different [[#etymology|etymology]].
; {{anchor|homophone}}[[homophone]]
: A word which is pronounced the same as another word but differs in spelling, meaning or origin.
; {{anchor|hot word}}[[hot]] word
: A newly coined term, or newly adopted sense of an existing term, that has become very popular in a short time. It is kept provisionally as it is likely to remain in usage, even though it fails the "spanning at least one year" requirement of the [[WT:CFI|Criteria For Inclusion]] on Wiktionary.
; {{anchor|humorous}}[[humorous]]
: A word which is considered inherently [[jocular]] in some way.
; {{anchor|hyperbole}}{{anchor|hyperbolic}}[[hyperbole]]
: Deliberate or unintentional overstatement, particularly if extreme.
; {{anchor|hypercorrect}}{{anchor|hypercorrection}}[[hypercorrect]]
: Incorrect because of the misapplication of a standard rule; for example, {{m|en|octopi}} used as the plural form of {{m|en|octopus}} is hypercorrect because {{m|en|-us}} → {{m|en|-i}} is the rule for forming plurals of [[Appendix:Latin second declension#Masculine|originally-masculine nouns of the Latin second declension]], whereas {{m|en||octopus}} actually derives from Ancient Greek and has the plural form {{m|en|octopodes}} consistent with its etymology.
; {{anchor|hyperforeign}}{{anchor|hyperforeignism}}[[hyperforeign]]
: Incorrectly applying foreign reading rules, such as in pronouncing the "j" in [[Taj Mahal]] or [[Beijing]] as {{IPAchar|[ʒ]}} rather than {{IPAchar|[dʒ]}}, or dropping the {{IPAchar|[t]}} in [[claret]].
; {{anchor|hypernym}}[[hypernym]] or [[hyperonym]]
: A term indicating a [[category]] another term is part of, informally called “blanket” or “umbrella” term. For example, ''[[animal]]'' is a hypernym of ''[[bird]]'', which is in turn a hypernym of ''[[eagle]]''. The opposite of hypernym, which indicates terms pertaining to a category, is ''[[#hyponym|hyponym]]''.
; {{anchor|hyperthesis}}{{anchor|hyperthetic}}[[hyperthesis]]
: A form of [[#metathesis|metathesis]] in which non-contiguous sounds are switched.
; {{anchor|hyphenation}}[[hyphenation]]
: The splitting of a word across a line boundary, with a hyphen at the end of the first part. For example, the hyphenation of {{m|en|hyphenation}} is given as "hy‧phen‧ation" meaning that it is split across a line break as ''hy-phenation'' or as ''hyphen-ation''.
; {{anchor|hyponym}}[[hyponym]]
: A more specific term within a category described by another term, indicating a “type-of” relationship. For instance, ''[[alternative rock]]'' is a hyponym of ''[[rock]]'', which in turn is a hyponym of ''[[music]]''. The opposite of hyponym, which describes larger categories, is [[#hypernym|hypernym]].
==I==
; {{anchor|ideophone}}{{anchor|ideophonic}}[[ideophone]]
: A word that evokes an idea in sound, often a vivid impression of certain sensations or sensory perceptions, e.g. sound, movement, color, shape, or action. They may be more common in East Asian languages. In Chinese lexicography, such sense is usually described as {{lang|zh|……[[的]][[樣子]]}} or {{lang|zh|……[[貌]]}}, i.e. “the appearance of ...”. The attributive form is {{l|en|ideophonic}}.
; {{anchor|idiom}}[[idiom]]
: A phrase whose meaning is unapparent or unobvious from the individual words that make it up, such as {{m|en|beat around the bush||avoid an uncomfortable topic}}, {{m|en|come a cropper||suffer misfortune}}, or {{m|en|pay through the nose||pay an unusually large amount}}. Idioms are often, but not always ''[[#set phrase|set phrases]]'', and are usually distinct from ''[[#proverb|proverbs]]''.
; {{anchor|idiomatic}}[[idiomatic]]
: Pertaining or conforming to the mode of expression characteristic of a language. Idioms, [[collocation]]s{{,}} and [[modal verb]]s are examples of idiomatic language.
; {{anchor|imitative}}{{anchor|Imitative}}[[imitative]]
: [[imitate|Imitating]] or [[represent]]ing the [[sound#Noun|sound]] of something.
; {{anchor|imparisyllabic}}[[imparisyllabic]]
: A word with one or more inflections with more syllables than the lemma form. For example: the Greek {{m|el|μπακάλης|t=grocer}} and {{m|el|μπακάληδες|t=grocers}} and the Latin {{m|la|mens|t=mind}} and {{m|la|mentis|t=minds}} ([[cf.]] [[#parisyllabic|parisyllabic]]).
; {{anchor|imperfect}}[[imperfect]]
: The [[#imperfective past|imperfective past]] tense of a verb, indicating that the action described happened repeatedly, habitually or continuously.
; {{anchor|විධි ක්රියා}}[[විධි ක්රියා]]
: අණ කිරීමක් හෝ නියෝගයක් හඟවන [[#ක්රියා පද|ක්රියා පද]]. සිංහල උදාහරණයක් ලෙස ''යන්න!'' දැක්විය හැකිය.
; {{anchor|imperative}}{{anchor|imperative mood}}[[imperative mood]]
: The [[#mood|mood]] of a [[#verb|verb]] expressing an order or command. An English example is the command ''go!''
; {{anchor|imperfective}}{{anchor|imperfective aspect}}[[imperfective]]
: An [[#aspect|aspect]] of the [[verb]] which denotes an action or condition that does not have a fixed temporal boundary, but is [[habitual]], [[unfinished]], [[continuous]], [[repetitive]] or [[in progress]]. Common in {{w|Slavic languages}} such as {{cog|ru|-}}. Contrast ''[[#perfective|perfective]].'' (''see'' {{pedia|Imperfective aspect}})
; {{anchor|imperfective past}}imperfective past
: A verb form of [[#imperfective|imperfective]] [[#aspect|aspect]] and [[#past|past]] [[#tense|tense]], which is used to describe an action or event which was happening habitually, continuously or repeatedly in the past, as in “Tom was painting the fence” or “Tom used to paint the fence.”
; {{anchor|impersonal}}[[impersonal]]
: A lack of [[#person|grammatical person]] altogether, or an indefinite/undefined person. An example is the English pronoun {{m|en|one}}. See also [[#impersonal verb|impersonal verb]]s.
; {{anchor|impersonal verb}}[[impersonal]] verb
: A verb that cannot take a [[#subject|subject]], or takes a third-person neuter subject pronoun (e.g. {{m|en|it}}) without an [[antecedent]]. The term {{m|en|weather verb}} is also sometimes used in some texts, since such verbs of weather (e.g. {{m|en|rain}}) are impersonal in many languages. Many verbs that are personal and [[#active|active]] in English are expressed in other languages using impersonal constructions. An example is the English sentence "I must do it", expressed in {{cog|fr|-}} using the impersonal verb {{m|fr|falloir||to be [[necessary]]}}, as in {{m|fr|[[il]] [[falloir|faut]] [[que]] [[je]] [[il|le]] [[faire|fasse]]|lit='''It is necessary''' that I do it}}.
; {{anchor|inanimate}}[[inanimate]]
: Having a [[referent]] that does not include a human or animal. Many languages (such as the {{w|Slavic languages}}) classify nouns based on animacy, using different [[#inflection|inflections]] or words with animate and inanimate nouns. For verbs, this indicates that they are usually applied only to inanimate objects or concepts, and rarely used in the first or second persons.
; {{anchor|indeclinable}}[[indeclinable]], {{anchor|undeclinable}}[[undeclinable]], {{anchor|invariable}}[[invariable]] or {{anchor|invariant}}[[invariant]]
: In languages with [[#inflection|inflection]], lacking distinct inflected forms when they would be expected to exist. Indeclinable words have the same form in all cases. For example, the English noun {{m|en|sheep}} is invariable because its plural is also {{m|en|sheep}}. [[#acronym|Acronyms]] and [[#loanword|loanword]]s are often indeclinable in many languages. Poorly-attested words from ancient languages are sometimes denoted "indeclinable" when they can't be assigned to a declension class with certainty.
; {{anchor|indefinite}}[[indefinite]]
: Refers to forms of words that present something as not yet identified or not immediately identifiable; in English, this is the basic meaning of the [[article]] ''[[a]]''; in some languages, this is a nominal or adjectival [[#inflection|inflection]]. In the Germanic languages, adjectives inflected as indefinite are referred to as "strong". In Hungarian, the indefinite conjugation indicates [[#intransitive verb|no object]] or [[:w:Hungarian verbs#Definite and indefinite conjugations|indefinite objects]], including ''me, us,'' and the informal ''you.''
; {{anchor|independent clause}}[[independent clause]]
: A [[#clause|clause]] that can stand on its own as a complete [[#sentence|sentence]], as opposed to a [[#dependent clause|dependent clause]].
; {{anchor|indeterminate verb}}{{anchor|indeterminate}}[[indeterminate verb]]
: In the {{w|Slavic languages}}, another term for ''[[#abstract verb|abstract verb]]''.
; {{anchor|indicative}}{{anchor|indicative mood}}[[indicative mood]]
: The [[#mood|mood]] of a [[#verb|verb]] used in ordinary factual or objective statements.
; {{anchor|indirect object}}[[indirect object]]
: A grammatical role of a [[#ditransitive verb|ditransitive verb]] that usually manifests as a recipient or goal. In some languages indirect objects are marked with the [[#dative case|dative case]].
: → [[#direct object|direct object]]
; {{anchor|infix}}[[infix]]
: A [[morpheme]] or [[affix]] inserted inside a word.
; {{anchor|infinitive}}[[infinitive]]
: A non-[[finite]] verb form considered [[neutral]] with respect to [[#inflection|inflection]]; depending on language variously found used with [[auxiliary verb]]s, in [[subordinate clause]]s, or acting as a [[#gerund|gerund]], and often as the [[dictionary form]]. In English, the infinitive is formed with the word ''[[to]]'', e.g. ''to [[read]]''.
; {{anchor|inflected}}{{anchor|inflection}}{{anchor|inflectional}}[[inflection]]
: The change in form of a word to represent various grammatical categories, such as [[#tense|tense]] (e.g. past tense, present tense, future tense) or [[#number|number]] (e.g. singular, plural). For example, the verb {{m|en|run}} may be inflected to produce {{m|en|runs}}, {{m|en|ran}}, and {{m|en|running}}. In highly inflected languages, such as Latin, there will be many more forms. Two major types of inflection are [[#conjugation|conjugation]] (inflection of [[#verb|verbs]]) and [[#declension|declension]] (inflection of [[#noun|nouns]], [[#adjective|adjectives]], and [[#pronoun|pronouns]]).
; {{anchor|informal}}[[informal]]
: Denotes spoken or written words that are used primarily in a [[#familiar|familiar]] or casual context. Do not confuse with ''[[#slang|slang]]'' or ''[[#nonstandard|nonstandard]]''. See also ''[[#colloquial|colloquial]]''.
; {{anchor|inherited}}[[inherit]]ed
: Denotes words which etymologically are not [[Appendix:Glossary#loanword|borrowings]] but derive through regular or sporadic [[#sound change|sound change]], without additional affixation, from a corresponding term in the language that is its direct historical ancestor. For example, English {{m|en|fairy}} is ''inherited'' from Middle English {{m|enm|fairye}}.
; {{anchor|initialism}}[[initialism]]
: An [[#abbreviation|abbreviation]] that is formed from the initial letters of a sequence of words. Initialisms that are pronounced as words, such as {{m|en|UNICEF}}, are usually called {{m|en||[[#acronym|acronyms]]}}, so the term {{m|en||initialism}} is generally only used for those that are pronounced letter by letter, such as {{m|en|U.S.}}
; {{anchor|inline reference}}inline reference
: A reference whose point of application is indicated in the text.
; {{anchor|කරණ විබත්}}{{anchor|instrumental case}}{{anchor|instrumental}}{{anchor|ins}}[[කරණ විබත්]] ([[instrumental case]]), ins.
: A [[#case|case]] used to express means or agency—and is generally indicated in English by "by" or "with" with the objective.
; {{anchor|intensifier}}{{anchor|intensifying}}[[intensifier]]
: A [[#word|word]] or [[#particle|particle]] that heightens the intensity of meaning of a term.
; {{anchor|interjection}}[[interjection]]
: An expression of emotion ("ouch!", "wow!") or any of several kinds of expression that functions as a replacement of a sentence ([[prosentence]]) or that are not syntactically connected to a sentence, including curses ("damn!"), greetings ("hey", "bye"), response particles ("okay", "oh!", "m-hm", "huh?"), and hesitation markers ("uh", "er", "um"), and perhaps profanities, discourse markers and fillers.
; {{anchor|internationalism}}[[internationalism]]
: A loanword that occurs in several languages with the same or similar meaning and etymology, due to the occurrence of several simultaneous borrowings and/or a chain of successive borrowings happening in quick succession. This commonly results in the exact etymological lineage of a term being difficult or impossible to trace for a given language. For example ''bus, doctor, hotel, internet, taxi,'' or ''television.''<!-- find better, more or fewer examples, if you like: https://en.wikipedia.org/wiki/Internationalism_(linguistics)#Examples -->
; {{anchor|අකර්මක}} {{anchor|අකර්මක ක්රියා පද}}
{{anchor|intransitive verb}}{{anchor|intransitive}}[[අකර්මක ක්රියා පද]] ([[intransitive verb]])
: Of a [[#verb|verb]]: not taking a [[#direct object|direct object]]; not [[#transitive|transitive]]. For example, the verb {{m|en|listen}} does not usually take a direct object; it is grammatically incorrect to say "I listened the concert" (instead of the correct "I listened to the concert" with the [[#indirect object|indirect object]] "to the concert").
: Of an adposition (such as a [[#preposition|preposition]]), or of an [[#adverb|adverb]]: not having a [[#nominal|nominal]] complement. For example, using the following prepositions or adverbs without a complement (here in parentheses): {{m|en|down}} (the stairs), {{m|en|under}} (the bridge), {{m|en|inside}} (the building), {{m|en|aboard}} (the ship), {{m|en|underneath}} (the table), {{m|en|here}}, {{m|en|there}}, {{m|en|abroad}}, {{m|en|downtown}}, {{m|en|afterwards}}, …
; {{anchor|invariable}}[[invariable]]
: ''See '''{{glossary|indeclinable}}'''.''
; {{anchor|invariant}}[[invariant]]
: ''See '''{{glossary|indeclinable}}'''.''
; {{anchor|iotation}}[[iotation]]
: A specific occurrence of [[#palatalization|palatalization]] that occurred in the {{w|Proto-Slavic language}}, in which a [[#consonant|consonant]] combined with the palatal approximant {{IPAchar|/j/}} to form a palatalized [[#consonant|consonant]]. Also, any similar process occurring in a later {{w|Slavic languages|Slavic language}} or elsewhere. For example, under certain circumstances in {{w|Russian language|Russian}}, underlying ''s; z; t; d; k; g'' are iotated to ''š; ž; č or šč; ž; č; ž'' respectively (pronounced {{IPAchar|/ʂ/}}; {{IPAchar|/ʐ/}}; {{IPAchar|/t͡ɕ/}} or {{IPAchar|/ɕː/}}; {{IPAchar|/ʐ/}}; {{IPAchar|/t͡ɕ/}}; {{IPAchar|/ʐ/}} respectively). (See ''[[Appendix:Russian verbs#Slavic iotation]]'' for the full iotation rules in {{w|Russian language|Russian}}; other {{w|Slavic languages}} behave similarly.)
; {{anchor|IPA}}[[IPA]]
: The [[w:International Phonetic Alphabet|International Phonetic Alphabet]]; a standardized system for transcribing the sounds in any spoken language.
; {{anchor|ʾiʿrāb}} [[ʾiʿrāb]]
: Also called [[desinential inflection]]; in Arabic: {{m|ar|إِعْرَابٌ||tr=ʾiʿrāb, ʾiʿrābun}}. A number of [[#inflection|inflectional]] endings, applied to Arabic nouns, adjectives, and verbs, which—with minor exceptions—do not appear in writing, and moreover are not pronounced in [[pausa]], i.e. at the end of a sentence or before a pause. Nevertheless, these endings are a regular and required element of Qur'ānic and Classical Arabic. In Modern Standard Arabic, however, they are rather often avoided due to dialectal influence. In nouns and adjectives, the ʾiʿrāb primarily has the function of marking the cases ([[#nominative|nominative]], [[#genitive|genitive]], [[#accusative|accusative]]), while in verbs it marks the moods ([[#indicative|indicative]], [[#subjunctive|subjunctive]], [[#jussive|jussive]]). All of these are only occasionally distinguishable without application of the ʾiʿrāb. See {{w|ʾIʿrab}} on Wikipedia.
; {{anchor|irregular}}[[irregular]]
: Not following the usual rules of [[#inflection|inflection]]; for example, the plural of English {{m|en|man}} is {{m|en|men}}, which is irregular; the regularly formed plural would have been *''mans''.
; {{anchor|iterative}}[[iterative]]
: Expressive of an action that is repeated with frequency.
==J==
; {{anchor|jussive}}{{anchor|jussive mood}}[[jussive|jussive mood]]
: In certain languages (e.g. Hebrew, Arabic and Esperanto), a [[#mood|mood]] of a [[#verb|verb]] used to indicate a command, permission or agreement with a request (distinct from the [[#imperative mood|imperative]]).
==K==
; {{anchor|karmadharaya}}[[karmadharaya]]
: Another term for a ''[[#descriptive|descriptive]] compound''. Contrast [[#bahuvrihi|bahuvrihi]], [[#tatpurusa|tatpurusa]] and [[#dvandva|dvandva]].
; {{anchor|Katharevousa}}[[Katharevousa]]
: The [[classical language|classically]] based artificial ([[w:standard language|standardized]]) Greek language created at the start of Greece's independence from the [[w:Ottoman Empire|Ottoman Empire]]. It was used for all formal and official purposes until 1976.<br>(Note: In Wiktionary, Katharevousa terms are entered under (modern) [[:Category:Greek language|Greek]].) (See also {{pedia|Katharevousa}})
; {{anchor|Kulturwort}}{{anchor|culture word}}[[Kulturwort]]
: A type of {{glossary|Wanderwort}} which is specific to a particular culture or which is spread by an influential cross-cultural phenomenon. Kulturworts (or ''Kulturwörter'') are often names of products distributed by trade and religious or ideological terms.
==L==
; {{anchor|learned borrowing}}[[learned borrowing]]
: A [[#loanword|loanword]] that was borrowed from a [[classical language]] such as Latin, Ancient Greek or Sanskrit, and which has not undergone significant reshaping due to [[#sound change|sound change]] or analogy with inherited terms. Opposed to [[#semi-learned borrowing|semi-learned borrowings]], which have been significantly reshaped, and [[#inherited|inherited]] terms, which have undergone all the normal sound changes of a language. For example, the Portuguese term {{m|pt|artículo||[[articulus]]}} is a learned borrowing from {{cog|la|articulus||joint, limb, division}}. The term {{m|pt|artigo||article}} is a semi-learned borrowing from the same term, which was borrowed early enough to undergo later sound changes that [[lenite]]d ''c'' into ''g'' and deleted ''l'' between vowels; and the term {{m|pt|artelho||toe}} is inherited from the same Latin term.
; {{anchor|lemma}}[[lemma]]
: The headword or citation form of an [[#inflection|inflected]] word, i.e. the form under which a word is found in a dictionary. For example, in English, nouns are usually listed under their singular form (''apple'', rather than ''apples''), and verbs under their infinitive form (''open'', rather than ''opens'', ''opened'' or ''opening''). Which form is used as the lemma varies from language to language. For verbs, for example, French, German, Spanish and many other European languages use the [[infinitive]], but Latin, Greek and Bulgarian use the [[first-person]] [[singular]] [[present]] [[indicative]], while Macedonian uses the [[third-person]] [[singular]] [[present]] [[indicative]], and Arabic and Hebrew use the [[masculine]] [[third-person]] [[singular]] [[past]] [[indicative]]. See also [[Wiktionary:Lemmas]].
; {{anchor|letter case}}[[letter case]]
: The distinction between [[majuscule]] ([[uppercase]]) and [[minuscule]] ([[lowercase]]) letters.
; {{anchor|lexeme}}[[lexeme]]
: The abstract "word" underlying a set of inflections; for example, {{m|en||gives}} and {{m|en||given}} belong to the same lexeme, which is usually identified by its lemma form {{m|en|give}}. See also: (1) [[w:lexeme|Wikipedia's article on ''lexeme''s]], (2) [[Wiktionary:Languages with more than one grammatical gender]], (3) [[#C|conjugation]] and (4) [[#D|declension]].
; {{anchor|liaison}} [[liaison]]
: The phonological fusion of two consecutive words and the manner in which this occurs, for example intrusion, consonant-vowel linking, etc.
; {{anchor|ligature}} [[ligature]]
: A character that visually combines multiple letters, such as {{m|mul|æ}}, {{m|mul|œ}}, {{m|mul|ß}} or {{m|mul|ij}}.
; {{anchor|linking verb}}[[linking verb]]
: Another term for [[#copula|copula]].
; {{anchor|literally}}[[literally]]
: Exactly as stated; read or understood without additional interpretation; not [[#figurative|figurative]] or [[#metaphorical|metaphorical]].
; {{anchor|literary}}[[literary]]
: A [[#higher register|higher]] [[#register|register]] found mainly in literature.
; {{anchor|litotes}}[[litotes]]
: (from {{cog|grc|-}} [[λιτότης]]) is a rhetorical figure involving ''[[understatement]]'' that consists of saying that something has ''less'' of one thing to mean ''more'' of the opposite. E.g.: ''he is not very clever'' instead of ''he is a stupid idiot'' ; ''she's not very pretty'' instead of ''she's ugly'', etc. Not to be confused with [[#euphemism|euphemism]] (although litotes can be used for the purpose of euphemism) or [[#meiosis|meiosis]], which is a similar figure of speech that also uses understatement.
; {{anchor|loanblend}} [[loanblend]]
: A [[#partial calque|partial calque]].
; {{anchor|loanword}}[[loanword]] (also {{anchor|loan}}[[loan]] or [[borrowing]]){{anchor|borrowed}}{{anchor|borrowing}}
: A word that was adopted (borrowed) from another language, rather than formed within the language or inherited from a more ancient form of the same language. Loanwords may still be recognisably foreign (having non-native spelling or unusual pronunciation), or have become completely assimilated into the language (no longer perceived as foreign). For example, in English, {{m|en|schadenfreude}} is still recognisably German, while {{m|en|cellar}} is fully assimilated and no longer recognisably Latin (from {{m|la|cellārium}}). Sometimes a loanword can be both fully assimilated ''and'' still recognised as foreign, e.g. [[taco]], [[burrito]], etc. Compare [[#calque|loan translation]] ([[calque]]).
; {{anchor|අදර විබත්}}{{anchor|locative case}}{{anchor|locative}}{{anchor|loc}}[[අදර විබත්]] ([[locative case]]), loc.
: "[[locative|Locative]]". A [[#case|case]] used to indicate place, or the place where, or wherein. It corresponds roughly to the English prepositions "in", "on", "at", and "by". Some languages use the same locative case construct to indicate when, so the English phrase "in summer" would use the locative case construct.
; {{anchor|locative-qualitative case}}{{anchor|locative-qualitative}}[[locative-qualitative case]]
: Nouns in the form of the locative-qualitative case are qualifiers in the sentence and signify the locational or temporal mark of the qualified word. The qualifier is not specific but general or universalized. (See also ''[[Appendix:Uyghur nouns]]''.)
; {{anchor|loosely}}{{anchor|loose}}{{anchor|loosely speaking}}[[loosely]]
: Indicates an imprecise use of words (wider, broader); short for ''loosely speaking''. Contrast ''strict'' or ''narrow'' sense; ''[[#strictly|strictly]]''.
==M==
; {{g|m}}
: ''See '''{{glossary|masculine}}'''.''
; m. pl.
: ''See '''{{glossary|mpl}}'''.''
; {{anchor|macron}}{{anchor|macron}}[[macron]]
: A short, straight, horizontal [[#diacritic|diacritical]] mark ( ¯ ) placed over any of various letters, usually to indicate that the pronunciation of a [[#vowel|vowel]] is long.
; {{anchor|m}}{{anchor|masculine}}[[masculine]], {{g|m}}
: Belonging to the male grammatical [[#gender|gender]], in languages that have gender distinctions.
; [[mass noun]]
: ''See '''{{glossary|uncountable}}'''.''
; {{anchor|measure word}}[[measure word]]
: ''See '''{{glossary|counter}}'''.''
; {{anchor|mediopassive}}[[mediopassive]]
: In Ancient Greek, a category of [[#inflection|inflected]] form in certain [[#tense|tenses]] that contrasts with the [[#active voice|active voice]], and may have meanings characteristic of the [[#middle voice|middle voice]] and [[#passive voice|passive voice]].<!-- Middle-voice forms may also be used with a passive meaning, and passive-voice forms with a middle meaning, which complicates the picture. --> In other tenses, there is a three-way contrast between active-, middle-{{,}} and passive-voice forms. See also [[#middle voice|middle voice]].
; {{anchor|meiosis}}[[meiosis]]
: A form of ''[[understatement]]'' that consists of downplaying or diminishing the focal quality of a statement for contrastive, humorous or dramatic effect, sometimes deployed as part of a [[#higher register|higher register]]. E.g.: ''that was actually quite good'' instead of ''that was excellent'' ; ''he is somewhat displeased'' instead of ''he is furious'', etc. Not to be confused with [[#euphemism|euphemism]] (although meiosis can be used for the purpose of euphemism) or [[#litotes|litotes]], which is a similar figure of speech that also uses understatement.
; {{anchor|men's speech}}[[men]]'s [[speech]]
: In certain languages (for example, {{w|Karajá language}}), men and women use or historically used distinct words and inflected forms.
; {{anchor|meronym}}[[meronym]]
: A term that denotes a part of the whole that is denoted by another term. ''The word "arm" is a '''meronym''' of the word "body"''. The term which describes the ''whole'', as being an opposite of meronym, is ''[[#holonym|holonym]]''.
; {{anchor|metaphorical}}{{anchor|metaphor}}[[metaphorical]]
: The use of a word or phrase as a [[metaphor]] to refer to something that it is not, invoking a direct similarity between the word or phrase used and the thing described. See also [[#simile|simile]] and [[#figurative|figurative]].
; {{anchor|metanalysis}}[[metanalysis]]
: See [[#rebracketing|rebracketing]].
; {{anchor|metathesis}}{{anchor|metathetic}}{{anchor|metathesise}}{{anchor|metathesize}}{{anchor|metathesised}}{{anchor|metathesized}}[[metathesis]]
: A [[#sound change|sound change]] in which two sounds or groups of sounds exchange position in a word. A form showing metathesis is described as {{m|en|metathetic}}. The sounds may be adjacent, as in {{m|en|ax}}, the metathetic form of the verb {{m|en|ask}}, or farther apart, as in {{noncog|es|palabra}} from {{noncog|la|parabola}}; there, the sound change is [[#hyperthesis|hyperthesis]].
; {{anchor|metonym}}{{anchor|metonymic}}{{anchor|metonymical}}{{anchor|metonymically}}[[metonym]]
: A word that names an object from a single characteristic of it or of a closely related object, e.g. 'crown' for the sovereign in a monarchy.
; {{anchor|middle voice}}{{anchor|middle-voice}}[[middle voice]]
: The [[#voice|voice]] verb form in which the [[#subject|subject]] of a verb performs some action upon itself, it falls somewhere between the [[#active voice|active]] and [[#passive voice|passive]] voices. Found in a few languages (e.g. [[Sanskrit]], [[Ancient Greek]], [[Icelandic]]). (''see'' {{pedia|Voice (grammar)}})
; {{anchor|minced oath}}[[minced oath]]
: A euphemism based on a profanity that has been altered to reduce or remove the objectionable characteristics of the original expression. Examples in English include {{m|en|heck}} instead of {{m|en|hell}} and {{m|en|dang}} instead of {{m|en|damn}}.
; {{anchor|mixed}}{{anchor|mixed declension}}[[mixed]]
: A type of declension in German that uses endings that are a combination of [[#strong declension|strong]] and [[#weak declension|weak]] endings. In adjectives, the mixed declension is used when accompanied by an indefinite article, or more generally by an {{m|de|ein}}-word (a determiner that has a null ending in the nominative masculine and neuter singular, similar to the indefinite article {{m|de|ein}}). The mixed declension uses strong endings precisely in those inflections where the indefinite article has a null ending, and weak endings otherwise. By analogy, nouns declined according to the mixed declension look like strong nouns in the singular (with genitive in ''-s'' and/or ''-es'') but weak nouns in the plural (with plural in ''-n'' and/or ''-en''). Most mixed nouns were once weak nouns that have transitioned to strong nouns in the singular but maintain the original weak plural ending. See [[:Category:German mixed nouns]] for a list of German mixed nouns.
; {{anchor|monolectic}}[[monolectic]]
: Used of a grammatical form accomplished with one word ([[cf.]] [[#polylectic|polylectic]] and [[#periphrastic|periphrastic]]).
; {{anchor|monosyllable}}[[monosyllable]]
: A word consisting of only one [[#syllable|syllable]].
; {{anchor|mood}}[[grammatical mood|mood]]
: One of the forms of a [[#verb|verb]], used to indicate the speaker's attitude toward what they are saying (e.g. a statement of fact, of desire, of command, etc.). Examples include [[#indicative mood|indicative]], [[#subjunctive mood|subjunctive]], [[#imperative mood|imperative]], [[#conditional mood|conditional]]. (''see'' {{pedia|Grammatical mood}})
; {{anchor|mpl}}''mpl'', ''m. pl.''
: [[#masculine|Masculine]] [[#plural|plural]].
; {{anchor|mute_h}}[[mute h]]
: In French, an initial <h> that is treated like a [[#vowel|vowel]]; that is to say, [[liaison]] and [[elision]] are permitted at the beginning of words that have a mute h.
==N==
; {{g|n}}
: ''See '''{{glossary|neuter}}'''.''
; ''n''
: ''See '''{{glossary|noun}}'''.''
; {{anchor|narrowly}}{{anchor|narrow}}[[narrowly]]
: Indicates a more precise use of words; short for ''narrowly speaking''. For most practical purposes, synonymous with ''[[#strictly|strictly]]''<!--because the differentiable nuance whereby "strictly" can sometimes imply some degree of prescriptive deprecation, whereas "narrowly" less often and less strongly does so, is beyond-scope for this glossary; that is, for this glossary's purposes, "narrowly" and "strictly" are interchangeable in practice-->. Contrast ''[[#loose|loose]]'' (''broad'') senses.
; {{anchor|nasal infix}}nasal infix
: The [[#infix|infix]] {{m|ine-pro||-né-}} or {{m|ine-pro||-n-}} in [[Proto-Indo-European]], one of the affixes marking the [[#imperfective|imperfective]] aspect. It appears in several of the [[:Category:Indo-European languages|Indo-European languages]]: for instance, Latin {{m|la|vincit|vi'''n'''cit|t=wins}}, {{m|la|vīcit|t=has won}}; Ancient Greek {{m|grc|λαμβάνω|λα'''μ'''βάνω|t=I take}}, {{m|grc|ἔλᾰβον|t=I took}}.
; {{anchor|negative polarity}}{{anchor|negative polarity_item}}{{anchor|negative_polarity}}{{anchor|negative_polarity_item}}negative polarity item
: A term or construction that is generally found only in negative sentences, questions, conditionals, and certain other “negative polarity” contexts; for example, {{m|en|anyone}} is a negative polarity item, as one can say "I did not see anyone", "Did you see anyone?" and "If anyone wants this, speak up now", but not *"I saw anyone." Several expressions have similar properties, such as {{m|en|budge an inch}}: "I won't budge an inch" and "Will he even budge an inch?", but not normally *"He budged an inch in the negotiations." (''see'' {{pedia|Polarity item}})
; {{anchor|negative_verb}}[[negative verb]]
: An [[#auxiliary verb|auxiliary verb]] used to form negatives of verbs in some languages. See also ''[[#connegative|connegative]]''.
; {{anchor|neologism}}[[neologism]]
: A newly coined term or meaning. See [[Wiktionary:Neologisms]].
; {{anchor|n}}{{anchor|neuter}}[[neuter]], {{g|n}}
: Of neuter [[#gender|gender]]: having a form which is not [[#masculine|masculine]] nor [[#feminine|feminine]]; or having a form which is not of [[#common gender|common gender]].
; {{anchor|nominal}}[[nominal]]
: Related to [[#noun|noun]]s. See also ''[[#denominal|denominal]]''.
: As a noun, it refers to any [[#part of speech|part of speech]] that is noun-like in some way, and normally includes [[#noun|noun]]s themselves along with [[#adjective|adjective]]s, [[#pronoun|pronoun]]s and [[#determiner|determiner]]s. The [[#inflection|inflection]] of nominals is commonly called [[#declension|declension]].
; {{anchor|පෙර}}{{anchor|පෙර විබත්}}{{anchor|nominative}}{{anchor|nominative case}}[[පෙර විබත්]] ([[nominative case]])
: A [[#case|case]] that is usually used as the [[#subject|subject]] of a [[#verb|verb]]. For example, if English had a fully [[#productive|productive]] case system, then (the) ''man'' in "The man threw the ball" would most likely be in the nominative case.
; {{anchor|nominalisation}}{{anchor|nominalization}}{{anchor|substantivisation}}{{anchor|substantivization}}[[nominalization]] or [[substantivization]]
: The use of a word which is not a [[#noun|noun]] (e.g. a [[#verb|verb]] or [[#adjective|adjective]]) as a noun.
; {{anchor|nonce}}{{anchor|nonce word}}[[nonce word]]
: A word invented for the occasion.
; {{anchor|nonfinite}}{{anchor|non-finite}}[[nonfinite]], [[non-finite]]
: Of a verb – lacking grammatical [[#person|person]] and [[#number|number]] attributes; most nonfinite verbs found in English are [[#infinitive|infinitives]], [[#participle|participles]] and [[#gerund|gerunds]].
; {{anchor|non-past}}{{anchor|non-past tense}}[[non-past|non-past tense]]
: The [[#tense|tense]] of a [[#verb|verb]] that does not pertain to the [[#past|past]]; in particular, applicable to both the [[#present|present]] and the [[#future|future]]. Common in some languages, such as Arabic. In English, the main verb in the sentences ''I am running tomorrow'' and ''I am running now'' can be said to be in the non-past tense, since the same verb can be used to express both the present and the future.
; {{anchor|nonstandard}}[[nonstandard]]
: Not conforming to the language as accepted by the majority of its speakers.
; {{anchor|nonvirile}}[[nonvirile]]
: In Slavic languages, a plural [[#gender|gender]] used for all groups that do not contain men, as well as plurals of [[#masculine|masculine]] animate, masculine inanimate, [[#feminine|feminine]] and [[#neuter|neuter]] nouns. Contrast ''[[#virile|virile]]''.
; not comparable
: ''See '''{{glossary|uncomparable}}'''.''
; {{anchor|noun}}[[noun]]
: A word that refers to a person (such as an {{m|en|actress}}), a place, a physical thing (such as {{m|en|wood}}), or concept (such as {{m|en|beauty}}, {{m|en|joy}}, or {{m|en|time}}). See also [[#countable|countable]], [[#uncountable|uncountable]] and [[#plural|plural]].
; {{anchor|noun class}}[[noun class]]
: In some languages (especially the [[Bantu]] languages), a way of classifying nouns much like [[#gender|gender]], but determined by other considerations such as the type and shape of an object, whether it is [[#animate|animate]] or [[#inanimate|inanimate]], a person or non-person, and so on.
; {{anchor|noun clause}}[[noun clause]]
: A type of [[#dependent clause|dependent clause]] that takes the place of nouns. Examples are ''I said '''that my name is John''''' as well as ''I suggested '''that he leave''''' and '''''That the color of the sky on Mars is pinking-red''' is surprising to me''. Noun clauses can also be [[#nonfinite|nonfinite]] (i.e. with the verb in the form of an [[#infinitive|infinitive]]), as in ''I asked '''him to leave''''' (compare the [[#synonym|synonymous]] ''I asked '''that he leave''''', expressed using a [[#finite|finite]] verb).
; {{anchor|number}}[[number]], {{anchor|grammatical number}}grammatical number
: A grammatical category that indicates how many items or individuals. Examples are [[#singular number|singular]], [[#plural number|plural]] and [[#dual number|dual]].
; {{anchor|number}}[[numeronym]]
:A [[number]]-based [[word]] such as {{l|en|9/11}} and {{l|en|24/7}}.
==O==
; {{anchor|object}}{{anchor|grammatical object}}[[object]] {{nobold|{{wikipedia|Object (grammar)}}}}
: The entity that is acted upon by a [[#verb|verb]]. For example, in the sentence ''Tom studies grammar'', the word ''grammar'' is the object. Contrast [[#subject|subject]].
: → [[#direct object|direct object]], [[#indirect object|indirect object]]
; {{anchor|oblique}}{{anchor|oblique case}}[[oblique case]], {{anchor|කම් විබත්}}{{anchor|objective}}{{anchor|objective case}} [[කම් විබත්]] ([[objective case]])
: Any case that is neither [[#nominative case|nominative]] nor [[#vocative case|vocative]]. The term is therefore often plural ("the oblique cases"); but in some languages, such as [[Hindustani]] and [[Old French]], the oblique is a particular case form, used for example (in Old French) for the [[#direct object|direct object]] and with prepositions.
; {{anchor|අභාවයට ගිය}}{{anchor|obs}}{{anchor|obsolete}} ''[[අභාවයට ගිය]]'', ''[[obsolete]]'', ''obs.''
: No longer in use, and (of a term<!--as opposed to a spelling-->) no longer likely to be understood. ''Obsolete'' is a stronger term than ''[[#archaic|archaic]]'', and a much stronger term than ''[[#dated|dated]]''. See [[Wiktionary:Obsolete and archaic terms]]. Distinguish: an obsolete term is no longer in use, while the thing it once referred to may or may not exist; a historical term is still in use, but refers to a thing which no longer exists.
; {{anchor|OED}}OED
: ''[[w:Oxford English Dictionary|Oxford English Dictionary]]''. Also '''SOED''' (Shorter), '''OED1''' (1st edition), '''OED2''' (2nd edition), '''NOED''' (New).
; {{anchor|offensive}} [[offensive]]
: Language that is intended or likely to cause offense; a kind of [[impolite]] language.
; {{anchor|onomatopoeia}}{{anchor|onomatopoeic}}[[onomatopoeia]]
: A word that is meant to sound like what it represents. English examples are {{m|en|kaboom}}, {{m|en|cuckoo}}, {{m|en|tweet}} and {{m|en|ding dong}}.
; {{anchor|optative mood}}[[optative mood]]
: A category of verb form (a [[#mood|mood]]) that expresses wishes along with other meanings. Such a category occurs in Ancient Greek and Sanskrit.
; {{anchor|orthographic borrowing}}[[orthographic]] [[borrowing]]
: A [[#loanword|loanword]] that has been borrowed in its written form and re-pronounced according to the conventions of the target language, particularly in East Asian languages written with Chinese characters. For example, the Chinese name {{m|zh|毛泽东|tr=Máo Zédōng}} is rendered in Japanese as {{m|ja|毛沢東|tr=Mō Takutō}}: the spelling is the same, but the characters have been pronounced as if they were Japanese words, leading to a significantly different pronunciation. Sometimes, the pronunciations in the source and donor language have no etymological relationship. For example, the Japanese noun {{ja-r|葉%書|は%がき|postcard}} was orthographically borrowed into Korean as {{ko-l|엽서|葉書|postcard}}.
; {{anchor|outdated}}[[outdated]]
: see ''[[#dated|dated]]''
; {{anchor|oxytone}}{{anchor|oxytonic}}[[oxytone]]
: With the stress upon the final syllable (e.g. {{m|el|εθνικός}}). Compare with [[#paroxytone|paroxytone]], [[#proparoxytone|proparoxytone]], and [[#barytone|barytone]].
==P==
; {{anchor|p.}}p.
: ''post'' or after, often used in quotations. Hence, a quotation from "p. 1924" is a quotation from no earlier than 1924.
: ''See '''{{glossary|plural}}'''.''
; {{anchor|palatalization}}[[palatalization]]
# The state or quality of being [[palatalized]], i.e. of pronouncing a sound with the tongue against the [[palate]] of the mouth that normally is not so pronounced. Some languages, such as [[Russian]] and [[Irish]], have pairs of palatalized and unpalatalized [[#consonant|consonant]] [[#phoneme|phonemes]].
# A [[#sound change|sound change]] that involves a change of consonants to become palatalized or move in the direction of the palate; one of the most common of sound changes, and usually triggered by a following {{IPAchar|/e/}}, {{IPAchar|/i/}} or {{IPAchar|/j/}}. In English, palatalization (known as {{w|yod-coalescence}}) converted {{IPAchar|/t/}} {{IPAchar|/d/}} {{IPAchar|/s/}} {{IPAchar|/z/}} to {{IPAchar|/t͡ʃ/}} {{IPAchar|/d͡ʒ/}} {{IPAchar|/ʃ/}} {{IPAchar|/ʒ/}} before a {{IPAchar|/j/}} (which was later lost), resulting in the sounds found in ''na'''t'''ure'', ''proce'''d'''ure'', ''pre'''ss'''ure'', ''mea'''s'''ure'', where the spelling still indicates the sound as it was prior to palatalization. Palatalization still operates [[synchronically]] before a {{IPAchar|/j/}}, producing, for instance, the pronunciations {{m|en|gotcha}} and {{m|en|didja}} from {{m|en|[[got]] [[you]]}} and {{m|en|[[did]] [[you]]}}. (See also {{pedia|Palatalization}})
; {{anchor|palindrome}}[[palindrome]]
: A word, phrase, number or any other [[sequence]] of units which has the property of reading the same [[forwards]] as it does [[backwards]], character for character, sometimes disregarding punctuation, [[capitalization]] and [[diacritic]]s.
; {{anchor|paradigm}} [[paradigm]]
: A set of all forms which contain a common element, especially the set of all [[#inflection|inflectional]] forms of a word or a particular grammatical category.
; {{anchor|paragoge}}{{anchor|paragogic}} [[paragoge]]
: The addition of sounds at the end of a word without changing its morphological structure or meaning.
; {{anchor|parisyllabic}}[[parisyllabic]]
: A word whose inflections contain the same number of syllables as the lemma form ([[cf.]] [[#imparisyllabic|imparisyllabic]]).
; {{anchor|paroxytone}}[[paroxytone]]
: With the stress upon the [[#penultima|penultimate]] (second to last) syllable (e.g. {{m|el|εθνολόγος}}). (Compare with ''[[#oxytone|oxytone]]'', ''[[#proparoxytone|proparoxytone]]'' and ''[[#barytone|barytone]]''.)
; {{anchor|part of speech}}[[part of speech]], {{anchor|POS}}POS, {{anchor|POS}}PoS
: The category that a word belongs to, with respect to how it's used as part of phrases and sentences. Examples are [[#noun|noun]]s, [[#adjective|adjective]]s and [[#verb|verb]]s. The part of speech is inherent in the word itself, and is independent of any specific role that the word may have within any given sentence (e.g. subject, [[#direct object|direct object]]). Words may belong to more than one part of speech: English {{m|en|this}} is both a [[#determiner|determiner]] and a [[#pronoun|pronoun]], while {{m|en|coat}} is both a noun and a verb.
; {{anchor|partial calque}}{{anchor|loan blend}}{{anchor|partially calqued}}[[partial calque]]
: A term which is only in part a [[#calque|calque]] or [[loan translation]], such that some parts have been translated word-for-word and other parts have been [[#loanword|borrowed]] directly. For example, the English term ''[[liverwurst]]'' is a partial calque of {{m+|de|Leberwurst}}; the first part {{m|de|Leber||liver}} was translated, but the second part {{m|de|Wurst||sausage}} was borrowed without translation. A partial calque is also known as a ''[[loanblend]]''. (''see'' {{pedia|Partial calque}})
; {{anchor|participial}}{{anchor|participle}}{{anchor|participles}}[[participle]]
: A form of a [[#verb|verb]] that may function as an [[#adjective|adjective]] or [[#noun|noun]]. {{cog|en|-}} has two types of participles: the [[#present|present]] participle and the [[#past|past]] participle. In other languages, also [[#future|future]], [[#perfect|perfect]], [[#future perfect|future perfect]] participles.
; {{anchor|particle}}[[particle]]
: A word that does not fall into the usual [[#part of speech|part of speech]] categories, but which modifies another word or the sentence as a whole. The English term ''[[like#Particle|like]]'' is used as a particle in many dialects. Particles are more common in other Indo-European languages (e.g. German {{m|de|doch}}, which marks a sentence as being surprising or rebutting a previous statement) and in East Asian languages (e.g. Japanese {{m|ja|は}}, which marks the topic of a sentence). Many [[#clitic|clitics]] are particles.
; {{anchor|partitive}}[[partitive]]
: Indicating partialness or indeterminateness, such as "some water" or "something nice". In Dutch, it is a word form that is used when referring to undetermined things or amounts (example: ''iets interessants'' = "something interesting"). French has special partitive [[#article|article]]s which qualify indefinite [[#mass noun|mass noun]]s (example: ''J'ai '''du''' café'' can be translated as either "I have '''some''' coffee" or simply "I have coffee").
; {{anchor|partitive case}}[[partitive case]]
: A [[#case|case]] that expresses a partial object or an action that is not performed to completion.
; {{anchor|passive}}{{anchor|passive voice}}[[passive voice]]
: the [[#voice|voice]] verb form in which the subject is not the person or thing doing the action, and is usually having the action done on them ([[cf.]] [[#active voice|active voice]]), e.g. ''the ball was kicked (by the boy).'' (See also {{pedia|Voice (grammar)}})
; {{anchor|past}}{{anchor|past tense}}[[past tense]]
: The [[#tense|tense]] of a [[#verb|verb]] used to refer to an event, transaction, or occurrence that did happen or has happened, or an object that existed, at a point in time before now. An English example is {{m|en|saw}} in ''I saw my friend yesterday''.
; {{anchor|past historic}}[[past historic]]
: A [[#tense|tense]] found primarily in writing in some languages, especially certain {{w|Romance languages}}. It has the same meaning as the [[#preterite|preterite]] but is used particularly in [[narrative]].
; {{anchor|past perfect}}past perfect
: Same as ''[[#pluperfect|pluperfect]]''.
; {{anchor|pejorative}}{{anchor|derogatory}}[[pejorative]] (or [[derogatory]])
: A word form expressing a negative or belittling attitude towards the person or thing referred to. Compare {{m+|en|artsy-fartsy}} with the neutral equivalent {{m|en|artistic}}. Some languages have specific prefixes or suffixes for expressing a pejorative attitude, e.g. {{m+|es|-ucho}}/{{m|es|-acho}} or {{m+|en|schm-}}.
; {{anchor|penultima}}{{anchor|penult}}[[penultima]]
: The next-to-last [[#syllable|syllable]] of a word.
; {{anchor|perfect}}[[perfect]]
: The [[#aspect|aspect]] of a verb indicating that the action described is completed. In English, it consists of the verb ''have'' + the past participle, e.g. ''Tom has painted the fence'' or ''Tom has taken medicine''. Depending on the tense of ''have'' one can have present perfect, which are represented in the previous examples, or past perfect: ''Tom had painted the fence'', ''Tom had taken medicine''. ''To have painted'' is a perfect infinitive. See also ''[[#imperfect|Imperfect]]''. Not to be confused with ''[[#perfective|perfective]]''.
; {{anchor|perfective}}{{anchor|perfective aspect}}[[perfective]]
: The [[#aspect|aspect]] of a verb that denotes viewing the event the verb describes as a simple whole rather than as having internal structure. For example, "she sat down" as opposed to "she was sitting down". As this may often lead to an interpretation of completeness of what is expressed by the verb, this aspect is generally associated with the past and future tenses. Common in {{w|Slavic languages}} such as {{cog|ru|-}}. This term is often used interchangeably with ''[[#aorist|aorist]] aspect''. Not to be confused with ''[[#perfect|perfect]]''. (''see'' {{pedia|Perfective aspect}})
; {{anchor|periphrastic}}[[periphrastic]]
: Using more words to produce a grammatical effect. For example, "more fair" is a ''periphrastic'' form of "fairer". The English future tense requires ''periphrastic'' usage: "I ''will write'' an essay." ([[#Cf.|Cf.]] ''[[#monolectic|monolectic]]'' and ''[[#polylectic|polylectic]]''.)
; {{anchor|person}}[[person]], {{anchor|grammatical person}}grammatical person
: A grammatical category that indicates the relationship between the speaker and what is being spoken of. Examples are [[#first person|first person]], [[#second person|second person]] and [[#third person|third person]].
; {{anchor|phoneme}}[[phoneme]]
: An indivisible unit of sound in a given language, an abstraction of the physical speech sounds.
; {{anchor|phono-semantic compound}}[[phono-semantic compound]]
: A Chinese character ([[#CJKV|CJKV]] character) composed of a component which is related to the meaning the character and another component which is related to the sound of the character, example: the character {{zh-l|媽|lit=mother}} ([[Old Chinese|OC]] *maːʔ) is a phono-semantic compound made up of the semantic {{zh-l|*女|lit=female}} (on the left-hand side of {{lang|zh|媽/妈}}) and the phonetic {{zh-l|馬}} (OC *mraːʔ) (on the right-hand side of {{lang|zh|媽/妈}}).
; {{anchor|phono-semantic matching}}[[phono-semantic matching]]
: A word [[#borrowing|borrowed]] into one language from another in a way that completely or partially preserves both the original sound and meaning. Phono-semantic matchings are especially common in Mandarin Chinese; examples are {{zh-l|可口可乐/可口可樂|tr=Kěkǒu kělè|t=Coca-Cola|lit=tasty [and] entertaining}} and {{zh-l|万维网/萬維網|tr=wàn wéi wǎng|t=world wide web|lit=myriad dimensional net}}.
; {{anchor|phrase}}[[phrase]]
# A word or group of words that functions as a single unit in the [[#syntax|syntax]] of a [[#sentence|sentence]], usually consisting of a [[#head|head]], or central word, and elaborating words. Examples are ''the good boy'' (a [[#noun|noun]] phrase), ''very strange'' (an [[#adjective|adjective]] phrase), and ''in the house'' (a [[#preposition|prepositional]] phrase). Normally distinguished from a [[#clause|clause]], a similar group of words that contains a [[#verb|verb]].
# Same as [[#set phrase|set phrase]].
; {{anchor|piecewise doublet}}[[piecewise]] [[doublet]]
: One of two (or more) derived words in a language that consist of components that all have the same [[#etymology|etymological]] roots, but which have been entered the language at different points in time; in other words, one of two (or more) words that can be split into individual components and all of those components are [[#doublet|doublets]] of the equivalent components of the other words.
; pl.
: ''See '''{{glossary|plural}}'''.''
; {{anchor|plosive}}[[plosive]]
: A [[#consonant|consonant]] sound produced by completely blocking the airflow through the mouth for a short time. In English, the plosives are [[#voiceless|voiceless]] {{IPAchar|/p/}}, {{IPAchar|/t/}}, {{IPAchar|/k/}} (as in the initial sounds of ''pea'', ''tea'', ''key'') and the corresponding [[#voiced|voiced]] sounds {{IPAchar|/b/}}, {{IPAchar|/d/}}, {{IPAchar|/ɡ/}} (as in the initial sounds of ''buy'', ''die'', ''guy''). Plosives are distinguished from [[#fricative|fricative]]s, in which the air is mostly but not completely blocked, enough to cause a rough, hissing or buzzing sound, and [[#approximant|approximant]]s, in which the airflow is only slightly constricted, resulting in a smooth sound.
; {{anchor|pluperfect}}[[pluperfect]]
: A verb form of [[#perfect|perfect]] [[#aspect|aspect]] and [[#past|past]] [[#tense|tense]], which is used to describe an action or event which is regarded as having been completed in the past, in relation to a time already in the past. E.g. ''Tom had painted the fence before I got there''.
; {{anchor|බහුවචන}}{{anchor|plural}}{{anchor|Plural}}[[බහුවචන]] ([[plural]]), {{anchor|plural number}}plural number, {{anchor|pl}}{{anchor|pl.}}pl., p.
: A [[#number|grammatical number]] that indicates multiple items or individuals. Most languages contrast it with [[#singular number|singular]], and plural indicates two or more. Some languages also possess the [[#dual number|dual]] or even [[#trial number|trial]] numbers; in these instances the plural indicates more than the highest specific number.
; {{anchor|plurale tantum}}[[plurale tantum]] (plural = pluralia tantum)
: Same as plural only (see below).
; {{anchor|plural only}}{{anchor|plurale tantum}}{{anchor|pluralia tantum}}[[plural]] [[only]]
: A noun (or a sense of a noun) that is inherently plural and is not used (or is not used in the same sense) in the singular, such as ''[[pants]]'' in the senses of "trousers" and "underpants", or ''[[wheels]]'' in the sense of "car", is ''plural only'' or ''a [[plurale tantum]]''. In practice, most pluralia tantum are found in the singular in rare cases. (''See'' [[:Category:English pluralia tantum]].) Contrast words which are '''[[singular]] [[only]] ([[singulare tantum|singularia tantum]])'''.
; {{anchor|polylectic}}[[polylectic]]
: Used of a grammatical form accomplished with more than one word ([[cf.]] [[#monolectic|monolectic]] and [[#periphrastic|periphrastic]]).
; {{anchor|portmanteau}}{{anchor|Portmanteau}}[[portmanteau]]
: A [[#blend|blend]] that combines meanings.
; POS, PoS
: ''See '''{{glossary|part of speech}}'''.''
; {{anchor|positive}}[[positive]]
: The 'normal' form of the [[#degrees of comparison|degrees of comparison]] of an adjective or adverb. Thus [[big]] is the ''positive'' form of the trio ''big'', ''bigger'', ''biggest''.
; {{anchor|possessional adjective}}[[possessional adjective]]
: An adjective indicating that a noun is in possession of some other noun (or a quality of that noun), commonly formed in English by adding the suffix {{m|en|-ed}}, {{m|en|-ful}}, {{m|en|-y}}, {{m|en|-ous}}, {{m|en|-able}}, {{m|en|-ual}}, {{m|en|-ish}}, {{m|en|-ar}}, {{m|en|-esque}} or {{m|en|-like}}. For example, an animal is [[bushy-tailed]] if it is in possession of a bushy tail, a person filled with disdain is [[disdainful]], and a garden is [[leafy]] if there are many leaves on the plants there. Commonly [[#idiomatic|idiomatic]], such as in [[pinheaded]] or [[red-faced]]. Not to be confused with [[#possessive adjective|possessive adjectives]], which indicate who possesses a noun, or [[#relational adjective|relational adjectives]], which are often formed in the same way. See also [[#privative adjective|privative adjectives]], which denote the opposite.
; {{anchor|possessive determiner}}{{anchor|possessive adjective}}[[possessive determiner]] (or possessive adjective)
: A [[#determiner|determiner]] that indicates ownership. For example, in "her book", the word "her" indicates whose book it is. Not to be confused with [[#possessional adjective|possessional adjectives]], which indicate what a noun possesses.
; {{anchor|postpositive}}[[postpositive]]
: Placed after the word modified.
; {{anchor|preconsonantal}}[[preconsonantal]]
: Immediately preceding a [[#consonant|consonant]] or consonant sound.
; {{anchor|predicate}} [[predicate]]
: The part of a [[#sentence|sentence]] that follows the [[#subject|subject]]. This generally consists of the [[#verb|verb]] and any [[#object|object]]s. It can also consist of a [[#linking verb|linking verb]] (e.g. "to be", "to seem", etc.) and a following [[#adjective|adjective]], which is termed a ''predicate adjective'' or ''predicative adjective'' (contrasted with an ''[[#attributive|attributive]] adjective'', which directly modifies a [[#noun|noun]]). An example would be {{m|en|good}} in ''The food is good''. Some languages, such as {{cog|de|-}} and {{cog|ru|-}}, have a special declension for predicate adjectives.
; {{anchor|predicative}}{{anchor|predicatively}}[[predicative]]
: Describes a term that acts as the [[#predicate|predicate]] or part of the predicate of a [[#sentence|sentence]] (e.g. a ''predicative [[#adjective|adjective]]'', such as {{m|en|good}} in ''The food is good''). Some adjectives are only-predicative like {{m|en|afraid}} or {{m|en|glad}} in English.―In {{cog|ru|-}}, it often specifically refers to an adjective-like [[#part of speech|part of speech]] that serves as the entire predicate of a sentence in an [[#impersonal|impersonal]] construction. Such constructions often cannot be translated word-for-word in English. An example is {{m|ru|ску́чно||it is [[boring]]}} in the sentence {{m|ru|[[я|мне]] [[ску́чно]]||I am [[bored]]|lit='''It is boring''' to [[me]]}}.
; {{anchor|prefix}}{{anchor|prefixed}}{{anchor|prefixation}}[[prefix]]
: A [[morpheme]] added to the beginning of a word to modify its meaning.
; {{anchor|prescriptive}}[[prescriptive]]
: (as a context label for a word or phrase) Correct and consistent according to linguistic rules, but not in general use.
; {{anchor|prevocalic}}[[prevocalic]]
: Immediately preceding a [[#vowel|vowel]] or vowel sound.
; {{anchor|preposition}}[[preposition]]
: A word, normally non-[[#inflection|inflect]]ing, that is typically employed to connect a following [[#noun|noun]] or [[#pronoun|pronoun]], in an [[#adjective|adjectival]] or [[#adverb|adverbial]] sense, with some other word. Examples of prepositions in English are ''in'', ''from'' and ''during''. Note that some languages have [[#postposition|postposition]]s instead of prepositions; they function like prepositions but come ''after'' the noun or pronoun being connected.
; {{anchor|prepositional case}}{{anchor|prepositional}}[[prepositional case]]
: A [[#case|case]] used in certain languages, especially {{cog|ru|-}}, after certain [[#preposition|preposition]]s. In {{cog|ru|-}}, it corresponds to the [[#locative case|locative case]] in other {{w|Slavic language}}s.
; {{anchor|present}}{{anchor|present tense}}[[present tense]]
: The [[#tense|tense]] of a [[#verb|verb]] used primarily to refer to an event, transaction, or occurrence happening now or at the present time. The verb {{m|en|see}} in ''I see my friend in the window'' is in the present tense. In many languages, including English, the present tense may also be used to refer to past or future events in certain contexts: ''My plane leaves tomorrow morning'' (where {{m|en|leave}} is a present verb that refers to the future), or: ''John Lennon dies of gunshot wounds'' (as in a headline, where {{m|en|dies}} is a present verb that refers to the past; see [[historical present]]). While such uses are somewhat exceptional in English, the present tense is used much more widely in many languages. For example, the German present tense also covers some or most of the uses of the English future (''I will do'') and present perfect (''I have done'').
; {{anchor|preterite}}[[preterite]] (also spelled [[preterit]])
: A [[#tense|tense]] showing an action at a determined moment in the past. In general it is thus the union of the [[#past tense|past tense]] with the [[#perfective|perfective]] aspect, although in some languages it is little more than a synonym for past tense.
; {{anchor|preterite-present verb}}[[preterite-present verb]]
: In [[Germanic]] languages, a verb that displays (or historically displayed) [[#ablaut|ablaut]] in the present tense, and thereby had ''present'' tense forms resembling the ''past'' (or ''preterite'') tense of a [[#strong verb|strong verb]]. Most languages have no more than a handful of such verbs, and they are often used as [[#auxiliary verb|auxiliary verbs]]. English examples are {{m|en|shall}}, {{m|en|can}}, {{m|en|may}}. Contrast [[#strong verb|strong verb]], [[#weak verb|weak verb]].
; {{anchor|privative adjective}}[[privative adjective]]
# An adjective indicating that a noun refers to an object that is not of the class which that noun ordinarily refers to. For example, in the term "fake weapon", the word "fake" denotes that the object is not a weapon, just as the word "toy" in "toy car" denotes that it is not a car.
# An adjective indicating that a noun lacks some other noun (or a quality of that noun), usually formed in English by adding the suffix {{m|en|-less}} or {{m|en|-free}} to the noun that is absent. For example, someone is [[beardless]] if they don't have a beard, while a coffee might be [[sugar-free]] if it contains no sugar. Commonly [[#idiomatic|idiomatic]], such as in [[brainless]] or [[heartless]]. See also [[#possessional adjective|possessional adjectives]], which denote the opposite.
; {{anchor|productive}}[[productive]]
: Used to form new words and phrases. For example, when a new verb appears in Modern English, the productive suffix {{m|en|-ed}} is used to form its past participle; by contrast, the suffix ''[[-en]]'' appears in many existing past participles, but is not productive, in that it is not (usually) used to form new ones.
; {{anchor|progressive}}[[progressive]]
: The [[#aspect|aspect]] of a verb, indicating that the action described is, was or will be continuing, uncompleted or repeated. A verb form indicating that an action is [[in progress]]. In English, formed from a combination of ''be'' + the present participle (''-ing'' form) of the verb. So one can have present progressive (e.g. '''''is''' painting''), past progressive (e.g. '''''was''' painting''), future progressive (e.g. '''''will be''' painting''), etc. Similar to, but less general than, the [[#imperfective|imperfective]] [[#aspect|aspect]]. (See also ''[[#continuous|continuous]]''.)
; {{anchor|pronominal verb}}{{anchor|pronominal}}[[pronominal verb]]
: A form of [[#verb|verb]] that has an attached [[#pronoun|pronoun]], prominent feature of [[Romance language|Romance]] and Slavic languages. The verb-pronoun combination can have [[#reflexive|reflexive]], [[#reciprocal|reciprocal]], [[#passive|passive]], [[#subjective|subjective]] or [[#idiomatic|idiomatic]] semantics.
; {{anchor|pronoun}}[[pronoun]]
: A [[#part of speech|part of speech]] that acts as a substitute for a [[#noun|noun]] or [[noun phrase]] and refers to a topic of the discussion. Pronouns can refer to a participant in the discussion and can be used instead of a person's name, such as with the pronouns {{m|en|I}} and {{m|en|you}}. Other pronouns, such as {{m|en|he}}, {{m|en|she}}, and {{m|en|it}}, can be used to refer to other people or objects that have already been mentioned without repeating their names.
; {{anchor|pronunciation spelling}}[[pronunciation spelling]] {{nobold|{{wikipedia|pronunciation spelling}}}}
: A deliberate misspelling used in writing, typically to indicate the speech of a particular dialect, even if the speaker may have perfect spelling. As such, it is the functional opposite of [[#eye dialect|eye dialect]].
; {{anchor|proparoxytone}}[[proparoxytone]]
: With the stress upon the [[#antepenultimate|antepenultimate]] (third to last) syllable (e.g. {{m|el|εθνικότητα}}). (Compare with ''[[#oxytone|oxytone]]'', ''[[#paroxytone|paroxytone]]'', and ''[[#barytone|barytone]]''.)
; {{anchor|proper noun}}[[proper noun]]
: A kind of [[#noun|noun]] that usually refers to a specific, unique thing, such as {{m|en|Earth}} and {{m|en|Alps|the Alps}}, though one language's proper noun may translate to another language using a ''common'' (not proper) noun. In English, proper nouns are usually capitalized, as are common nouns and adjectives derived from proper nouns. The same word may have both common-noun and proper-noun senses (such as {{m|en|German}}, which is both a proper noun denoting a certain language, and a common noun denoting a person from Germany), and most proper nouns can sometimes be used as common nouns – e.g. {{m|en|John}} is a proper noun that is a first name, but can be used a common noun with plural {{m|en|Johns}} meaning "people named John".
; {{anchor|proscribed}}[[proscribe]]d
: Some authorities or commentators recommend or warn against the listed usage.
; {{anchor|prothesis}}[[prothesis]]
:The prepending of [[#phoneme|phonemes]] at the beginning of a word without changing its morphological structure, as in {{m|en|nother}}, from {{m|en|other}} (“a whole nother thing”), or Spanish {{m|es|esfera}} from Latin {{m|la|sphaera||sphere}}.
; {{anchor|proverb}}[[proverb]]
: A [[#phrase|phrase]] expressing a basic truth which may be applied to common situations.
; {{anchor|pseudoacronym|pseudo-acronym}}[[pseudo-acronym]]
: A word that has the form of an [[#acronym|acronym]] or [[#initialism|initialism]] but no longer stands for anything. (See also {{pedia|Pseudo-acronym}})
; {{anchor|pseudoanglicism|pseudo-anglicism}}[[pseudo-anglicism]]
: A word in a non-English language that is formed from English elements and may appear to be English, but that does not exist as an English word with the same meaning, such as {{m|de|Flipper||pinball machine}}, {{m|ja|サラリーマン||white-collar worker|tr=sararīman}} and {{m|sv|afterwork||informal gathering after work}}.
; {{anchor|pseudo-loan}}[[pseudo-loan]]
: A word in one language that appears to be a direct borrowing from another language, but does not exist in that language or has an unrelated meaning. Examples are {{m+|fr|footing||jogging}}, {{m+|de|Bodybag||messenger bag, courier bag}}, {{m+|ja|サラリーマン||white-collar worker, '[[salaryman]]'|tr=sararīman}} and {{m+|sv|afterwork||informal gathering after work}}. Depending on the source language, more specific terms may be in use, e.g. ''[[pseudo-anglicism]]'' for pseudo-loans from English; ''{{w|wasei-eigo}}'' specifically for Japanese-language pseudo-loans from English; ''[[:Category:Pseudo-loans from Latin by language|pseudo-Latinism]]'' for pseudo-loans from Latin (cf. [[hocus pocus]], [[noli illegitimi carborundum]]); ''[[:Category:Pseudo-loans_from_Spanish_by_language|pseudo-Hispanism]]'' for pseudo-loans from Spanish (cf. [[no problemo]], [[que sera sera]]); ''[[:Category:Pseudo-loans_from_French_by_language|pseudo-Gallicism]]'' for pseudo-loans from French (cf. [[vive la différence]], [[nom de plume]], [[triple entendre]]); ''[[:Category:Pseudo-loans from German by language|pseudo-Germanism]]'' (from German), ''[[:Category:Pseudo-loans from Japanese by language|pseudo-Japonism]]'' (from Japanese), ''pseudo-Arabism'' (from Arabic), ''pseudo-Italianism'' (from Italian), etc.
==R==
; {{anchor|rare}}[[rare]]
: A term or sense that is attested but not used commonly either in spoken or written language, even less so than [[#uncommon|uncommon]] terms.
; {{anchor|reanalysis}}{{anchor|reanalysed}}{{anchor|reanalyzed}}[[reanalysis]]
: Analysis of a [[#lexeme|lexeme]] with a different structure from its original, often by misunderstanding. For example, ''[[hamburger]]'', which is originally ''[[Hamburg]]'' + ''[[-er]]'', was reanalyzed as ''[[ham]]'' + ''[[-burger]]'', which produced words like ''[[cheeseburger]]''.
; {{anchor|rebracketing}}{{anchor|metanalysis}}[[rebracketing]]
: The process by which a word originally derived from one source is broken down or bracketed into a different set of factors. The understanding of ''[[hamburger]]'' as ''[[ham]] + [[burger]]'' (rather than ''[[Hamburg]]'' + ''[[-er]]'') is an example of rebracketing. Also called '''[[metanalysis]]'''.
; {{anchor|reciprocal}}[[reciprocal]]
: Used to indicate that subjects have other subjects as object. Pronouns can be reciprocal (in English ''[[each other]]''), as well as verbs [[reciprocal]] quality as [[#lexeme|lexeme]]s.
; {{anchor|reconstruction}}{{anchor|reconstructed}}[[reconstruction]]
: A word that is not recorded in actual texts or other media, but has been recreated from its descendant forms, using the [[comparative method]] of linguistics.
; {{anchor|reducible}}[[reducible]]
: In the {{w|Slavic languages}}, a word (especially a noun or adjective) with an alternation between a vowel and no vowel in different forms of the word, pursuant to {{w|Havlík's law|Havlík’s law}}. In Russian, for example, the reducible masculine noun {{m|ru|вене́ц||[[crown]]}} appears unreduced (with /e/ in the final syllable) in the masculine singular, and reduced (with no /e/) in other forms, e.g. genitive singular {{m|ru|венца́}}, nominative plural {{m|ru|венцы́}}.
; {{anchor|reduplication}}{{anchor|reduplicated}} [[reduplication]]
: The repetition of a word or a part of a word (as few as two [[#phoneme|phonemes]] in a word, or the whole sequence of phonemes in the word) with no or slight change. Compare [[#haplology|haplology]], the [[#elision|elision]] of a repeated part of a word.
; {{anchor|reflexive}}[[reflexive]]
: Referring back to the subject, or having an object equal to the subject. Pronouns can be reflexive (e.g. ''[[myself]]'', ''[[oneself]]''). [[Romance language|Romance]] and Slavic languages make extensive use of reflexive verb forms (e.g. {{ncog|it|lavarsi}}, {{ncog|es|lavarse||to wash oneself}}). These are part of a larger group of [[#pronominal verb|pronominal verbs]].
; {{anchor|register}}[[register#English:_language register|register]] {{nobold|{{wikipedia|Register (sociolinguistics)}}}}
: A variety of a language used for a particular purpose or in a particular social setting. Encompasses variants such as [[#slang|slang]], [[#colloquial|colloquial]], [[#informal|informal]], [[#formal|formal]], etc.
; {{anchor|related terms}}[[Wiktionary:Entry layout explained#Related terms|related terms]]
: Words in the same language that have strong etymological connections but are '''not''' derived terms.
; {{anchor|relational}}{{anchor|relational adjective}}[[relational]]
: Refers to a type of adjective in some languages, e.g. {{cog|la|-}}, {{cog|grc|-}} and the {{w|Slavic languages}}, that takes the place of a noun when it modifies another noun. Consider an English phrase such as ''chicken soup''. In English, this phrase can be constructed by simply placing a noun such as ''chicken'' in the position normally occupied by an adjective, i.e. directly before the noun. In languages such as {{cog|ru|-}}, however, this cannot be done, and instead the word {{m|ru|ку́рица||chicken}} must be replaced by the relational adjective {{m|ru|кури́ный||related to chickens}} when forming the Russian equivalent {{m|ru|[[кури́ный]] [[суп]]||chicken soup}}. Generally, adjectives of this sort cannot be qualified by ''more'', ''less'' or ''very''.
; {{anchor|relative}}[[relative]]
:# Marking a [[#relative clause|relative clause]]. Often used of pronouns, such as {{m|en|the tree '''[[which]]'''...}}.
:# In the {{w|Bantu languages}}, a [[#part of speech|part of speech]] that resembles an [[#adjective|adjective]] in function, but behaves morphologically and syntactically like a [[#relative clause|relative clause]].
; {{anchor|relative clause}}[[relative clause]] {{nobold|{{wikipedia|Relative clause}}}}
: A [[#subordinate clause|subordinate clause]] that modifies a [[#noun|noun]]. In ''The man who I saw yesterday is leaving today'', the clause ''who I saw yesterday'' is a relative clause. In English, relative clauses are often introduced by a [[#relative|relative]] [[#pronoun|pronoun]] such as ''who'', ''which'' or ''that'', but other languages often have different strategies for marking relative clauses.
; {{anchor|respelling}}[[respelling]]
: A different spelling of a word, especially to show its pronunciation.
; {{anchor|retronym}}[[retronym]]
: A new word or phrase coined for an old object or concept whose original name has become used for something else or is no longer unique (such as acoustic guitar where guitar used to mean this but can now also refer to an electric guitar).
; {{anchor|rhetoric}}[[rhetoric]]
# The art of effective or persuasive speaking or writing.
# A string of words that are designed to impress or confuse, rather than communicate. (See also ''[[Appendix:Glossary of rhetoric]]''.)
; {{anchor|rhetorical question}}[[rhetorical question]]
: A question to which the speaker does not expect an answer
; {{anchor|rhotacism}}[[rhotacism]], {{anchor|rhotacization}}[[rhotacization]]
: A [[#sound change|sound change]] that converts one consonant (usually a voiced alveolar consonant: /z/, /d/, /l/, or /n/) to a [[rhotic]] consonant in a certain environment, most commonly /z/ to /r/.
; {{anchor|Romanization}}{{anchor|Romanisation}}{{anchor|romanization}}{{anchor|romanisation}}[[Romanization]], [[Romanisation]]
: [[#transliteration|Transliteration]] of a string in a non-Latin script into the Latin or Roman one: for instance, {{m|el|συγγνώμη|tr=-}} can be romanized as ''singnómi''.
; {{anchor|root}}[[root]]
: The part of a word that forms its core and gives its most basic meaning; also the part of the word that is left when all [[#affix|affix]]es are removed. For example, in {{m|en|insubordination}}, the root is {{m|en||ord}}, while in {{m|en|unspeakableness}} it is {{m|en|speak}}. The root is often the first part of the word (as in [[Uralic]] and often in [[Indo-European]] languages), but it may also be the last part, or it may only consist of the consonants of the word (as in the [[Afroasiatic]] languages).
==S==
; s
: ''See '''{{glossary|singular}}'''.''
; {{anchor|SAMPA}}[[SAMPA]]
: [[w:SAMPA|SAMPA]] (Speech Assessment Methods Phonetic Alphabet), a set of systems for representing the phonemes of various languages in plain [[ASCII]] text. Not to be confused with [[w:X–SAMPA|X–SAMPA]], the system for representing the ''full'' International Phonetic Alphabet in plain ASCII text.
; {{anchor|script}}[[script]]
: A writing system adapted to a particular language or set of languages.
; {{anchor|second person}}{{anchor|second-person}}[[second person]], {{anchor|2nd person}}[[2nd person]]
: A [[#person|grammatical person]] that indicates the person or group that one is speaking to. Examples are the English pronouns {{m|en|you}} and {{m|en|thou}}.
; {{anchor|second-person-object}}{{anchor|second-person-object form}}{{anchor|second person object}}second-person-object form
: A type of conjugation in [[Hungarian]] (aside from [[#definite|definite]] and [[#indefinite|indefinite]]) which indicates a first-person singular subject and a second-person (whether singular or plural, but informally addressed) object, for example {{m|hu|szeretlek|szeret'''lek'''|'''I''' love '''you'''}} or {{m|hu|látlak|lát'''lak'''|'''I''' see '''you'''}}.
; {{anchor|semantic loan}}{{anchor|ශබ්දාර්ථවිභාග ණයට ගැනීම්}} [[ශබ්දාර්ථවිභාග ණයට ගැනීම්]] ([[semantic loan]])
: A word or expression created by [[#loanword|borrowing]] a meaning from another language and assigning it to a word or expression that already exists in the borrowing language, also called semantic calque. (Compare [[#calque|calque]], a new word or expression created by translation.) For example, the French word {{m|fr|souris|lit=mouse}} was given the additional meaning ''[[computer]] [[mouse]]'' in imitation of {{m+|en|mouse}}, which already had both meanings. (''see'' {{pedia|Semantic loan}})
; {{anchor|semelfactive}}[[semelfactive]]
: A verbal [[#aspect|aspect]], a subclass of [[#perfective|perfective]], which denotes a [[momentary]] or [[punctual]] event (e.g. to [[sneeze]], to [[blink]], to [[knock]]). In {{w|Slavic languages}} such as {{cog|ru|-}}, often used to express actions performed once. (''See'' {{pedia|Semelfactive}})
; {{anchor|semi-learned borrowing}}[[semi-learned borrowing]]
: A [[#loanword|loanword]] that was borrowed from a [[classical language]] such as Latin or Sanskrit (especially when borrowed into a descendant of the same language), which has been partly reshaped by later [[#sound change|sound change]] or analogy with inherited terms. Opposed to [[#learned borrowing|learned borrowings]], which have not been similarly reshaped, and [[#inherited|inherited]] terms, which have undergone all the normal sound changes of a language. For example, the Portuguese term {{m|pt|artigo||article}} is a semi-learned borrowing from {{cog|la|articulus||joint, limb, division}}, which was borrowed early enough to undergo later sound changes that [[lenite]]d ''c'' into ''g'' and deleted ''l'' between vowels, but did not undergo earlier sound changes, such as lowering short ''i'' to ''e''. In comparison, {{m|pt|artelho||toe}} is inherited from the same Latin term, and {{m|pt|artículo||[[articulus]]}} is a learned borrowing from the same Latin term.
; {{anchor|semivowel}}[[semivowel]]
: A sound which has some qualities of a [[#consonant|consonant]] and some qualities of a [[#vowel|vowel]].
; {{anchor|sentence}}[[sentence]]
: A syntactic unit that expresses a complete thought and consists of one or more [[#clause|clause]]s joined together.
; {{anchor|sentence adverb}} [[sentence adverb]]
: An adverb that modifies an entire clause or sentence rather than a single word or phrase.
; {{anchor|set phrase}}{{anchor|set expression}}{{anchor|multiword phrase}}{{anchor|multiword expression}}[[set phrase]]
: [[w:Set phrase|Set phrase]], a common [[expression]] (a [[#phrase|phrase]]) whose [[wording]] is not subject to [[variation]], or alternately, whose words cannot be replaced by [[#synonym|synonymous]] words without [[compromise|compromising]] the meaning. Set phrases may include [[#idiom|idiom]]s, [[#proverb|proverbs]], and [[#colloquial|colloquialisms]]. For example, ''flight simulator'' is a set phrase because it has a special meaning that ''flying simulator'' doesn't.
; sg.
: ''See '''{{glossary|singular}}'''.''
; SGV
: ''See '''{{glossary|singulative}}'''.''
; {{anchor|shortening}}[[shortening]]
: A shortened form of a word(s), including [[#abbreviation|abbreviations]], [[#acronym|acronyms]], [[#contraction|contractions]], [[#initialism|initialisms]], [[#short form|short forms]].
; {{anchor|short_form}}short form
: A shortened term which is itself a stand-alone term; eg. {{m|en|Acts}}, a short form used to refer to {{m|en|Acts of the Apostles}}.
; {{anchor|sic}}''[[sic]]''
: A Latin adverb meaning "thus, so". It is traditionally placed inside square brackets and used in quotations to indicate that the preceding is not a copying error, but is in fact a verbatim reflection of the source. (For example, if a source contains a typographical error, someone quoting the source might add [sic] to make clear that the error was in the original source.)
; {{anchor|siglum}}[[siglum]] (pl. sigla)
: A letter or other symbol that stands for a word or name; eg. {{m|la|ꝓ}} is a medieval Latin siglum for the word {{m|la|pro}}.
; {{anchor|simile}}[[simile]]
: A [[figure of speech]] in which one thing is compared to another; in English, it generally uses [[like]] or [[as]]; see [[#metaphorical|metaphor]] and [[#figurative|figurative]].
; {{anchor|simplex}}[[simplex]]
: A simple word, one without [[#affix|affixes]].
; {{anchor|ඒක වචන}}[[ඒක වචන]]
: පහත [[#singular]] වෙත යොමු වන්න.
; {{anchor|singular}}{{anchor|Singular}}[[singular]], {{anchor|singular number}}singular number, {{anchor|sg}}{{anchor|sg.}}sg., {{anchor|s}}s
: A [[#number|grammatical number]] that indicates exactly one item or individual. Usually contrasts with [[#plural number|plural]], and, in some languages, with [[#dual number|dual]].
; {{anchor|singulative}}[[singulative]], {{anchor|singulative number}}singulative number, {{anchor|SGV}}SGV
: The marked singular form of an unmarked [[#mass noun|mass noun]].
; {{anchor|Sino-Xenic}}[[Sino-Xenic]]
: Refers to pronunciations in [[Japanese]], [[Korean]] and [[Vietnamese]] languages (grouped with Chinese as [[#CJKV|CJKV]]) of terms or components derived from medieval [[Chinese]].
; {{anchor|s.l.}}[[s.l.#Etymology 2|s.l.]]
: {{noncog|la|[[sine]] [[locō]]|lit=without a place}}, used to indicate that the place of publication is not stated in a work.
; {{anchor|slang}}[[slang]]
: Denotes language that is unique to a particular profession or subject, i.e. [[jargon]]. Also refers to the specialized language of a social group, sometimes used to make what is said unintelligible to those who are not members of the group, i.e. [[cant]]. Such language is usually outside of conventional usage, and is mostly inappropriate in [[#formal|formal]] contexts.
; {{anchor|slavic first palatalization}}{{w|Slavic first palatalization}}
: A specific occurrence of [[#palatalization|palatalization]] that occurred in the {{w|Proto-Slavic language}}, in which the [[#velar|velar]] consonants ''*k *g *x'' when followed by any of the [[#front vowel|front vowel]]s ''*e *ě *ь *i'' became the sounds ''*č *ž *š'', respectively. The Slavic first palatalization is still an active process in many modern {{w|Slavic languages}}. For example, before certain suffixes in {{cog|ru|-}}, the consonants {{lang|ru|к г х ц}} become {{lang|ru|ч ж ш ч}} respectively. Other {{w|Slavic languages}} behave similarly. (''See'' {{pedia|Slavic first palatalization}})
; {{anchor|slavic progressive palatalization}}{{w|Slavic progressive palatalization}}
: A specific occurrence of [[#palatalization|palatalization]] that occurred in the {{w|Proto-Slavic language}}, in which the [[#velar|velar]] consonants ''*k *g *x'' when preceded by either of the [[#front vowel|front vowel]]s ''*ь *i'' (possibly with an intervening ''n'') became the sounds ''*c dz s/š'', respectively, with ''s'' occurring in East and South Slavic but ''š'' occurring in West Slavic. (See also {{pedia|Slavic progressive palatalization}})
; {{anchor|s.n.}}[[s.n.]]
: {{noncog|la|[[sine]] [[nōmine]]|lit=without a name}}, used to indicate that the name of the publisher is not stated in a work.
; {{anchor|snowclone}}[[snowclone]]
: A type of {{l|en|cliché}} which uses an old {{glossary|idiom}} formulaically in a new context. (See also ''[[Appendix:English snowclones]]'' and {{pedia|Snowclone}})
; {{anchor|solemn}} [[solemn]]
: Used to evoke a sense of current events being highly important. Examples of situations where solemn language is likely to be used are liturgical events, various ceremonies, and public speeches. Solemn terms are often dated or archaic, and once belonged in the neutral register.
; {{anchor|sound change}}[[sound change]]
: A change in the pronunciation of a sound in a given language, usually according to regular rules. An example of such a change in English is the deletion of ''h'' in the {{IPAchar|/hw/}} cluster found in words such as ''which'' and ''whale'', making them [[homophonous]] with ''witch'' and ''wail'', respectively. (This sound change is found in most varieties of English, but not in Scottish English or in some conservative American English and Irish English varieties. See {{w|Pronunciation of English ⟨wh⟩}}.)
; {{anchor|sound symbolism}}{{anchor|sound-symbolic}}[[sound symbolism]]
: The idea that [[phoneme]]s or clusters of phonemes carry intrinsic meaning in a language. For example, the phoneme cluster ''gl-'' appears to mean "light" in English in words such as [[gleam]], [[glisten]], [[glare]], [[glossy]] and [[glow]]. (''See'' {{pedia|sound symbolism}} ''Also see'' {{pedia|phonestheme}})
; {{anchor|spelling pronunciation}}[[spelling pronunciation]]
: A pronunciation affected by the written form of the word, diverging from the original inherited form. Some spelling pronunciation are considered mistakes or non-standard, while others have historically become universally accepted and completely replaced the original pronunciations. (''See'' {{pedia|Spelling pronunciation}})
; {{anchor|stem}}[[stem]]
: The part of an [[#inflection|inflected]] word that the ending is attached to. For example, Latin {{m|la||mens-}} (stem, "table") + {{m|la|-ae}} (ending, 1st-declension nominative plural) → {{m|la|mensae}} (full word, "tables", nominative plural).
; {{anchor|stratum}}{{anchor|strate}}{{anchor|adstratum}}{{anchor|adstrate}}[[stratum]] {{nobold|{{wikipedia|stratum (linguistics)}}}}
: A language that influences another by [[w:language contact|contact]], typically due to close geographic proximity (often both spoken simultaneously in the same land) and some form of cultural contact. A stratum can be further classified as [[#substrate|substrate]], [[#superstrate|superstrate]], or adstrate.
; {{anchor|strictly}}{{anchor|strict}}[[strictly]]
: Indicates a more precise use of words; short for ''strictly speaking'' ([[sensu stricto]]). Contrast ''loose'' or ''broad'' (''wide'') sense; ''[[#loosely|loosely]]''.
; {{anchor|strong declension}}{{l|en|strong declension}}
: In German, a declension of adjectives, and of masculine and neuter nouns, that is defined in opposition to the [[#weak declension|weak declension]] and [[#mixed declension|mixed declension]]. Strong nouns (typically) form their genitive in ''-s'' and/or ''-es'' and do not form their plural by adding ''-n'' and/or ''-en''. In adjectives, the strong declension is a set of endings used when the adjective is not accompanied by a definite or indefinite article, and includes a fuller set of endings than that of the weak or mixed declensions (hence the name). Note that "strong", "weak" and "mixed" refer to inherent declensional properties of nouns, but all adjectives can be declined according to all three declensions, depending on whether an article precedes and what type of article it is. By analogy, the term "strong declension" is sometimes used in other inflected Germanic languages such as {{w|Icelandic}} and {{w|Old English}}. In these languages, adjectives are formed similarly to German but there is typically not a single strong noun declension. Rather, a strong noun is any noun that does not follow the weak declension.
; {{anchor|strong pronoun}} strong pronoun
: (''Greek'') An [[#emphatic|emphatic pronoun]].
; {{anchor|strong conjugation}}
; {{anchor|strong verb}} [[strong verb]] and strong conjugation
: In [[Germanic]] languages, a verb that displays [[#ablaut|ablaut]]. More specifically, a verb that has a change in [[#vowel|vowel]] between present and past. An English example is {{m|en|drink}}, {{m|en|drank}}, {{m|en|drunk}}. Note that some verbs show a vowel change, but not as a result of ablaut (e.g. {{m|en|think}}, {{m|en|thought}}); these are not considered strong verbs. Contrast [[#weak verb|weak verb]], [[#preterite-present verb|preterite-present verb]].
; {{anchor|subject}}[[subject]] {{nobold|{{wikipedia|subject (grammar)}}}}
: In a [[#clause|clause]]: the word or word group (usually a noun phrase) that is dealt with. In [[#active voice|active clauses]] with [[#verb|verbs]] denoting an action, the subject and the actor are usually the same. Contrast [[#object|object]].
; {{anchor|subjunctive}}{{anchor|subjunctive mood}}{{anchor|conjunctive}}[[subjunctive mood]]
: The [[#mood|mood]] of a [[#verb|verb]] expressing an action or state which is hypothetical or anticipated rather than actual, including wishes and commands. Some English examples are ''if I '''were''' rich'' and ''it’s important that he '''be''' here''.
; {{anchor|subordinate clause}}[[subordinate clause]]
: Same as [[#dependent clause|dependent clause]].
; {{anchor|substantive}}[[substantive]]
:# A noun or adjective (or phrase), that names a real object with ''substance''. This is in contrast to an [[#attributive|attributive]] noun or adjective, which names a real object that carries the ''attributes'' of the named noun or adjective.
:# In [[Mongolic]] languages, it sometimes refers to a single [[#part of speech|part of speech]] that collectively encompasses nouns, adjectives and adverbs, due to their shared morphological behaviour.
; substantivization
: ''See '''{{glossary|nominalization}}'''.''
; {{anchor|substratum}}{{anchor|substrate}}[[substratum]]
: A language [[#stratum|stratum]] which has lower cultural or political prestige than the one which it influences. Many historical '''substrate''' languages have gone extinct without ever having been attested, and so they must be inferred from their influences on surviving or attested languages. One such example is the [[Pre-Greek]] substratum.
; {{anchor|suffix}}{{anchor|suffixed}}[[suffix]]
: A [[morpheme]] added to the end of a word to modify its meaning.
; {{anchor|superlative}}[[superlative]]
: An [[#inflection|inflection]], or different form, of a '''[[#comparable|comparable]]''' adjective showing a relative quality, denoting "to the ultimate extent". (See also ''[[#comparative|comparative]]'' and ''[[#degrees of comparison|degrees of comparison]]''.) In English, the superlative form is often formed by appending ''-est'', or using the word ''most''. For example, the superlative of ''big'' is "''biggest''"; of ''confident'', "''most confident''".
; {{anchor|superseded}}[[supersede]]d
: Especially of a spelling, formerly standard, and still frequently encountered, but now deprecated in favor of another form as the result of a spelling reform. Examples in Portuguese: {{m|pt|idéia}} instead of {{m|pt|ideia}}, {{m|pt|freqüente}} instead of {{m|pt|frequente}}, {{m|pt|microondas}} instead of {{m|pt|micro-ondas}}, all replaced in the {{w|Portuguese Language Orthographic Agreement of 1990|1990 Orthographic Agreement}}, which was fully implemented only by 2015.
; {{anchor|superstratum}}{{anchor|superstrate}}[[superstratum]]
: A language [[#stratum|stratum]] which has higher cultural or political prestige than the one which it influences. One historical example is the '''superstrate''' effect of [[Old Norman]] French on late [[Old English]] in the centuries following the 11th-century [[w:Norman conquest of England|Norman conquest of England]].
; {{anchor|supine}}[[supine]]
: A term for an [[infinite]] verb form in some languages. In Latin, a type of [[#verbal noun|verbal noun]], used for the [[#ablative|ablative]] and [[#accusative|accusative]] case of an [[#infinitive|infinitive]]. In Swedish, a form related to the [[#past participle|past participle]], used to form [[#perfect|perfect]] tenses. In Slovene and Lower Sorbian, a form related to the infinitive, used to indicate purpose after a verb of movement.
; {{anchor|suppletion}}{{anchor|suppletive}}[[suppletion]], [[suppletive]]
: The situation in which the inflected forms of a word come from two or more unrelated roots: for example, {{m|en|go}} and {{m|en|went}}; {{m|en|be}}, {{m|en|is}}{{,}} and {{m|en|was}}. One or more of these forms, or the entire [[#paradigm|paradigm]] of the word, may then be called suppletive. Examples from various languages may be found from [[:Category:Suppletive verbs by language]].
; {{anchor|surface etymology}}{{anchor|surface analysis}}{{anchor|surface}}{{anchor|equivalent to}}[[surface analysis]], [[surface etymology]]
: The [[apparent]] etymology of a term by an [[analysis]] based on components occurring in the form of the language at a later point in time, i.e. that term's {{glossary|synchronic}} makeup: for example, the analysis {{m|en|earth}} + {{m|en|-en}} for {{m|en|earthen}}, which actually was inherited via Middle English from Old English, in which it occurred as {{m|ang|eorþen|eorthen}}.
; {{anchor|syllable}}[[syllable]]
: A unit of human speech that is interpreted by the listener as a single sound. (''See'' {{pedia|Syllable}})
; {{anchor|synchrony}}{{anchor|synchronic}}{{anchor|synchronically}}[[synchrony]] {{nobold|{{wikipedia|Diachrony_and_synchrony|Diachrony and synchrony}}}}
: The viewpoint of analysis of a language which considers only its state at one point (or period) in time, not accounting for historical language change or etymology (as opposed to {{glossary|diachrony}}). A purely '''synchronic''' analysis of a word or phrase (as e.g. from the intuition of a speaker of the language) which may differ from its true etymological derivation is termed a {{glossary|surface analysis}}.
; {{anchor|syncope}}{{anchor|syncopic}}{{anchor|syncopation}}{{anchor|syncopated}}[[syncope]]
: The deletion or elision of sounds inside a word (not at the beginning or end), most often a single [[#vowel|vowel]], but sometimes a [[#consonant|consonant]] or a sequence of vowels or consonants. Deletion at the beginning of a word is called [[#apheresis|apheresis]], at the end [[#apocope|apocope]].
; {{anchor|syncretism}}<!-- {{anchor|syncretic}} -->[[syncretism]]
: The situation in which two or more [[#inflection|inflected]] forms of a word are identical. For example, {{m+|en|walked}} is both the simple past and the past participle of {{m|en|walk}}, and {{m+|grc|ἄλλο}} is the neuter nominative, accusative{{,}} and vocative singular of {{m|grc|ἄλλος}}.<!-- Is the adjective syncretic used in this context? If so, how? -->
; {{anchor|synonym}}[[synonym]]
: A word or phrase with a meaning that is the same as, or very similar to, another word or phrase. Contrast [[#antonym|antonym]].
==T==
; {{anchor|tashif}}{{m|ar|صحف|تَصْحِيف}}
: When a copyist has set wrong points ([[i'jam|ʾiʿjām]]) upon the skeleton ([[rasm]]) of the (Arabic) script.
; {{anchor|tatpurusa}}[[tatpurusa]]
: Another term for a ''[[#determinative|determinative]] compound''. Contrast [[#bahuvrihi|bahuvrihi]], [[#karmadharaya|karmadharaya]] and [[#dvandva|dvandva]].
; {{anchor|tautology}}[[tautology]]
: Redundant use of words, a [[pleonasm]], an unnecessary and tedious repetition.
; {{anchor|tense}}[[tense]]
: One of the forms of a [[#verb|verb]], used to distinguish when an action or state of being occurs or exists. The basic tenses in many languages are [[#present tense|present]], [[#past tense|past]], [[#future tense|future]]. (''see'' {{pedia|Grammatical tense}})
; {{anchor|thematicization}}[[thematicization]]
: [[insertion|Insertion]] of a [[thematic vowel]] on the [[root]] or [[stem]] of the word to make it [[undergo]] one of the [[productive]] [[vocalic]] inflections.
; {{anchor|අන්ය පුරුෂ}}[[අන්ය පුරුෂ]], {{anchor|ප්රථම පුරුෂ}}[[ප්රථම පුරුෂ]]
: පහත දැක්වෙන [[#third person]] කොටස බලන්න.
; {{anchor|third person}}{{anchor|third-person}}[[third person]], {{anchor|3rd person}}[[3rd person]]
: A [[#person|grammatical person]] that indicates someone or something that is neither the person or group to which the speaker belongs, nor the person or group that the speaker is speaking to. Examples are the English pronouns {{m|en|he}}, {{m|en|she}}, {{m|en|it}}, {{m|en|this}}, {{m|en|that}}, and so on. All [[#noun|nouns]] are generally considered third person. In some languages (like German, Italian, Spanish, Portuguese, and Hungarian), the third-person conjugation is also used to express the formal ''you'' (sometimes combined with the plural and/or capitalizing the personal pronoun in writing).
; {{anchor|tmesis}}{{anchor|diacope}}[[tmesis]]
: The insertion of one or more words between the components of a [[#compound|compound]] word.
; {{anchor|tone}}[[tone]]
: The pitch of a given syllable in languages where changing the pitch changes the basic meaning of the word. In {{w|Mandarin Chinese}}, for example, the word pronounced /ma/ (like English {{m|en|ma}}), when pronounced with a high, level tone means "mother", but when pronounced with a rising tone means "bother", and when pronounced with a falling tone means "scold".
; {{anchor|toponym}}[[toponym]]
: A placename, or a word derived from one.
; {{anchor|topicalized}}[[topicalized]] form
: In some languages, such as Okinawan, a topicalized form of a word is a contraction of that word, used as the phrase [[topic]], with the topic marker.
; {{anchor|tr.}}{{anchor|tran.}}tr., tran.
: Translator or translated, often used in quotations.
; {{anchor|transferred sense}}[[transferred sense]], transf.
: A (usually [[#loosely|looser]]) meaning of a word or [[#phrase|phrase]] developed from a [[#metaphorical|metaphorical]] application of its original signification (for example, ''hunger'' has the primary and original sense “want of food”, “craving appetite”, whence developed the transferred sense of “any strong desire or craving”).
; {{anchor|transgressive}}[[transgressive]]
: A verb form in some Balto-Slavic languages that expresses a coincidentally proceeding or following action.
; {{anchor|සකර්මක}}[[සකර්මක]]
: පහත [[#transitive verb]] වෙත යොමු වන්න.
; {{anchor|transitive verb}}{{anchor|transitive}}[[transitive verb]]
: A verb which requires one or more [[#object|objects]] (e.g. ''I '''kick''' the ball''); contrast '''[[#intransitive verb|intransitive verb]]'''. (See also {{pedia|Transitivity (grammar)}})
; {{anchor|translation hub}}translation hub
: An English multi-word entry that is unidiomatic ([[WT:Glossary#S|sum of parts]]) and exists purely to host translations and enable navigation from one non-English entry to another non-English entry. An example: [[two days after tomorrow]]. See [[:Category:English translation hubs]] for more.
; {{anchor|transliteration}}[[Wiktionary:Transliteration|transliteration]]
: The conversion of text in one [[#script|script]] into an equivalent in another [[#script|script]], or an instance of text so converted (for example, ''Ševčenko'' and ''Shevchenko'' are transliterations of Ukrainian ''Шевченко'' from Cyrillic script to Latin script, according to two different systems). Transliteration is conducted on a letter-by-letter basis (contrasted with [[transcription]] which is converted on the basis of sounds). This may be extended to the conversion of [[#diacritic|diacritical]] marks into alternate forms without diacritical marks in the same script (e.g. Mörder → Moerder).
; {{anchor|transnumeral}}{{anchor|transnumeral number}}[[transnumeral]]
: A [[#number|grammatical number]] that is ambiguous as to whether it refers to the [[#singular|singular]] or [[#plural|plural]]. Found in [[Sino-Tibetan]] languages such as [[Chinese]] and [[Japanese]], as well as some [[Austronesian]] languages such as [[Indonesian]] and [[Malay]]. When a language also has a plural (or some other) number, they are commonly only used for clarity or emphasis.
; {{anchor|troponym}}[[troponym]]
: A verb that indicates more precisely the manner of doing something by replacing a verb of a more generalized meaning, e.g. “to boil” for “to cook”.
; {{anchor|twice-borrowed}}[[twice-borrowed]]
: Terms in one language that were borrowed from a second language that originally borrowed the term from the first language. (More at {{pedia|Reborrowing}})
==U==
; {{anchor|UK}}UK
: UK English, that is, the English of the [[United Kingdom]].
; {{anchor|umlaut}}[[umlaut]]
: A [[#sound change|sound change]] where a [[#vowel|vowel]] is modified to conform more closely to the vowel in the next [[#syllable|syllable]].
; {{anchor|unadapted borrowing}}{{anchor|Unadapted borrowing}}[[unadapted]] [[borrowing]]
: A [[#loanword|loanword]] that has not been conformed to the morpho-syntactic, phonological and/or phonotactical rules of the target language. For example, {{cog|en|cubiculum}} is an unadapted borrowing from {{cog|la|cubiculum}}, while {{cog|en|cubicle}} is a standard borrowing from the same Latin word.
; {{anchor|uncommon}}[[uncommon]]
: A term or sense that is attested but not used commonly either in spoken or written language, but more commonly than [[#rare|rare]] terms.
; {{anchor|uncomparable}}[[uncomparable]], not comparable
: (of adjectives) unable to be compared, or lacking a [[#comparative|comparative]] and [[#superlative|superlative]] function. ''See'' '''[[#comparable|comparable]]'''. Examples of adjectives that are not comparable: ''annual'', ''first'', ''extra'', ''satin'', ''six-figure''.
; {{anchor|uncountable}}{{anchor|Uncountable}}{{anchor|mass_noun}}[[uncountable]], uncountable noun, [[mass noun]]
: A noun that cannot be used freely with numbers or the [[indefinite article]], and which therefore usually takes no [[plural]] form. For example, the English noun {{m|en|information}} is a mass noun, and at least in its principal senses is uncountable in most varieties of English. For those senses, we cannot say that we have *''one information'', nor that we have *''many information'' (or *''many informations''). Many mass noun senses often have corresponding plural [[#countable|count]] senses that denote ''types'' of the mass sense, ''instances'' of the mass sense, or ''portions (servings)'' of the mass sense. For example, the main sense of {{m|en|butter}} is the uncountable sense, so the plural form ''butters'' is seldom used, although it occasionally is used to mean "types of butter" (''many [[herb butter]]s contain garlic'') or "[packets of] butter". Compare also other implicit references to a container and the portion/serving that it contains (''get me a water, order two sodas, have a few beers''). Many languages do not distinguish between countable and uncountable nouns. [[#antonym|Antonym]]: ''[[#countable|countable]]'', or ''count noun''.
; [[undeclinable]]
: ''See '''{{glossary|indeclinable}}'''.''
; {{anchor|univerbation}}{{anchor|Univerbation}}[[univerbation]]
: A single word formed from a fixed expression of several words. For example, the single word ''albeit'' comes from the Middle English expression ''al be it'', in which ''al'' means ''although''.
; {{anchor|usage notes}}usage notes
: Additional information on current and historic use of the term in written or spoken language.
==V==
; ''v''
: ''See '''{{glossary|verb}}'''.''
; {{anchor|var.}}{{anchor|varia lectio}}{{anchor|variae lectiones}}{{anchor|variant reading}}{{anchor|variant}}[[varia lectio]], [[variant reading]], [[variant]]
: Any one of the readings of a given word or passage in a text which differ from copy to copy, from edition to edition, from manuscript to manuscript, or from translation to translation.
; {{anchor|velar}}[[velar]]
: A [[#consonant|consonant]] made with the tongue touching the [[soft palate]] (also known as the [[velum]]). In English these include {{IPAchar|/k/}}, {{IPAchar|/ɡ/}}, {{IPAchar|/ŋ/}}, as in the final consonants of ''sack'', ''sag'', and ''sang'', respectively.
; {{anchor|verb}}{{anchor|verbs}}[[verb]]
: A word that indicates an action, occurrence or state of being. The [[#inflection|inflection]] of verbs is commonly called [[#conjugation|conjugation]].
; {{anchor|verbal noun}}[[verbal noun]]
: A [[noun]] formed from a [[verb]].
; {{anchor|verlan}}[[verlan]]
: A type of [[#backslang|backslang]] used in French, in which the order of the [[#syllable|syllables]] or sounds of words is changed, usually with the last [[#syllable|syllable]] coming first. Examples are {{m|fr|barjot}} from {{m|fr|jobard||crazy}} and {{m|fr|meuf}} from {{m|fr|femme||woman}}. Sometimes this transformation is applied recursively, e.g. {{m|fr|beuteu}}, a verlan form of {{m|fr|teub}}, which is itself a clipped verlan form of {{m|fr|bite||dick}}.
; {{anchor|virile}}[[virile]]
: In Slavic languages, a plural [[#gender|gender]] used for groups that include men and for [[#masculine|masculine]] personal nouns.
; {{anchor|අලප්}}{{anchor|අලප් විබත්}}{{anchor|vocative}}{{anchor|vocative case}} [[අලප් විබත්]] ([[vocative case]])
: A [[#case|case]] which indicates that someone or something is being directly addressed (spoken to), often by name. For example, in the English phrase ''He's dead, Jim'' the name {{m|en|Jim}} would be a vocative.
; {{anchor|voice}}[[voice]]
: A verb characteristic (expressed in some languages by inflection) indicating its relationship with the subject. The usual voices are: [[#active voice|active]], [[#passive voice|passive]] and [[#middle voice|middle]]. (See also {{pedia|Voice (grammar)}}.)
; {{anchor|voiced}}[[voiced]]
: A sound produced with vibration of the [[vocal cord]]s; a type of [[#voicing|voicing]].
; {{anchor|voiceless}}[[voiceless]]
: A sound produced without vibration of the [[vocal cord]]s; a type of [[#voicing|voicing]].
; {{anchor|voicing}}[[voicing]]
: A characteristic of sounds, indicating whether they are produced with vibration of the [[vocal cord]]s. In English, all [[#vowel|vowels]] are voiced, as well as all [[#approximant|approximant]] consonants, but [[#plosive|plosive]] and [[#fricative|fricative]] consonants can be either voiced or voiceless. Examples of voiced sounds in English are {{IPAchar|/v/}}, {{IPAchar|/z/}}, {{IPAchar|/b/}}, {{IPAchar|/d/}}, and the corresponding voiceless sounds are {{IPAchar|/f/}}, {{IPAchar|/s/}}, {{IPAchar|/p/}}, {{IPAchar|/t/}}. Whispering is a type of speech production in which all sounds are pronounced voiceless.
; {{anchor|vowel}}[[vowel]]
: A sound produced by the vocal cords with relatively little restriction of the oral cavity, forming the prominent sound of a [[#syllable|syllable]].
; {{anchor|vulgar}}[[vulgar]]
: Language considered distasteful or obscene.
: See also: '''{{glossary|offensive}}''', '''{{glossary|pejorative}}'''.
==W==
; {{anchor|wanderwort}}{{anchor|wanderword}}[[Wanderwort]] or [[wanderword]]
: A wordform which has spread over a substantial area, or to many regions, outside of that of its language of origin, typically due to cultural exchange resulting from travel and trade. Wanderworts are a type of [[#loanword|loanword]], but a Wanderwort may or may not be an {{glossary|areal}} word. See also ''{{glossary|Kulturwort}}''. Contrast [[#stratum|strata]].
; {{anchor|weak declension}}{{l|en|weak declension}}
: A declension of adjectives and nouns in several {{w|Germanic languages}}, which originally had (and in some languages still have) an ''-n-'' in most of their forms. The weak adjective declension is used in conjunction with [[#definite|definite]] [[#article|article]]s. The weak noun declension is simply one of several possible noun declensions, so-named because it uses the same endings as weak adjectives. See the Wikipedia article on the {{w|weak inflection}} for more information.
; {{anchor|weak pronoun}}{{anchor|weak_pronoun}}{{l|en|weak pronoun}}
: A pronoun of one syllable which is dependent on another word and cannot be used on its own; sometimes called ''[[#clitic|clitic]]''. Compare with [[#emphatic|emphatic]] or [[#strong verb|strong]].
; {{anchor|weak verb}}[[weak verb]]
: In [[Germanic]] languages, a verb that forms the past tense using a suffix containing a [[dental]] consonant (''d'', ''t'', ''ð'' or similar). Verbs of this type are considered "regular" in most Germanic languages, but there are also irregular weak verbs, such as English {{m|en|think}}, {{m|en|thought}} and {{m|en|have}}, {{m|en|had}}. Contrast [[#strong verb|strong verb]], [[#preterite-present verb|preterite-present verb]].
; {{anchor|WMF}}WMF
: Wikimedia Foundation, Inc., the parent organization of Wiktionary and other projects.
; {{anchor|women's speech}}[[women]]'s [[speech]]
: In certain languages (for example, {{w|Karajá language}}), men and women use or historically used distinct words and inflected forms.
==X==
; {{anchor|X-SAMPA}}[[X-SAMPA]]
: [[w:X-SAMPA|Extended SAMPA]], a system for representing the full [[International Phonetic Alphabet]] (IPA) in plain text ([[ASCII]]). For a template that converts X-SAMPA to IPA, see {{temp|x2i}}.
==Y==
==Z==
; {{anchor|zero-grade}}{{anchor|zero grade}}[[zero-grade]]
: In [[Proto-Indo-European]] [[linguistics]], an [[ablaut]] form of a root characterized by the absence of the basic ablauting [[#vowel|vowel]] [[#phoneme|phonemes]] */e/ and */o/. For example, {{m|ine-pro||*bʰr̥-}} is the '''zero-grade''' of the Indo-European root {{m|ine-pro|*bʰer-}} meaning ‘to carry, bear’.
[[ප්රවර්ගය:වික්ෂනරි මූලාශ්ර|Glossary]]
[[en:Appendix:Glossary]]
blbg1g9w09kur6nj0nysdlw5jh880mc
Module:sinhala
828
5451
235330
234896
2026-06-01T14:26:05Z
Lee
19
"obsolete" සිට "අභාවයට ගිය" වෙතට
235330
Scribunto
text/plain
local en_utilities_module = "Module:en-utilities"
local p = {} -- p stands for package
local m_strutils = require("Module:en-utilities")
-- ගැටළු සහගත වචන දැනට පරීක්ෂාවට ලක් කෙරෙයි
local words_with_issues = {
"female",
"male",
}
local english2sinhala = {}
-- සම්බන්ධ කිරීම්
english2sinhala["and"] = "සහ"
english2sinhala["in"] = "තුළ"
-- තරමක් දිග යෙදුම්
english2sinhala["Former name of"] = " සඳහා පෙර දී භාවිතා වූ නාමය"
english2sinhala["former name of"] = " සඳහා පෙර දී භාවිතා වූ නාමය"
english2sinhala["Alternative spelling of"] = " යන යෙදුමේ වෛකල්පික අක්ෂර වින්යාසයක්"
english2sinhala["an alternative spelling "] = "වෛකල්පික අක්ෂර වින්යාසයක් "
english2sinhala["Chinese simplified forms"] = "චීන සරලීකෘත ස්වරූප"
english2sinhala["Initialism of"] = " යන යෙදුමේ මුලකුරු ලෙස සටහන් කළ ස්වරූපය"
english2sinhala["terms inherited"] = "උරුම වූ"
english2sinhala["Synonym of"] = " යන්නට සමාන අරුත් ඇති පදයක්"
-- ස්ථාන නාම සඳහා
english2sinhala["small village"] = "කුඩා ගම්මානය"
-- විශේෂ
english2sinhala["the simplified"] = "සරලීකෘත"
english2sinhala["related-to"] = "ආශ්රිත"
english2sinhala["Name"] = "නාම"
english2sinhala["name"] = "නාම"
english2sinhala["set"] = "කුලක"
english2sinhala["type"] = "වර්ග"
english2sinhala["grouping"] = "කාණ්ඩ"
-- සැකිලි ප්රවර්ග සඳහා අවශ්ය දත්ත
english2sinhala["Auto-table"] = "ස්වයංක්රීය-වගු"
english2sinhala["data"] = "දත්ත"
english2sinhala["Data"] = "දත්ත"
english2sinhala["Administration"] = "පරිපාලන"
english2sinhala["Archive"] = "ලේඛනාරක්ෂණ"
english2sinhala["Audio"] = "ශ්රව්ය සහාය"
english2sinhala["Number"] = "සංඛ්යා"
english2sinhala["Morphology"] = "පදිම විචාර"
english2sinhala["String manipulation"] = "පෙළ හැසිරවීම්"
--
english2sinhala["derivational"] = "ව්යුත්පන්නක"
english2sinhala["nominal"] = "නොමිනල්"
--
english2sinhala["data modules"] = "දත්ත මොඩියුල"
english2sinhala["Sortkey-generating"] = "සෝට්කී-ජනක"
english2sinhala["Page generation"] = "පිටු ජනක"
--
english2sinhala["Template"] = "සැකිල්ල"
--
english2sinhala["Pronunciation"] = "උච්චාරණ"
english2sinhala["Verification"] = "සත්යාපන"
--
english2sinhala["Etymology templates"] = "නිරුක්ති සැකිලි"
english2sinhala["Translation templates"] = "පරිවර්තන සැකිලි"
english2sinhala["Appendix templates"] = "උපග්රන්ථ සැකිලි"
english2sinhala["reference templates"] = "මූලාශ්ර සැකිලි"
--
english2sinhala["poetic terms"] = "කාව්යමය යෙදුම්"
--
english2sinhala["hanja"] = "හන්ජා"
english2sinhala["hanzi"] = "හන්සු"
--
english2sinhala["Character"] = "අනුලක්ෂණ"
english2sinhala["symbols"] = "සංකේත"
english2sinhala["clipping"] = "ක්ලිප් කිරීම"
english2sinhala["roots"] = "මූල"
english2sinhala["morphemes"] = "පදාණු"
english2sinhala["morpheme"] = "පදාණුව"
english2sinhala["punctuation marks"] = "විරාම ලක්ෂණ"
--
english2sinhala["imperative"] = "විධි ක්රියා"
english2sinhala["nominative"] = "පෙර විබත්"
english2sinhala["ablative"] = "අවදි විබත්"
english2sinhala["vocative"] = "අලප් විබත්"
--
english2sinhala["transitive"] = "සකර්මක"
english2sinhala["intransitive"] = "අකර්මක"
--
english2sinhala["uncomparable"] = "සැසඳිය නොහැකි"
english2sinhala["comparable"] = "සැසඳිය හැකි"
--
english2sinhala["uncomparable adjectives"] = "සැසඳිය නොහැකි නාම විශේෂණ පද"
english2sinhala["comparable adjectives"] = "සැසඳිය හැකි නාම විශේෂණ පද"
english2sinhala["epicene adjectives"] = "උභයලිංගික නාම විශේෂණ පද"
english2sinhala["transitive verbs"] = "සකර්මක ක්රියා පද"
--
english2sinhala["first-person"] = "උත්තම පුරුෂ"
english2sinhala["first person"] = "උත්තම පුරුෂ"
english2sinhala["third-person"] = "අන්ය පුරුෂ"
english2sinhala["third person"] = "අන්ය පුරුෂ"
--
english2sinhala["gender"] = "ලිංග භේදය"
english2sinhala["feminine"] = "ස්ත්රී ලිංග"
english2sinhala["masculine"] = "පුරුෂ ලිංග"
english2sinhala["female"] = "ස්ත්රී ලිංග"
english2sinhala["male"] = "පුරුෂ ලිංග"
english2sinhala["unknown-gender"] = "ලිංග භේදය නොදන්නා"
english2sinhala["given names"] = "පුද්ගල නාම"
english2sinhala["given name"] = "පුද්ගල නාමය"
english2sinhala["female given names"] = "ස්ත්රී ලිංග පුද්ගල නාම"
english2sinhala["male given names"] = "පුරුෂ ලිංග පුද්ගල නාම"
english2sinhala["male given name"] = "පුරුෂ ලිංග පුද්ගල නාමය"
english2sinhala["diminutives of "] = " සඳහා වන අල්පාර්ථ පද"
english2sinhala["diminutives of male given names"] = "පුරුෂ ලිංග පුද්ගල නාම සඳහා වන අල්පාර්ථ පද"
--
english2sinhala["pronoun forms"] = "සර්වනාම ස්වරූප"
english2sinhala["proper noun forms"] = "සංඥා නාම පද ස්වරූප"
english2sinhala["adjective forms"] = "නාම විශේෂණ පද ස්වරූප"
english2sinhala["noun forms"] = "නාම පද ස්වරූප"
english2sinhala["verb forms"] = "ක්රියා පද ස්වරූප"
english2sinhala["suffix form"] = "ප්රත්ය ස්වරූපය"
english2sinhala["suffix forms"] = "ප්රත්ය ස්වරූප"
english2sinhala["quotation"] = "උපුටා දැක්වීම"
english2sinhala["quotations"] = "උපුටා දැක්වීම්"
english2sinhala["usage example"] = "භාවිත නිදර්ශනය"
english2sinhala["usage examples"] = "භාවිත නිදර්ශන"
english2sinhala["Wikipedia"] = "විකිපීඩියාව"
english2sinhala["wikipedia"] = "විකිපීඩියාව"
english2sinhala["singular"] = "ඒක වචන"
english2sinhala["singula"] = "ඒක වචන"
english2sinhala["plural"] = "බහුවචන"
english2sinhala["plurals"] = "බහුවචන"
english2sinhala["noun"] = "නාම පදය"
english2sinhala["nouns"] = "නාම පද"
english2sinhala["particle"] = "නිපාත පදය"
english2sinhala["particles"] = "නිපාත පද"
english2sinhala["verb"] = "ක්රියා පදය"
english2sinhala["verbs"] = "ක්රියා පද"
english2sinhala["adjective"] = "නාම විශේෂණ පදය"
english2sinhala["adjectives"] = "නාම විශේෂණ පද"
english2sinhala["adverb"] = "ක්රියා විශේෂණ පදය"
english2sinhala["adverbs"] = "ක්රියා විශේෂණ පද"
english2sinhala["prefix"] = "උපසර්ගය"
english2sinhala["prefixes"] = "උපසර්ග"
english2sinhala["suffix"] = "ප්රත්යය"
english2sinhala["suffixes"] = "ප්රත්ය"
english2sinhala["letter"] = "අකුර"
english2sinhala["letters"] = "අකුරු"
english2sinhala["numeral"] = "සංඛ්යාංකය"
english2sinhala["numerals"] = "සංඛ්යාංක"
english2sinhala["numeral symbol"] = "සංඛ්යාංක සංකේතය"
english2sinhala["numeral symbols"] = "සංඛ්යාංක සංකේත"
english2sinhala["numbers"] = "සංඛ්යාව"
english2sinhala["numbers"] = "සංඛ්යා"
english2sinhala["lemma"] = "පාඨය"
english2sinhala["lemmas"] = "පාඨ"
english2sinhala["pronoun"] = "සර්වනාමය"
english2sinhala["pronouns"] = "සර්වනාම"
english2sinhala["phrase"] = "වාක්ය ඛණ්ඩය"
english2sinhala["phrases"] = "වාක්ය ඛණ්ඩ"
english2sinhala["phrasebook"] = "වාක්ය ඛණ්ඩ පොත"
english2sinhala["Geography"] = "භූගෝලවේදය"
english2sinhala["geography"] = "භූගෝලවේදය"
english2sinhala["Oceanography"] = "සාගරවේදය"
english2sinhala["oceanography"] = "සාගරවේදය"
english2sinhala["continent"] = "මහාද්වීපය"
english2sinhala["Continent"] = "මහාද්වීපය"
english2sinhala["continents"] = "මහාද්වීප"
english2sinhala["Continents"] = "මහාද්වීප"
english2sinhala["island"] = "දූපත"
english2sinhala["country"] = "රට"
english2sinhala["countries"] = "රටවල්"
english2sinhala["language"] = "භාෂාව"
english2sinhala["Language"] = "භාෂාව"
english2sinhala["languages"] = "භාෂා"
english2sinhala["Languages"] = "භාෂා"
english2sinhala["surname"] = "පෙළපත් නාමය"
english2sinhala["surnames"] = "පෙළපත් නාම"
english2sinhala["proper noun"] = "සංඥා නාම පදය"
english2sinhala["proper nouns"] = "සංඥා නාම පද"
english2sinhala["abbreviation"] = "කෙටි යෙදුම"
english2sinhala["abbreviations"] = "කෙටි යෙදුම්"
english2sinhala["interjections"] = "විශ්මයාර්ථ පද"
english2sinhala["misspellings"] = "අක්ෂර වින්යාස දෝෂ"
--
-- පහත කොටසේ "terms" සඳහා "පද" යනුවෙන් භාවිතය, ගැටළු සහගත බව පෙනෙයි.
-- එය "යෙදුම්" වලට මාරු කොට බලමු.
-- english2sinhala["term"] = "පදය"
-- english2sinhala["terms"] = "පද"
-- නව ආකාරය
english2sinhala["term"] = "යෙදුම"
english2sinhala["terms"] = "යෙදුම්"
--
english2sinhala["colle"] = "පද"
english2sinhala["collective noun"] = "සමූහවාචී නාම පදය"
english2sinhala["collective nouns"] = "සමූහවාචී නාම පද"
english2sinhala["countable noun"] = "ගැණිය හැකි නාම පදය"
english2sinhala["countable nouns"] = "ගැණිය හැකි නාම පද"
english2sinhala["countable proper noun"] = "ගැණිය හැකි සංඥා නාම පදය"
english2sinhala["countable proper nouns"] = "ගැණිය හැකි සංඥා නාම පද"
english2sinhala["uncountable noun"] = "නොගැණිය හැකි නාම පදය"
english2sinhala["uncountable nouns"] = "නොගැණිය හැකි නාම පද"
english2sinhala["indeclinable nouns"] = "අව්යය නාම පද"
english2sinhala["inflection"] = "වරනැගීම"
english2sinhala["Inflection"] = "වරනැගීම"
english2sinhala["inflections"] = "වරනැගීම්"
english2sinhala["Inflections"] = "වරනැගීම්"
english2sinhala["transliteration"] = "අක්ෂර පරිවර්තනය"
english2sinhala["Transliteration"] = "අක්ෂර පරිවර්තනය"
english2sinhala["transliterations"] = "අක්ෂර පරිවර්තන"
english2sinhala["Transliterations"] = "අක්ෂර පරිවර්තන"
english2sinhala["romanization"] = "රෝමානුකරණය"
english2sinhala["romanizations"] = "රෝමානුකරණ"
-- english2sinhala["entry name-generating"] = "ප්රවේශ නාම-ජනනය"
-- english2sinhala["Entry name-generating"] = "ප්රවේශ නාම-ජනනය"
-- english2sinhala["entry name-generatings"] = "ප්රවේශ නාම-ජනක"
-- english2sinhala["Entry name-generatings"] = "ප්රවේශ නාම-ජනක"
english2sinhala["Religion"] = "ආගම"
english2sinhala["Buddhism"] = "බුදු දහම සහ බුද්ධාගම"
english2sinhala["Places"] = "ස්ථාන"
english2sinhala["places"] = "ස්ථාන"
-- අක්ෂරක්රම
english2sinhala["Cyrillic"] = "සිරිලික්"
english2sinhala["Devanagari"] = "දේවනාගරි"
english2sinhala["Brahmi"] = "බ්රාහ්මී"
english2sinhala["Braille"] = "බ්රේල්"
english2sinhala["Han"] = "හන්"
english2sinhala["Hiragana"] = "හිරගනා"
english2sinhala["Katakana"] = "කතකනා"
english2sinhala["Flag semaphore"] = "ධජ සංඥා"
--
-- [ Module:ja-see ] සඳහා
english2sinhala["the hiragana spelling"] = "හිරගනා අක්ෂර වින්යාසය"
-- භාෂා පවුල්
english2sinhala["Anglic"] = "ඇන්ග්ලික්"
english2sinhala["Germanic"] = "ජර්මානු"
english2sinhala["Koreanic"] = "කොරියානු"
english2sinhala["Indo-Aryan"] = "ඉන්දු-ආර්ය"
english2sinhala["Indo-Iranian"] = "ඉන්දු-ඉරාන"
english2sinhala["Middle Indo-Aryan"] = "මධ්යකාලීන ඉන්දු-ආර්ය"
english2sinhala["Indo-European"] = "ඉන්දු-යුරෝපීය"
english2sinhala["Anglo-Frisian"] = "ඇන්ග්ලෝ-ෆ්රිසියන්"
-- භාෂා
english2sinhala["Algerian Arabic"] = "ඇල්ජීරියානු අරාබි"
english2sinhala["Amharic"] = "ඇම්හාරික්"
english2sinhala["Ancient Greek"] = "පුරාතන ග්රීක"
english2sinhala["Anglo-Norman"] = "ඇන්ග්ලෝ-නෝමන්"
english2sinhala["Arabic"] = "අරාබි"
english2sinhala["Armenian"] = "ආමේනියානු"
english2sinhala["Aymara"] = "අයිමාරා"
english2sinhala["Azerbaijani"] = "අසර්බයිජානි"
english2sinhala["Okinawan"] = "ඔකිනවා"
english2sinhala["Basque"] = "බාස්ක්"
english2sinhala["Bengali"] = "බෙංගාලි"
english2sinhala["Bihari"] = "බිහාරී"
english2sinhala["Breton"] = "බ්රෙටන්"
english2sinhala["Bulgarian"] = "බල්ගේරියානු"
english2sinhala["Burmese"] = "බුරුම"
english2sinhala["Cantonese"] = "කැන්ටනීස්"
english2sinhala["Chinese"] = "චීන"
english2sinhala["Min Nan"] = "මින් නන්"
english2sinhala["Coptic"] = "කොප්ටික්"
english2sinhala["Cornish"] = "කෝනිෂ්"
english2sinhala["Czech"] = "චෙක්"
english2sinhala["Danish"] = "ඩෙන්මාර්ක"
english2sinhala["Dhivehi"] = "දිවෙහි"
english2sinhala["Dutch"] = "ඕලන්ද"
english2sinhala["Egyptian"] = "ඊජිප්තු"
english2sinhala["English"] = "ඉංග්රීසි"
english2sinhala["Old English"] = "පුරාතන ඉංග්රීසි"
english2sinhala["Middle English"] = "මධ්යකාලීන ඉංග්රීසි"
english2sinhala["Esperanto"] = "එස්පෙරාන්තො"
english2sinhala["Estonian"] = "එස්තෝනියානු"
english2sinhala["Finnish"] = "ෆින්ලන්ත"
english2sinhala["French"] = "ප්රංශ"
english2sinhala["Old French"] = "පුරාතන ප්රංශ"
english2sinhala["Middle French"] = "මධ්යකාලීන ප්රංශ"
english2sinhala["Georgian"] = "ජෝර්ජියානු"
english2sinhala["German"] = "ජර්මානු"
english2sinhala["Greek"] = "ග්රීක"
english2sinhala["Gujarati"] = "ගුජරාටි"
english2sinhala["Hebrew"] = "හීබෲ"
english2sinhala["Hindi"] = "හින්දි"
english2sinhala["Hungarian"] = "හංගේරියානු"
english2sinhala["Icelandic"] = "අයිස්ලන්ත"
english2sinhala["Indonesian"] = "ඉන්දුනීසියානු"
english2sinhala["Irish"] = "අයිරිෂ්"
english2sinhala["Italian"] = "ඉතාලි"
english2sinhala["Japanese"] = "ජපන්"
english2sinhala["Javanese"] = "ජාවා"
english2sinhala["Kannada"] = "කන්නඩ"
english2sinhala["Kashmiri"] = "කාෂ්මීරි"
english2sinhala["Kongo"] = "කොංගෝ"
english2sinhala["Korean"] = "කොරියානු"
english2sinhala["Lao"] = "ලාඕ"
english2sinhala["Old Latin"] = "පුරාතන ලතින්"
english2sinhala["Latin"] = "ලතින්"
english2sinhala["Malay"] = "මැලේ"
english2sinhala["Malayalam"] = "මලයාලම්"
english2sinhala["Mandarin"] = "මැන්ඩරීන්"
english2sinhala["Manx"] = "මැන්ක්ස්"
english2sinhala["Marathi"] = "මරාථි"
english2sinhala["Mongolian"] = "මොංගෝලියානු"
english2sinhala["Norwegian"] = "නෝර්වීජියානු"
english2sinhala["the Netherlands"] = "නෙදර්ලන්තය"
english2sinhala["Pali"] = "පාලි"
english2sinhala["Persian"] = "පර්සියානු"
english2sinhala["Middle Persian"] = "මධ්යකාලීන පර්සියානු"
english2sinhala["Polish"] = "පෝලන්ත"
english2sinhala["Portuguese"] = "පෘතුගීසි"
english2sinhala["Prakrit"] = "ප්රාකෘත"
english2sinhala["Helu Prakrit"] = "එළු ප්රාකෘත"
english2sinhala["Ashokan Prakrit"] = "අශෝක ප්රාකෘත"
english2sinhala["Epigraphic Prakrit"] = "අභිලේඛන ප්රාකෘත"
english2sinhala["Proto-Indo-Iranian"] = "ප්රොටෝ-ඉන්දු-ඉරාන"
english2sinhala["Proto-Italic"] = "ප්රොටෝ-ඉතාලිකා"
english2sinhala["Proto-Indo-European"] = "ප්රොටෝ-ඉන්දු-යුරෝපීය"
english2sinhala["Proto-Basque"] = "ප්රොටෝ-බාස්ක්"
english2sinhala["Proto-West Germanic"] = "ප්රොටෝ-බටහිර ජර්මානු"
english2sinhala["Proto-Germanic"] = "ප්රොටෝ-ජර්මානු"
english2sinhala["Quechua"] = "ක්වෙච්වා"
english2sinhala["Romanian"] = "රුමේනියානු"
english2sinhala["Russian"] = "රුසියානු"
english2sinhala["Belarusian"] = "බෙලරුසියානු"
english2sinhala["Macedonian"] = "මැසඩෝනියානු"
english2sinhala["Serbo-Croatian"] = "සර්බෝ-ක්රොඒෂියානු"
english2sinhala["Sanskrit"] = "සංස්කෘත"
english2sinhala["Scottish Gaelic"] = "ස්කොට්ස් ගේලික්"
english2sinhala["Sindhi"] = "සින්ධි"
english2sinhala["Sinhala"] = "සිංහල"
english2sinhala["Sinhalese"] = "සිංහල"
english2sinhala["Somali"] = "සෝමාලි"
english2sinhala["Spanish"] = "ස්පාඤ්ඤ"
english2sinhala["Old Spanish"] = "පුරාතන ස්පාඤ්ඤ"
english2sinhala["Sundanese"] = "සුන්ඩා"
english2sinhala["Swedish"] = "ස්වීඩන්"
english2sinhala["Old Tamil"] = "පුරාතන දෙමළ"
english2sinhala["Tamil"] = "දෙමළ"
english2sinhala["Telugu"] = "තෙලිඟු"
english2sinhala["Thai"] = "තායි"
english2sinhala["Tibetan"] = "තිබ්බත"
english2sinhala["Translingual"] = "සර්ව භාෂාමය"
english2sinhala["Turkish"] = "තුර්කි"
english2sinhala["Ukrainian"] = "යුක්රේනියානු"
english2sinhala["Urdu"] = "උර්දු"
english2sinhala["Uzbek"] = "උස්බෙක්"
english2sinhala["Vietnamese"] = "වියට්නාම"
english2sinhala["Welsh"] = "වේල්ස"
english2sinhala["Yiddish"] = "යිඩිශ්"
english2sinhala["Zulu"] = "සූලූ"
-- රටවල්
english2sinhala["Hungary"] = "හංගේරියාව"
english2sinhala["Slovakia"] = "ස්ලෝවැකියාව"
english2sinhala["Croatia"] = "ක්රොඒෂියාව"
english2sinhala["Serbia"] = "සර්බියාව"
english2sinhala["Afghanistan"] = "ඇෆ්ගනිස්ථානය"
english2sinhala["Africa"] = "අප්රිකාව"
english2sinhala["Algeria"] = "ඇල්ජීරියාව"
english2sinhala["America"] = "ඇමෙරිකාව"
english2sinhala["Armenia"] = "ආමේනියාව"
english2sinhala["Asia"] = "ආසියාව"
english2sinhala["South Asia"] = "දකුණු ආසියාව"
english2sinhala["Australia"] = "ඕස්ට්රේලියාව"
english2sinhala["Azerbaijan"] = "අසර්බයිජානය"
english2sinhala["Bahrain"] = "බහරේනය"
english2sinhala["Bangladesh"] = "බංගලිදේශය"
english2sinhala["Belgium"] = "බෙල්ජියම"
english2sinhala["Bhutan"] = "භූතානය"
english2sinhala["Brazil"] = "බ්රසීලය"
english2sinhala["Brunei"] = "බෲනායි"
english2sinhala["Bulgaria"] = "බල්ගේරියාව"
english2sinhala["Cambodia"] = "කාම්බෝජය"
english2sinhala["Canada"] = "කැනඩාව"
english2sinhala["Central America"] = "මධ්යම ඇමෙරිකාව"
english2sinhala["Chile"] = "චිලී"
english2sinhala["China"] = "චීනය"
english2sinhala["Croatia"] = "ක්රොඒෂියාව"
english2sinhala["Cyprus"] = "සයිප්රසය"
english2sinhala["Denmark"] = "ඩෙන්මාර්කය"
english2sinhala["Earth"] = "පෘථිවිය"
english2sinhala["East Timor (Timor-Leste)"] = "නැගෙනහිර ටිමෝරය"
english2sinhala["Egypt"] = "ඊජිප්තුව"
english2sinhala["Europe"] = "යුරෝපය"
english2sinhala["Finland"] = "ෆින්ලන්තය"
english2sinhala["France"] = "ප්රංශය"
english2sinhala["Gabon"] = "ගැබොන්"
english2sinhala["Georgia"] = "ජෝජියාව"
english2sinhala["Germany"] = "ජර්මනිය"
english2sinhala["Ghana"] = "ඝානාව"
english2sinhala["Gibraltar"] = "ජිබ්රෝල්ටාව"
english2sinhala["Greece"] = "ග්රීසිය"
english2sinhala["Iceland"] = "අයිස්ලන්තය"
english2sinhala["India"] = "ඉන්දියාව"
english2sinhala["Indonesia"] = "ඉන්දුනීසියාව"
english2sinhala["Iran"] = "ඉරානය"
english2sinhala["Iraq"] = "ඉරාකය"
english2sinhala["Israel"] = "ඊශ්රායලය"
english2sinhala["Italy"] = "ඉතාලිය"
english2sinhala["Japan"] = "ජපානය"
english2sinhala["Jordan"] = "ජෝදානය"
english2sinhala["Kazakhstan"] = "කසක්ස්තානය"
english2sinhala["Kuwait"] = "කුවේටය"
english2sinhala["Kyrgyzstan"] = "කිර්ගිස්තානය"
english2sinhala["Laos"] = "ලාඕසය"
english2sinhala["Lebanon"] = "ලෙබනනය"
english2sinhala["Malaysia"] = "මලයාසියාව"
english2sinhala["Maldives"] = "මාලදිවයින"
english2sinhala["Mongolia"] = "මොන්ගෝලියාව"
english2sinhala["Myanmar"] = "මියන්මාරය"
english2sinhala["Nepal"] = "නේපාලය"
english2sinhala["North America"] = "උතුරු ඇමෙරිකාව"
english2sinhala["North Korea"] = "උතුරු කොරියාව"
english2sinhala["Oceania"] = "ඕෂනියාව"
english2sinhala["Oman"] = "ඕමානය"
english2sinhala["Pakistan"] = "පාකිස්ථානය"
english2sinhala["Philippines"] = "පිලිපීනය"
english2sinhala["Poland"] = "පෝලන්තය"
english2sinhala["Portugal"] = "පෘතුගාලය"
english2sinhala["Qatar"] = "කටාරය"
english2sinhala["Romania"] = "රුමේනියාව"
english2sinhala["Russia"] = "රුසියාව"
english2sinhala["Saudi Arabia"] = "සෞදි අරාබිය"
english2sinhala["Singapore"] = "සිංගප්පූරුව"
english2sinhala["Spain"] = "ස්පාඤ්ඤය"
english2sinhala["South America"] = "දකුණු ඇමෙරිකාව"
english2sinhala["South Korea"] = "දකුණු කොරියාව"
english2sinhala["Sri Lanka"] = "ශ්රී ලංකාව"
english2sinhala["Sweden"] = "ස්වීඩනය"
english2sinhala["Syria"] = "සිරියාව"
english2sinhala["Tajikistan"] = "ටජිකිස්ථානය"
english2sinhala["Thailand"] = "තායිලන්තය"
english2sinhala["Turkey"] = "තුර්කිය"
english2sinhala["Turkmenistan"] = "තුර්ක්මෙනිස්තානය"
english2sinhala["Ukraine"] = "යුක්රේනය"
english2sinhala["United Arab Emirates"] = "එක්සත් අරාබි එමීර් රාජ්යය"
english2sinhala["Uzbekistan"] = "උස්බෙකිස්තානය"
english2sinhala["Vietnam"] = "වියට්නාමය"
english2sinhala["Yemen"] = "යේමනය"
english2sinhala["Zambia"] = "සැම්බියාව"
english2sinhala["Zimbabwe"] = "සිම්බාබ්වේ"
english2sinhala["the Gambia"] = "ගැම්බියාව"
english2sinhala["the United States"] = "යුනයිටඩ් ස්ටේට්ස්"
english2sinhala["the world"] = "ලෝකය"
local singular2plural = {}
-- විශේෂ
singular2plural["දත්ත"] = "දත්ත"
--
singular2plural["හන්ජා"] = "හන්ජා"
singular2plural["සැකිල්ල"] = "සැකිලි"
singular2plural["මූලය"] = "මූල"
--
singular2plural["non-lemma form"] = "ලෙමා-නොවන ස්වරූප"
singular2plural["non-lemma"] = "ලෙමා-නොවන"
--
singular2plural["ක්ලිප් කිරීම"] = "ක්ලිප් කිරීම්"
singular2plural["පදාණුව"] = "පදාණු"
singular2plural["උපුටා දැක්වීම"] = "උපුටා දැක්වීම්"
singular2plural["භාවිත නිදර්ශනය"] = "භාවිත නිදර්ශන"
singular2plural["අබුගිඩා"] = "අබුගිඩා"
singular2plural["ජර්මානු පුරුෂ ලිංග, නාම පදය"] = "ජර්මානු පුරුෂ ලිංග, නාම පද"
singular2plural["ස්පාඤ්ඤ පුරුෂ ලිංග, නාම පදය"] = "ස්පාඤ්ඤ පුරුෂ ලිංග, නාම පද"
singular2plural["පුරුෂ ලිංග නාම පදය"] = "පුරුෂ ලිංග නාම පද"
singular2plural["පුරුෂ ලිංග, නාම පදය"] = "පුරුෂ ලිංග, නාම පද"
singular2plural["පුරුෂ ලිංග පුද්ගල නාමය"] = "පුරුෂ ලිංග පුද්ගල නාම"
singular2plural["ස්ත්රී ලිංග, නාම පදය"] = "ස්ත්රී ලිංග, නාම පද"
singular2plural["බහුවචනය"] = "බහුවචන"
singular2plural["නාම පදය"] = "නාම පද"
singular2plural["නිපාත පදය"] = "නිපාත පද"
singular2plural["ක්රියා පදය"] = "ක්රියා පද"
singular2plural["නාම විශේෂණ පදය"] = "නාම විශේෂණ පද"
singular2plural["ක්රියා විශේෂණ පදය"] = "ක්රියා විශේෂණ පද"
singular2plural["ප්රත්ය ස්වරූපය"] = "ප්රත්ය ස්වරූප"
singular2plural["ප්රත්යය"] = "ප්රත්ය"
singular2plural["අකුර"] = "අකුරු"
singular2plural["පාඨය"] = "පාඨ"
singular2plural["සර්වනාමය"] = "සර්වනාම"
singular2plural["මහාද්වීපය"] = "මහාද්වීප"
singular2plural["දූපත"] = "දූපත්"
singular2plural["රට"] = "රටවල්"
singular2plural["භාෂාව"] = "භාෂා"
singular2plural["පෙළපත් නාමය"] = "පෙළපත් නාම"
singular2plural["සංඥා නාම පදය"] = "සංඥා නාම පද"
singular2plural["කෙටි යෙදුම"] = "කෙටි යෙදුම්"
singular2plural["පදය"] = "පද"
singular2plural["සමූහවාචී නාම පදය"] = "සමූහවාචී නාම පද"
singular2plural["ගැණිය හැකි නාම පදය"] = "ගැණිය හැකි නාම පද"
singular2plural["ගැණිය හැකි සංඥා නාම පදය"] = "ගැණිය හැකි සංඥා නාම පද"
singular2plural["වරනැගීම"] = "වරනැගීම්"
singular2plural["සංඛ්යාංක සංකේතය"] = "සංඛ්යාංක සංකේත"
singular2plural["අක්ෂර පරිවර්තනය"] = "අක්ෂර පරිවර්තන"
-- singular2plural["ප්රවේශ නාම-ජනනය"] = "ප්රවේශ නාම-ජනක"
local english2adjective = {}
english2adjective["archaic"] = "පෞරාණික"
english2adjective["dated"] = "යල් පැන ගිය"
english2adjective["obsolete"] = "අභාවයට ගිය"
english2adjective["List"] = "ලැයිස්තු"
english2adjective["Entry name-generating"] = "ප්රවේශ නාම-ජනක"
english2adjective["nominal"] = "නොමිනල්"
english2adjective["Maintenance"] = "නඩත්තු කටයුතු"
english2adjective["mixed"] = "මිශ්ර"
english2adjective["Testcase"] = "පිරික්සුම් ආදර්ශක"
english2adjective["Language and script"] = "භාෂා සහ අක්ෂරක්රම"
english2adjective["Transliteration"] = "අක්ෂර පරිවර්තන"
english2adjective["Transliteration testcases"] = "අක්ෂර පරිවර්තන පිරික්සුම් ආදර්ශක"
english2adjective["Utility"] = "උපයෝගිතා"
english2adjective["Headword-line"] = "යොමු වචන පේළි"
english2adjective["Language-specific utility"] = "භාෂාවක් හා සබැඳි උපයෝගිතා"
--
function p.hello( frame )
return "Hello, world!"
end
function p.sinhala_adjective( word )
-- require('Module:debug').track("sinhala.sinhala adjective.word = " .. word)
local sinhala_word = p.sinhala( word )
-- require('Module:debug').track("sinhala.sinhala adjective.direct translation = " .. word)
-- සටහන: නාම විශේෂණය සඳහා කළ යුතු විශේෂ යමක් පවතියි ද?
local adjective = p.adjective( word )
if adjective ~= nil then
-- require('Module:debug').track("sinhala.sinhala adjective.adjective = " .. adjective)
sinhala_word = adjective
end
--
return sinhala_word
end
function p.search_adjective( word )
local sinhala_word = nil
-- require('Module:debug').track("sinhala.search adjective.word = " .. word)
local trans = english2adjective[word]
if trans ~= nil then
-- require('Module:debug').track("sinhala.adjective.trans = " .. trans)
sinhala_word = trans
end
return sinhala_word
end
function p.adjective( word )
-- -- ගැටළු සඳහා පරීක්ෂාව
-- for _,v in pairs(words_with_issues) do
-- if v == word then
-- error("පරීක්ෂාවට ලක්වෙන ස්ථානයකි.")
-- -- do something
-- break
-- end
-- end
-- require('Module:debug').track("sinhala.adjective.word = " .. word)
-- දත්ත ලැයිස්තුව මුලින්ම පරික්ෂාකර බලන්න
local adjective = p.search_adjective( word )
if adjective ~= nil then
-- require('Module:debug').track("sinhala.adjective.adjective = " .. adjective)
return adjective
end
-- බොහෝවිට නාම විශේෂණ ස්වරූපය වන්නේ බහු වචනය නේ ද?
local sinhala_plural = p.sinhala_plural( word )
if sinhala_plural ~= nil then
-- require('Module:debug').track("sinhala.adjective.sinhala plural = " .. sinhala_plural)
return sinhala_plural
end
local plural = p.plural( word )
if plural ~= nil then
-- require('Module:debug').track("sinhala.adjective.plural = " .. plural)
return plural
end
-- නොදන්නා වචන සඳහා ඉංග්රීසි වචනයම ලබා දෙන්න
return word
end
function p.sinhala_plural( word )
local sinhala_word = p.sinhala( word )
return p.plural( sinhala_word )
end
function p.sinhala( word )
-- -- ගැටළු සඳහා පරීක්ෂාව
-- for _,v in pairs(words_with_issues) do
-- if v == word then
-- error("පරීක්ෂාවට ලක්වෙන ස්ථානයකි.")
-- -- do something
-- break
-- end
-- end
local trans = english2sinhala[word]
-- දත්ත ලැයිස්තුව මුලින්ම පරික්ෂාකර බලන්න
if trans ~= nil then
return trans
end
-- නොදන්නා වචන සඳහා ඉංග්රීසි වචනයම ලබා දෙන්න
return word
end
function p.search_plural( word )
local result = nil
if word ~= nil then
-- require('Module:debug').track("sinhala.search plural.word = " .. word)
local plural_word = singular2plural[word]
-- දත්ත ලැයිස්තුව මුලින්ම පරික්ෂාකර බලන්න
if plural_word ~= nil then
-- require('Module:debug').track("sinhala.search plural.plural word = " .. plural_word)
return plural_word
end
end
return result
end
function p.plural( word )
if word ~= nil then
local result = p.search_plural( word )
if result ~= nil then
return result
end
-- ලතින් අකුරු නොවේ නම් බොහෝ විට සිංහල වචනයක් විය හැකිය.
-- require('Module:debug').track("sinhala.plural.word = " .. word)
if not string.find(word, "%a$") then
return word
end
-- නොදන්නා වචන සඳහා ඉංග්රීසි ආකාරයේ වචනයම ලබා දෙන්න
return m_strutils.pluralize(word)
-- if word:find("x$") then
-- return word .. "es"
-- else
-- return word .. "s"
-- end
end
return word
end
local function pluralize(...)
pluralize = require(en_utilities_module).pluralize
return pluralize(...)
end
function p.sinhala_pluralize( word )
if word ~= nil then
local result = p.search_plural( word )
if result ~= nil then
return result
end
-- නොදන්නා වචන සඳහා ඉංග්රීසි ආකාරයේ වචනයම ලබා දෙන්න
return pluralize( word )
end
return word
end
return p
6e9mvex1mkqqztewobhgjmj1cj2mbp6
Module:category tree/pragmatic properties
828
6062
235265
228217
2026-04-29T02:27:38Z
en>Koavf
0
Reverted edits by [[Special:Contributions/Koavf|Koavf]]. If you think this rollback is in error, please leave a message on my talk page.
235265
Scribunto
text/plain
local labels = {}
local raw_categories = {}
local string_utilities_module = "Module:string utilities"
local ucfirst = require(string_utilities_module).ucfirst
-----------------------------------------------------------------------------
-- --
-- LABELS --
-- --
-----------------------------------------------------------------------------
labels["terms by usage"] = {
description = "{{{langname}}} terms categorized by the manner and context in which they are used by speakers.",
umbrella_parents = "Fundamental",
parents = {{name = "{{{langcat}}}", raw = true}},
}
local function generate_category_with_senses(typ, desc, distinguish, other_types_in_group)
if distinguish then
distinguish = "\n\n" .. distinguish
else
distinguish = ""
end
local function make_preceding(pos)
if not other_types_in_group then
return nil
end
local cats = {}
for _, other_type in ipairs(other_types_in_group) do
table.insert(cats, ("Category:{{{langname}}} " .. pos):format(other_type))
end
return ("{{also|%s}}"):format(table.concat(cats, "|"))
end
local function make_umbrella_preceding(pos)
if not other_types_in_group then
return nil
end
local cats = {}
for _, other_type in ipairs(other_types_in_group) do
table.insert(cats, "Category:" .. ucfirst((pos .. " by language"):format(other_type)))
end
return ("{{also|%s}}"):format(table.concat(cats, "|"))
end
labels[("%s terms"):format(typ)] = {
description = ("{{{langname}}} terms that %s."):format(desc),
additional = ("To categorize into this category, use {{tl|tlb|{{{langcode}}}|%s}} (template '''tlb''', not '''lb'''), " ..
"which should typically be placed next to the headword.\n\nIf the term is merely a variant (alternative form) of a term " ..
"in general use, it should be categorized instead in {{cl|{{{langname}}} %s forms}} (using " ..
"{{tl|%s form of|{{{langcode}}}|...}} or {{tl|%s spelling of|{{{langcode}}}|...}}). If only some senses of the term are %s, " ..
"it should be categorized instead in {{cl|{{{langname}}} terms with %s senses}}, using {{tl|lb|{{{langcode}}}|%s}} " ..
"(template '''lb''' instead of '''tlb'''), which should typically be placed next to the individual sense.%s"):format(
typ, typ, typ, typ, typ, typ, typ, distinguish:gsub("POS", "terms")),
parents = {"terms by usage"},
preceding = make_preceding("%s terms"),
umbrella = {
preceding = make_umbrella_preceding("%s terms"),
additional = ("To categorize into this category, use <code><nowiki>{{</nowiki>tlb|<var>langcode</var>|%s}}</code> " ..
"(template '''tlb''', not '''lb'''), which should typically be placed next to the headword. " ..
"(<code><var>langcode</var></code> is the appropriate language code for the language in question; see [[Wiktionary:List of languages]].)\n\n" ..
"If the term is merely a variant (alternative form) of a term in general use, it should be categorized instead in " ..
"{{cl|<var>langname</var> %s forms}} (using <code><nowiki>{{</nowiki>%s form of|<var>langcode</var>|...}}</code> " ..
"or <code><nowiki>{{</nowiki>%s spelling of|<var>langcode</var>|...}}</code>). " ..
"If only some senses of the term are %s, it should be categorized instead in {{cl|<var>langname</var> terms with %s senses}}, " ..
"using <code><nowiki>{{</nowiki>lb|<var>langcode</var>|%s}}</code> (template '''lb''' instead of '''tlb'''), which should " ..
"typically be placed next to the individual sense.%s"):format(
typ, typ, typ, typ, typ, typ, typ, distinguish:gsub("POS", "terms")),
}
}
labels[("terms with %s senses"):format(typ)] = {
description = ("{{{langname}}} terms with individual senses that %s."):format(desc),
additional = ("To categorize into this category, use {{tl|lb|{{{langcode}}}|%s}} (template '''lb''', not '''tlb'''), " ..
"which should typically be placed next to the individual sense.\n\nIf the term itself, in all its senses, is %s, " ..
"it should be placed in {{cl|{{{langname}}} %s terms}} instead, using {{tl|tlb|{{{langcode}}}|%s}} " ..
"(template '''tlb''' instead of '''lb'''), which should typically be placed next to the headword. " ..
"If the term is merely a variant (alternative form) of a term in general use, it should be categorized in " ..
"{{cl|{{{langname}}} %s forms}} (using {{tl|%s form of|{{{langcode}}}|...}} or {{tl|%s spelling of|{{{langcode}}}|...}}).%s"):format(
typ, typ, typ, typ, typ, typ, typ, distinguish:gsub("POS", "senses")),
parents = {{name = "terms by usage", sort = ("%s senses"):format(typ)}},
breadcrumb = ("with %s senses"):format(typ),
preceding = make_preceding("terms with %s senses"),
umbrella = {
preceding = make_umbrella_preceding("terms with %s senses"),
additional = ("To categorize into this category, use <code><nowiki>{{</nowiki>lb|<var>langcode</var>|%s}}</code> " ..
"(template '''lb''', not '''tlb'''), which should typically be placed next to the individual sense. " ..
"(<code><var>langcode</var></code> is the appropriate language code for the language in question; see [[Wiktionary:List of languages]].)\n\n" ..
"If the term itself, in all its senses, is %s, it should be placed in {{cl|<var>langname</var> %s terms}} instead, using " ..
"<code><nowiki>{{</nowiki>tlb|<var>langcode</var>|%s}}</code> (template '''tlb''' instead of '''lb'''), which should " ..
"typically be placed next to the headword. If the term is merely a variant (alternative form) of a term in general use, " ..
"it should be categorized in {{cl|<var>langname</var> %s forms}} (using <code><nowiki>{{</nowiki>%s form of|<var>langcode</var>|...}}</code> " ..
"or <code><nowiki>{{</nowiki>%s spelling of|<var>langcode</var>|...}}</code>.%s"):format(
typ, typ, typ, typ, typ, typ, typ, distinguish:gsub("POS", "senses")),
}
}
labels[("%s forms"):format(typ)] = {
description = ("{{{langname}}} forms that %s; and serve as alternative forms of the same terms in general use."):format(desc),
additional = ("To categorize into this category, use {{tl|%s form of|{{{langcode}}}|...}} or {{tl|%s spelling of|{{{langcode}}}|...}}.\n\n" ..
"If the term is not merely a variant (alternative form) of a term in general use, it should be placed in {{cl|{{{langname}}} %s terms}} " ..
"instead; to do this, use {{tl|tlb|{{{langcode}}}|%s}} (template '''tlb''', not '''lb'''), which should typically be placed next to the " ..
"headword. If only some senses of the term are %s, it should be categorized instead in {{cl|{{{langname}}} terms with %s senses}}, " ..
"using {{tl|lb|{{{langcode}}}|%s}} (template '''lb''' instead of '''tlb'''), which should typically be placed next to the individual sense.%s"):format(
typ, typ, typ, typ, typ, typ, typ, distinguish:gsub("POS", "forms")),
parents = {{name = ("%s terms"):format(typ), sort = "forms"}},
breadcrumb = "forms",
preceding = make_preceding("%s forms"),
umbrella = {
preceding = make_umbrella_preceding("%s forms"),
additional = ("To categorize into this category, use <code><nowiki>{{</nowiki>%s form of|<var>langcode</var>|...}}</code> " ..
"or <code><nowiki>{{</nowiki>%s spelling of|<var>langcode</var>|...}}</code>. (<code><var>langcode</var></code> is the " ..
"appropriate language code for the language in question; see [[Wiktionary:List of languages]].)\n\n" ..
"If the term is not merely a variant (alternative form) of a term in general use, it should be placed in {{cl|<var>langname</var> %s terms}} " ..
"instead; to do this, use <code><nowiki>{{</nowiki>lb|<var>langcode</var>|%s}}</code> (template '''tlb''', not '''lb'''), " ..
"which should typically be placed next to the headword. If only some senses of the term are %s, it should be categorized instead " ..
"in {{cl|<var>langname</var> terms with %s senses}}, using <code><nowiki>{{</nowiki>lb|<var>langcode</var>|%s}}</code> " ..
"(template '''lb''' instead of '''tlb'''), which should typically be placed next to the individual sense.%s"):format(
typ, typ, typ, typ, typ, typ, typ, distinguish:gsub("POS", "forms")),
}
}
end
local function generate_related_categories_with_senses(info)
for typ, spec in pairs(info) do
local other_types = {}
for other_type, _ in pairs(info) do
if other_type ~= typ then
table.insert(other_types, other_type)
end
end
table.sort(other_types)
generate_category_with_senses(typ, spec.desc, spec.distinguish, other_types)
end
end
generate_related_categories_with_senses {
archaic = {
desc = "are no longer in general use but still encountered in older literature, sometimes still used for special effect, and typically recognized by native speakers",
distinguish = "Archaic POS should be distinguished from dated POS, which are merely [[unfashionable]] and [[anachronistic]] but still sometimes used, especially by older speakers; and on the other hand from obsolete POS, which are no longer in use at all and are not usually recognized by native speakers.",
},
dated = {
desc = "are no longer fashionable and thus are [[anachronistic]], but still sometimes in use, especially by older speakers",
distinguish = "Dated POS should be distinguished from archaic POS, which are no longer in use (except occasionally for special effect) but are still sometimes encountered in older literature and are typically recognized by native speakers; and obsolete POS, which are no longer in use at all and are not usually recognized by native speakers.",
},
obsolete = {
desc = "are no longer in use and not usually recognized by native speakers, but still sometimes found in older literature",
distinguish = "Obsolete POS should be distinguished from archaic POS, which, although no longer in general use, are still occasionally used for special effect and are typically recognized by native speakers; and dated POS, which are merely [[unfashionable]] and [[anachronistic]] but still sometimes used, especially by older speakers.",
},
}
generate_related_categories_with_senses {
rare = {
desc = "are rarely found in general use and may not be recognized by some native speakers",
distinguish = "Rare POS should be distinguished from uncommon POS, which are not common but used enough to be generally recognized.",
},
uncommon = {
desc = "are in general use but not common",
distinguish = "Uncommon POS should be distinguished from rare POS, which are infrequent enough that they are sometimes not recognized by native speakers.",
},
}
labels["2channel slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to users of the website {{w|2channel}}.",
parents = {"internet slang"},
}
labels["4chan slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to users of the website {{w|4chan}}.",
parents = {"internet slang"},
}
labels["4chan /lgbt/ slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to users of the /lgbt/ board of the website {{w|4chan}}.",
parents = {"4chan slang", "LGBTQ slang"},
}
labels["angry register terms"] = {
description = "{{{langname}}} terms belonging to an angry linguistic register, used only when the speaker is angry.",
parents = {"terms by usage"},
}
labels["anti-LGBTQ slurs"] = {
description = "{{{langname}}} terms that are intended to offend [[LGBTQ]] people.",
parents = {"offensive terms"},
}
labels["autological terms"] = {
description = "{{{langname}}} terms that possess the property they themselves describe.",
parents = {"terms by usage"},
}
labels["back slang"] = {
description = "{{{langname}}} terms in which the written word is spoken phonemically backwards to form a coded language.",
parents = {"cant"},
}
labels["cant"] = {
description = "{{{langname}}} terms used to form secret languages that are typically restricted to members of a specific group.",
parents = {"slang"},
}
labels["censored spellings"] = {
description = "{{{langname}}} spellings where some characters have been changed in an effort to reduce the shock value of the original term.",
parents = {"terms by usage"},
}
labels["childish terms"] = {
description = "{{{langname}}} terms that are typically only used by, or to, children.",
parents = {"terms by usage", "informal terms"},
}
labels["colloquialisms"] = {
description = "{{{langname}}} terms that are likely to be used primarily in casual conversation rather than in more formal written works, speeches, and discourse.",
parents = {"terms by usage"},
}
labels["corporate jargon"] = {
description = "{{{langname}}} terms (typically for non-business-specific concepts) that are used especially in a [[business]] or [[corporate]] [[context]].",
additional = "See also [[:Category:Businesses]], [[:Category:Business]] and language-specific categories thereof for terms related to business-specific concepts.",
parents = {"terms by usage"},
}
labels["criminal slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to criminals.",
parents = {"slang"},
}
labels["derogatory terms"] = {
description = "{{{langname}}} terms that are intended to [[disparage]], [[demean]], [[insult]] or [[offend]].",
parents = {"terms by usage"},
}
labels["dialectal terms"] = {
description = "{{{langname}}} terms that are not used in standard language but only in dialects.",
parents = {"terms by usage"},
}
labels["dis legomena"] = {
description = "{{{langname}}} terms that are attested only twice in the entire corpus.",
parents = {"terms by usage"},
}
labels["drag slang"] = {
description = "{{{langname}}} [[slang]] terms used in the [[drag]] community.",
parents = {"LGBTQ slang"},
}
labels["ecclesiastical terms"] = {
description = "{{{langname}}} terms used only by religious figures.",
parents = {"terms by usage"},
}
labels["eggcorns"] = {
description = "{{{langname}}} [[eggcorn]]s, terms which are misconstructed.",
parents = {"misconstructions"},
}
labels["emoticons"] = {
description = "{{{langname}}} characters, or sequences of characters, that imitate expressions and other objects by means of [[pareidolia]].",
parents = {"internet slang", "text messaging slang"},
}
labels["endearing terms"] = {
description = "{{{langname}}} terms that are used to show affection or endearment to another person.",
parents = {"terms by usage"},
}
labels["ethnic slurs"] = {
description = "{{{langname}}} terms that are intended to offend certain ethnic groups.",
parents = {"offensive terms"},
}
labels["expressive terms"] = {
description = "{{{langname}}} terms with additional expressive content compared with the basic meaning of the term.",
additional = "This term is common in Slavic lexicography and is found in most Czech, Slovak and Polish dictionaries, but there is no exact equivalent in English lexicography. The closest equivalents might be a combination of ''colloquial'' and either ''endearing'' or ''pejorative'', as the case may be.",
parents = {"terms by usage"},
}
labels["eye dialect"] = {
description = "{{{langname}}} nonstandard spellings, which however do not change pronunciation, deliberately used by an author to indicate that the speaker uses a nonstandard or dialectal speech.",
parents = {"nonstandard forms", "terms by orthographic property"},
}
labels["familiar terms"] = {
description = "{{{langname}}} terms whose use is typically to contexts of friendly intimacy.",
parents = {"terms by usage"},
}
labels["fandom slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to fans of one or more works of fiction.",
parents = {"slang"},
}
labels["filter-avoidance spellings"] = {
description = "Deliberate misspellings of {{{langname}}} terms that are used to avoid [[w:Wordfilter|wordfilters]].",
parents = {"deliberate misspellings"},
}
labels["folk poetic terms"] = {
description = "{{{langname}}} terms whose usage is typically restricted to works of oral or folk poetry.",
parents = {"terms by usage", "poetic terms"},
}
labels["formal terms"] = {
description = "{{{langname}}} terms whose use is typically restricted to polite, ceremonious, non-casual contexts.",
parents = {"terms by usage"},
}
labels["gay slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to homosexual people.",
parents = {"LGBTQ slang"},
}
labels["gender-critical slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to gender-critical feminists.",
parents = {"slang", "Category:{{{langcode}}}:Gender-critical feminism"},
}
labels["gender-neutral terms"] = {
description = "{{{langname}}} terms that are applicable to all people, independent of gender.",
parents = {"terms by usage"},
}
labels["graffiti slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to creators of [[graffiti#Noun|graffiti]].",
parents = {"slang", "Category:{{{langcode}}}:Art"},
}
labels["higher register terms"] = {
description = "{{{langname}}} terms belonging to a higher linguistic register, such as literary terms; such terms are somewhat less common or known.",
parents = {"terms by usage"},
}
labels["historical terms"] = {
description = "{{{langname}}} terms that refer to obsolete things or concepts.",
parents = {"terms by usage"},
}
labels["honorific terms"] = {
description = "{{{langname}}} [[honorific]] terms, which are used to show deference and respect.",
parents = {"terms by usage"},
}
labels["polite terms"] = {
description = "{{{langname}}} [[polite]] terms, which are used to show deference and respect.",
parents = {"terms by usage"},
}
labels["hapax legomena"] = {
description = "{{{langname}}} terms that are attested only once in the entire corpus.",
parents = {"terms by usage"},
}
labels["humble terms"] = {
description = "{{{langname}}} [[humble]] terms, which are used to show humility towards the addressee, indicating that the speaker has a lower social standing.",
parents = {"honorific terms"},
}
labels["hypercorrections"] = {
description = "{{{langname}}} forms of other terms by misapplications of grammatical or orthographical rules.",
parents = {"nonstandard terms", "nonstandard forms"},
}
labels["hyperforeign terms"] = {
description = "{{{langname}}} terms created by misapplying the perceived grammatical, orthographical or phonetical rules of another language.",
parents = {"hypercorrections"},
}
labels["incel slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to incels.",
parents = {"slang", "Category:{{{langcode}}}:Incel community"},
}
labels["imperfective forms"] = {
description = "{{{langname}}} verbs that serve as imperfective variants of perfective verbs, sharing the same base set of meanings.",
parents = {"terms by usage"},
}
labels["informal forms"] = {
description = "{{{langname}}} terms that can be used in casual, non-ceremonious conversations as alternative forms of other terms.",
additional = "Informal non-lemma form variants also belong here.",
parents = {"informal terms"},
}
labels["informal terms"] = {
description = "{{{langname}}} terms whose use is typically restricted to casual, non‐ceremonious conversations.",
parents = {"terms by usage"},
}
labels["deliberate misspellings"] = {
description = "Deliberate misspellings of {{{langname}}} terms.",
parents = {"misspellings"},
}
labels["internet laughter slang"] = {
description = "{{{langname}}} [[slang]] terms that are used as substitutes for laughter in internet-related contexts.",
additional = "::''Note: The majority of items that <u>could</u> be here do not meet Wiktionary's [[WT:CFI|criteria for inclusion]].''",
parents = {"internet slang"},
}
labels["internet slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to internet users.",
parents = {"slang"},
}
labels["humorous terms"] = {
description = "{{{langname}}} terms that are humorous, amusing or joking.",
parents = {"terms by usage"},
}
labels["journalistic terms"] = {
description = "{{{langname}}} terms that are used especially in [[journalistic]] language, i.e. in newspapers and magazines.",
parents = {"terms by usage"},
}
labels["kennings"] = {
description = "{{{langname}}} metaphorical compounds or phrases describing basic objects in an allusive fashion, used especially in Germanic poetry.",
parents = {"poetic terms"},
}
labels["leetspeak"] = {
description = "{{{langname}}} which are used in [[leetspeak]], a variety of internet slang that focuses on substitution of letters by other characters which are similar in appearance.",
parents = {"internet slang"},
}
labels["LGBTQ slang"] = {
description = "{{{langname}}} [[slang]] terms which are used predominantly among [[LGBTQ]] people.",
parents = {"slang", "Category:{{{langcode}}}:LGBTQ"},
}
labels["literary terms"] = {
description = "{{{langname}}} terms whose usage is typically restricted to works of literature.",
parents = {"higher register terms"},
}
labels["medical slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to medical doctors, such as physicians and surgeons.",
parents = {"slang"},
}
labels["military slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to military personnel.",
parents = {"slang"},
}
labels["misconstructions"] = {
description = "Terms wrongly built due to a misunderstanding of their parts.",
parents = {"nonstandard forms"},
}
labels["misromanizations"] = {
description = "Common misromanizations of {{{langname}}} terms.",
parents = {"nonstandard forms"},
}
labels["misspellings"] = {
description = "Common accidental misspellings of {{{langname}}} terms and some terms which are deliberate misspellings.",
parents = {"nonstandard forms"},
}
labels["multiplicity slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to the {{l|en|multiplicity|id=multiple personalities}} [[community]].",
parents = {"slang", "Category:{{{langcode}}}:Multiplicity (psychology)"},
}
labels["naval slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to naval personnel.",
parents = {"military slang"},
}
labels["nonstandard forms"] = {
description = "{{{langname}}} forms of standard terms that are considered improper, incorrect or commonly misused.",
parents = {"nonstandard terms"},
}
labels["nonstandard terms"] = {
description = "{{{langname}}} terms that are considered improper, incorrect or commonly misused.",
parents = {"terms by usage"},
}
labels["numismatic slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to numismatists.",
parents = {"slang", "Category:{{{langcode}}}:Currency"},
}
labels["offensive terms"] = {
description = "{{{langname}}} terms that are typically considered to offend people.",
parents = {"terms by usage"},
}
labels["officialese terms"] = {
description = "{{{langname}}} terms that are chiefly used by official sources, and are often bureaucratic-sounding.",
parents = {"terms by usage"},
}
labels["oxymorons"] = {
description = "{{{langname}}} terms that are juxtapositions of opposing ideas.",
parents = {"terms by usage"},
}
labels["perfective forms"] = {
description = "{{{langname}}} verbs that serve as perfective variants of imperfective verbs, sharing the same base set of meanings.",
parents = {"terms by usage"},
}
labels["placeholder terms"] = {
description = "{{{langname}}} terms used to refer to items for which one does not know or cannot recall the name, or is unable to or does not care to specify precisely.",
parents = {"terms by usage"},
}
labels["poetic forms"] = {
description = "{{{langname}}} terms that can be used in works of poetry as poetic alternative forms of other terms.",
additional = "Poetic non-lemma form variants also belong here.",
parents = {"poetic terms"},
}
labels["poetic terms"] = {
description = "{{{langname}}} terms whose usage is typically restricted to works of poetry.",
parents = {"terms by usage", "literary terms"},
}
labels["post-nominal letters"] = {
description = "{{{langname}}} Post-nominal letters - also called post-nominal initials, post-nominal titles or designatory letters are letters placed after the name of a person to indicate that the individual holds a position, educational degree, accreditation, office, military decoration, or honour, or is a member of a religious institute or fraternity.",
parents = {"terms by usage"},
}
labels["prison slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to detainees in correctional institutions.",
parents = {"slang"},
}
labels["proscribed terms"] = {
description = "{{{langname}}} terms whose usage is proscribed; thus, they are considered wrong according to prescriptive sources.",
parents = {"terms by usage", "nonstandard terms"},
}
labels["puristic terms"] = {
description = "{{{langname}}} terms adopted for [[w:Linguistic purism|linguistic purism]].",
parents = {"terms by usage"},
}
labels["radio slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to radio communication.",
parents = {"slang"},
}
labels["Reddit slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to users of the website {{w|Reddit}}.",
parents = {"internet slang"},
}
labels["religious slurs"] = {
description = "{{{langname}}} terms that are intended to offend members of certain religions.",
parents = {"offensive terms"},
}
labels["reverential terms"] = {
description = "{{{langname}}} [[reverential]] terms, which are used to exalt the addressee, indicating that they have a higher social standing than the speaker.",
parents = {"honorific terms"},
}
labels["royal terms"] = {
description = "{{{langname}}} terms used only by royalty.",
parents = {"terms by usage"},
}
labels["rustic terms"] = {
description = "{{{langname}}} terms whose use is typically restricted rural speech.",
parents = {"terms by usage"},
}
labels["school slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to schools and school pupils.",
parents = {"slang"},
}
labels["self-deprecatory terms"] = {
description = "{{{langname}}} [[self-deprecatory]] terms.",
parents = {"terms by usage"},
}
labels["short forms"] = {
description = "{{{langname}}} terms that are [[short form]]s of other terms, often used informally.",
parents = {"terms by usage", "shortenings"},
}
labels["slang"] = {
description = "{{{langname}}} [[colloquial]] terms that are typically used to mark membership in a cultural subgroup.",
parents = {"terms by usage"},
}
labels["solemn terms"] = {
description = "{{{langname}}} terms that are used to instill a sense of somberness.",
parents = {"terms by usage"},
}
labels["student slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to colleges, universities, and their students.",
parents = {"slang"},
}
labels["superseded forms"] = {
description = "{{{langname}}} forms that have been superseded by other forms due to changes in spelling conventions.",
parents = {"terms by usage", "terms by orthographic property"},
}
labels["swear words"] = {
description = "{{{langname}}} terms that are used to swear, such as to express strong anger or frustration.",
parents = {"vulgarities"},
}
labels["technical terms"] = {
description = "{{{langname}}} terms that are usually or exclusively used in technical/scientific writing.",
parents = {"terms by usage"},
}
labels["terms of address"] = {
description = "{{{langname}}} terms used to refer to another person.",
parents = {"terms by usage"},
}
labels["terms used in hendiadys"] = {
description = "{{{langname}}} words or senses which are used only in {{w|hendiadys}}.",
parents = {"terms by usage"},
}
labels["terms with historical senses"] = {
description = "{{{langname}}} terms with senses that refer to things or concepts mainly known for their historical value.",
parents = {"terms by usage"},
}
labels["terms with transferred senses"] = {
description = "{{{langname}}} terms with [[Appendix:Glossary#transferred senses|transferred senses]].",
parents = {"terms by usage"},
}
labels["terms with uncertain meaning"] = {
description = "{{{langname}}} terms whose meaning is unknown or disputed.",
parents = {"terms by usage"},
}
labels["text messaging slang"] = {
description = "{{{langname}}} terms used for [[text messaging]] on mobile phones or similar devices, usually consisting of heavily abbreviated forms.",
parents = {"slang"},
}
labels["tone indicators"] = {
description = "{{{langname}}} symbols used to denote or clarify the intent of a preceeding or occasionally following message.",
parents = {"internet slang"},
}
labels["trademarks"] = {
description = "{{{langname}}} terms that identify legal entities, their products and services, by means of legal protection — to some extent, in a number of jurisdictions — against unauthorized use of the terms.",
parents = {"terms by usage"},
}
labels["transgender slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to transgender people.",
parents = {"LGBTQ slang", "Category:{{{langcode}}}:Transgender"},
}
labels["TV Tropes slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to users of the website {{w|TV Tropes}}.",
parents = {"internet slang"},
}
labels["umlautless spellings"] = {
description = "{{{langname}}} terms that are the result of the original terms' [[umlaut]]s being substituted.",
parents = {"nonstandard forms", "terms by orthographic property"},
}
labels["Usenet slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to users of {{w|Usenet}}.",
parents = {"internet slang"},
}
labels["men's speech terms"] = {
description = "{{{langname}}} terms and forms used in [[Appendix:Glossary#men's speech|men's speech]].",
parents = {"terms by usage"},
}
labels["women's speech terms"] = {
description = "{{{langname}}} terms and forms used in [[Appendix:Glossary#women's speech|women's speech]].",
parents = {"terms by usage"},
}
labels["vulgarities"] = {
description = "{{{langname}}} terms whose tone (rather than the meaning) is offensive to polite company.",
parents = {"terms by usage"},
}
-- Add 'umbrella_parents' key if not already present.
for key, data in pairs(labels) do
if not data.umbrella_parents then
data.umbrella_parents = "Terms by usage subcategories by language"
end
end
-----------------------------------------------------------------------------
-- --
-- RAW CATEGORIES --
-- --
-----------------------------------------------------------------------------
raw_categories["Terms by usage subcategories by language"] = {
description = "Umbrella categories covering topics related to terms categorized by their usage, such as slang, obsolete or archaic forms and vulgarities.",
additional = "{{{umbrella_meta_msg}}}",
parents = {
"Umbrella metacategories",
{name = "terms by usage", is_label = true, sort = " "},
},
}
return {LABELS = labels, RAW_CATEGORIES = raw_categories}
tsjuedsf82lc1tcz85zlfmoe402rtpj
235266
235265
2026-06-01T12:11:10Z
Lee
19
[[:en:Module:category_tree/pragmatic_properties]] වෙතින් එක් සංශෝධනයක්
235265
Scribunto
text/plain
local labels = {}
local raw_categories = {}
local string_utilities_module = "Module:string utilities"
local ucfirst = require(string_utilities_module).ucfirst
-----------------------------------------------------------------------------
-- --
-- LABELS --
-- --
-----------------------------------------------------------------------------
labels["terms by usage"] = {
description = "{{{langname}}} terms categorized by the manner and context in which they are used by speakers.",
umbrella_parents = "Fundamental",
parents = {{name = "{{{langcat}}}", raw = true}},
}
local function generate_category_with_senses(typ, desc, distinguish, other_types_in_group)
if distinguish then
distinguish = "\n\n" .. distinguish
else
distinguish = ""
end
local function make_preceding(pos)
if not other_types_in_group then
return nil
end
local cats = {}
for _, other_type in ipairs(other_types_in_group) do
table.insert(cats, ("Category:{{{langname}}} " .. pos):format(other_type))
end
return ("{{also|%s}}"):format(table.concat(cats, "|"))
end
local function make_umbrella_preceding(pos)
if not other_types_in_group then
return nil
end
local cats = {}
for _, other_type in ipairs(other_types_in_group) do
table.insert(cats, "Category:" .. ucfirst((pos .. " by language"):format(other_type)))
end
return ("{{also|%s}}"):format(table.concat(cats, "|"))
end
labels[("%s terms"):format(typ)] = {
description = ("{{{langname}}} terms that %s."):format(desc),
additional = ("To categorize into this category, use {{tl|tlb|{{{langcode}}}|%s}} (template '''tlb''', not '''lb'''), " ..
"which should typically be placed next to the headword.\n\nIf the term is merely a variant (alternative form) of a term " ..
"in general use, it should be categorized instead in {{cl|{{{langname}}} %s forms}} (using " ..
"{{tl|%s form of|{{{langcode}}}|...}} or {{tl|%s spelling of|{{{langcode}}}|...}}). If only some senses of the term are %s, " ..
"it should be categorized instead in {{cl|{{{langname}}} terms with %s senses}}, using {{tl|lb|{{{langcode}}}|%s}} " ..
"(template '''lb''' instead of '''tlb'''), which should typically be placed next to the individual sense.%s"):format(
typ, typ, typ, typ, typ, typ, typ, distinguish:gsub("POS", "terms")),
parents = {"terms by usage"},
preceding = make_preceding("%s terms"),
umbrella = {
preceding = make_umbrella_preceding("%s terms"),
additional = ("To categorize into this category, use <code><nowiki>{{</nowiki>tlb|<var>langcode</var>|%s}}</code> " ..
"(template '''tlb''', not '''lb'''), which should typically be placed next to the headword. " ..
"(<code><var>langcode</var></code> is the appropriate language code for the language in question; see [[Wiktionary:List of languages]].)\n\n" ..
"If the term is merely a variant (alternative form) of a term in general use, it should be categorized instead in " ..
"{{cl|<var>langname</var> %s forms}} (using <code><nowiki>{{</nowiki>%s form of|<var>langcode</var>|...}}</code> " ..
"or <code><nowiki>{{</nowiki>%s spelling of|<var>langcode</var>|...}}</code>). " ..
"If only some senses of the term are %s, it should be categorized instead in {{cl|<var>langname</var> terms with %s senses}}, " ..
"using <code><nowiki>{{</nowiki>lb|<var>langcode</var>|%s}}</code> (template '''lb''' instead of '''tlb'''), which should " ..
"typically be placed next to the individual sense.%s"):format(
typ, typ, typ, typ, typ, typ, typ, distinguish:gsub("POS", "terms")),
}
}
labels[("terms with %s senses"):format(typ)] = {
description = ("{{{langname}}} terms with individual senses that %s."):format(desc),
additional = ("To categorize into this category, use {{tl|lb|{{{langcode}}}|%s}} (template '''lb''', not '''tlb'''), " ..
"which should typically be placed next to the individual sense.\n\nIf the term itself, in all its senses, is %s, " ..
"it should be placed in {{cl|{{{langname}}} %s terms}} instead, using {{tl|tlb|{{{langcode}}}|%s}} " ..
"(template '''tlb''' instead of '''lb'''), which should typically be placed next to the headword. " ..
"If the term is merely a variant (alternative form) of a term in general use, it should be categorized in " ..
"{{cl|{{{langname}}} %s forms}} (using {{tl|%s form of|{{{langcode}}}|...}} or {{tl|%s spelling of|{{{langcode}}}|...}}).%s"):format(
typ, typ, typ, typ, typ, typ, typ, distinguish:gsub("POS", "senses")),
parents = {{name = "terms by usage", sort = ("%s senses"):format(typ)}},
breadcrumb = ("with %s senses"):format(typ),
preceding = make_preceding("terms with %s senses"),
umbrella = {
preceding = make_umbrella_preceding("terms with %s senses"),
additional = ("To categorize into this category, use <code><nowiki>{{</nowiki>lb|<var>langcode</var>|%s}}</code> " ..
"(template '''lb''', not '''tlb'''), which should typically be placed next to the individual sense. " ..
"(<code><var>langcode</var></code> is the appropriate language code for the language in question; see [[Wiktionary:List of languages]].)\n\n" ..
"If the term itself, in all its senses, is %s, it should be placed in {{cl|<var>langname</var> %s terms}} instead, using " ..
"<code><nowiki>{{</nowiki>tlb|<var>langcode</var>|%s}}</code> (template '''tlb''' instead of '''lb'''), which should " ..
"typically be placed next to the headword. If the term is merely a variant (alternative form) of a term in general use, " ..
"it should be categorized in {{cl|<var>langname</var> %s forms}} (using <code><nowiki>{{</nowiki>%s form of|<var>langcode</var>|...}}</code> " ..
"or <code><nowiki>{{</nowiki>%s spelling of|<var>langcode</var>|...}}</code>.%s"):format(
typ, typ, typ, typ, typ, typ, typ, distinguish:gsub("POS", "senses")),
}
}
labels[("%s forms"):format(typ)] = {
description = ("{{{langname}}} forms that %s; and serve as alternative forms of the same terms in general use."):format(desc),
additional = ("To categorize into this category, use {{tl|%s form of|{{{langcode}}}|...}} or {{tl|%s spelling of|{{{langcode}}}|...}}.\n\n" ..
"If the term is not merely a variant (alternative form) of a term in general use, it should be placed in {{cl|{{{langname}}} %s terms}} " ..
"instead; to do this, use {{tl|tlb|{{{langcode}}}|%s}} (template '''tlb''', not '''lb'''), which should typically be placed next to the " ..
"headword. If only some senses of the term are %s, it should be categorized instead in {{cl|{{{langname}}} terms with %s senses}}, " ..
"using {{tl|lb|{{{langcode}}}|%s}} (template '''lb''' instead of '''tlb'''), which should typically be placed next to the individual sense.%s"):format(
typ, typ, typ, typ, typ, typ, typ, distinguish:gsub("POS", "forms")),
parents = {{name = ("%s terms"):format(typ), sort = "forms"}},
breadcrumb = "forms",
preceding = make_preceding("%s forms"),
umbrella = {
preceding = make_umbrella_preceding("%s forms"),
additional = ("To categorize into this category, use <code><nowiki>{{</nowiki>%s form of|<var>langcode</var>|...}}</code> " ..
"or <code><nowiki>{{</nowiki>%s spelling of|<var>langcode</var>|...}}</code>. (<code><var>langcode</var></code> is the " ..
"appropriate language code for the language in question; see [[Wiktionary:List of languages]].)\n\n" ..
"If the term is not merely a variant (alternative form) of a term in general use, it should be placed in {{cl|<var>langname</var> %s terms}} " ..
"instead; to do this, use <code><nowiki>{{</nowiki>lb|<var>langcode</var>|%s}}</code> (template '''tlb''', not '''lb'''), " ..
"which should typically be placed next to the headword. If only some senses of the term are %s, it should be categorized instead " ..
"in {{cl|<var>langname</var> terms with %s senses}}, using <code><nowiki>{{</nowiki>lb|<var>langcode</var>|%s}}</code> " ..
"(template '''lb''' instead of '''tlb'''), which should typically be placed next to the individual sense.%s"):format(
typ, typ, typ, typ, typ, typ, typ, distinguish:gsub("POS", "forms")),
}
}
end
local function generate_related_categories_with_senses(info)
for typ, spec in pairs(info) do
local other_types = {}
for other_type, _ in pairs(info) do
if other_type ~= typ then
table.insert(other_types, other_type)
end
end
table.sort(other_types)
generate_category_with_senses(typ, spec.desc, spec.distinguish, other_types)
end
end
generate_related_categories_with_senses {
archaic = {
desc = "are no longer in general use but still encountered in older literature, sometimes still used for special effect, and typically recognized by native speakers",
distinguish = "Archaic POS should be distinguished from dated POS, which are merely [[unfashionable]] and [[anachronistic]] but still sometimes used, especially by older speakers; and on the other hand from obsolete POS, which are no longer in use at all and are not usually recognized by native speakers.",
},
dated = {
desc = "are no longer fashionable and thus are [[anachronistic]], but still sometimes in use, especially by older speakers",
distinguish = "Dated POS should be distinguished from archaic POS, which are no longer in use (except occasionally for special effect) but are still sometimes encountered in older literature and are typically recognized by native speakers; and obsolete POS, which are no longer in use at all and are not usually recognized by native speakers.",
},
obsolete = {
desc = "are no longer in use and not usually recognized by native speakers, but still sometimes found in older literature",
distinguish = "Obsolete POS should be distinguished from archaic POS, which, although no longer in general use, are still occasionally used for special effect and are typically recognized by native speakers; and dated POS, which are merely [[unfashionable]] and [[anachronistic]] but still sometimes used, especially by older speakers.",
},
}
generate_related_categories_with_senses {
rare = {
desc = "are rarely found in general use and may not be recognized by some native speakers",
distinguish = "Rare POS should be distinguished from uncommon POS, which are not common but used enough to be generally recognized.",
},
uncommon = {
desc = "are in general use but not common",
distinguish = "Uncommon POS should be distinguished from rare POS, which are infrequent enough that they are sometimes not recognized by native speakers.",
},
}
labels["2channel slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to users of the website {{w|2channel}}.",
parents = {"internet slang"},
}
labels["4chan slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to users of the website {{w|4chan}}.",
parents = {"internet slang"},
}
labels["4chan /lgbt/ slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to users of the /lgbt/ board of the website {{w|4chan}}.",
parents = {"4chan slang", "LGBTQ slang"},
}
labels["angry register terms"] = {
description = "{{{langname}}} terms belonging to an angry linguistic register, used only when the speaker is angry.",
parents = {"terms by usage"},
}
labels["anti-LGBTQ slurs"] = {
description = "{{{langname}}} terms that are intended to offend [[LGBTQ]] people.",
parents = {"offensive terms"},
}
labels["autological terms"] = {
description = "{{{langname}}} terms that possess the property they themselves describe.",
parents = {"terms by usage"},
}
labels["back slang"] = {
description = "{{{langname}}} terms in which the written word is spoken phonemically backwards to form a coded language.",
parents = {"cant"},
}
labels["cant"] = {
description = "{{{langname}}} terms used to form secret languages that are typically restricted to members of a specific group.",
parents = {"slang"},
}
labels["censored spellings"] = {
description = "{{{langname}}} spellings where some characters have been changed in an effort to reduce the shock value of the original term.",
parents = {"terms by usage"},
}
labels["childish terms"] = {
description = "{{{langname}}} terms that are typically only used by, or to, children.",
parents = {"terms by usage", "informal terms"},
}
labels["colloquialisms"] = {
description = "{{{langname}}} terms that are likely to be used primarily in casual conversation rather than in more formal written works, speeches, and discourse.",
parents = {"terms by usage"},
}
labels["corporate jargon"] = {
description = "{{{langname}}} terms (typically for non-business-specific concepts) that are used especially in a [[business]] or [[corporate]] [[context]].",
additional = "See also [[:Category:Businesses]], [[:Category:Business]] and language-specific categories thereof for terms related to business-specific concepts.",
parents = {"terms by usage"},
}
labels["criminal slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to criminals.",
parents = {"slang"},
}
labels["derogatory terms"] = {
description = "{{{langname}}} terms that are intended to [[disparage]], [[demean]], [[insult]] or [[offend]].",
parents = {"terms by usage"},
}
labels["dialectal terms"] = {
description = "{{{langname}}} terms that are not used in standard language but only in dialects.",
parents = {"terms by usage"},
}
labels["dis legomena"] = {
description = "{{{langname}}} terms that are attested only twice in the entire corpus.",
parents = {"terms by usage"},
}
labels["drag slang"] = {
description = "{{{langname}}} [[slang]] terms used in the [[drag]] community.",
parents = {"LGBTQ slang"},
}
labels["ecclesiastical terms"] = {
description = "{{{langname}}} terms used only by religious figures.",
parents = {"terms by usage"},
}
labels["eggcorns"] = {
description = "{{{langname}}} [[eggcorn]]s, terms which are misconstructed.",
parents = {"misconstructions"},
}
labels["emoticons"] = {
description = "{{{langname}}} characters, or sequences of characters, that imitate expressions and other objects by means of [[pareidolia]].",
parents = {"internet slang", "text messaging slang"},
}
labels["endearing terms"] = {
description = "{{{langname}}} terms that are used to show affection or endearment to another person.",
parents = {"terms by usage"},
}
labels["ethnic slurs"] = {
description = "{{{langname}}} terms that are intended to offend certain ethnic groups.",
parents = {"offensive terms"},
}
labels["expressive terms"] = {
description = "{{{langname}}} terms with additional expressive content compared with the basic meaning of the term.",
additional = "This term is common in Slavic lexicography and is found in most Czech, Slovak and Polish dictionaries, but there is no exact equivalent in English lexicography. The closest equivalents might be a combination of ''colloquial'' and either ''endearing'' or ''pejorative'', as the case may be.",
parents = {"terms by usage"},
}
labels["eye dialect"] = {
description = "{{{langname}}} nonstandard spellings, which however do not change pronunciation, deliberately used by an author to indicate that the speaker uses a nonstandard or dialectal speech.",
parents = {"nonstandard forms", "terms by orthographic property"},
}
labels["familiar terms"] = {
description = "{{{langname}}} terms whose use is typically to contexts of friendly intimacy.",
parents = {"terms by usage"},
}
labels["fandom slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to fans of one or more works of fiction.",
parents = {"slang"},
}
labels["filter-avoidance spellings"] = {
description = "Deliberate misspellings of {{{langname}}} terms that are used to avoid [[w:Wordfilter|wordfilters]].",
parents = {"deliberate misspellings"},
}
labels["folk poetic terms"] = {
description = "{{{langname}}} terms whose usage is typically restricted to works of oral or folk poetry.",
parents = {"terms by usage", "poetic terms"},
}
labels["formal terms"] = {
description = "{{{langname}}} terms whose use is typically restricted to polite, ceremonious, non-casual contexts.",
parents = {"terms by usage"},
}
labels["gay slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to homosexual people.",
parents = {"LGBTQ slang"},
}
labels["gender-critical slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to gender-critical feminists.",
parents = {"slang", "Category:{{{langcode}}}:Gender-critical feminism"},
}
labels["gender-neutral terms"] = {
description = "{{{langname}}} terms that are applicable to all people, independent of gender.",
parents = {"terms by usage"},
}
labels["graffiti slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to creators of [[graffiti#Noun|graffiti]].",
parents = {"slang", "Category:{{{langcode}}}:Art"},
}
labels["higher register terms"] = {
description = "{{{langname}}} terms belonging to a higher linguistic register, such as literary terms; such terms are somewhat less common or known.",
parents = {"terms by usage"},
}
labels["historical terms"] = {
description = "{{{langname}}} terms that refer to obsolete things or concepts.",
parents = {"terms by usage"},
}
labels["honorific terms"] = {
description = "{{{langname}}} [[honorific]] terms, which are used to show deference and respect.",
parents = {"terms by usage"},
}
labels["polite terms"] = {
description = "{{{langname}}} [[polite]] terms, which are used to show deference and respect.",
parents = {"terms by usage"},
}
labels["hapax legomena"] = {
description = "{{{langname}}} terms that are attested only once in the entire corpus.",
parents = {"terms by usage"},
}
labels["humble terms"] = {
description = "{{{langname}}} [[humble]] terms, which are used to show humility towards the addressee, indicating that the speaker has a lower social standing.",
parents = {"honorific terms"},
}
labels["hypercorrections"] = {
description = "{{{langname}}} forms of other terms by misapplications of grammatical or orthographical rules.",
parents = {"nonstandard terms", "nonstandard forms"},
}
labels["hyperforeign terms"] = {
description = "{{{langname}}} terms created by misapplying the perceived grammatical, orthographical or phonetical rules of another language.",
parents = {"hypercorrections"},
}
labels["incel slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to incels.",
parents = {"slang", "Category:{{{langcode}}}:Incel community"},
}
labels["imperfective forms"] = {
description = "{{{langname}}} verbs that serve as imperfective variants of perfective verbs, sharing the same base set of meanings.",
parents = {"terms by usage"},
}
labels["informal forms"] = {
description = "{{{langname}}} terms that can be used in casual, non-ceremonious conversations as alternative forms of other terms.",
additional = "Informal non-lemma form variants also belong here.",
parents = {"informal terms"},
}
labels["informal terms"] = {
description = "{{{langname}}} terms whose use is typically restricted to casual, non‐ceremonious conversations.",
parents = {"terms by usage"},
}
labels["deliberate misspellings"] = {
description = "Deliberate misspellings of {{{langname}}} terms.",
parents = {"misspellings"},
}
labels["internet laughter slang"] = {
description = "{{{langname}}} [[slang]] terms that are used as substitutes for laughter in internet-related contexts.",
additional = "::''Note: The majority of items that <u>could</u> be here do not meet Wiktionary's [[WT:CFI|criteria for inclusion]].''",
parents = {"internet slang"},
}
labels["internet slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to internet users.",
parents = {"slang"},
}
labels["humorous terms"] = {
description = "{{{langname}}} terms that are humorous, amusing or joking.",
parents = {"terms by usage"},
}
labels["journalistic terms"] = {
description = "{{{langname}}} terms that are used especially in [[journalistic]] language, i.e. in newspapers and magazines.",
parents = {"terms by usage"},
}
labels["kennings"] = {
description = "{{{langname}}} metaphorical compounds or phrases describing basic objects in an allusive fashion, used especially in Germanic poetry.",
parents = {"poetic terms"},
}
labels["leetspeak"] = {
description = "{{{langname}}} which are used in [[leetspeak]], a variety of internet slang that focuses on substitution of letters by other characters which are similar in appearance.",
parents = {"internet slang"},
}
labels["LGBTQ slang"] = {
description = "{{{langname}}} [[slang]] terms which are used predominantly among [[LGBTQ]] people.",
parents = {"slang", "Category:{{{langcode}}}:LGBTQ"},
}
labels["literary terms"] = {
description = "{{{langname}}} terms whose usage is typically restricted to works of literature.",
parents = {"higher register terms"},
}
labels["medical slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to medical doctors, such as physicians and surgeons.",
parents = {"slang"},
}
labels["military slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to military personnel.",
parents = {"slang"},
}
labels["misconstructions"] = {
description = "Terms wrongly built due to a misunderstanding of their parts.",
parents = {"nonstandard forms"},
}
labels["misromanizations"] = {
description = "Common misromanizations of {{{langname}}} terms.",
parents = {"nonstandard forms"},
}
labels["misspellings"] = {
description = "Common accidental misspellings of {{{langname}}} terms and some terms which are deliberate misspellings.",
parents = {"nonstandard forms"},
}
labels["multiplicity slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to the {{l|en|multiplicity|id=multiple personalities}} [[community]].",
parents = {"slang", "Category:{{{langcode}}}:Multiplicity (psychology)"},
}
labels["naval slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to naval personnel.",
parents = {"military slang"},
}
labels["nonstandard forms"] = {
description = "{{{langname}}} forms of standard terms that are considered improper, incorrect or commonly misused.",
parents = {"nonstandard terms"},
}
labels["nonstandard terms"] = {
description = "{{{langname}}} terms that are considered improper, incorrect or commonly misused.",
parents = {"terms by usage"},
}
labels["numismatic slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to numismatists.",
parents = {"slang", "Category:{{{langcode}}}:Currency"},
}
labels["offensive terms"] = {
description = "{{{langname}}} terms that are typically considered to offend people.",
parents = {"terms by usage"},
}
labels["officialese terms"] = {
description = "{{{langname}}} terms that are chiefly used by official sources, and are often bureaucratic-sounding.",
parents = {"terms by usage"},
}
labels["oxymorons"] = {
description = "{{{langname}}} terms that are juxtapositions of opposing ideas.",
parents = {"terms by usage"},
}
labels["perfective forms"] = {
description = "{{{langname}}} verbs that serve as perfective variants of imperfective verbs, sharing the same base set of meanings.",
parents = {"terms by usage"},
}
labels["placeholder terms"] = {
description = "{{{langname}}} terms used to refer to items for which one does not know or cannot recall the name, or is unable to or does not care to specify precisely.",
parents = {"terms by usage"},
}
labels["poetic forms"] = {
description = "{{{langname}}} terms that can be used in works of poetry as poetic alternative forms of other terms.",
additional = "Poetic non-lemma form variants also belong here.",
parents = {"poetic terms"},
}
labels["poetic terms"] = {
description = "{{{langname}}} terms whose usage is typically restricted to works of poetry.",
parents = {"terms by usage", "literary terms"},
}
labels["post-nominal letters"] = {
description = "{{{langname}}} Post-nominal letters - also called post-nominal initials, post-nominal titles or designatory letters are letters placed after the name of a person to indicate that the individual holds a position, educational degree, accreditation, office, military decoration, or honour, or is a member of a religious institute or fraternity.",
parents = {"terms by usage"},
}
labels["prison slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to detainees in correctional institutions.",
parents = {"slang"},
}
labels["proscribed terms"] = {
description = "{{{langname}}} terms whose usage is proscribed; thus, they are considered wrong according to prescriptive sources.",
parents = {"terms by usage", "nonstandard terms"},
}
labels["puristic terms"] = {
description = "{{{langname}}} terms adopted for [[w:Linguistic purism|linguistic purism]].",
parents = {"terms by usage"},
}
labels["radio slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to radio communication.",
parents = {"slang"},
}
labels["Reddit slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to users of the website {{w|Reddit}}.",
parents = {"internet slang"},
}
labels["religious slurs"] = {
description = "{{{langname}}} terms that are intended to offend members of certain religions.",
parents = {"offensive terms"},
}
labels["reverential terms"] = {
description = "{{{langname}}} [[reverential]] terms, which are used to exalt the addressee, indicating that they have a higher social standing than the speaker.",
parents = {"honorific terms"},
}
labels["royal terms"] = {
description = "{{{langname}}} terms used only by royalty.",
parents = {"terms by usage"},
}
labels["rustic terms"] = {
description = "{{{langname}}} terms whose use is typically restricted rural speech.",
parents = {"terms by usage"},
}
labels["school slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to schools and school pupils.",
parents = {"slang"},
}
labels["self-deprecatory terms"] = {
description = "{{{langname}}} [[self-deprecatory]] terms.",
parents = {"terms by usage"},
}
labels["short forms"] = {
description = "{{{langname}}} terms that are [[short form]]s of other terms, often used informally.",
parents = {"terms by usage", "shortenings"},
}
labels["slang"] = {
description = "{{{langname}}} [[colloquial]] terms that are typically used to mark membership in a cultural subgroup.",
parents = {"terms by usage"},
}
labels["solemn terms"] = {
description = "{{{langname}}} terms that are used to instill a sense of somberness.",
parents = {"terms by usage"},
}
labels["student slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to colleges, universities, and their students.",
parents = {"slang"},
}
labels["superseded forms"] = {
description = "{{{langname}}} forms that have been superseded by other forms due to changes in spelling conventions.",
parents = {"terms by usage", "terms by orthographic property"},
}
labels["swear words"] = {
description = "{{{langname}}} terms that are used to swear, such as to express strong anger or frustration.",
parents = {"vulgarities"},
}
labels["technical terms"] = {
description = "{{{langname}}} terms that are usually or exclusively used in technical/scientific writing.",
parents = {"terms by usage"},
}
labels["terms of address"] = {
description = "{{{langname}}} terms used to refer to another person.",
parents = {"terms by usage"},
}
labels["terms used in hendiadys"] = {
description = "{{{langname}}} words or senses which are used only in {{w|hendiadys}}.",
parents = {"terms by usage"},
}
labels["terms with historical senses"] = {
description = "{{{langname}}} terms with senses that refer to things or concepts mainly known for their historical value.",
parents = {"terms by usage"},
}
labels["terms with transferred senses"] = {
description = "{{{langname}}} terms with [[Appendix:Glossary#transferred senses|transferred senses]].",
parents = {"terms by usage"},
}
labels["terms with uncertain meaning"] = {
description = "{{{langname}}} terms whose meaning is unknown or disputed.",
parents = {"terms by usage"},
}
labels["text messaging slang"] = {
description = "{{{langname}}} terms used for [[text messaging]] on mobile phones or similar devices, usually consisting of heavily abbreviated forms.",
parents = {"slang"},
}
labels["tone indicators"] = {
description = "{{{langname}}} symbols used to denote or clarify the intent of a preceeding or occasionally following message.",
parents = {"internet slang"},
}
labels["trademarks"] = {
description = "{{{langname}}} terms that identify legal entities, their products and services, by means of legal protection — to some extent, in a number of jurisdictions — against unauthorized use of the terms.",
parents = {"terms by usage"},
}
labels["transgender slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to transgender people.",
parents = {"LGBTQ slang", "Category:{{{langcode}}}:Transgender"},
}
labels["TV Tropes slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to users of the website {{w|TV Tropes}}.",
parents = {"internet slang"},
}
labels["umlautless spellings"] = {
description = "{{{langname}}} terms that are the result of the original terms' [[umlaut]]s being substituted.",
parents = {"nonstandard forms", "terms by orthographic property"},
}
labels["Usenet slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to users of {{w|Usenet}}.",
parents = {"internet slang"},
}
labels["men's speech terms"] = {
description = "{{{langname}}} terms and forms used in [[Appendix:Glossary#men's speech|men's speech]].",
parents = {"terms by usage"},
}
labels["women's speech terms"] = {
description = "{{{langname}}} terms and forms used in [[Appendix:Glossary#women's speech|women's speech]].",
parents = {"terms by usage"},
}
labels["vulgarities"] = {
description = "{{{langname}}} terms whose tone (rather than the meaning) is offensive to polite company.",
parents = {"terms by usage"},
}
-- Add 'umbrella_parents' key if not already present.
for key, data in pairs(labels) do
if not data.umbrella_parents then
data.umbrella_parents = "Terms by usage subcategories by language"
end
end
-----------------------------------------------------------------------------
-- --
-- RAW CATEGORIES --
-- --
-----------------------------------------------------------------------------
raw_categories["Terms by usage subcategories by language"] = {
description = "Umbrella categories covering topics related to terms categorized by their usage, such as slang, obsolete or archaic forms and vulgarities.",
additional = "{{{umbrella_meta_msg}}}",
parents = {
"Umbrella metacategories",
{name = "terms by usage", is_label = true, sort = " "},
},
}
return {LABELS = labels, RAW_CATEGORIES = raw_categories}
tsjuedsf82lc1tcz85zlfmoe402rtpj
235267
235266
2026-06-01T12:11:49Z
Lee
19
පැරණි සංස්කරණයකින් ගත් කොටස්...
235267
Scribunto
text/plain
local m_sinhala = require("Module:sinhala")
local labels = {}
local raw_categories = {}
local string_utilities_module = "Module:string utilities"
local ucfirst = require(string_utilities_module).ucfirst
-----------------------------------------------------------------------------
-- --
-- LABELS --
-- --
-----------------------------------------------------------------------------
labels["terms by usage"] = {
description = "{{{langname}}} terms categorized by the manner and context in which they are used by speakers.",
umbrella_parents = "මූලධර්ම",
parents = {{name = "{{{langcat}}}", raw = true}},
}
local function generate_category_with_senses(typ, desc, distinguish, other_types_in_group)
if distinguish then
distinguish = "\n\n" .. distinguish
else
distinguish = ""
end
local function make_preceding(pos)
if not other_types_in_group then
return nil
end
local cats = {}
for _, other_type in ipairs(other_types_in_group) do
table.insert(cats, ("Category:{{{langname}}} " .. pos):format(other_type))
end
return ("{{also|%s}}"):format(table.concat(cats, "|"))
end
local function make_umbrella_preceding(pos)
if not other_types_in_group then
return nil
end
local cats = {}
for _, other_type in ipairs(other_types_in_group) do
table.insert(cats, "Category:" .. ucfirst((pos .. " by language"):format(other_type)))
end
return ("{{also|%s}}"):format(table.concat(cats, "|"))
end
labels[("%s terms"):format(typ)] = {
description = ("{{{langname}}} terms that %s."):format(desc),
additional = ("To categorize into this category, use {{tl|tlb|{{{langcode}}}|%s}} (template '''tlb''', not '''lb'''), " ..
"which should typically be placed next to the headword.\n\nIf the term is merely a variant (alternative form) of a term " ..
"in general use, it should be categorized instead in {{cl|{{{langname}}} %s forms}} (using " ..
"{{tl|%s form of|{{{langcode}}}|...}} or {{tl|%s spelling of|{{{langcode}}}|...}}). If only some senses of the term are %s, " ..
"it should be categorized instead in {{cl|{{{langname}}} terms with %s senses}}, using {{tl|lb|{{{langcode}}}|%s}} " ..
"(template '''lb''' instead of '''tlb'''), which should typically be placed next to the individual sense.%s"):format(
typ, typ, typ, typ, typ, typ, typ, distinguish:gsub("POS", "terms")),
parents = {"terms by usage"},
preceding = make_preceding("%s terms"),
umbrella = {
preceding = make_umbrella_preceding("%s terms"),
additional = ("To categorize into this category, use <code><nowiki>{{</nowiki>tlb|<var>langcode</var>|%s}}</code> " ..
"(template '''tlb''', not '''lb'''), which should typically be placed next to the headword. " ..
"(<code><var>langcode</var></code> is the appropriate language code for the language in question; see [[Wiktionary:List of languages]].)\n\n" ..
"If the term is merely a variant (alternative form) of a term in general use, it should be categorized instead in " ..
"{{cl|<var>langname</var> %s forms}} (using <code><nowiki>{{</nowiki>%s form of|<var>langcode</var>|...}}</code> " ..
"or <code><nowiki>{{</nowiki>%s spelling of|<var>langcode</var>|...}}</code>). " ..
"If only some senses of the term are %s, it should be categorized instead in {{cl|<var>langname</var> terms with %s senses}}, " ..
"using <code><nowiki>{{</nowiki>lb|<var>langcode</var>|%s}}</code> (template '''lb''' instead of '''tlb'''), which should " ..
"typically be placed next to the individual sense.%s"):format(
typ, typ, typ, typ, typ, typ, typ, distinguish:gsub("POS", "terms")),
}
}
labels[("terms with %s senses"):format(typ)] = {
description = ("{{{langname}}} terms with individual senses that %s."):format(desc),
additional = ("To categorize into this category, use {{tl|lb|{{{langcode}}}|%s}} (template '''lb''', not '''tlb'''), " ..
"which should typically be placed next to the individual sense.\n\nIf the term itself, in all its senses, is %s, " ..
"it should be placed in {{cl|{{{langname}}} %s terms}} instead, using {{tl|tlb|{{{langcode}}}|%s}} " ..
"(template '''tlb''' instead of '''lb'''), which should typically be placed next to the headword. " ..
"If the term is merely a variant (alternative form) of a term in general use, it should be categorized in " ..
"{{cl|{{{langname}}} %s forms}} (using {{tl|%s form of|{{{langcode}}}|...}} or {{tl|%s spelling of|{{{langcode}}}|...}}).%s"):format(
typ, typ, typ, typ, typ, typ, typ, distinguish:gsub("POS", "senses")),
parents = {{name = "terms by usage", sort = ("%s senses"):format(typ)}},
breadcrumb = ("with %s senses"):format(typ),
preceding = make_preceding("terms with %s senses"),
umbrella = {
preceding = make_umbrella_preceding("terms with %s senses"),
additional = ("To categorize into this category, use <code><nowiki>{{</nowiki>lb|<var>langcode</var>|%s}}</code> " ..
"(template '''lb''', not '''tlb'''), which should typically be placed next to the individual sense. " ..
"(<code><var>langcode</var></code> is the appropriate language code for the language in question; see [[Wiktionary:List of languages]].)\n\n" ..
"If the term itself, in all its senses, is %s, it should be placed in {{cl|<var>langname</var> %s terms}} instead, using " ..
"<code><nowiki>{{</nowiki>tlb|<var>langcode</var>|%s}}</code> (template '''tlb''' instead of '''lb'''), which should " ..
"typically be placed next to the headword. If the term is merely a variant (alternative form) of a term in general use, " ..
"it should be categorized in {{cl|<var>langname</var> %s forms}} (using <code><nowiki>{{</nowiki>%s form of|<var>langcode</var>|...}}</code> " ..
"or <code><nowiki>{{</nowiki>%s spelling of|<var>langcode</var>|...}}</code>.%s"):format(
typ, typ, typ, typ, typ, typ, typ, distinguish:gsub("POS", "senses")),
}
}
labels[("%s forms"):format(typ)] = {
description = ("{{{langname}}} forms that %s; and serve as alternative forms of the same terms in general use."):format(desc),
additional = ("To categorize into this category, use {{tl|%s form of|{{{langcode}}}|...}} or {{tl|%s spelling of|{{{langcode}}}|...}}.\n\n" ..
"If the term is not merely a variant (alternative form) of a term in general use, it should be placed in {{cl|{{{langname}}} %s terms}} " ..
"instead; to do this, use {{tl|tlb|{{{langcode}}}|%s}} (template '''tlb''', not '''lb'''), which should typically be placed next to the " ..
"headword. If only some senses of the term are %s, it should be categorized instead in {{cl|{{{langname}}} terms with %s senses}}, " ..
"using {{tl|lb|{{{langcode}}}|%s}} (template '''lb''' instead of '''tlb'''), which should typically be placed next to the individual sense.%s"):format(
typ, typ, typ, typ, typ, typ, typ, distinguish:gsub("POS", "forms")),
parents = {{name = ("%s terms"):format(typ), sort = "forms"}},
breadcrumb = "forms",
preceding = make_preceding("%s forms"),
umbrella = {
preceding = make_umbrella_preceding("%s forms"),
additional = ("To categorize into this category, use <code><nowiki>{{</nowiki>%s form of|<var>langcode</var>|...}}</code> " ..
"or <code><nowiki>{{</nowiki>%s spelling of|<var>langcode</var>|...}}</code>. (<code><var>langcode</var></code> is the " ..
"appropriate language code for the language in question; see [[Wiktionary:List of languages]].)\n\n" ..
"If the term is not merely a variant (alternative form) of a term in general use, it should be placed in {{cl|<var>langname</var> %s terms}} " ..
"instead; to do this, use <code><nowiki>{{</nowiki>lb|<var>langcode</var>|%s}}</code> (template '''tlb''', not '''lb'''), " ..
"which should typically be placed next to the headword. If only some senses of the term are %s, it should be categorized instead " ..
"in {{cl|<var>langname</var> terms with %s senses}}, using <code><nowiki>{{</nowiki>lb|<var>langcode</var>|%s}}</code> " ..
"(template '''lb''' instead of '''tlb'''), which should typically be placed next to the individual sense.%s"):format(
typ, typ, typ, typ, typ, typ, typ, distinguish:gsub("POS", "forms")),
}
}
end
local function generate_related_categories_with_senses(info)
for typ, spec in pairs(info) do
local other_types = {}
for other_type, _ in pairs(info) do
if other_type ~= typ then
table.insert(other_types, other_type)
end
end
table.sort(other_types)
generate_category_with_senses(typ, spec.desc, spec.distinguish, other_types)
end
end
generate_related_categories_with_senses {
archaic = {
desc = "are no longer in general use but still encountered in older literature, sometimes still used for special effect, and typically recognized by native speakers",
distinguish = "Archaic POS should be distinguished from dated POS, which are merely [[unfashionable]] and [[anachronistic]] but still sometimes used, especially by older speakers; and on the other hand from obsolete POS, which are no longer in use at all and are not usually recognized by native speakers.",
},
dated = {
desc = "are no longer fashionable and thus are [[anachronistic]], but still sometimes in use, especially by older speakers",
distinguish = "Dated POS should be distinguished from archaic POS, which are no longer in use (except occasionally for special effect) but are still sometimes encountered in older literature and are typically recognized by native speakers; and obsolete POS, which are no longer in use at all and are not usually recognized by native speakers.",
},
obsolete = {
desc = "are no longer in use and not usually recognized by native speakers, but still sometimes found in older literature",
distinguish = "Obsolete POS should be distinguished from archaic POS, which, although no longer in general use, are still occasionally used for special effect and are typically recognized by native speakers; and dated POS, which are merely [[unfashionable]] and [[anachronistic]] but still sometimes used, especially by older speakers.",
},
}
generate_related_categories_with_senses {
rare = {
desc = "are rarely found in general use and may not be recognized by some native speakers",
distinguish = "Rare POS should be distinguished from uncommon POS, which are not common but used enough to be generally recognized.",
},
uncommon = {
desc = "are in general use but not common",
distinguish = "Uncommon POS should be distinguished from rare POS, which are infrequent enough that they are sometimes not recognized by native speakers.",
},
}
labels["2channel slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to users of the website {{w|2channel}}.",
parents = {"internet slang"},
}
labels["4chan slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to users of the website {{w|4chan}}.",
parents = {"internet slang"},
}
labels["4chan /lgbt/ slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to users of the /lgbt/ board of the website {{w|4chan}}.",
parents = {"4chan slang", "LGBTQ slang"},
}
labels["angry register terms"] = {
description = "{{{langname}}} terms belonging to an angry linguistic register, used only when the speaker is angry.",
parents = {"terms by usage"},
}
labels["anti-LGBTQ slurs"] = {
description = "{{{langname}}} terms that are intended to offend [[LGBTQ]] people.",
parents = {"offensive terms"},
}
labels["autological terms"] = {
description = "{{{langname}}} terms that possess the property they themselves describe.",
parents = {"terms by usage"},
}
labels["back slang"] = {
description = "{{{langname}}} terms in which the written word is spoken phonemically backwards to form a coded language.",
parents = {"cant"},
}
labels["cant"] = {
description = "{{{langname}}} terms used to form secret languages that are typically restricted to members of a specific group.",
parents = {"slang"},
}
labels["censored spellings"] = {
description = "{{{langname}}} spellings where some characters have been changed in an effort to reduce the shock value of the original term.",
parents = {"terms by usage"},
}
labels["childish terms"] = {
description = "{{{langname}}} terms that are typically only used by, or to, children.",
parents = {"terms by usage", "informal terms"},
}
labels["colloquialisms"] = {
description = "{{{langname}}} terms that are likely to be used primarily in casual conversation rather than in more formal written works, speeches, and discourse.",
parents = {"terms by usage"},
}
labels["corporate jargon"] = {
description = "{{{langname}}} terms (typically for non-business-specific concepts) that are used especially in a [[business]] or [[corporate]] [[context]].",
additional = "See also [[:Category:Businesses]], [[:Category:Business]] and language-specific categories thereof for terms related to business-specific concepts.",
parents = {"terms by usage"},
}
labels["criminal slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to criminals.",
parents = {"slang"},
}
labels["derogatory terms"] = {
description = "{{{langname}}} terms that are intended to [[disparage]], [[demean]], [[insult]] or [[offend]].",
parents = {"terms by usage"},
}
labels["dialectal terms"] = {
description = "{{{langname}}} terms that are not used in standard language but only in dialects.",
parents = {"terms by usage"},
}
labels["dis legomena"] = {
description = "{{{langname}}} terms that are attested only twice in the entire corpus.",
parents = {"terms by usage"},
}
labels["drag slang"] = {
description = "{{{langname}}} [[slang]] terms used in the [[drag]] community.",
parents = {"LGBTQ slang"},
}
labels["ecclesiastical terms"] = {
description = "{{{langname}}} terms used only by religious figures.",
parents = {"terms by usage"},
}
labels["eggcorns"] = {
description = "{{{langname}}} [[eggcorn]]s, terms which are misconstructed.",
parents = {"misconstructions"},
}
labels["emoticons"] = {
description = "{{{langname}}} characters, or sequences of characters, that imitate expressions and other objects by means of [[pareidolia]].",
parents = {"internet slang", "text messaging slang"},
}
labels["endearing terms"] = {
description = "{{{langname}}} terms that are used to show affection or endearment to another person.",
parents = {"terms by usage"},
}
labels["ethnic slurs"] = {
description = "{{{langname}}} terms that are intended to offend certain ethnic groups.",
parents = {"offensive terms"},
}
labels["expressive terms"] = {
description = "{{{langname}}} terms with additional expressive content compared with the basic meaning of the term.",
additional = "This term is common in Slavic lexicography and is found in most Czech, Slovak and Polish dictionaries, but there is no exact equivalent in English lexicography. The closest equivalents might be a combination of ''colloquial'' and either ''endearing'' or ''pejorative'', as the case may be.",
parents = {"terms by usage"},
}
labels["eye dialect"] = {
description = "{{{langname}}} nonstandard spellings, which however do not change pronunciation, deliberately used by an author to indicate that the speaker uses a nonstandard or dialectal speech.",
parents = {"nonstandard forms", "terms by orthographic property"},
}
labels["familiar terms"] = {
description = "{{{langname}}} terms whose use is typically to contexts of friendly intimacy.",
parents = {"terms by usage"},
}
labels["fandom slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to fans of one or more works of fiction.",
parents = {"slang"},
}
labels["filter-avoidance spellings"] = {
description = "Deliberate misspellings of {{{langname}}} terms that are used to avoid [[w:Wordfilter|wordfilters]].",
parents = {"deliberate misspellings"},
}
labels["folk poetic terms"] = {
description = "{{{langname}}} terms whose usage is typically restricted to works of oral or folk poetry.",
parents = {"terms by usage", "කාව්යමය යෙදුම්"},
}
labels["formal terms"] = {
description = "{{{langname}}} terms whose use is typically restricted to polite, ceremonious, non-casual contexts.",
parents = {"terms by usage"},
}
labels["gay slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to homosexual people.",
parents = {"LGBTQ slang"},
}
labels["gender-critical slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to gender-critical feminists.",
parents = {"slang", "Category:{{{langcode}}}:Gender-critical feminism"},
}
labels["gender-neutral terms"] = {
description = "{{{langname}}} terms that are applicable to all people, independent of gender.",
parents = {"terms by usage"},
}
labels["graffiti slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to creators of [[graffiti#Noun|graffiti]].",
parents = {"slang", "Category:{{{langcode}}}:Art"},
}
labels["higher register terms"] = {
description = "{{{langname}}} terms belonging to a higher linguistic register, such as literary terms; such terms are somewhat less common or known.",
parents = {"terms by usage"},
}
labels["historical terms"] = {
description = "{{{langname}}} terms that refer to obsolete things or concepts.",
parents = {"terms by usage"},
}
labels["honorific terms"] = {
description = "{{{langname}}} [[honorific]] terms, which are used to show deference and respect.",
parents = {"terms by usage"},
}
labels["polite terms"] = {
description = "{{{langname}}} [[polite]] terms, which are used to show deference and respect.",
parents = {"terms by usage"},
}
labels["hapax legomena"] = {
description = "{{{langname}}} terms that are attested only once in the entire corpus.",
parents = {"terms by usage"},
}
labels["humble terms"] = {
description = "{{{langname}}} [[humble]] terms, which are used to show humility towards the addressee, indicating that the speaker has a lower social standing.",
parents = {"honorific terms"},
}
labels["hypercorrections"] = {
description = "{{{langname}}} forms of other terms by misapplications of grammatical or orthographical rules.",
parents = {"nonstandard terms", "nonstandard forms"},
}
labels["hyperforeign terms"] = {
description = "{{{langname}}} terms created by misapplying the perceived grammatical, orthographical or phonetical rules of another language.",
parents = {"hypercorrections"},
}
labels["incel slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to incels.",
parents = {"slang", "Category:{{{langcode}}}:Incel community"},
}
labels["imperfective forms"] = {
description = "{{{langname}}} verbs that serve as imperfective variants of perfective verbs, sharing the same base set of meanings.",
parents = {"terms by usage"},
}
labels["informal forms"] = {
description = "{{{langname}}} terms that can be used in casual, non-ceremonious conversations as alternative forms of other terms.",
additional = "Informal non-lemma form variants also belong here.",
parents = {"informal terms"},
}
labels["informal terms"] = {
description = "{{{langname}}} terms whose use is typically restricted to casual, non‐ceremonious conversations.",
parents = {"terms by usage"},
}
labels["deliberate misspellings"] = {
description = "Deliberate misspellings of {{{langname}}} terms.",
parents = {"misspellings"},
}
labels["internet laughter slang"] = {
description = "{{{langname}}} [[slang]] terms that are used as substitutes for laughter in internet-related contexts.",
additional = "::''Note: The majority of items that <u>could</u> be here do not meet Wiktionary's [[WT:CFI|criteria for inclusion]].''",
parents = {"internet slang"},
}
labels["internet slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to internet users.",
parents = {"slang"},
}
labels["humorous terms"] = {
description = "{{{langname}}} terms that are humorous, amusing or joking.",
parents = {"terms by usage"},
}
labels["journalistic terms"] = {
description = "{{{langname}}} terms that are used especially in [[journalistic]] language, i.e. in newspapers and magazines.",
parents = {"terms by usage"},
}
labels["kennings"] = {
description = "{{{langname}}} metaphorical compounds or phrases describing basic objects in an allusive fashion, used especially in Germanic poetry.",
parents = {"කාව්යමය යෙදුම්"},
}
labels["leetspeak"] = {
description = "{{{langname}}} which are used in [[leetspeak]], a variety of internet slang that focuses on substitution of letters by other characters which are similar in appearance.",
parents = {"internet slang"},
}
labels["LGBTQ slang"] = {
description = "{{{langname}}} [[slang]] terms which are used predominantly among [[LGBTQ]] people.",
parents = {"slang", "Category:{{{langcode}}}:LGBTQ"},
}
labels["literary terms"] = {
description = "{{{langname}}} terms whose usage is typically restricted to works of literature.",
parents = {"higher register terms"},
}
labels["medical slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to medical doctors, such as physicians and surgeons.",
parents = {"slang"},
}
labels["military slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to military personnel.",
parents = {"slang"},
}
labels["misconstructions"] = {
description = "Terms wrongly built due to a misunderstanding of their parts.",
parents = {"nonstandard forms"},
}
labels["misromanizations"] = {
description = "Common misromanizations of {{{langname}}} terms.",
parents = {"nonstandard forms"},
}
labels["අක්ෂර වින්යාස දෝෂ"] = {
description = "Common accidental misspellings of {{{langname}}} terms and some terms which are deliberate misspellings.",
parents = {"nonstandard forms"},
}
labels["multiplicity slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to the {{l|en|multiplicity|id=multiple personalities}} [[community]].",
parents = {"slang", "Category:{{{langcode}}}:Multiplicity (psychology)"},
}
labels["naval slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to naval personnel.",
parents = {"military slang"},
}
labels["nonstandard forms"] = {
description = "{{{langname}}} forms of standard terms that are considered improper, incorrect or commonly misused.",
parents = {"nonstandard terms"},
}
labels["nonstandard terms"] = {
description = "{{{langname}}} terms that are considered improper, incorrect or commonly misused.",
parents = {"terms by usage"},
}
labels["numismatic slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to numismatists.",
parents = {"slang", "Category:{{{langcode}}}:Currency"},
}
labels["offensive terms"] = {
description = "{{{langname}}} terms that are typically considered to offend people.",
parents = {"terms by usage"},
}
labels["officialese terms"] = {
description = "{{{langname}}} terms that are chiefly used by official sources, and are often bureaucratic-sounding.",
parents = {"terms by usage"},
}
labels["oxymorons"] = {
description = "{{{langname}}} terms that are juxtapositions of opposing ideas.",
parents = {"terms by usage"},
}
labels["perfective forms"] = {
description = "{{{langname}}} verbs that serve as perfective variants of imperfective verbs, sharing the same base set of meanings.",
parents = {"terms by usage"},
}
labels["placeholder terms"] = {
description = "{{{langname}}} terms used to refer to items for which one does not know or cannot recall the name, or is unable to or does not care to specify precisely.",
parents = {"terms by usage"},
}
labels["poetic forms"] = {
description = "{{{langname}}} terms that can be used in works of poetry as poetic alternative forms of other terms.",
additional = "Poetic non-lemma form variants also belong here.",
parents = {"poetic terms"},
}
labels["කාව්යමය යෙදුම්"] = {
description = "{{{langname}}} terms whose usage is typically restricted to works of poetry.",
parents = {"terms by usage", "literary terms"},
}
labels["post-nominal letters"] = {
description = "{{{langname}}} Post-nominal letters - also called post-nominal initials, post-nominal titles or designatory letters are letters placed after the name of a person to indicate that the individual holds a position, educational degree, accreditation, office, military decoration, or honour, or is a member of a religious institute or fraternity.",
parents = {"terms by usage"},
}
labels["prison slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to detainees in correctional institutions.",
parents = {"slang"},
}
labels["proscribed terms"] = {
description = "{{{langname}}} terms whose usage is proscribed; thus, they are considered wrong according to prescriptive sources.",
parents = {"terms by usage", "nonstandard terms"},
}
labels["puristic terms"] = {
description = "{{{langname}}} terms adopted for [[w:Linguistic purism|linguistic purism]].",
parents = {"terms by usage"},
}
labels["radio slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to radio communication.",
parents = {"slang"},
}
labels["Reddit slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to users of the website {{w|Reddit}}.",
parents = {"internet slang"},
}
labels["religious slurs"] = {
description = "{{{langname}}} terms that are intended to offend members of certain religions.",
parents = {"offensive terms"},
}
labels["reverential terms"] = {
description = "{{{langname}}} [[reverential]] terms, which are used to exalt the addressee, indicating that they have a higher social standing than the speaker.",
parents = {"honorific terms"},
}
labels["royal terms"] = {
description = "{{{langname}}} terms used only by royalty.",
parents = {"terms by usage"},
}
labels["rustic terms"] = {
description = "{{{langname}}} terms whose use is typically restricted rural speech.",
parents = {"terms by usage"},
}
labels["school slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to schools and school pupils.",
parents = {"slang"},
}
labels["self-deprecatory terms"] = {
description = "{{{langname}}} [[self-deprecatory]] terms.",
parents = {"terms by usage"},
}
labels["කෙටි ස්වරූප"] = {
description = "{{{langname}}} terms that are [[short form]]s of other terms, often used informally.",
parents = {"terms by usage", "කෙටි කිරීම් ආකාර"},
}
labels["slang"] = {
description = "{{{langname}}} [[colloquial]] terms that are typically used to mark membership in a cultural subgroup.",
parents = {"terms by usage"},
}
labels["solemn terms"] = {
description = "{{{langname}}} terms that are used to instill a sense of somberness.",
parents = {"terms by usage"},
}
labels["student slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to colleges, universities, and their students.",
parents = {"slang"},
}
labels["superseded forms"] = {
description = "{{{langname}}} forms that have been superseded by other forms due to changes in spelling conventions.",
parents = {"terms by usage", "terms by orthographic property"},
}
labels["swear words"] = {
description = "{{{langname}}} terms that are used to swear, such as to express strong anger or frustration.",
parents = {"vulgarities"},
}
labels["technical terms"] = {
description = "{{{langname}}} terms that are usually or exclusively used in technical/scientific writing.",
parents = {"terms by usage"},
}
labels["terms of address"] = {
description = "{{{langname}}} terms used to refer to another person.",
parents = {"terms by usage"},
}
labels["terms used in hendiadys"] = {
description = "{{{langname}}} words or senses which are used only in {{w|hendiadys}}.",
parents = {"terms by usage"},
}
labels["යෙදුම්, ඓතිහාසික අරුත් සහිත"] = {
description = "{{{langname}}} terms with senses that refer to things or concepts mainly known for their historical value.",
parents = {"terms by usage"},
}
labels["terms with transferred senses"] = {
description = "{{{langname}}} terms with [[Appendix:Glossary#transferred senses|transferred senses]].",
parents = {"terms by usage"},
}
labels["terms with uncertain meaning"] = {
description = "{{{langname}}} terms whose meaning is unknown or disputed.",
parents = {"terms by usage"},
}
labels["text messaging slang"] = {
description = "{{{langname}}} terms used for [[text messaging]] on mobile phones or similar devices, usually consisting of heavily abbreviated forms.",
parents = {"slang"},
}
labels["tone indicators"] = {
description = "{{{langname}}} symbols used to denote or clarify the intent of a preceeding or occasionally following message.",
parents = {"internet slang"},
}
labels["trademarks"] = {
description = "{{{langname}}} terms that identify legal entities, their products and services, by means of legal protection — to some extent, in a number of jurisdictions — against unauthorized use of the terms.",
parents = {"terms by usage"},
}
labels["transgender slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to transgender people.",
parents = {"LGBTQ slang", "Category:{{{langcode}}}:Transgender"},
}
labels["TV Tropes slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to users of the website {{w|TV Tropes}}.",
parents = {"internet slang"},
}
labels["umlautless spellings"] = {
description = "{{{langname}}} terms that are the result of the original terms' [[umlaut]]s being substituted.",
parents = {"nonstandard forms", "terms by orthographic property"},
}
labels["Usenet slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to users of {{w|Usenet}}.",
parents = {"internet slang"},
}
labels["men's speech terms"] = {
description = "{{{langname}}} terms and forms used in [[Appendix:Glossary#men's speech|men's speech]].",
parents = {"terms by usage"},
}
labels["women's speech terms"] = {
description = "{{{langname}}} terms and forms used in [[Appendix:Glossary#women's speech|women's speech]].",
parents = {"terms by usage"},
}
labels["vulgarities"] = {
description = "{{{langname}}} terms whose tone (rather than the meaning) is offensive to polite company.",
parents = {"terms by usage"},
}
-- Add 'umbrella_parents' key if not already present.
for key, data in pairs(labels) do
if not data.umbrella_parents then
data.umbrella_parents = "Terms by usage subcategories by language"
end
end
-----------------------------------------------------------------------------
-- --
-- RAW CATEGORIES --
-- --
-----------------------------------------------------------------------------
raw_categories["Terms by usage subcategories by language"] = {
description = "Umbrella categories covering topics related to terms categorized by their usage, such as slang, obsolete or archaic forms and vulgarities.",
additional = "{{{umbrella_meta_msg}}}",
parents = {
"ඡත්ර මෙටා ප්රවර්ග",
{name = "terms by usage", is_label = true, sort = " "},
},
}
return {LABELS = labels, RAW_CATEGORIES = raw_categories}
8iruap5ziwsbid87j1w8yku7w0ty2ac
235268
235267
2026-06-01T12:14:18Z
Lee
19
පැරණි සංස්කරණයකින් ගත් කොටස්...
235268
Scribunto
text/plain
local m_sinhala = require("Module:sinhala")
local labels = {}
local raw_categories = {}
local string_utilities_module = "Module:string utilities"
local ucfirst = require(string_utilities_module).ucfirst
-----------------------------------------------------------------------------
-- --
-- LABELS --
-- --
-----------------------------------------------------------------------------
labels["terms by usage"] = {
description = "{{{langname}}} terms categorized by the manner and context in which they are used by speakers.",
umbrella_parents = "මූලධර්ම",
parents = {{name = "{{{langcat}}}", raw = true}},
}
local function generate_category_with_senses(typ, desc, distinguish, other_types_in_group)
if distinguish then
distinguish = "\n\n" .. distinguish
else
distinguish = ""
end
local function make_preceding(pos)
if not other_types_in_group then
return nil
end
local cats = {}
for _, other_type in ipairs(other_types_in_group) do
table.insert(cats, ("Category:{{{langname}}} " .. pos):format(other_type))
end
return ("{{also|%s}}"):format(table.concat(cats, "|"))
end
local function make_umbrella_preceding(pos)
if not other_types_in_group then
return nil
end
local cats = {}
for _, other_type in ipairs(other_types_in_group) do
table.insert(cats, "Category:" .. ucfirst((pos .. " by language"):format(other_type)))
end
return ("{{also|%s}}"):format(table.concat(cats, "|"))
end
labels[("%s terms"):format(typ)] = {
description = ("{{{langname}}} terms that %s."):format(desc),
additional = ("To categorize into this category, use {{tl|tlb|{{{langcode}}}|%s}} (template '''tlb''', not '''lb'''), " ..
"which should typically be placed next to the headword.\n\nIf the term is merely a variant (alternative form) of a term " ..
"in general use, it should be categorized instead in {{cl|{{{langname}}} %s forms}} (using " ..
"{{tl|%s form of|{{{langcode}}}|...}} or {{tl|%s spelling of|{{{langcode}}}|...}}). If only some senses of the term are %s, " ..
"it should be categorized instead in {{cl|{{{langname}}} terms with %s senses}}, using {{tl|lb|{{{langcode}}}|%s}} " ..
"(template '''lb''' instead of '''tlb'''), which should typically be placed next to the individual sense.%s"):format(
typ, typ, typ, typ, typ, typ, typ, distinguish:gsub("POS", "terms")),
parents = {"terms by usage"},
preceding = make_preceding("%s terms"),
umbrella = {
preceding = make_umbrella_preceding("%s terms"),
additional = ("To categorize into this category, use <code><nowiki>{{</nowiki>tlb|<var>langcode</var>|%s}}</code> " ..
"(template '''tlb''', not '''lb'''), which should typically be placed next to the headword. " ..
"(<code><var>langcode</var></code> is the appropriate language code for the language in question; see [[Wiktionary:List of languages]].)\n\n" ..
"If the term is merely a variant (alternative form) of a term in general use, it should be categorized instead in " ..
"{{cl|<var>langname</var> %s forms}} (using <code><nowiki>{{</nowiki>%s form of|<var>langcode</var>|...}}</code> " ..
"or <code><nowiki>{{</nowiki>%s spelling of|<var>langcode</var>|...}}</code>). " ..
"If only some senses of the term are %s, it should be categorized instead in {{cl|<var>langname</var> terms with %s senses}}, " ..
"using <code><nowiki>{{</nowiki>lb|<var>langcode</var>|%s}}</code> (template '''lb''' instead of '''tlb'''), which should " ..
"typically be placed next to the individual sense.%s"):format(
typ, typ, typ, typ, typ, typ, typ, distinguish:gsub("POS", "terms")),
}
}
labels[("යෙදුම්, %s අරුත් සහිත"):format(m_sinhala.sinhala_adjective(typ))] = {
description = ("{{{langname}}} terms with individual senses that %s."):format(desc),
additional = ("To categorize into this category, use {{tl|lb|{{{langcode}}}|%s}} (template '''lb''', not '''tlb'''), " ..
"which should typically be placed next to the individual sense.\n\nIf the term itself, in all its senses, is %s, " ..
"it should be placed in {{cl|{{{langname}}} %s terms}} instead, using {{tl|tlb|{{{langcode}}}|%s}} " ..
"(template '''tlb''' instead of '''lb'''), which should typically be placed next to the headword. " ..
"If the term is merely a variant (alternative form) of a term in general use, it should be categorized in " ..
"{{cl|{{{langname}}} %s forms}} (using {{tl|%s form of|{{{langcode}}}|...}} or {{tl|%s spelling of|{{{langcode}}}|...}}).%s"):format(
typ, typ, typ, typ, typ, typ, typ, distinguish:gsub("POS", "senses")),
parents = {{name = "terms by usage", sort = ("%s senses"):format(typ)}},
breadcrumb = ("%s අරුත් සහිත"):format(typ),
preceding = make_preceding("යෙදුම්, %s අරුත් සහිත"),
umbrella = {
preceding = make_umbrella_preceding("terms with %s senses"),
additional = ("To categorize into this category, use <code><nowiki>{{</nowiki>lb|<var>langcode</var>|%s}}</code> " ..
"(template '''lb''', not '''tlb'''), which should typically be placed next to the individual sense. " ..
"(<code><var>langcode</var></code> is the appropriate language code for the language in question; see [[Wiktionary:List of languages]].)\n\n" ..
"If the term itself, in all its senses, is %s, it should be placed in {{cl|<var>langname</var> %s terms}} instead, using " ..
"<code><nowiki>{{</nowiki>tlb|<var>langcode</var>|%s}}</code> (template '''tlb''' instead of '''lb'''), which should " ..
"typically be placed next to the headword. If the term is merely a variant (alternative form) of a term in general use, " ..
"it should be categorized in {{cl|<var>langname</var> %s forms}} (using <code><nowiki>{{</nowiki>%s form of|<var>langcode</var>|...}}</code> " ..
"or <code><nowiki>{{</nowiki>%s spelling of|<var>langcode</var>|...}}</code>.%s"):format(
typ, typ, typ, typ, typ, typ, typ, distinguish:gsub("POS", "senses")),
}
}
labels[("%s රූපාකාර"):format(m_sinhala.sinhala_adjective(typ))] = {
description = ("{{{langname}}} forms that %s; and serve as alternative forms of the same terms in general use."):format(desc),
additional = ("To categorize into this category, use {{tl|%s form of|{{{langcode}}}|...}} or {{tl|%s spelling of|{{{langcode}}}|...}}.\n\n" ..
"If the term is not merely a variant (alternative form) of a term in general use, it should be placed in {{cl|{{{langname}}} %s terms}} " ..
"instead; to do this, use {{tl|tlb|{{{langcode}}}|%s}} (template '''tlb''', not '''lb'''), which should typically be placed next to the " ..
"headword. If only some senses of the term are %s, it should be categorized instead in {{cl|{{{langname}}} terms with %s senses}}, " ..
"using {{tl|lb|{{{langcode}}}|%s}} (template '''lb''' instead of '''tlb'''), which should typically be placed next to the individual sense.%s"):format(
typ, typ, typ, typ, typ, typ, typ, distinguish:gsub("POS", "forms")),
parents = {{name = ("%s terms"):format(typ), sort = "forms"}},
breadcrumb = "forms",
preceding = make_preceding("%s forms"),
umbrella = {
preceding = make_umbrella_preceding("%s forms"),
additional = ("To categorize into this category, use <code><nowiki>{{</nowiki>%s form of|<var>langcode</var>|...}}</code> " ..
"or <code><nowiki>{{</nowiki>%s spelling of|<var>langcode</var>|...}}</code>. (<code><var>langcode</var></code> is the " ..
"appropriate language code for the language in question; see [[Wiktionary:List of languages]].)\n\n" ..
"If the term is not merely a variant (alternative form) of a term in general use, it should be placed in {{cl|<var>langname</var> %s terms}} " ..
"instead; to do this, use <code><nowiki>{{</nowiki>lb|<var>langcode</var>|%s}}</code> (template '''tlb''', not '''lb'''), " ..
"which should typically be placed next to the headword. If only some senses of the term are %s, it should be categorized instead " ..
"in {{cl|<var>langname</var> terms with %s senses}}, using <code><nowiki>{{</nowiki>lb|<var>langcode</var>|%s}}</code> " ..
"(template '''lb''' instead of '''tlb'''), which should typically be placed next to the individual sense.%s"):format(
typ, typ, typ, typ, typ, typ, typ, distinguish:gsub("POS", "forms")),
}
}
end
local function generate_related_categories_with_senses(info)
for typ, spec in pairs(info) do
local other_types = {}
for other_type, _ in pairs(info) do
if other_type ~= typ then
table.insert(other_types, other_type)
end
end
table.sort(other_types)
generate_category_with_senses(typ, spec.desc, spec.distinguish, other_types)
end
end
generate_related_categories_with_senses {
archaic = {
desc = "are no longer in general use but still encountered in older literature, sometimes still used for special effect, and typically recognized by native speakers",
distinguish = "Archaic POS should be distinguished from dated POS, which are merely [[unfashionable]] and [[anachronistic]] but still sometimes used, especially by older speakers; and on the other hand from obsolete POS, which are no longer in use at all and are not usually recognized by native speakers.",
},
dated = {
desc = "are no longer fashionable and thus are [[anachronistic]], but still sometimes in use, especially by older speakers",
distinguish = "Dated POS should be distinguished from archaic POS, which are no longer in use (except occasionally for special effect) but are still sometimes encountered in older literature and are typically recognized by native speakers; and obsolete POS, which are no longer in use at all and are not usually recognized by native speakers.",
},
obsolete = {
desc = "are no longer in use and not usually recognized by native speakers, but still sometimes found in older literature",
distinguish = "Obsolete POS should be distinguished from archaic POS, which, although no longer in general use, are still occasionally used for special effect and are typically recognized by native speakers; and dated POS, which are merely [[unfashionable]] and [[anachronistic]] but still sometimes used, especially by older speakers.",
},
}
generate_related_categories_with_senses {
rare = {
desc = "are rarely found in general use and may not be recognized by some native speakers",
distinguish = "Rare POS should be distinguished from uncommon POS, which are not common but used enough to be generally recognized.",
},
uncommon = {
desc = "are in general use but not common",
distinguish = "Uncommon POS should be distinguished from rare POS, which are infrequent enough that they are sometimes not recognized by native speakers.",
},
}
labels["2channel slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to users of the website {{w|2channel}}.",
parents = {"internet slang"},
}
labels["4chan slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to users of the website {{w|4chan}}.",
parents = {"internet slang"},
}
labels["4chan /lgbt/ slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to users of the /lgbt/ board of the website {{w|4chan}}.",
parents = {"4chan slang", "LGBTQ slang"},
}
labels["angry register terms"] = {
description = "{{{langname}}} terms belonging to an angry linguistic register, used only when the speaker is angry.",
parents = {"terms by usage"},
}
labels["anti-LGBTQ slurs"] = {
description = "{{{langname}}} terms that are intended to offend [[LGBTQ]] people.",
parents = {"offensive terms"},
}
labels["autological terms"] = {
description = "{{{langname}}} terms that possess the property they themselves describe.",
parents = {"terms by usage"},
}
labels["back slang"] = {
description = "{{{langname}}} terms in which the written word is spoken phonemically backwards to form a coded language.",
parents = {"cant"},
}
labels["cant"] = {
description = "{{{langname}}} terms used to form secret languages that are typically restricted to members of a specific group.",
parents = {"slang"},
}
labels["censored spellings"] = {
description = "{{{langname}}} spellings where some characters have been changed in an effort to reduce the shock value of the original term.",
parents = {"terms by usage"},
}
labels["childish terms"] = {
description = "{{{langname}}} terms that are typically only used by, or to, children.",
parents = {"terms by usage", "informal terms"},
}
labels["colloquialisms"] = {
description = "{{{langname}}} terms that are likely to be used primarily in casual conversation rather than in more formal written works, speeches, and discourse.",
parents = {"terms by usage"},
}
labels["corporate jargon"] = {
description = "{{{langname}}} terms (typically for non-business-specific concepts) that are used especially in a [[business]] or [[corporate]] [[context]].",
additional = "See also [[:Category:Businesses]], [[:Category:Business]] and language-specific categories thereof for terms related to business-specific concepts.",
parents = {"terms by usage"},
}
labels["criminal slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to criminals.",
parents = {"slang"},
}
labels["derogatory terms"] = {
description = "{{{langname}}} terms that are intended to [[disparage]], [[demean]], [[insult]] or [[offend]].",
parents = {"terms by usage"},
}
labels["dialectal terms"] = {
description = "{{{langname}}} terms that are not used in standard language but only in dialects.",
parents = {"terms by usage"},
}
labels["dis legomena"] = {
description = "{{{langname}}} terms that are attested only twice in the entire corpus.",
parents = {"terms by usage"},
}
labels["drag slang"] = {
description = "{{{langname}}} [[slang]] terms used in the [[drag]] community.",
parents = {"LGBTQ slang"},
}
labels["ecclesiastical terms"] = {
description = "{{{langname}}} terms used only by religious figures.",
parents = {"terms by usage"},
}
labels["eggcorns"] = {
description = "{{{langname}}} [[eggcorn]]s, terms which are misconstructed.",
parents = {"misconstructions"},
}
labels["emoticons"] = {
description = "{{{langname}}} characters, or sequences of characters, that imitate expressions and other objects by means of [[pareidolia]].",
parents = {"internet slang", "text messaging slang"},
}
labels["endearing terms"] = {
description = "{{{langname}}} terms that are used to show affection or endearment to another person.",
parents = {"terms by usage"},
}
labels["ethnic slurs"] = {
description = "{{{langname}}} terms that are intended to offend certain ethnic groups.",
parents = {"offensive terms"},
}
labels["expressive terms"] = {
description = "{{{langname}}} terms with additional expressive content compared with the basic meaning of the term.",
additional = "This term is common in Slavic lexicography and is found in most Czech, Slovak and Polish dictionaries, but there is no exact equivalent in English lexicography. The closest equivalents might be a combination of ''colloquial'' and either ''endearing'' or ''pejorative'', as the case may be.",
parents = {"terms by usage"},
}
labels["eye dialect"] = {
description = "{{{langname}}} nonstandard spellings, which however do not change pronunciation, deliberately used by an author to indicate that the speaker uses a nonstandard or dialectal speech.",
parents = {"nonstandard forms", "terms by orthographic property"},
}
labels["familiar terms"] = {
description = "{{{langname}}} terms whose use is typically to contexts of friendly intimacy.",
parents = {"terms by usage"},
}
labels["fandom slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to fans of one or more works of fiction.",
parents = {"slang"},
}
labels["filter-avoidance spellings"] = {
description = "Deliberate misspellings of {{{langname}}} terms that are used to avoid [[w:Wordfilter|wordfilters]].",
parents = {"deliberate misspellings"},
}
labels["folk poetic terms"] = {
description = "{{{langname}}} terms whose usage is typically restricted to works of oral or folk poetry.",
parents = {"terms by usage", "කාව්යමය යෙදුම්"},
}
labels["formal terms"] = {
description = "{{{langname}}} terms whose use is typically restricted to polite, ceremonious, non-casual contexts.",
parents = {"terms by usage"},
}
labels["gay slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to homosexual people.",
parents = {"LGBTQ slang"},
}
labels["gender-critical slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to gender-critical feminists.",
parents = {"slang", "Category:{{{langcode}}}:Gender-critical feminism"},
}
labels["gender-neutral terms"] = {
description = "{{{langname}}} terms that are applicable to all people, independent of gender.",
parents = {"terms by usage"},
}
labels["graffiti slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to creators of [[graffiti#Noun|graffiti]].",
parents = {"slang", "Category:{{{langcode}}}:Art"},
}
labels["higher register terms"] = {
description = "{{{langname}}} terms belonging to a higher linguistic register, such as literary terms; such terms are somewhat less common or known.",
parents = {"terms by usage"},
}
labels["historical terms"] = {
description = "{{{langname}}} terms that refer to obsolete things or concepts.",
parents = {"terms by usage"},
}
labels["honorific terms"] = {
description = "{{{langname}}} [[honorific]] terms, which are used to show deference and respect.",
parents = {"terms by usage"},
}
labels["polite terms"] = {
description = "{{{langname}}} [[polite]] terms, which are used to show deference and respect.",
parents = {"terms by usage"},
}
labels["hapax legomena"] = {
description = "{{{langname}}} terms that are attested only once in the entire corpus.",
parents = {"terms by usage"},
}
labels["humble terms"] = {
description = "{{{langname}}} [[humble]] terms, which are used to show humility towards the addressee, indicating that the speaker has a lower social standing.",
parents = {"honorific terms"},
}
labels["hypercorrections"] = {
description = "{{{langname}}} forms of other terms by misapplications of grammatical or orthographical rules.",
parents = {"nonstandard terms", "nonstandard forms"},
}
labels["hyperforeign terms"] = {
description = "{{{langname}}} terms created by misapplying the perceived grammatical, orthographical or phonetical rules of another language.",
parents = {"hypercorrections"},
}
labels["incel slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to incels.",
parents = {"slang", "Category:{{{langcode}}}:Incel community"},
}
labels["imperfective forms"] = {
description = "{{{langname}}} verbs that serve as imperfective variants of perfective verbs, sharing the same base set of meanings.",
parents = {"terms by usage"},
}
labels["informal forms"] = {
description = "{{{langname}}} terms that can be used in casual, non-ceremonious conversations as alternative forms of other terms.",
additional = "Informal non-lemma form variants also belong here.",
parents = {"informal terms"},
}
labels["informal terms"] = {
description = "{{{langname}}} terms whose use is typically restricted to casual, non‐ceremonious conversations.",
parents = {"terms by usage"},
}
labels["deliberate misspellings"] = {
description = "Deliberate misspellings of {{{langname}}} terms.",
parents = {"අක්ෂර වින්යාස දෝෂ"},
}
labels["internet laughter slang"] = {
description = "{{{langname}}} [[slang]] terms that are used as substitutes for laughter in internet-related contexts.",
additional = "::''Note: The majority of items that <u>could</u> be here do not meet Wiktionary's [[WT:CFI|criteria for inclusion]].''",
parents = {"internet slang"},
}
labels["internet slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to internet users.",
parents = {"slang"},
}
labels["humorous terms"] = {
description = "{{{langname}}} terms that are humorous, amusing or joking.",
parents = {"terms by usage"},
}
labels["journalistic terms"] = {
description = "{{{langname}}} terms that are used especially in [[journalistic]] language, i.e. in newspapers and magazines.",
parents = {"terms by usage"},
}
labels["kennings"] = {
description = "{{{langname}}} metaphorical compounds or phrases describing basic objects in an allusive fashion, used especially in Germanic poetry.",
parents = {"කාව්යමය යෙදුම්"},
}
labels["leetspeak"] = {
description = "{{{langname}}} which are used in [[leetspeak]], a variety of internet slang that focuses on substitution of letters by other characters which are similar in appearance.",
parents = {"internet slang"},
}
labels["LGBTQ slang"] = {
description = "{{{langname}}} [[slang]] terms which are used predominantly among [[LGBTQ]] people.",
parents = {"slang", "Category:{{{langcode}}}:LGBTQ"},
}
labels["literary terms"] = {
description = "{{{langname}}} terms whose usage is typically restricted to works of literature.",
parents = {"higher register terms"},
}
labels["medical slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to medical doctors, such as physicians and surgeons.",
parents = {"slang"},
}
labels["military slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to military personnel.",
parents = {"slang"},
}
labels["misconstructions"] = {
description = "Terms wrongly built due to a misunderstanding of their parts.",
parents = {"nonstandard forms"},
}
labels["misromanizations"] = {
description = "Common misromanizations of {{{langname}}} terms.",
parents = {"nonstandard forms"},
}
labels["අක්ෂර වින්යාස දෝෂ"] = {
description = "Common accidental misspellings of {{{langname}}} terms and some terms which are deliberate misspellings.",
parents = {"nonstandard forms"},
}
labels["multiplicity slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to the {{l|en|multiplicity|id=multiple personalities}} [[community]].",
parents = {"slang", "Category:{{{langcode}}}:Multiplicity (psychology)"},
}
labels["naval slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to naval personnel.",
parents = {"military slang"},
}
labels["nonstandard forms"] = {
description = "{{{langname}}} forms of standard terms that are considered improper, incorrect or commonly misused.",
parents = {"nonstandard terms"},
}
labels["nonstandard terms"] = {
description = "{{{langname}}} terms that are considered improper, incorrect or commonly misused.",
parents = {"terms by usage"},
}
labels["numismatic slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to numismatists.",
parents = {"slang", "Category:{{{langcode}}}:Currency"},
}
labels["offensive terms"] = {
description = "{{{langname}}} terms that are typically considered to offend people.",
parents = {"terms by usage"},
}
labels["officialese terms"] = {
description = "{{{langname}}} terms that are chiefly used by official sources, and are often bureaucratic-sounding.",
parents = {"terms by usage"},
}
labels["oxymorons"] = {
description = "{{{langname}}} terms that are juxtapositions of opposing ideas.",
parents = {"terms by usage"},
}
labels["perfective forms"] = {
description = "{{{langname}}} verbs that serve as perfective variants of imperfective verbs, sharing the same base set of meanings.",
parents = {"terms by usage"},
}
labels["placeholder terms"] = {
description = "{{{langname}}} terms used to refer to items for which one does not know or cannot recall the name, or is unable to or does not care to specify precisely.",
parents = {"terms by usage"},
}
labels["poetic forms"] = {
description = "{{{langname}}} terms that can be used in works of poetry as poetic alternative forms of other terms.",
additional = "Poetic non-lemma form variants also belong here.",
parents = {"poetic terms"},
}
labels["කාව්යමය යෙදුම්"] = {
description = "{{{langname}}} terms whose usage is typically restricted to works of poetry.",
parents = {"terms by usage", "literary terms"},
}
labels["post-nominal letters"] = {
description = "{{{langname}}} Post-nominal letters - also called post-nominal initials, post-nominal titles or designatory letters are letters placed after the name of a person to indicate that the individual holds a position, educational degree, accreditation, office, military decoration, or honour, or is a member of a religious institute or fraternity.",
parents = {"terms by usage"},
}
labels["prison slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to detainees in correctional institutions.",
parents = {"slang"},
}
labels["proscribed terms"] = {
description = "{{{langname}}} terms whose usage is proscribed; thus, they are considered wrong according to prescriptive sources.",
parents = {"terms by usage", "nonstandard terms"},
}
labels["puristic terms"] = {
description = "{{{langname}}} terms adopted for [[w:Linguistic purism|linguistic purism]].",
parents = {"terms by usage"},
}
labels["radio slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to radio communication.",
parents = {"slang"},
}
labels["Reddit slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to users of the website {{w|Reddit}}.",
parents = {"internet slang"},
}
labels["religious slurs"] = {
description = "{{{langname}}} terms that are intended to offend members of certain religions.",
parents = {"offensive terms"},
}
labels["reverential terms"] = {
description = "{{{langname}}} [[reverential]] terms, which are used to exalt the addressee, indicating that they have a higher social standing than the speaker.",
parents = {"honorific terms"},
}
labels["royal terms"] = {
description = "{{{langname}}} terms used only by royalty.",
parents = {"terms by usage"},
}
labels["rustic terms"] = {
description = "{{{langname}}} terms whose use is typically restricted rural speech.",
parents = {"terms by usage"},
}
labels["school slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to schools and school pupils.",
parents = {"slang"},
}
labels["self-deprecatory terms"] = {
description = "{{{langname}}} [[self-deprecatory]] terms.",
parents = {"terms by usage"},
}
labels["කෙටි ස්වරූප"] = {
description = "{{{langname}}} terms that are [[short form]]s of other terms, often used informally.",
parents = {"terms by usage", "කෙටි කිරීම් ආකාර"},
}
labels["slang"] = {
description = "{{{langname}}} [[colloquial]] terms that are typically used to mark membership in a cultural subgroup.",
parents = {"terms by usage"},
}
labels["solemn terms"] = {
description = "{{{langname}}} terms that are used to instill a sense of somberness.",
parents = {"terms by usage"},
}
labels["student slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to colleges, universities, and their students.",
parents = {"slang"},
}
labels["superseded forms"] = {
description = "{{{langname}}} forms that have been superseded by other forms due to changes in spelling conventions.",
parents = {"terms by usage", "terms by orthographic property"},
}
labels["swear words"] = {
description = "{{{langname}}} terms that are used to swear, such as to express strong anger or frustration.",
parents = {"vulgarities"},
}
labels["technical terms"] = {
description = "{{{langname}}} terms that are usually or exclusively used in technical/scientific writing.",
parents = {"terms by usage"},
}
labels["terms of address"] = {
description = "{{{langname}}} terms used to refer to another person.",
parents = {"terms by usage"},
}
labels["terms used in hendiadys"] = {
description = "{{{langname}}} words or senses which are used only in {{w|hendiadys}}.",
parents = {"terms by usage"},
}
labels["යෙදුම්, ඓතිහාසික අරුත් සහිත"] = {
description = "{{{langname}}} terms with senses that refer to things or concepts mainly known for their historical value.",
parents = {"terms by usage"},
}
labels["terms with transferred senses"] = {
description = "{{{langname}}} terms with [[Appendix:Glossary#transferred senses|transferred senses]].",
parents = {"terms by usage"},
}
labels["terms with uncertain meaning"] = {
description = "{{{langname}}} terms whose meaning is unknown or disputed.",
parents = {"terms by usage"},
}
labels["text messaging slang"] = {
description = "{{{langname}}} terms used for [[text messaging]] on mobile phones or similar devices, usually consisting of heavily abbreviated forms.",
parents = {"slang"},
}
labels["tone indicators"] = {
description = "{{{langname}}} symbols used to denote or clarify the intent of a preceeding or occasionally following message.",
parents = {"internet slang"},
}
labels["trademarks"] = {
description = "{{{langname}}} terms that identify legal entities, their products and services, by means of legal protection — to some extent, in a number of jurisdictions — against unauthorized use of the terms.",
parents = {"terms by usage"},
}
labels["transgender slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to transgender people.",
parents = {"LGBTQ slang", "Category:{{{langcode}}}:Transgender"},
}
labels["TV Tropes slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to users of the website {{w|TV Tropes}}.",
parents = {"internet slang"},
}
labels["umlautless spellings"] = {
description = "{{{langname}}} terms that are the result of the original terms' [[umlaut]]s being substituted.",
parents = {"nonstandard forms", "terms by orthographic property"},
}
labels["Usenet slang"] = {
description = "{{{langname}}} [[slang]] terms whose usage is typically restricted to users of {{w|Usenet}}.",
parents = {"internet slang"},
}
labels["men's speech terms"] = {
description = "{{{langname}}} terms and forms used in [[Appendix:Glossary#men's speech|men's speech]].",
parents = {"terms by usage"},
}
labels["women's speech terms"] = {
description = "{{{langname}}} terms and forms used in [[Appendix:Glossary#women's speech|women's speech]].",
parents = {"terms by usage"},
}
labels["vulgarities"] = {
description = "{{{langname}}} terms whose tone (rather than the meaning) is offensive to polite company.",
parents = {"terms by usage"},
}
-- Add 'umbrella_parents' key if not already present.
for key, data in pairs(labels) do
if not data.umbrella_parents then
data.umbrella_parents = "Terms by usage subcategories by language"
end
end
-----------------------------------------------------------------------------
-- --
-- RAW CATEGORIES --
-- --
-----------------------------------------------------------------------------
raw_categories["Terms by usage subcategories by language"] = {
description = "Umbrella categories covering topics related to terms categorized by their usage, such as slang, obsolete or archaic forms and vulgarities.",
additional = "{{{umbrella_meta_msg}}}",
parents = {
"ඡත්ර මෙටා ප්රවර්ග",
{name = "terms by usage", is_label = true, sort = " "},
},
}
return {LABELS = labels, RAW_CATEGORIES = raw_categories}
fthr1w1zisrlq2pzsdqq8s4126vl1em
Module:languages/data/3/s/extra
828
6331
235450
220343
2026-02-09T06:08:13Z
en>Hazarasp
0
Merging Lushootseed varieties per [[WT:LTR#Merge Skagit and Snohomish into Lushootseed]]
235450
Scribunto
text/plain
local m = {}
m["saa"] = {
}
m["sab"] = {
aliases = {"Bugle", "Murire", "Muoy"},
varieties = {"Sabanero", {"Bokotá", "Bogota"}},
}
m["sac"] = {
varieties = {{"Sac", "Sauk"}, "Kickapoo", {"Mesquakie", "Meskwaki"}},
}
m["sad"] = {
}
m["sae"] = {
}
m["saf"] = {
}
m["sah"] = {
aliases = {"Sakha"},
}
m["saj"] = {
varieties = {"Pa'disua", "Tala'i"},
}
m["sak"] = {
aliases = {"Shake"},
}
m["sam"] = {
aliases = {"Samaritan"},
}
m["sao"] = {
}
m["saq"] = {
}
m["sar"] = {
aliases = {"Sarabeca", "Saraveka", "Sarave"},
}
m["sas"] = {
}
m["sat"] = {
}
m["sau"] = {
}
m["sav"] = {
}
m["saw"] = {
}
m["sax"] = {
aliases = {"Saa"},
}
m["say"] = {
}
m["saz"] = {
}
m["sba"] = {
}
m["sbb"] = {
}
m["sbc"] = {
aliases = {"Kele (New Guinea)", "Kele (Papua New Guinea)", "Kele"},
}
m["sbd"] = {
}
m["sbe"] = {
aliases = {"Saliba"},
}
m["sbf"] = {
aliases = {"Mikeyir", "Mekeyir", "Mekeyer"},
}
m["sbg"] = {
}
m["sbh"] = {
-- I'm guessing these are varieties, since they represent the names of the two islands on which the language
-- (Sori-Harengan) is spoken.
varieties = {"Sori", "Harengan"},
}
m["sbi"] = {
}
m["sbj"] = {
}
m["sbk"] = {
}
m["sbl"] = {
}
m["sbm"] = {
}
m["sbn"] = {
}
m["sbo"] = {
}
m["sbp"] = {
}
m["sbq"] = {
aliases = {"Sileibi"},
}
m["sbr"] = {
}
m["sbs"] = {
}
m["sbt"] = {
pseudo_families = "paa",
}
m["sbu"] = {
}
m["sbv"] = {
}
m["sbw"] = {
}
m["sbx"] = {
}
m["sby"] = {
}
m["sbz"] = {
}
m["scb"] = {
}
m["sce"] = {
aliases = {"Santa"},
}
m["scf"] = {
}
m["scg"] = {
}
m["sch"] = {
-- Alias vs. variety here is a guess; Wikipedia says "Sakachep also known as Khelma" and says the ethnicity is
-- "The Khelma, also known as the Sakachep" but Ethnologue also says "dialects are Khelma, Thangachep, and Sakachep"
-- which may be bogus.
aliases = {"Khelma"},
}
m["sci"] = {
}
m["sck"] = {
}
m["scl"] = {
-- These represent different valleys where the language is spoken, hence likely distinct dialects.
varieties = {"Gilgiti", "Astori", "Chilasi"},
}
m["scn"] = {
}
m["sco"] = {
aliases = {"Lowland Scots"},
}
m["scp"] = {
aliases = {"Hyolmo", "Yohlmo", "Helambu Sherpa"},
-- Wikipedia says Syuba/Kagate (code skw) may be close enough to be a dialect. Langtang is mutually intelligible
-- with Yolmo but often considered a separate language; yet we don't have a code for it so I'm putting it as a
-- variety.
varieties = {"Melamchi Valley Yolmo", "Langtang", "Lamjung Yolmo", "Ilam Yolmo"},
}
m["scq"] = {
aliases = {"Chung"},
}
m["scs"] = {
}
m["scu"] = {
}
m["scv"] = {
}
m["scw"] = {
}
m["scx"] = {
aliases = {"Siculian"},
}
m["scz"] = {
aliases = {"Shaetlan", "Shetlandic"},
}
m["sda"] = {
}
m["sdb"] = {
aliases = {"Shabaki"},
}
m["sdc"] = {
}
m["sde"] = {
}
m["sdf"] = {
aliases = {"Sarliya"},
}
m["sdg"] = {
}
m["sdh"] = {
-- Kermanshahi can refer either to Southern Kurdish as a whole or to the prestige dialect. We distinct the latter
-- as Kermanshani with an n following ''Habib Borjian, “KERMANSHAH vii. Languages and Dialects,” Encyclopædia
-- Iranica, Vol. 16, Fasc. 3, New York, 2017, pp. 327-331.'' but this may not make a lot of sense.
aliases = {"Kermanshahi", "Kermanshahi Kurdish"},
-- We classify Laki as a separate language but it is often considered a dialect of Southern Kurdish.
varieties = {{"Kermanshani", "Kermanshani Kurdish"}, {"Kolya'i", "Kolyā'i"}, "Zangana", "Kalhori", {"Sanjābi", "Sanjabi"}, {"Feyli", "Fayli", "Ilāmi", "Ilami"}},
}
m["sdj"] = {
}
m["sdk"] = {
}
m["sdl"] = {
}
m["sdm"] = {
}
m["sdn"] = {
}
m["sdo"] = {
aliases = {"Bukar-Sadong"},
}
m["sdp"] = {
}
m["sdr"] = {
}
m["sds"] = {
}
m["sdu"] = {
}
m["sdx"] = {
}
m["sea"] = {
}
-- seb is a duplicate code of spp
m["sec"] = {
}
m["sed"] = {
}
m["see"] = {
}
m["sef"] = {
}
m["seg"] = {
}
m["seh"] = {
varieties = {{"Malawi Sena", "Malawian Sena"}, {"Nuclear Sena", "Mozambican Sena"}}, -- includes [swk] for Malawian Sena, but [bwg] for Barwe is distinct
}
m["sei"] = {
}
m["sej"] = {
}
m["sek"] = {
aliases = {"Tsek'ene"},
varieties = {{"Kwadacha", "Kwadacha Sekani", "Kwadacha Tsek'ene"}},
}
m["sen"] = {
}
m["seo"] = {
aliases = {"Asabano", -- Glottolog's name
"Suarmin", -- old ISO name
"Asabo", -- used in Foley (2005) and Foley (2018); may be a typo
"Duranmin", -- in e.g. Laycock and Z'graggen (1975), Conrad (1988)
},
pseudo_families = "paa",
}
m["sep"] = {
}
m["seq"] = {
}
m["ser"] = {
-- Wikipedia treats Kitanemuk as a separate language but it says it may have been a dialect (it is extinct).
varieties = {"Kitanemuk"},
}
m["ses"] = {
aliases = {"Koyraboro Senni Songhay", "Koyraboro Senni Songhai", "Koroboro Senni"},
-- other_names = {"Eastern Songhay"}, -- this is a geographic grouping of Songhay languages including Koyraboro Senni
}
m["set"] = {
varieties = {"Central Sentani", "East Sentani", "West Sentani"},
}
m["seu"] = {
}
m["sev"] = {
}
m["sew"] = {
}
m["sey"] = {
}
m["sez"] = {
aliases = {"Senthang"},
}
m["sfb"] = {
}
m["sfe"] = {
}
m["sfm"] = {
}
m["sfs"] = {
}
m["sfw"] = {
}
m["sga"] = {
}
m["sgb"] = {
}
m["sgc"] = {
}
m["sgd"] = {
}
m["sge"] = {
}
m["sgg"] = {
aliases = {"Swiss German Sign Language"},
}
m["sgh"] = {
}
m["sgi"] = {
}
m["sgk"] = {
}
m["sgm"] = {
}
m["sgp"] = {
}
m["sgr"] = {
aliases = {"Sangsari"},
}
m["sgs"] = {
}
m["sgt"] = {
aliases = {"Brokpa"},
}
m["sgu"] = {
}
m["sgw"] = {
}
m["sgx"] = {
}
m["sgy"] = {
-- FIXME: Sanglich is the name of the language as used in Tajikistan, while Sanglechi is the name as used in
-- Afghanistan. Hence they could be different dialects, but provisionally I'm classifying them as aliases.
aliases = {"Sanglich"},
-- "Warduji" may not exist at all
}
m["sgz"] = {
}
m["sha"] = {
}
m["shb"] = {
aliases = {"Yanam", "Yanam-Ninam", "Xiriana", "Xiriâna", "Shiriana", "Xirixana", "Shirishana"},
}
m["shc"] = {
}
m["shd"] = {
}
m["she"] = {
}
m["shg"] = {
aliases = {"Shwa", "Shwakhwe"},
}
m["shh"] = {
aliases = {"Shoshoni"},
varieties = {{"Gosiute", "Goshute"}, {"Eastern Shoshone", "Eastern Shoshoni"}, {"Western Shoshone", "Western Shoshoni"}, {"Northern Shoshone", "Northern Shoshoni"}},
}
m["shi"] = {
aliases = {"Tachelhit", "Chleuh", "Shilha", "Tashlhiyt", "Tashelhit Berber", "Tachelhit Berber", "Tashlhiyt Berber", "Soussian"},
}
m["shj"] = {
}
m["shk"] = {
}
m["shl"] = {
}
m["shm"] = {
}
m["shn"] = {
aliases = {"Kwam Tai", "Kam Tai", "Tai Yai"},
}
m["sho"] = {
}
m["shp"] = {
}
m["shq"] = {
}
m["shr"] = {
}
m["shs"] = {
}
m["sht"] = {
}
m["shu"] = {
}
m["shv"] = {
aliases = {"Jibbali"},
}
m["shw"] = {
}
m["shx"] = {
aliases = {"Ho Ne", "Ho Nte"},
}
m["shy"] = {
aliases = {"Shawiya Berber", "Chaouïa", "Tacawit"},
}
m["shz"] = {
}
m["sia"] = {
}
m["sib"] = {
}
m["sid"] = {
aliases = {"Sidaama"},
}
m["sie"] = {
}
m["sif"] = {
}
m["sig"] = {
}
m["sih"] = {
aliases = {"Sishee", "Zire"},
}
m["sii"] = {
}
m["sij"] = {
}
m["sik"] = {
}
m["sil"] = {
}
m["sim"] = {
aliases = {"Mende",
"Seim", -- our old name
},
}
m["sip"] = {
aliases = {"Bhutia", "Dranjongke", "Dranjoke", "Denjongka", "Denzongpeke", "Denzongke"},
}
m["siq"] = {
}
m["sir"] = {
}
m["sis"] = {
}
m["siu"] = {
aliases = {"Galu"}, -- Glottolog's name
}
m["siv"] = {
}
m["siw"] = {
varieties = {"Baitsi"},
}
m["six"] = {
aliases = {"Garia", "Kari"},
}
m["siy"] = {
}
m["siz"] = {
aliases = {"Siwa", "Siwan", "Siwa Berber"},
}
m["sja"] = {
}
m["sjb"] = {
}
m["sjc"] = {
aliases = {"Shao-Jiang Min", "Shaojiang Chinese", "Shao-Jiang Chinese"},
}
m["sjd"] = {
}
m["sje"] = {
}
m["sjg"] = {
}
m["sjk"] = {
}
m["sjl"] = {
-- Per Wikipedia, these are two languages. There is also a yet more divergent variety Bangru (Northern Miji).
varieties = {
{"Western Miji", "Dmay", "Dhammai", "Dhəmmai", "Sajalang", "Sajolang"},
{"Eastern Miji", "Namrai", "Nəmrai"},
}
}
m["sjm"] = {
}
m["sjn"] = {
}
m["sjo"] = {
aliases = {"Sibo", "Sibe", "Xibo"},
}
m["sjp"] = {
}
m["sjr"] = {
}
m["sjs"] = {
-- from Wikipedia
aliases = {"Senhaja De Srair", "Sanhaja de Srair", "Senhajiyya", "Chelha", "Chelha n Senhaja", "Chelha n Isenhajen", "Tamazight n Senhaja", "Tasenhaji"},
}
m["sjt"] = {
}
m["sju"] = {
}
m["sjw"] = {
}
-- [ska] Skagit is treated as part of [lut] Lushootseed
m["skb"] = {
}
m["skc"] = {
aliases = {"Sauk"},
}
m["skd"] = {
}
m["ske"] = {
aliases = {"Seke"},
}
m["skf"] = {
aliases = {"Mekens", "Mekem", "Amniapé"},
-- Glottolog refers to the third variety as Siokweriat corresponding to Koarategayat etc.
varieties = {{"Sakirabiá", "Sakïrabiát", "Sakiráp", "Sakurabiat"}, {"Koaratira", "Guaratira", "Kanoé"}, {"Koarategayat", "Guaratégaya", "Guarategaja", "Warategáya"}},
}
m["skh"] = {
}
m["ski"] = {
other_names = {"Sikanese"},
}
m["skj"] = { -- compare 'ths'
}
m["skk"] = {
}
m["skm"] = {
other_names = {"Kutong"},
}
m["skn"] = {
}
m["sko"] = {
}
m["skp"] = {
}
m["skq"] = {
}
m["skr"] = {
other_names = {"Siraiki", "Seraiki"},
}
m["sks"] = {
aliases = {"Maya"},
other_names = {"Banar", "Suaro", "Turutap", "Yakiba"},
varieties = {"Pila", "Saki"},
}
m["skt"] = {
other_names = {"Kisakata", "Lesa", "Odual", "Saka", "Bai", "Kibai", "Bay", "Kibay", "Djia", "Dia", "Dja", "Kidjia", "Wadia", "Tuku", "Ketu", "Batow"},
}
m["sku"] = {
}
m["skv"] = {
}
m["skw"] = {
other_names = {"Skepi Dutch", "Skepi Dutch Creole", "Essequibo Dutch"},
}
m["skx"] = {
}
m["sky"] = {
aliases = {"Sikayana"},
}
m["skz"] = {
}
m["slc"] = {
other_names = {"Saliba", "Sáliba", "Saliva", "Sáliva"},
}
m["sld"] = {
aliases = {"Sissala"},
}
m["sle"] = {
}
m["slf"] = {
other_names = {"Swiss Italian Sign Language"},
}
m["slg"] = {
}
-- [slh] Southern Puget Sound Salish is treated as part of [lut] Lushootseed
-- "sli" "Silesian German" IS SUBSUMED INTO "gmw-ecg" "East Central German"
m["slj"] = {
}
m["sll"] = {
varieties = {"Keri", {"Salt", "Salt (Salt-Yui)"}},
}
m["slm"] = {
aliases = {"Siyama"},
}
m["sln"] = {
}
m["slp"] = {
other_names = {"Solor", "Solorese"},
}
m["slr"] = {
}
m["sls"] = {
}
m["slt"] = {
}
m["slu"] = {
}
m["slw"] = {
}
m["slx"] = {
}
m["sly"] = {
}
m["slz"] = {
}
m["sma"] = {
}
m["smb"] = {
}
m["smc"] = {
}
m["smd"] = {
}
m["smf"] = {
}
m["smg"] = {
}
m["smh"] = {
}
m["smj"] = {
}
m["smk"] = {
other_names = {"Binubolinao"},
}
m["sml"] = {
}
m["smm"] = {
}
m["smn"] = {
}
m["smp"] = {
other_names = {"Samaritan"},
}
m["smq"] = {
}
m["smr"] = {
other_names = {"Simalur", "Devayan", "Defayan", "Simolol", "Simulul", "Simeuloë"},
}
m["sms"] = {
}
m["smt"] = {
}
m["smu"] = {
}
m["smv"] = {
}
m["smw"] = {
}
m["smx"] = {
}
m["smy"] = {
}
m["smz"] = {
varieties = {"Koopei", "Mainoki"},
}
m["snb"] = {
}
m["snc"] = {
}
m["sne"] = {
}
m["snf"] = {
}
m["sng"] = {
other_names = {"Sanga", "Luba-Sanga", "Sanga (Democratic Republic of Congo)", "Sanga (Democratic Republic of the Congo)"},
}
m["sni"] = {
}
m["snj"] = {
}
m["snk"] = {
}
m["snl"] = {
}
m["snm"] = {
}
m["snn"] = {
}
-- [sno] Snohomish is treated as part of [lut] Lushootseed
m["snp"] = {
varieties = {"Alango", "Fowe", "Kemanimowe", "Keto", "Kolepa", "Komoigaleka", "Komongu", "Laiya", "Lambau",
"Olumba", {"Ona", "Ona (Papua New Guinea)"}, "Wando", "Yamofowe", "Yandime"},
}
m["snq"] = {
other_names = {"Chango"},
}
m["snr"] = {
aliases = {"Sihan (Gum)"}, -- per Glottolog
}
m["sns"] = {
}
m["snu"] = {
}
m["snv"] = {
}
m["snw"] = {
}
m["snx"] = {
}
m["sny"] = {
varieties = {"Hiyowe", "Saniyo"},
}
m["snz"] = {
aliases = {"Kow", "Sinsauru"}, -- Sinsauru is an alias per Wikipedia
varieties = {"Asas", "Saipa"},
}
m["soa"] = {
aliases = {"Lao Song", "Song"},
}
m["sob"] = {
}
m["soc"] = {
other_names = {"So"},
}
m["sod"] = {
}
m["soe"] = {
}
m["sog"] = {
}
m["soh"] = {
other_names = {"Aka", "Sillok"},
}
m["soi"] = {
other_names = {"Sonaha", "Sonahaa", "Sunah", "Sunha"},
}
m["sok"] = {
}
m["sol"] = {
}
m["soo"] = {
other_names = {"Songo", "Tsong"},
}
m["sop"] = {
}
m["soq"] = {
}
m["sor"] = {
}
m["sos"] = {
other_names = {"Seeku", "Sembla", "Sambla"},
}
m["sou"] = {
aliases = {"Dambro", "Pak Tai"},
}
m["sov"] = {
}
m["sow"] = {
}
m["sox"] = {
other_names = {"So", "Sso", "Shwo", "Fo"},
}
m["soy"] = {
}
m["soz"] = {
}
m["spb"] = {
other_names = {"Sepa"},
}
m["spc"] = {
other_names = {"Kaliana", "Kariana", "Kaliána", "Sapä́", "Sape"},
}
m["spd"] = {
}
m["spe"] = {
other_names = {"Sepa", "Sepa (Papua New Guinea)"},
}
m["spg"] = {
}
m["spi"] = {
}
m["spk"] = {
}
m["spl"] = {
varieties = {"North Selepet", "South Selepet"},
}
m["spm"] = {
}
m["spn"] = {
}
m["spo"] = {
other_names = {"Montana Salish", "Salish", "Séliš", "Kalispel-Pend d'oreille", "Kalispel"},
}
m["spp"] = {
other_names = {"Suppire", "Supyire Senoufo", "Supyire Senufo", "Shempire Senoufo", "Shempire"},
}
m["spr"] = {
}
m["sps"] = {
}
m["spt"] = {
}
m["spu"] = {
}
m["spv"] = {
other_names = {"Kosali", "Koshali"},
}
m["spx"] = {
other_names = {"Old Sabellic", "Old Sabellian", "Middle Adriatic", "Central Adriatic"},
}
m["spy"] = {
}
m["sqa"] = {
}
m["sqh"] = {
}
m["sqk"] = {
}
m["sqm"] = {
}
m["sqn"] = {
}
m["sqo"] = {
}
m["sqq"] = {
}
m["sqr"] = {
}
m["sqs"] = {
}
m["sqt"] = {
aliases = {"Socotri"},
}
m["squ"] = {
}
m["sra"] = {
}
m["srb"] = {
}
m["sre"] = {
}
m["srf"] = {
}
m["srg"] = {
}
m["srh"] = {
}
m["sri"] = {
}
m["srk"] = {
aliases = {"Serudung"},
}
m["srl"] = {
varieties = {"Eastern Isirawa", "Western Isirawa"},
}
m["srm"] = {
}
m["srn"] = {
}
m["srq"] = {
}
m["srr"] = {
}
m["srs"] = {
aliases = {"Sarcee", "Sarsi", "Tsuu T'ina", "Tsu T'ina"},
}
m["srt"] = {
}
m["sru"] = {
other_names = {"Paíter", "Suruí-Paíter", "Suruí de Rondônia", "Suruí do Jiparaná"},
}
m["srv"] = {
}
m["srw"] = {
}
m["srx"] = {
}
m["sry"] = {
}
m["srz"] = {
}
m["ssb"] = {
}
m["ssc"] = {
}
m["ssd"] = {
}
m["sse"] = {
}
m["ssf"] = {
other_names = {"Sao"},
}
m["ssg"] = {
}
m["ssh"] = {
}
m["ssi"] = {
other_names = {"Bhilki"},
}
m["ssj"] = {
}
m["ssk"] = {
}
m["ssl"] = {
}
m["ssm"] = {
}
m["sso"] = {
}
m["ssp"] = {
}
m["ssq"] = {
}
m["ssr"] = {
other_names = {"Swiss French Sign Language"},
}
m["sss"] = {
}
m["sst"] = {
varieties = {"Dinga", "Gunangi", {"Kebai", "Kebai (Sinasina)"}, {"Kere", "Kere (Sinasina)"}, "Kondo", "Nimai",
"Tabare"},
}
m["ssu"] = {
}
m["ssv"] = {
}
m["ssx"] = {
}
m["ssy"] = {
}
m["ssz"] = {
}
m["stb"] = {
}
m["std"] = {
}
m["ste"] = {
}
m["stf"] = {
}
m["stg"] = {
}
m["sth"] = {
other_names = {"Cant"},
}
m["sti"] = {
}
m["stj"] = {
}
m["stk"] = {
}
m["stm"] = {
}
m["stn"] = {
}
m["sto"] = {
}
m["stp"] = {
}
m["stq"] = {
other_names = {"East Frisian", "Eastern Frisian"}, -- Saterland F is a dialect of East F; see [[WT:T:ASTQ]]
}
m["str"] = {
}
m["sts"] = {
}
m["stt"] = {
}
m["stu"] = {
}
m["stv"] = {
}
m["stw"] = {
}
m["sty"] = {
}
m["sua"] = {
}
m["sub"] = {
}
m["suc"] = {
}
m["sue"] = {
}
m["sug"] = {
}
m["sui"] = {
}
m["suk"] = {
}
m["suo"] = {
aliases = {"Bouni-Bobe", -- Glottolog
"Sumo"}, -- alternative name in Wikipedia
varieties = {"Bobe", "Bouni"}, -- per Glottolog
}
m["suq"] = {
}
m["sur"] = {
other_names = {"Sura", "Mupun"},
}
m["sus"] = {
}
m["sut"] = {
}
m["suv"] = {
}
m["suw"] = {
}
m["sux"] = {
}
m["suy"] = {
}
m["suz"] = {
}
m["sva"] = {
}
m["svb"] = {
}
m["svc"] = {
}
m["sve"] = {
}
m["svk"] = {
}
m["svm"] = {
aliases = {"Slavo-molisano", "Molise Slavic", "Molise Croatian"},
}
m["svs"] = {
pseudo_families = "paa",
}
m["svx"] = {
}
m["swb"] = {
}
m["swf"] = {
}
m["swg"] = {
}
m["swi"] = {
aliases = {"Ai Sui", "Shui", "Sui Li", "Suipo"},
}
m["swj"] = {
}
m["swl"] = {
}
m["swm"] = {
}
m["swn"] = {
other_names = {"Sawknah", "Fezzan", "Fogaha"},
}
m["swo"] = {
}
m["swp"] = {
}
m["swq"] = {
}
m["swr"] = {
}
m["sws"] = {
}
m["swt"] = {
varieties = {"Lalamana", "Lona", "Nuclear Sawila", "Salimana", "Sileba"},
}
m["swu"] = {
}
m["sww"] = {
}
m["swx"] = {
other_names = {"Zuruahá", "Suruaha", "Suruwaha", "Zuruaha", "Índios do Coxodoá"},
}
m["swy"] = {
}
m["sxb"] = {
}
m["sxc"] = {
}
m["sxe"] = {
}
m["sxg"] = {
other_names = {"Shuhi", "Xumi"},
}
m["sxk"] = {
}
m["sxl"] = {
other_names = {"Selian"},
}
m["sxm"] = {
}
m["sxn"] = {
}
m["sxo"] = {
}
m["sxr"] = {
}
m["sxs"] = {
}
-- "sxu" "Upper Saxon" IS SUBSUMED INTO "gmw-ecg" "East Central German"
m["sxw"] = {
}
m["sya"] = {
}
m["syb"] = {
}
m["syc"] = {
}
m["syi"] = {
}
m["syk"] = {
}
m["syl"] = {
aliases = {"Sylhetti", "Sileti", "Siloti", "Syloti", "Syloty"}
}
m["sym"] = {
}
m["syn"] = {
}
m["syo"] = {
}
m["sys"] = {
}
m["syw"] = {
aliases = {"Syuba"},
}
m["syx"] = {
other_names = {"Shamay", "Samayi", "Samay", "Shamayi"},
}
m["syy"] = {
}
m["sza"] = {
}
m["szb"] = {
varieties = {"Apmisibil", "Nuclear Ngalum", "Sibil"},
}
m["szc"] = {
}
m["szd"] = {
}
m["sze"] = {
}
m["szg"] = {
}
m["szl"] = {
aliases = {"Upper Silesian", "Silesian Polish", "Upper Silesian Polish"},
}
m["szn"] = {
}
m["szp"] = {
other_names = {"Inanwatan"},
}
m["szv"] = {
other_names = {"Isu", "Isu (Fako Division)", "Isuwu", "Suwu", "Subu"},
}
m["szw"] = {
other_names = {"Weda", "Weda-Sawai", "Kobe", "Faya-Mafa", "Messa-Dote"},
}
m["szy"] = {
}
return m
sb9mr4edjax9m9vqnxuuvf9p7zpvlqm
235451
235450
2026-06-02T10:41:03Z
Lee
19
[[:en:Module:languages/data/3/s/extra]] වෙතින් එක් සංශෝධනයක්
235450
Scribunto
text/plain
local m = {}
m["saa"] = {
}
m["sab"] = {
aliases = {"Bugle", "Murire", "Muoy"},
varieties = {"Sabanero", {"Bokotá", "Bogota"}},
}
m["sac"] = {
varieties = {{"Sac", "Sauk"}, "Kickapoo", {"Mesquakie", "Meskwaki"}},
}
m["sad"] = {
}
m["sae"] = {
}
m["saf"] = {
}
m["sah"] = {
aliases = {"Sakha"},
}
m["saj"] = {
varieties = {"Pa'disua", "Tala'i"},
}
m["sak"] = {
aliases = {"Shake"},
}
m["sam"] = {
aliases = {"Samaritan"},
}
m["sao"] = {
}
m["saq"] = {
}
m["sar"] = {
aliases = {"Sarabeca", "Saraveka", "Sarave"},
}
m["sas"] = {
}
m["sat"] = {
}
m["sau"] = {
}
m["sav"] = {
}
m["saw"] = {
}
m["sax"] = {
aliases = {"Saa"},
}
m["say"] = {
}
m["saz"] = {
}
m["sba"] = {
}
m["sbb"] = {
}
m["sbc"] = {
aliases = {"Kele (New Guinea)", "Kele (Papua New Guinea)", "Kele"},
}
m["sbd"] = {
}
m["sbe"] = {
aliases = {"Saliba"},
}
m["sbf"] = {
aliases = {"Mikeyir", "Mekeyir", "Mekeyer"},
}
m["sbg"] = {
}
m["sbh"] = {
-- I'm guessing these are varieties, since they represent the names of the two islands on which the language
-- (Sori-Harengan) is spoken.
varieties = {"Sori", "Harengan"},
}
m["sbi"] = {
}
m["sbj"] = {
}
m["sbk"] = {
}
m["sbl"] = {
}
m["sbm"] = {
}
m["sbn"] = {
}
m["sbo"] = {
}
m["sbp"] = {
}
m["sbq"] = {
aliases = {"Sileibi"},
}
m["sbr"] = {
}
m["sbs"] = {
}
m["sbt"] = {
pseudo_families = "paa",
}
m["sbu"] = {
}
m["sbv"] = {
}
m["sbw"] = {
}
m["sbx"] = {
}
m["sby"] = {
}
m["sbz"] = {
}
m["scb"] = {
}
m["sce"] = {
aliases = {"Santa"},
}
m["scf"] = {
}
m["scg"] = {
}
m["sch"] = {
-- Alias vs. variety here is a guess; Wikipedia says "Sakachep also known as Khelma" and says the ethnicity is
-- "The Khelma, also known as the Sakachep" but Ethnologue also says "dialects are Khelma, Thangachep, and Sakachep"
-- which may be bogus.
aliases = {"Khelma"},
}
m["sci"] = {
}
m["sck"] = {
}
m["scl"] = {
-- These represent different valleys where the language is spoken, hence likely distinct dialects.
varieties = {"Gilgiti", "Astori", "Chilasi"},
}
m["scn"] = {
}
m["sco"] = {
aliases = {"Lowland Scots"},
}
m["scp"] = {
aliases = {"Hyolmo", "Yohlmo", "Helambu Sherpa"},
-- Wikipedia says Syuba/Kagate (code skw) may be close enough to be a dialect. Langtang is mutually intelligible
-- with Yolmo but often considered a separate language; yet we don't have a code for it so I'm putting it as a
-- variety.
varieties = {"Melamchi Valley Yolmo", "Langtang", "Lamjung Yolmo", "Ilam Yolmo"},
}
m["scq"] = {
aliases = {"Chung"},
}
m["scs"] = {
}
m["scu"] = {
}
m["scv"] = {
}
m["scw"] = {
}
m["scx"] = {
aliases = {"Siculian"},
}
m["scz"] = {
aliases = {"Shaetlan", "Shetlandic"},
}
m["sda"] = {
}
m["sdb"] = {
aliases = {"Shabaki"},
}
m["sdc"] = {
}
m["sde"] = {
}
m["sdf"] = {
aliases = {"Sarliya"},
}
m["sdg"] = {
}
m["sdh"] = {
-- Kermanshahi can refer either to Southern Kurdish as a whole or to the prestige dialect. We distinct the latter
-- as Kermanshani with an n following ''Habib Borjian, “KERMANSHAH vii. Languages and Dialects,” Encyclopædia
-- Iranica, Vol. 16, Fasc. 3, New York, 2017, pp. 327-331.'' but this may not make a lot of sense.
aliases = {"Kermanshahi", "Kermanshahi Kurdish"},
-- We classify Laki as a separate language but it is often considered a dialect of Southern Kurdish.
varieties = {{"Kermanshani", "Kermanshani Kurdish"}, {"Kolya'i", "Kolyā'i"}, "Zangana", "Kalhori", {"Sanjābi", "Sanjabi"}, {"Feyli", "Fayli", "Ilāmi", "Ilami"}},
}
m["sdj"] = {
}
m["sdk"] = {
}
m["sdl"] = {
}
m["sdm"] = {
}
m["sdn"] = {
}
m["sdo"] = {
aliases = {"Bukar-Sadong"},
}
m["sdp"] = {
}
m["sdr"] = {
}
m["sds"] = {
}
m["sdu"] = {
}
m["sdx"] = {
}
m["sea"] = {
}
-- seb is a duplicate code of spp
m["sec"] = {
}
m["sed"] = {
}
m["see"] = {
}
m["sef"] = {
}
m["seg"] = {
}
m["seh"] = {
varieties = {{"Malawi Sena", "Malawian Sena"}, {"Nuclear Sena", "Mozambican Sena"}}, -- includes [swk] for Malawian Sena, but [bwg] for Barwe is distinct
}
m["sei"] = {
}
m["sej"] = {
}
m["sek"] = {
aliases = {"Tsek'ene"},
varieties = {{"Kwadacha", "Kwadacha Sekani", "Kwadacha Tsek'ene"}},
}
m["sen"] = {
}
m["seo"] = {
aliases = {"Asabano", -- Glottolog's name
"Suarmin", -- old ISO name
"Asabo", -- used in Foley (2005) and Foley (2018); may be a typo
"Duranmin", -- in e.g. Laycock and Z'graggen (1975), Conrad (1988)
},
pseudo_families = "paa",
}
m["sep"] = {
}
m["seq"] = {
}
m["ser"] = {
-- Wikipedia treats Kitanemuk as a separate language but it says it may have been a dialect (it is extinct).
varieties = {"Kitanemuk"},
}
m["ses"] = {
aliases = {"Koyraboro Senni Songhay", "Koyraboro Senni Songhai", "Koroboro Senni"},
-- other_names = {"Eastern Songhay"}, -- this is a geographic grouping of Songhay languages including Koyraboro Senni
}
m["set"] = {
varieties = {"Central Sentani", "East Sentani", "West Sentani"},
}
m["seu"] = {
}
m["sev"] = {
}
m["sew"] = {
}
m["sey"] = {
}
m["sez"] = {
aliases = {"Senthang"},
}
m["sfb"] = {
}
m["sfe"] = {
}
m["sfm"] = {
}
m["sfs"] = {
}
m["sfw"] = {
}
m["sga"] = {
}
m["sgb"] = {
}
m["sgc"] = {
}
m["sgd"] = {
}
m["sge"] = {
}
m["sgg"] = {
aliases = {"Swiss German Sign Language"},
}
m["sgh"] = {
}
m["sgi"] = {
}
m["sgk"] = {
}
m["sgm"] = {
}
m["sgp"] = {
}
m["sgr"] = {
aliases = {"Sangsari"},
}
m["sgs"] = {
}
m["sgt"] = {
aliases = {"Brokpa"},
}
m["sgu"] = {
}
m["sgw"] = {
}
m["sgx"] = {
}
m["sgy"] = {
-- FIXME: Sanglich is the name of the language as used in Tajikistan, while Sanglechi is the name as used in
-- Afghanistan. Hence they could be different dialects, but provisionally I'm classifying them as aliases.
aliases = {"Sanglich"},
-- "Warduji" may not exist at all
}
m["sgz"] = {
}
m["sha"] = {
}
m["shb"] = {
aliases = {"Yanam", "Yanam-Ninam", "Xiriana", "Xiriâna", "Shiriana", "Xirixana", "Shirishana"},
}
m["shc"] = {
}
m["shd"] = {
}
m["she"] = {
}
m["shg"] = {
aliases = {"Shwa", "Shwakhwe"},
}
m["shh"] = {
aliases = {"Shoshoni"},
varieties = {{"Gosiute", "Goshute"}, {"Eastern Shoshone", "Eastern Shoshoni"}, {"Western Shoshone", "Western Shoshoni"}, {"Northern Shoshone", "Northern Shoshoni"}},
}
m["shi"] = {
aliases = {"Tachelhit", "Chleuh", "Shilha", "Tashlhiyt", "Tashelhit Berber", "Tachelhit Berber", "Tashlhiyt Berber", "Soussian"},
}
m["shj"] = {
}
m["shk"] = {
}
m["shl"] = {
}
m["shm"] = {
}
m["shn"] = {
aliases = {"Kwam Tai", "Kam Tai", "Tai Yai"},
}
m["sho"] = {
}
m["shp"] = {
}
m["shq"] = {
}
m["shr"] = {
}
m["shs"] = {
}
m["sht"] = {
}
m["shu"] = {
}
m["shv"] = {
aliases = {"Jibbali"},
}
m["shw"] = {
}
m["shx"] = {
aliases = {"Ho Ne", "Ho Nte"},
}
m["shy"] = {
aliases = {"Shawiya Berber", "Chaouïa", "Tacawit"},
}
m["shz"] = {
}
m["sia"] = {
}
m["sib"] = {
}
m["sid"] = {
aliases = {"Sidaama"},
}
m["sie"] = {
}
m["sif"] = {
}
m["sig"] = {
}
m["sih"] = {
aliases = {"Sishee", "Zire"},
}
m["sii"] = {
}
m["sij"] = {
}
m["sik"] = {
}
m["sil"] = {
}
m["sim"] = {
aliases = {"Mende",
"Seim", -- our old name
},
}
m["sip"] = {
aliases = {"Bhutia", "Dranjongke", "Dranjoke", "Denjongka", "Denzongpeke", "Denzongke"},
}
m["siq"] = {
}
m["sir"] = {
}
m["sis"] = {
}
m["siu"] = {
aliases = {"Galu"}, -- Glottolog's name
}
m["siv"] = {
}
m["siw"] = {
varieties = {"Baitsi"},
}
m["six"] = {
aliases = {"Garia", "Kari"},
}
m["siy"] = {
}
m["siz"] = {
aliases = {"Siwa", "Siwan", "Siwa Berber"},
}
m["sja"] = {
}
m["sjb"] = {
}
m["sjc"] = {
aliases = {"Shao-Jiang Min", "Shaojiang Chinese", "Shao-Jiang Chinese"},
}
m["sjd"] = {
}
m["sje"] = {
}
m["sjg"] = {
}
m["sjk"] = {
}
m["sjl"] = {
-- Per Wikipedia, these are two languages. There is also a yet more divergent variety Bangru (Northern Miji).
varieties = {
{"Western Miji", "Dmay", "Dhammai", "Dhəmmai", "Sajalang", "Sajolang"},
{"Eastern Miji", "Namrai", "Nəmrai"},
}
}
m["sjm"] = {
}
m["sjn"] = {
}
m["sjo"] = {
aliases = {"Sibo", "Sibe", "Xibo"},
}
m["sjp"] = {
}
m["sjr"] = {
}
m["sjs"] = {
-- from Wikipedia
aliases = {"Senhaja De Srair", "Sanhaja de Srair", "Senhajiyya", "Chelha", "Chelha n Senhaja", "Chelha n Isenhajen", "Tamazight n Senhaja", "Tasenhaji"},
}
m["sjt"] = {
}
m["sju"] = {
}
m["sjw"] = {
}
-- [ska] Skagit is treated as part of [lut] Lushootseed
m["skb"] = {
}
m["skc"] = {
aliases = {"Sauk"},
}
m["skd"] = {
}
m["ske"] = {
aliases = {"Seke"},
}
m["skf"] = {
aliases = {"Mekens", "Mekem", "Amniapé"},
-- Glottolog refers to the third variety as Siokweriat corresponding to Koarategayat etc.
varieties = {{"Sakirabiá", "Sakïrabiát", "Sakiráp", "Sakurabiat"}, {"Koaratira", "Guaratira", "Kanoé"}, {"Koarategayat", "Guaratégaya", "Guarategaja", "Warategáya"}},
}
m["skh"] = {
}
m["ski"] = {
other_names = {"Sikanese"},
}
m["skj"] = { -- compare 'ths'
}
m["skk"] = {
}
m["skm"] = {
other_names = {"Kutong"},
}
m["skn"] = {
}
m["sko"] = {
}
m["skp"] = {
}
m["skq"] = {
}
m["skr"] = {
other_names = {"Siraiki", "Seraiki"},
}
m["sks"] = {
aliases = {"Maya"},
other_names = {"Banar", "Suaro", "Turutap", "Yakiba"},
varieties = {"Pila", "Saki"},
}
m["skt"] = {
other_names = {"Kisakata", "Lesa", "Odual", "Saka", "Bai", "Kibai", "Bay", "Kibay", "Djia", "Dia", "Dja", "Kidjia", "Wadia", "Tuku", "Ketu", "Batow"},
}
m["sku"] = {
}
m["skv"] = {
}
m["skw"] = {
other_names = {"Skepi Dutch", "Skepi Dutch Creole", "Essequibo Dutch"},
}
m["skx"] = {
}
m["sky"] = {
aliases = {"Sikayana"},
}
m["skz"] = {
}
m["slc"] = {
other_names = {"Saliba", "Sáliba", "Saliva", "Sáliva"},
}
m["sld"] = {
aliases = {"Sissala"},
}
m["sle"] = {
}
m["slf"] = {
other_names = {"Swiss Italian Sign Language"},
}
m["slg"] = {
}
-- [slh] Southern Puget Sound Salish is treated as part of [lut] Lushootseed
-- "sli" "Silesian German" IS SUBSUMED INTO "gmw-ecg" "East Central German"
m["slj"] = {
}
m["sll"] = {
varieties = {"Keri", {"Salt", "Salt (Salt-Yui)"}},
}
m["slm"] = {
aliases = {"Siyama"},
}
m["sln"] = {
}
m["slp"] = {
other_names = {"Solor", "Solorese"},
}
m["slr"] = {
}
m["sls"] = {
}
m["slt"] = {
}
m["slu"] = {
}
m["slw"] = {
}
m["slx"] = {
}
m["sly"] = {
}
m["slz"] = {
}
m["sma"] = {
}
m["smb"] = {
}
m["smc"] = {
}
m["smd"] = {
}
m["smf"] = {
}
m["smg"] = {
}
m["smh"] = {
}
m["smj"] = {
}
m["smk"] = {
other_names = {"Binubolinao"},
}
m["sml"] = {
}
m["smm"] = {
}
m["smn"] = {
}
m["smp"] = {
other_names = {"Samaritan"},
}
m["smq"] = {
}
m["smr"] = {
other_names = {"Simalur", "Devayan", "Defayan", "Simolol", "Simulul", "Simeuloë"},
}
m["sms"] = {
}
m["smt"] = {
}
m["smu"] = {
}
m["smv"] = {
}
m["smw"] = {
}
m["smx"] = {
}
m["smy"] = {
}
m["smz"] = {
varieties = {"Koopei", "Mainoki"},
}
m["snb"] = {
}
m["snc"] = {
}
m["sne"] = {
}
m["snf"] = {
}
m["sng"] = {
other_names = {"Sanga", "Luba-Sanga", "Sanga (Democratic Republic of Congo)", "Sanga (Democratic Republic of the Congo)"},
}
m["sni"] = {
}
m["snj"] = {
}
m["snk"] = {
}
m["snl"] = {
}
m["snm"] = {
}
m["snn"] = {
}
-- [sno] Snohomish is treated as part of [lut] Lushootseed
m["snp"] = {
varieties = {"Alango", "Fowe", "Kemanimowe", "Keto", "Kolepa", "Komoigaleka", "Komongu", "Laiya", "Lambau",
"Olumba", {"Ona", "Ona (Papua New Guinea)"}, "Wando", "Yamofowe", "Yandime"},
}
m["snq"] = {
other_names = {"Chango"},
}
m["snr"] = {
aliases = {"Sihan (Gum)"}, -- per Glottolog
}
m["sns"] = {
}
m["snu"] = {
}
m["snv"] = {
}
m["snw"] = {
}
m["snx"] = {
}
m["sny"] = {
varieties = {"Hiyowe", "Saniyo"},
}
m["snz"] = {
aliases = {"Kow", "Sinsauru"}, -- Sinsauru is an alias per Wikipedia
varieties = {"Asas", "Saipa"},
}
m["soa"] = {
aliases = {"Lao Song", "Song"},
}
m["sob"] = {
}
m["soc"] = {
other_names = {"So"},
}
m["sod"] = {
}
m["soe"] = {
}
m["sog"] = {
}
m["soh"] = {
other_names = {"Aka", "Sillok"},
}
m["soi"] = {
other_names = {"Sonaha", "Sonahaa", "Sunah", "Sunha"},
}
m["sok"] = {
}
m["sol"] = {
}
m["soo"] = {
other_names = {"Songo", "Tsong"},
}
m["sop"] = {
}
m["soq"] = {
}
m["sor"] = {
}
m["sos"] = {
other_names = {"Seeku", "Sembla", "Sambla"},
}
m["sou"] = {
aliases = {"Dambro", "Pak Tai"},
}
m["sov"] = {
}
m["sow"] = {
}
m["sox"] = {
other_names = {"So", "Sso", "Shwo", "Fo"},
}
m["soy"] = {
}
m["soz"] = {
}
m["spb"] = {
other_names = {"Sepa"},
}
m["spc"] = {
other_names = {"Kaliana", "Kariana", "Kaliána", "Sapä́", "Sape"},
}
m["spd"] = {
}
m["spe"] = {
other_names = {"Sepa", "Sepa (Papua New Guinea)"},
}
m["spg"] = {
}
m["spi"] = {
}
m["spk"] = {
}
m["spl"] = {
varieties = {"North Selepet", "South Selepet"},
}
m["spm"] = {
}
m["spn"] = {
}
m["spo"] = {
other_names = {"Montana Salish", "Salish", "Séliš", "Kalispel-Pend d'oreille", "Kalispel"},
}
m["spp"] = {
other_names = {"Suppire", "Supyire Senoufo", "Supyire Senufo", "Shempire Senoufo", "Shempire"},
}
m["spr"] = {
}
m["sps"] = {
}
m["spt"] = {
}
m["spu"] = {
}
m["spv"] = {
other_names = {"Kosali", "Koshali"},
}
m["spx"] = {
other_names = {"Old Sabellic", "Old Sabellian", "Middle Adriatic", "Central Adriatic"},
}
m["spy"] = {
}
m["sqa"] = {
}
m["sqh"] = {
}
m["sqk"] = {
}
m["sqm"] = {
}
m["sqn"] = {
}
m["sqo"] = {
}
m["sqq"] = {
}
m["sqr"] = {
}
m["sqs"] = {
}
m["sqt"] = {
aliases = {"Socotri"},
}
m["squ"] = {
}
m["sra"] = {
}
m["srb"] = {
}
m["sre"] = {
}
m["srf"] = {
}
m["srg"] = {
}
m["srh"] = {
}
m["sri"] = {
}
m["srk"] = {
aliases = {"Serudung"},
}
m["srl"] = {
varieties = {"Eastern Isirawa", "Western Isirawa"},
}
m["srm"] = {
}
m["srn"] = {
}
m["srq"] = {
}
m["srr"] = {
}
m["srs"] = {
aliases = {"Sarcee", "Sarsi", "Tsuu T'ina", "Tsu T'ina"},
}
m["srt"] = {
}
m["sru"] = {
other_names = {"Paíter", "Suruí-Paíter", "Suruí de Rondônia", "Suruí do Jiparaná"},
}
m["srv"] = {
}
m["srw"] = {
}
m["srx"] = {
}
m["sry"] = {
}
m["srz"] = {
}
m["ssb"] = {
}
m["ssc"] = {
}
m["ssd"] = {
}
m["sse"] = {
}
m["ssf"] = {
other_names = {"Sao"},
}
m["ssg"] = {
}
m["ssh"] = {
}
m["ssi"] = {
other_names = {"Bhilki"},
}
m["ssj"] = {
}
m["ssk"] = {
}
m["ssl"] = {
}
m["ssm"] = {
}
m["sso"] = {
}
m["ssp"] = {
}
m["ssq"] = {
}
m["ssr"] = {
other_names = {"Swiss French Sign Language"},
}
m["sss"] = {
}
m["sst"] = {
varieties = {"Dinga", "Gunangi", {"Kebai", "Kebai (Sinasina)"}, {"Kere", "Kere (Sinasina)"}, "Kondo", "Nimai",
"Tabare"},
}
m["ssu"] = {
}
m["ssv"] = {
}
m["ssx"] = {
}
m["ssy"] = {
}
m["ssz"] = {
}
m["stb"] = {
}
m["std"] = {
}
m["ste"] = {
}
m["stf"] = {
}
m["stg"] = {
}
m["sth"] = {
other_names = {"Cant"},
}
m["sti"] = {
}
m["stj"] = {
}
m["stk"] = {
}
m["stm"] = {
}
m["stn"] = {
}
m["sto"] = {
}
m["stp"] = {
}
m["stq"] = {
other_names = {"East Frisian", "Eastern Frisian"}, -- Saterland F is a dialect of East F; see [[WT:T:ASTQ]]
}
m["str"] = {
}
m["sts"] = {
}
m["stt"] = {
}
m["stu"] = {
}
m["stv"] = {
}
m["stw"] = {
}
m["sty"] = {
}
m["sua"] = {
}
m["sub"] = {
}
m["suc"] = {
}
m["sue"] = {
}
m["sug"] = {
}
m["sui"] = {
}
m["suk"] = {
}
m["suo"] = {
aliases = {"Bouni-Bobe", -- Glottolog
"Sumo"}, -- alternative name in Wikipedia
varieties = {"Bobe", "Bouni"}, -- per Glottolog
}
m["suq"] = {
}
m["sur"] = {
other_names = {"Sura", "Mupun"},
}
m["sus"] = {
}
m["sut"] = {
}
m["suv"] = {
}
m["suw"] = {
}
m["sux"] = {
}
m["suy"] = {
}
m["suz"] = {
}
m["sva"] = {
}
m["svb"] = {
}
m["svc"] = {
}
m["sve"] = {
}
m["svk"] = {
}
m["svm"] = {
aliases = {"Slavo-molisano", "Molise Slavic", "Molise Croatian"},
}
m["svs"] = {
pseudo_families = "paa",
}
m["svx"] = {
}
m["swb"] = {
}
m["swf"] = {
}
m["swg"] = {
}
m["swi"] = {
aliases = {"Ai Sui", "Shui", "Sui Li", "Suipo"},
}
m["swj"] = {
}
m["swl"] = {
}
m["swm"] = {
}
m["swn"] = {
other_names = {"Sawknah", "Fezzan", "Fogaha"},
}
m["swo"] = {
}
m["swp"] = {
}
m["swq"] = {
}
m["swr"] = {
}
m["sws"] = {
}
m["swt"] = {
varieties = {"Lalamana", "Lona", "Nuclear Sawila", "Salimana", "Sileba"},
}
m["swu"] = {
}
m["sww"] = {
}
m["swx"] = {
other_names = {"Zuruahá", "Suruaha", "Suruwaha", "Zuruaha", "Índios do Coxodoá"},
}
m["swy"] = {
}
m["sxb"] = {
}
m["sxc"] = {
}
m["sxe"] = {
}
m["sxg"] = {
other_names = {"Shuhi", "Xumi"},
}
m["sxk"] = {
}
m["sxl"] = {
other_names = {"Selian"},
}
m["sxm"] = {
}
m["sxn"] = {
}
m["sxo"] = {
}
m["sxr"] = {
}
m["sxs"] = {
}
-- "sxu" "Upper Saxon" IS SUBSUMED INTO "gmw-ecg" "East Central German"
m["sxw"] = {
}
m["sya"] = {
}
m["syb"] = {
}
m["syc"] = {
}
m["syi"] = {
}
m["syk"] = {
}
m["syl"] = {
aliases = {"Sylhetti", "Sileti", "Siloti", "Syloti", "Syloty"}
}
m["sym"] = {
}
m["syn"] = {
}
m["syo"] = {
}
m["sys"] = {
}
m["syw"] = {
aliases = {"Syuba"},
}
m["syx"] = {
other_names = {"Shamay", "Samayi", "Samay", "Shamayi"},
}
m["syy"] = {
}
m["sza"] = {
}
m["szb"] = {
varieties = {"Apmisibil", "Nuclear Ngalum", "Sibil"},
}
m["szc"] = {
}
m["szd"] = {
}
m["sze"] = {
}
m["szg"] = {
}
m["szl"] = {
aliases = {"Upper Silesian", "Silesian Polish", "Upper Silesian Polish"},
}
m["szn"] = {
}
m["szp"] = {
other_names = {"Inanwatan"},
}
m["szv"] = {
other_names = {"Isu", "Isu (Fako Division)", "Isuwu", "Suwu", "Subu"},
}
m["szw"] = {
other_names = {"Weda", "Weda-Sawai", "Kobe", "Faya-Mafa", "Messa-Dote"},
}
m["szy"] = {
}
return m
sb9mr4edjax9m9vqnxuuvf9p7zpvlqm
Module:module categorization
828
6853
235476
231499
2026-04-15T18:57:23Z
en>Surjection
0
Changed protection settings for "[[Module:module categorization]]" ([Edit=Allow only autopatrollers] (indefinite) [Move=Allow only autopatrollers] (indefinite))
235476
Scribunto
text/plain
local export = {}
local put_module = "Module:parse utilities"
local rsplit = mw.text.split
local rfind = mw.ustring.find
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local keyword_to_module_type = {
common = "Language-specific utility",
utilities = "Language-specific utility",
headword = "Headword-line",
translit = "Transliteration",
infl = "Inflection",
inflection = "Inflection",
decl = "Inflection",
declension = "Inflection",
adecl = "Inflection",
conj = "Inflection",
conjugation = "Inflection",
noun = "Inflection",
nouns = "Inflection",
pronoun = "Inflection",
pronouns = "Inflection",
verb = "Inflection",
verbs = "Inflection",
adjective = "Inflection",
adjectives = "Inflection",
adj = "Inflection",
nominal = "Inflection",
nominals = "Inflection",
pron = "Pronunciation",
pronun = "Pronunciation",
pronunc = "Pronunciation",
pronunciation = "Pronunciation",
IPA = "Pronunciation",
stripdiacritics = "Diacritic-stripping",
sortkey = "Sortkey-generating",
}
-- If a module type is here, we will generate a lang-specific module-type category such as
-- [[:Category:Pali inflection modules]].
local module_type_generates_lang_specific_cat = {
["Inflection"] = true,
["Data"] = true,
["Testcase"] = true,
}
-- If a module type is here, we will generate a lang-specific module-type category such as
-- [[:Category:Pali inflection modules]]. The value is a module that returns a function that fetches all the
-- languages that use a given module for transliteration/diacritic-stripping/sortkey generation.
local languages_from_module_name = {
["Transliteration"] = "Module:languages/byTranslitModule",
["Transliteration testcase"] = "Module:languages/byTranslitModule",
["Diacritic-stripping"] = "Module:languages/byStripDiacriticsModule",
["Sortkey-generating"] = "Module:languages/bySortkeyModule",
}
local module_type_patterns = {
{"/data%f[-/%z]", "Data"},
{"/testcases%f[-/%z]", function(typ)
if typ == "Pronunciation" then
return "Pronunciation testcase"
elseif typ == "Transliteration" then
return "Transliteration testcase"
else
return "Testcase"
end
end},
}
-- Split an argument on comma, but not comma followed by whitespace.
local function split_on_comma(val)
if val:find(",%s") then
return require(put_module).split_on_comma(val)
else
return rsplit(val, ",")
end
end
local function get_lang_or_script(code)
return code == "-" and code or
require("Module:languages").getByCode(code, nil, "allow etym") or
require("Module:languages").getByCode(code .. "-pro", nil, "allow etym") or
require("Module:scripts").getByCode(code)
end
local function obj_code(obj)
if obj == "-" then
return obj
end
return obj:getCode()
end
local function infer_lang_or_script_code(name)
local hyphen_parts = rsplit(name, "%-")
for i = #hyphen_parts - 1, 1, -1 do
local code = table.concat(hyphen_parts, "-", 1, i)
local obj = get_lang_or_script(code)
if obj then
local rest = table.concat(hyphen_parts, "-", i + 1)
return obj, rest
end
end
return nil, nil
end
local function infer_lang_and_script_codes(name)
local objs = {}
while true do
local obj, rest = infer_lang_or_script_code(name)
if not obj then
return objs, name
end
if #objs > 0 and obj:getCode() == "to" then
-- skip 'to' in e.g. [[Module:ks-Arab-to-Deva-translit]]; it's not Tongan
else
table.insert(objs, obj)
end
name = rest
end
end
--[==[
Main entry point. Can be called from Lua or another module.
`return_raw` set to true makes function return a table of categories with {"[[Category:"} and {"]]"}
stripped away. It is used by [[Module:documentation]].
]==]
function export.categorize(frame, return_raw, noerror)
local categories = {}
local function insert_cat(cat, sortkey)
for _, existing_cat in ipairs(categories) do
if existing_cat.name == cat then
return
end
end
table.insert(categories, {name = cat, sort = sortkey})
end
local pagename
if frame.args[1] then
pagename = frame.args[1]
end
local args
if frame.args.is_template then
local params = {
[1] = {}, -- comma-separated list of languages; by default, inferred from module name
["type"] = {},
[2] = {alias_of = "type"},
["pagename"] = {}, -- for testing
["return_cats"] = {type = "boolean"}, -- for testing
}
local parent_args = frame:getParent().args
args = require("Module:parameters").process(parent_args, params)
else
args = {}
end
pagename = pagename or args.pagename
local title
if pagename then
title = mw.title.new(pagename, 'Module')
else
title = mw.title.getCurrentTitle()
-- Fuckme, sometimes this function is called with a faked frame and a title with the namespace already chopped out,
-- so this test cannot be done in that case.
if title.nsText ~= "Module" then
error(("This template should only be used in the Module namespace, not on page '%s'."):format(title.fullText))
end
pagename = title.fullText
end
local subpage = title.subpageText
local null_return_value = return_raw and {} or ""
-- To ensure no categories are added on documentation pages.
if subpage == "documentation" then
return null_return_value
end
local root_pagename
if subpage ~= pagename then
root_pagename = title.rootText
else
root_pagename = pagename
end
root_pagename = root_pagename:gsub("^Module:", "")
-- Take the module type(s) from type= if given, or infer from the pagename.
local module_types
if args.type then
module_types = {}
local module_type_specs = split_on_comma(args.type)
for _, spec in ipairs(module_type_specs) do
local modtype, sortkey = spec:match("^(.-):(.*)$")
modtype = modtype or spec
sortkey = sortkey and sortkey:gsub("_", " ") or nil
table.insert(module_types, {type = modtype, sort = sortkey})
end
else
local module_type_keyword = root_pagename:match("[-%a]+[- ]([^/]+)%f[/%z]")
if not module_type_keyword then
if noerror then
return null_return_value
else
error(("Could not extract module type from root pagename '%s'"):format(root_pagename))
end
end
local module_type = keyword_to_module_type[module_type_keyword]
if not module_type then
if noerror then
return null_return_value
else
error(("Did not recognize inferred module-type keyword '%s' from root pagename '%s'"):format(
module_type_keyword, root_pagename))
end
end
module_types = {{type = module_type}}
end
-- Look for additional module type(s) inferred by pattern.
for _, pattern_spec in ipairs(module_type_patterns) do
local pattern, inferred_type = unpack(pattern_spec)
if rfind(pagename, pattern) then
local function insert_module_type(typ)
require("Module:table").insertIfNot(module_types, typ, {key = function(obj) return obj.type end})
end
if type(inferred_type) == "string" then
insert_module_type({type = inferred_type})
else
local addl_types = {}
for _, typ in ipairs(module_types) do
table.insert(addl_types, {type = inferred_type(typ.type), sort = typ.sort})
end
for _, typ in ipairs(addl_types) do
insert_module_type(typ)
end
end
end
end
-- If 1= specified, take the languages/scripts directly from there. Otherwise, (a) try to extract one or more
-- languages/scripts from the pagename (e.g. [[Module:uk-be-headword]] -> Ukrainian and Belarusian (languages);
-- [[Module:bho-Kthi-translit]] -> Bhojpuri (language) and Kaithi (script); [[Module:Deva-Kthi-translit]] ->
-- Devanagari and Kaithi (scripts)); and (b) if the specified or inferred module type(s) contain a type listed in
-- languages_from_module_name[], use the function referenced there to extract additional languages (i.e. all the
-- languages that use the module we are processing).
local inferred_objs
if args[1] then
inferred_objs = {}
for _, code in ipairs(rsplit(args[1], ",")) do
-- We need to have an indicator of families because we allow bare family codes to stand for proto-languages.
if code:find("^fam:") then
code = code:gsub("^fam:", "")
local family = require("Module:families").getByCode(code) or
error(("Unrecognized family code '%s' in [[Module:module categorization]]"):format(code))
local descendants = family:getDescendantCodes()
for _, desc in ipairs(descendants) do
local obj = get_lang_or_script(desc)
if obj then
-- make sure we skip families without proto-languages
table.insert(inferred_objs, obj)
end
end
else
local obj = get_lang_or_script(code)
if not obj then
error(("Unrecognized language or script code '%s'"):format(code))
end
table.insert(inferred_objs, obj)
end
end
else
inferred_objs = infer_lang_and_script_codes(root_pagename)
for _, module_type in ipairs(module_types) do
local languages_extractor = languages_from_module_name[module_type.type]
if languages_extractor then
local langs = require(languages_extractor)(root_pagename)
if langs then
for _, obj in ipairs(langs) do
require("Module:table").insertIfNot(inferred_objs, obj, {key = obj_code})
end
end
end
end
if #inferred_objs == 0 then
if noerror then
return null_return_value
else
error(("Could not infer any languages or scripts from root pagename '%s'"):format(root_pagename))
end
end
end
if pagename:find("^Module:User:") then
insert_cat("User sandbox modules")
elseif pagename:find("/sandbox") then
insert_cat("Sandbox modules")
else
for _, module_type in ipairs(module_types) do
for _, obj in ipairs(inferred_objs) do
local function insert_overall_module_type_cat(sortkey)
if module_type.type ~= "-" then
insert_cat(module_type.type .. " modules", module_type.sort or sortkey)
end
end
if obj == "-" then
insert_overall_module_type_cat()
else
if obj:hasType("script") and module_type.type ~= "-" then
insert_cat(module_type.type .. " modules by script", obj:getCanonicalName())
end
local function construct_lang_or_sc_cat(obj, suffix)
local prefix
if obj:hasType("language") then
prefix = obj:getFullName()
else
prefix = obj:getCategoryName()
end
return prefix .. " " .. suffix
end
insert_cat(construct_lang_or_sc_cat(obj, "modules"), module_type.type)
insert_overall_module_type_cat(obj:getCanonicalName())
if module_type_generates_lang_specific_cat[module_type.type] then
insert_cat(construct_lang_or_sc_cat(obj, mw.getContentLanguage():lcfirst(module_type.type) ..
" modules"))
end
end
end
end
end
for i, catspec in ipairs(categories) do
if catspec.sort then
categories[i] = ("%s|%s"):format(catspec.name, catspec.sort)
else
categories[i] = catspec.name
end
end
if args.return_cats then
return table.concat(categories, ",")
elseif return_raw then
return categories
else
for i, cat in ipairs(categories) do
categories[i] = "[[Category:" .. cat .. "]]"
end
return table.concat(categories)
end
end
--[==[Table used in the documentation to {{tl|module cat}}.]==]
function export.keyword_to_module_type_table()
local parts = {}
local function ins(text)
table.insert(parts, text)
end
ins('{|class="wikitable"')
ins("! Keyword !! Inferred module type")
local keywords = {}
for k, v in pairs(keyword_to_module_type) do
table.insert(keywords, k)
end
table.sort(keywords)
for _, keyword in ipairs(keywords) do
ins("|-")
ins(("| <code>%s</code> || <code>%s</code>"):format(keyword, keyword_to_module_type[keyword]))
end
ins("|}")
return table.concat(parts, "\n")
end
return export
49kgokr598jhf8kb74maya3v6r032gc
235477
235476
2026-06-02T11:08:56Z
Lee
19
[[:en:Module:module_categorization]] වෙතින් එක් සංශෝධනයක්
235476
Scribunto
text/plain
local export = {}
local put_module = "Module:parse utilities"
local rsplit = mw.text.split
local rfind = mw.ustring.find
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local keyword_to_module_type = {
common = "Language-specific utility",
utilities = "Language-specific utility",
headword = "Headword-line",
translit = "Transliteration",
infl = "Inflection",
inflection = "Inflection",
decl = "Inflection",
declension = "Inflection",
adecl = "Inflection",
conj = "Inflection",
conjugation = "Inflection",
noun = "Inflection",
nouns = "Inflection",
pronoun = "Inflection",
pronouns = "Inflection",
verb = "Inflection",
verbs = "Inflection",
adjective = "Inflection",
adjectives = "Inflection",
adj = "Inflection",
nominal = "Inflection",
nominals = "Inflection",
pron = "Pronunciation",
pronun = "Pronunciation",
pronunc = "Pronunciation",
pronunciation = "Pronunciation",
IPA = "Pronunciation",
stripdiacritics = "Diacritic-stripping",
sortkey = "Sortkey-generating",
}
-- If a module type is here, we will generate a lang-specific module-type category such as
-- [[:Category:Pali inflection modules]].
local module_type_generates_lang_specific_cat = {
["Inflection"] = true,
["Data"] = true,
["Testcase"] = true,
}
-- If a module type is here, we will generate a lang-specific module-type category such as
-- [[:Category:Pali inflection modules]]. The value is a module that returns a function that fetches all the
-- languages that use a given module for transliteration/diacritic-stripping/sortkey generation.
local languages_from_module_name = {
["Transliteration"] = "Module:languages/byTranslitModule",
["Transliteration testcase"] = "Module:languages/byTranslitModule",
["Diacritic-stripping"] = "Module:languages/byStripDiacriticsModule",
["Sortkey-generating"] = "Module:languages/bySortkeyModule",
}
local module_type_patterns = {
{"/data%f[-/%z]", "Data"},
{"/testcases%f[-/%z]", function(typ)
if typ == "Pronunciation" then
return "Pronunciation testcase"
elseif typ == "Transliteration" then
return "Transliteration testcase"
else
return "Testcase"
end
end},
}
-- Split an argument on comma, but not comma followed by whitespace.
local function split_on_comma(val)
if val:find(",%s") then
return require(put_module).split_on_comma(val)
else
return rsplit(val, ",")
end
end
local function get_lang_or_script(code)
return code == "-" and code or
require("Module:languages").getByCode(code, nil, "allow etym") or
require("Module:languages").getByCode(code .. "-pro", nil, "allow etym") or
require("Module:scripts").getByCode(code)
end
local function obj_code(obj)
if obj == "-" then
return obj
end
return obj:getCode()
end
local function infer_lang_or_script_code(name)
local hyphen_parts = rsplit(name, "%-")
for i = #hyphen_parts - 1, 1, -1 do
local code = table.concat(hyphen_parts, "-", 1, i)
local obj = get_lang_or_script(code)
if obj then
local rest = table.concat(hyphen_parts, "-", i + 1)
return obj, rest
end
end
return nil, nil
end
local function infer_lang_and_script_codes(name)
local objs = {}
while true do
local obj, rest = infer_lang_or_script_code(name)
if not obj then
return objs, name
end
if #objs > 0 and obj:getCode() == "to" then
-- skip 'to' in e.g. [[Module:ks-Arab-to-Deva-translit]]; it's not Tongan
else
table.insert(objs, obj)
end
name = rest
end
end
--[==[
Main entry point. Can be called from Lua or another module.
`return_raw` set to true makes function return a table of categories with {"[[Category:"} and {"]]"}
stripped away. It is used by [[Module:documentation]].
]==]
function export.categorize(frame, return_raw, noerror)
local categories = {}
local function insert_cat(cat, sortkey)
for _, existing_cat in ipairs(categories) do
if existing_cat.name == cat then
return
end
end
table.insert(categories, {name = cat, sort = sortkey})
end
local pagename
if frame.args[1] then
pagename = frame.args[1]
end
local args
if frame.args.is_template then
local params = {
[1] = {}, -- comma-separated list of languages; by default, inferred from module name
["type"] = {},
[2] = {alias_of = "type"},
["pagename"] = {}, -- for testing
["return_cats"] = {type = "boolean"}, -- for testing
}
local parent_args = frame:getParent().args
args = require("Module:parameters").process(parent_args, params)
else
args = {}
end
pagename = pagename or args.pagename
local title
if pagename then
title = mw.title.new(pagename, 'Module')
else
title = mw.title.getCurrentTitle()
-- Fuckme, sometimes this function is called with a faked frame and a title with the namespace already chopped out,
-- so this test cannot be done in that case.
if title.nsText ~= "Module" then
error(("This template should only be used in the Module namespace, not on page '%s'."):format(title.fullText))
end
pagename = title.fullText
end
local subpage = title.subpageText
local null_return_value = return_raw and {} or ""
-- To ensure no categories are added on documentation pages.
if subpage == "documentation" then
return null_return_value
end
local root_pagename
if subpage ~= pagename then
root_pagename = title.rootText
else
root_pagename = pagename
end
root_pagename = root_pagename:gsub("^Module:", "")
-- Take the module type(s) from type= if given, or infer from the pagename.
local module_types
if args.type then
module_types = {}
local module_type_specs = split_on_comma(args.type)
for _, spec in ipairs(module_type_specs) do
local modtype, sortkey = spec:match("^(.-):(.*)$")
modtype = modtype or spec
sortkey = sortkey and sortkey:gsub("_", " ") or nil
table.insert(module_types, {type = modtype, sort = sortkey})
end
else
local module_type_keyword = root_pagename:match("[-%a]+[- ]([^/]+)%f[/%z]")
if not module_type_keyword then
if noerror then
return null_return_value
else
error(("Could not extract module type from root pagename '%s'"):format(root_pagename))
end
end
local module_type = keyword_to_module_type[module_type_keyword]
if not module_type then
if noerror then
return null_return_value
else
error(("Did not recognize inferred module-type keyword '%s' from root pagename '%s'"):format(
module_type_keyword, root_pagename))
end
end
module_types = {{type = module_type}}
end
-- Look for additional module type(s) inferred by pattern.
for _, pattern_spec in ipairs(module_type_patterns) do
local pattern, inferred_type = unpack(pattern_spec)
if rfind(pagename, pattern) then
local function insert_module_type(typ)
require("Module:table").insertIfNot(module_types, typ, {key = function(obj) return obj.type end})
end
if type(inferred_type) == "string" then
insert_module_type({type = inferred_type})
else
local addl_types = {}
for _, typ in ipairs(module_types) do
table.insert(addl_types, {type = inferred_type(typ.type), sort = typ.sort})
end
for _, typ in ipairs(addl_types) do
insert_module_type(typ)
end
end
end
end
-- If 1= specified, take the languages/scripts directly from there. Otherwise, (a) try to extract one or more
-- languages/scripts from the pagename (e.g. [[Module:uk-be-headword]] -> Ukrainian and Belarusian (languages);
-- [[Module:bho-Kthi-translit]] -> Bhojpuri (language) and Kaithi (script); [[Module:Deva-Kthi-translit]] ->
-- Devanagari and Kaithi (scripts)); and (b) if the specified or inferred module type(s) contain a type listed in
-- languages_from_module_name[], use the function referenced there to extract additional languages (i.e. all the
-- languages that use the module we are processing).
local inferred_objs
if args[1] then
inferred_objs = {}
for _, code in ipairs(rsplit(args[1], ",")) do
-- We need to have an indicator of families because we allow bare family codes to stand for proto-languages.
if code:find("^fam:") then
code = code:gsub("^fam:", "")
local family = require("Module:families").getByCode(code) or
error(("Unrecognized family code '%s' in [[Module:module categorization]]"):format(code))
local descendants = family:getDescendantCodes()
for _, desc in ipairs(descendants) do
local obj = get_lang_or_script(desc)
if obj then
-- make sure we skip families without proto-languages
table.insert(inferred_objs, obj)
end
end
else
local obj = get_lang_or_script(code)
if not obj then
error(("Unrecognized language or script code '%s'"):format(code))
end
table.insert(inferred_objs, obj)
end
end
else
inferred_objs = infer_lang_and_script_codes(root_pagename)
for _, module_type in ipairs(module_types) do
local languages_extractor = languages_from_module_name[module_type.type]
if languages_extractor then
local langs = require(languages_extractor)(root_pagename)
if langs then
for _, obj in ipairs(langs) do
require("Module:table").insertIfNot(inferred_objs, obj, {key = obj_code})
end
end
end
end
if #inferred_objs == 0 then
if noerror then
return null_return_value
else
error(("Could not infer any languages or scripts from root pagename '%s'"):format(root_pagename))
end
end
end
if pagename:find("^Module:User:") then
insert_cat("User sandbox modules")
elseif pagename:find("/sandbox") then
insert_cat("Sandbox modules")
else
for _, module_type in ipairs(module_types) do
for _, obj in ipairs(inferred_objs) do
local function insert_overall_module_type_cat(sortkey)
if module_type.type ~= "-" then
insert_cat(module_type.type .. " modules", module_type.sort or sortkey)
end
end
if obj == "-" then
insert_overall_module_type_cat()
else
if obj:hasType("script") and module_type.type ~= "-" then
insert_cat(module_type.type .. " modules by script", obj:getCanonicalName())
end
local function construct_lang_or_sc_cat(obj, suffix)
local prefix
if obj:hasType("language") then
prefix = obj:getFullName()
else
prefix = obj:getCategoryName()
end
return prefix .. " " .. suffix
end
insert_cat(construct_lang_or_sc_cat(obj, "modules"), module_type.type)
insert_overall_module_type_cat(obj:getCanonicalName())
if module_type_generates_lang_specific_cat[module_type.type] then
insert_cat(construct_lang_or_sc_cat(obj, mw.getContentLanguage():lcfirst(module_type.type) ..
" modules"))
end
end
end
end
end
for i, catspec in ipairs(categories) do
if catspec.sort then
categories[i] = ("%s|%s"):format(catspec.name, catspec.sort)
else
categories[i] = catspec.name
end
end
if args.return_cats then
return table.concat(categories, ",")
elseif return_raw then
return categories
else
for i, cat in ipairs(categories) do
categories[i] = "[[Category:" .. cat .. "]]"
end
return table.concat(categories)
end
end
--[==[Table used in the documentation to {{tl|module cat}}.]==]
function export.keyword_to_module_type_table()
local parts = {}
local function ins(text)
table.insert(parts, text)
end
ins('{|class="wikitable"')
ins("! Keyword !! Inferred module type")
local keywords = {}
for k, v in pairs(keyword_to_module_type) do
table.insert(keywords, k)
end
table.sort(keywords)
for _, keyword in ipairs(keywords) do
ins("|-")
ins(("| <code>%s</code> || <code>%s</code>"):format(keyword, keyword_to_module_type[keyword]))
end
ins("|}")
return table.concat(parts, "\n")
end
return export
49kgokr598jhf8kb74maya3v6r032gc
235478
235477
2026-06-02T11:12:26Z
Lee
19
පැරණි සංස්කරණයකින් ගත් කොටස්...
235478
Scribunto
text/plain
local m_sinhala = require("Module:sinhala")
local export = {}
local put_module = "Module:parse utilities"
local rsplit = mw.text.split
local rfind = mw.ustring.find
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local keyword_to_module_type = {
common = "Language-specific utility",
utilities = "Language-specific utility",
headword = "Headword-line",
translit = "Transliteration",
infl = "Inflection",
inflection = "Inflection",
decl = "Inflection",
declension = "Inflection",
adecl = "Inflection",
conj = "Inflection",
conjugation = "Inflection",
noun = "Inflection",
nouns = "Inflection",
pronoun = "Inflection",
pronouns = "Inflection",
verb = "Inflection",
verbs = "Inflection",
adjective = "Inflection",
adjectives = "Inflection",
adj = "Inflection",
nominal = "Inflection",
nominals = "Inflection",
pron = "Pronunciation",
pronun = "Pronunciation",
pronunc = "Pronunciation",
pronunciation = "Pronunciation",
IPA = "Pronunciation",
stripdiacritics = "Diacritic-stripping",
sortkey = "Sortkey-generating",
}
-- If a module type is here, we will generate a lang-specific module-type category such as
-- [[:Category:Pali inflection modules]].
local module_type_generates_lang_specific_cat = {
["Inflection"] = true,
["Data"] = true,
["Testcase"] = true,
}
-- If a module type is here, we will generate a lang-specific module-type category such as
-- [[:Category:Pali inflection modules]]. The value is a module that returns a function that fetches all the
-- languages that use a given module for transliteration/diacritic-stripping/sortkey generation.
local languages_from_module_name = {
["Transliteration"] = "Module:languages/byTranslitModule",
["Transliteration testcase"] = "Module:languages/byTranslitModule",
["Diacritic-stripping"] = "Module:languages/byStripDiacriticsModule",
["Sortkey-generating"] = "Module:languages/bySortkeyModule",
}
local module_type_patterns = {
{"/data%f[-/%z]", "Data"},
{"/testcases%f[-/%z]", function(typ)
if typ == "Pronunciation" then
return "Pronunciation testcase"
elseif typ == "Transliteration" then
return "Transliteration testcase"
else
return "Testcase"
end
end},
}
-- Split an argument on comma, but not comma followed by whitespace.
local function split_on_comma(val)
if val:find(",%s") then
return require(put_module).split_on_comma(val)
else
return rsplit(val, ",")
end
end
local function get_lang_or_script(code)
return code == "-" and code or
require("Module:languages").getByCode(code, nil, "allow etym") or
require("Module:languages").getByCode(code .. "-pro", nil, "allow etym") or
require("Module:scripts").getByCode(code)
end
local function obj_code(obj)
if obj == "-" then
return obj
end
return obj:getCode()
end
local function infer_lang_or_script_code(name)
local hyphen_parts = rsplit(name, "%-")
for i = #hyphen_parts - 1, 1, -1 do
local code = table.concat(hyphen_parts, "-", 1, i)
local obj = get_lang_or_script(code)
if obj then
local rest = table.concat(hyphen_parts, "-", i + 1)
return obj, rest
end
end
return nil, nil
end
local function infer_lang_and_script_codes(name)
local objs = {}
while true do
local obj, rest = infer_lang_or_script_code(name)
if not obj then
return objs, name
end
if #objs > 0 and obj:getCode() == "to" then
-- skip 'to' in e.g. [[Module:ks-Arab-to-Deva-translit]]; it's not Tongan
else
table.insert(objs, obj)
end
name = rest
end
end
--[==[
Main entry point. Can be called from Lua or another module.
`return_raw` set to true makes function return a table of categories with {"[[Category:"} and {"]]"}
stripped away. It is used by [[Module:documentation]].
]==]
function export.categorize(frame, return_raw, noerror)
local categories = {}
local function insert_cat(cat, sortkey)
for _, existing_cat in ipairs(categories) do
if existing_cat.name == cat then
return
end
end
table.insert(categories, {name = cat, sort = sortkey})
end
local pagename
if frame.args[1] then
pagename = frame.args[1]
end
local args
if frame.args.is_template then
local params = {
[1] = {}, -- comma-separated list of languages; by default, inferred from module name
["type"] = {},
[2] = {alias_of = "type"},
["pagename"] = {}, -- for testing
["return_cats"] = {type = "boolean"}, -- for testing
}
local parent_args = frame:getParent().args
args = require("Module:parameters").process(parent_args, params)
else
args = {}
end
pagename = pagename or args.pagename
local title
if pagename then
title = mw.title.new(pagename, 'Module')
else
title = mw.title.getCurrentTitle()
-- Fuckme, sometimes this function is called with a faked frame and a title with the namespace already chopped out,
-- so this test cannot be done in that case.
if title.nsText ~= "Module" then
error(("This template should only be used in the Module namespace, not on page '%s'."):format(title.fullText))
end
pagename = title.fullText
end
local subpage = title.subpageText
local null_return_value = return_raw and {} or ""
-- To ensure no categories are added on documentation pages.
if subpage == "documentation" then
return null_return_value
end
local root_pagename
if subpage ~= pagename then
root_pagename = title.rootText
else
root_pagename = pagename
end
root_pagename = root_pagename:gsub("^Module:", "")
-- Take the module type(s) from type= if given, or infer from the pagename.
local module_types
if args.type then
module_types = {}
local module_type_specs = split_on_comma(args.type)
for _, spec in ipairs(module_type_specs) do
local modtype, sortkey = spec:match("^(.-):(.*)$")
modtype = modtype or spec
sortkey = sortkey and sortkey:gsub("_", " ") or nil
table.insert(module_types, {type = modtype, sort = sortkey})
end
else
local module_type_keyword = root_pagename:match("[-%a]+[- ]([^/]+)%f[/%z]")
if not module_type_keyword then
if noerror then
return null_return_value
else
error(("Could not extract module type from root pagename '%s'"):format(root_pagename))
end
end
local module_type = keyword_to_module_type[module_type_keyword]
if not module_type then
if noerror then
return null_return_value
else
error(("Did not recognize inferred module-type keyword '%s' from root pagename '%s'"):format(
module_type_keyword, root_pagename))
end
end
module_types = {{type = module_type}}
end
-- Look for additional module type(s) inferred by pattern.
for _, pattern_spec in ipairs(module_type_patterns) do
local pattern, inferred_type = unpack(pattern_spec)
if rfind(pagename, pattern) then
local function insert_module_type(typ)
require("Module:table").insertIfNot(module_types, typ, {key = function(obj) return obj.type end})
end
if type(inferred_type) == "string" then
insert_module_type({type = inferred_type})
else
local addl_types = {}
for _, typ in ipairs(module_types) do
table.insert(addl_types, {type = inferred_type(typ.type), sort = typ.sort})
end
for _, typ in ipairs(addl_types) do
insert_module_type(typ)
end
end
end
end
-- If 1= specified, take the languages/scripts directly from there. Otherwise, (a) try to extract one or more
-- languages/scripts from the pagename (e.g. [[Module:uk-be-headword]] -> Ukrainian and Belarusian (languages);
-- [[Module:bho-Kthi-translit]] -> Bhojpuri (language) and Kaithi (script); [[Module:Deva-Kthi-translit]] ->
-- Devanagari and Kaithi (scripts)); and (b) if the specified or inferred module type(s) contain a type listed in
-- languages_from_module_name[], use the function referenced there to extract additional languages (i.e. all the
-- languages that use the module we are processing).
local inferred_objs
if args[1] then
inferred_objs = {}
for _, code in ipairs(rsplit(args[1], ",")) do
-- We need to have an indicator of families because we allow bare family codes to stand for proto-languages.
if code:find("^fam:") then
code = code:gsub("^fam:", "")
local family = require("Module:families").getByCode(code) or
error(("Unrecognized family code '%s' in [[Module:module categorization]]"):format(code))
local descendants = family:getDescendantCodes()
for _, desc in ipairs(descendants) do
local obj = get_lang_or_script(desc)
if obj then
-- make sure we skip families without proto-languages
table.insert(inferred_objs, obj)
end
end
else
local obj = get_lang_or_script(code)
if not obj then
error(("Unrecognized language or script code '%s'"):format(code))
end
table.insert(inferred_objs, obj)
end
end
else
inferred_objs = infer_lang_and_script_codes(root_pagename)
for _, module_type in ipairs(module_types) do
local languages_extractor = languages_from_module_name[module_type.type]
if languages_extractor then
local langs = require(languages_extractor)(root_pagename)
if langs then
for _, obj in ipairs(langs) do
require("Module:table").insertIfNot(inferred_objs, obj, {key = obj_code})
end
end
end
end
if #inferred_objs == 0 then
if noerror then
return null_return_value
else
error(("Could not infer any languages or scripts from root pagename '%s'"):format(root_pagename))
end
end
end
if pagename:find("^Module:User:") then
insert_cat("User sandbox modules")
elseif pagename:find("/sandbox") then
insert_cat("වැලිපිලි මොඩියුල")
else
for _, module_type in ipairs(module_types) do
for _, obj in ipairs(inferred_objs) do
local function insert_overall_module_type_cat(sortkey)
if module_type.type ~= "-" then
insert_cat(m_sinhala.sinhala_adjective(module_type.type) .. " මොඩියුල", module_type.sort or sortkey)
end
end
if obj == "-" then
insert_overall_module_type_cat()
else
if obj:hasType("script") and module_type.type ~= "-" then
insert_cat("අක්ෂරක්රමය අනුව " .. m_sinhala.sinhala_adjective(module_type.type) .. " මොඩියුල", obj:getCanonicalName())
end
local function construct_lang_or_sc_cat(obj, suffix)
local prefix
local extra = ""
if obj:hasType("language") then
prefix = obj:getFullName()
else
prefix = obj:getCategoryName()
extra = "පිළිබඳ "
end
return prefix .. " " .. extra .. suffix
end
insert_cat(construct_lang_or_sc_cat(obj, "මොඩියුල"), module_type.type)
insert_overall_module_type_cat(obj:getCanonicalName())
if module_type_generates_lang_specific_cat[module_type.type] then
insert_cat(construct_lang_or_sc_cat(obj, m_sinhala.sinhala_adjective(mw.getContentLanguage():lcfirst(module_type.type)) ..
" මොඩියුල"))
end
end
end
end
end
for i, catspec in ipairs(categories) do
if catspec.sort then
categories[i] = ("%s|%s"):format(catspec.name, catspec.sort)
else
categories[i] = catspec.name
end
end
if args.return_cats then
return table.concat(categories, ",")
elseif return_raw then
return categories
else
for i, cat in ipairs(categories) do
categories[i] = "[[Category:" .. cat .. "]]"
end
return table.concat(categories)
end
end
--[==[Table used in the documentation to {{tl|module cat}}.]==]
function export.keyword_to_module_type_table()
local parts = {}
local function ins(text)
table.insert(parts, text)
end
ins('{|class="wikitable"')
ins("! Keyword !! Inferred module type")
local keywords = {}
for k, v in pairs(keyword_to_module_type) do
table.insert(keywords, k)
end
table.sort(keywords)
for _, keyword in ipairs(keywords) do
ins("|-")
ins(("| <code>%s</code> || <code>%s</code>"):format(keyword, keyword_to_module_type[keyword]))
end
ins("|}")
return table.concat(parts, "\n")
end
return export
f9xcqejfjuocr1gx2879yvfqfrs5esd
Module:en-headword
828
7579
235341
235155
2026-06-01T14:42:55Z
Lee
19
235341
Scribunto
text/plain
local m_sinhala = require("Module:sinhala")
local export = {}
local pos_functions = {}
--[==[
Author from 2020 on: mostly Benwing2, with significant contributions from Theknightwho. Based on a prior version by Rua
(by now mostly rewritten), with contributions from Erutuon and others (see history for full attribution).
]==]
local force_cat = false -- for testing; if true, categories appear in non-mainspace pages
local require = require
local require_when_needed = require("Module:require when needed")
local en_utilities_module = "Module:en-utilities"
local headword_utilities_module = "Module:headword utilities"
local headword_module = "Module:headword"
local inflection_utilities_module = "Module:inflection utilities"
local parse_utilities_module = "Module:parse utilities"
local JSON_module = "Module:JSON"
local labels_module = "Module:labels"
local links_module = "Module:links"
local parameters_module = "Module:parameters"
local string_utilities_module = "Module:string utilities"
local table_module = "Module:table"
local utilities_module = "Module:utilities"
local yesno_module = "Module:yesno"
local iut = require_when_needed(inflection_utilities_module)
local put = require_when_needed(parse_utilities_module)
local m_headword_utilities = require_when_needed(headword_utilities_module)
local add_links_to_multiword_term = require_when_needed(headword_utilities_module, "add_links_to_multiword_term")
local add_suffix = require_when_needed(en_utilities_module, "add_suffix")
local apply_link_modifiers = require_when_needed(headword_utilities_module, "apply_link_modifiers")
local concat = table.concat
local deepEquals = require_when_needed(table_module, "deepEquals")
local dump = mw.dumpObject
local format_categories = require_when_needed(utilities_module, "format_categories")
local full_headword = require_when_needed(headword_module, "full_headword")
local get_label_info = require_when_needed(labels_module, "get_label_info")
local get_link_page = require_when_needed(links_module, "get_link_page")
local glossary_link = require_when_needed(headword_utilities_module, "glossary_link")
local insert = table.insert
local insertIfNot = require_when_needed(table_module, "insertIfNot")
local ipairs = ipairs
local is_regular_plural = require_when_needed(en_utilities_module, "is_regular_plural")
local list_to_set = require_when_needed(table_module, "listToSet")
local pairs = pairs
local process_params = require_when_needed(parameters_module, "process")
local remove = table.remove
local remove_links = require_when_needed(links_module, "remove_links")
local replacement_escape = require_when_needed(string_utilities_module, "replacement_escape")
local shallowCopy = require_when_needed(table_module, "shallowCopy")
local singularize = require_when_needed(en_utilities_module, "singularize")
local split = require_when_needed(string_utilities_module, "split")
local toJSON = require_when_needed(JSON_module, "toJSON")
local toNFD = mw.ustring.toNFD
local type = type
local ulen = require_when_needed(string_utilities_module, "len")
local ulower = require_when_needed(string_utilities_module, "lower")
local umatch = require_when_needed(string_utilities_module, "match")
local u = require_when_needed(string_utilities_module, "char")
local ugsub = require_when_needed(string_utilities_module, "gsub")
local lang = require("Module:languages").getByCode("en")
local langname = lang:getCanonicalName()
local list_param = {list = true, disallow_holes = true}
local list_allow_holes = {list = true, allow_holes = true}
local boolean_param = {type = "boolean"}
local function ine(val)
if val == "" then return nil else return val end
end
local function track(page)
require("Module:debug/track")("en-headword/" .. page)
return true
end
------------------------------------------- UTILITY FUNCTIONS ------------------------------------------
-- Parse and return an inflection not requiring additional processing. The raw arguments come from `args[field]`, which
-- is parsed for inline modifiers.
local function parse_inflection(args, field, is_head)
local argfield = field
if type(argfield) == "table" then
argfield = argfield[1]
end
return m_headword_utilities.parse_term_list_with_modifiers {
paramname = field,
forms = args[argfield],
splitchar = ",",
is_head = is_head,
}
end
-- Insert the parsed inflections in `terms` (as parsed by `parse_inflection`) into `data.inflections`, with label
-- `label` and optional accelerator spec `accel`.
local function insert_inflection(data, terms, label, accel, no_label)
for _, termobj in ipairs(terms) do
m_headword_utilities.remove_termobj_field_modifiers(termobj)
end
m_headword_utilities.insert_inflection {
headdata = data,
terms = terms,
label = label,
no_label = no_label,
accel = accel and {form = accel} or nil,
}
end
-- Insert a fixed label `label` into the inflections for `data`. If `originating_term` is supplied, copy the qualifiers,
-- labels and references from it into the fixed label.
local function insert_fixed_inflection(data, label, originating_term)
m_headword_utilities.insert_fixed_inflection {
headdata = data,
originating_term = originating_term,
label = label,
}
end
-- Parse and insert an inflection not requiring additional processing into `data.inflections`. The raw arguments come
-- from `args[field]`, which is parsed for inline modifiers. `label` is the label that the inflections are given;
-- `accel` is the accelerator form, or nil.
local function parse_and_insert_inflection(data, args, field, label, accel)
m_headword_utilities.parse_and_insert_inflection {
headdata = data,
forms = args[field],
paramname = field,
splitchar = ",",
label = label,
accel = accel and {form = accel} or nil,
}
end
-- These functions are used directly in the <> format as well as in the utility functions #2 below.
local function compute_double_last_cons_stem(term)
local last_cons = term:match("([bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ])$")
if not last_cons then
error("Verb stem '" .. term .. "' must end in a consonant to use ++")
end
return term .. last_cons
end
local function compute_plusplus_s_form(term, default_s_form)
if term:find("[szx]$") then
-- regas -> regasses, derez -> derezzes
return compute_double_last_cons_stem(term) .. "es"
else
return default_s_form
end
end
-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
local iparams = {
[1] = true,
}
local iargs = require("Module:parameters").process(frame.args, iparams)
local parargs = frame:getParent().args
local poscat = iargs[1]
local pos_in_1 = not poscat
if pos_in_1 then
poscat = ine(parargs[1]) or
mw.title.getCurrentTitle().fullText == "Template:en-head" and "interjection" or
error("Part of speech must be specified in 1=")
poscat = require(headword_module).canonicalize_pos(poscat)
end
local indexing_poscat = pos_in_1 and "head" or poscat
local params = {
["head"] = list_param,
["id"] = true,
["json"] = boolean_param,
["sort"] = true,
["splithyph"] = boolean_param,
["nosplithyph"] = boolean_param,
["hyphspace"] = boolean_param,
["nolink"] = boolean_param,
["nolinkhead"] = {type = "boolean_param", alias_of = "nolink"},
["suffix"] = boolean_param,
["nosuffix"] = boolean_param,
["nomultiwordcat"] = boolean_param,
["abbr"] = list_param,
["the"] = true,
["def"] = {alias_of = "the"},
["pagename"] = true, -- for testing
}
if pos_in_1 then
params[1] = {required = true} -- required but ignored as already processed above
end
local pos_data = pos_functions[indexing_poscat]
local pos_func
if pos_data then
local pos_params = pos_data.params
if pos_params then
for key, val in pairs(pos_params) do
params[key] = val
end
end
pos_func = pos_data.func
end
local args = process_params(parargs, params)
-- Account for unsupported titles, e.g. 'C|N>K' instead of 'Unsupported titles/C through N to K'.
local pagename = args.pagename or mw.loadData("Module:headword/data").pagename
local user_specified_heads = parse_inflection(args, "head", "is_head")
local heads = user_specified_heads
local autohead
if args.nolink or not pagename:find("[ '%-]") then
autohead = pagename
else
local en_no_split_apostrophe_words = list_to_set {
"one's",
"someone's",
"he's",
"she's",
"it's",
}
local en_include_hyphen_prefixes = list_to_set {
-- We don't include things that are also words even though they are often (perhaps mostly) prefixes, e.g.
-- "be", "counter", "cross", "extra", "half", "mid", "over", "pan", "under".
"acro",
"acousto",
"Afro",
"agro",
"anarcho",
"angio",
"Anglo",
"ante",
"anti",
"arch",
"auto",
"bi",
"bio",
"cis",
"co",
"cryo",
"crypto",
"de",
"demi",
"eco",
"electro",
"Euro",
"ex",
"Greco",
"hemi",
"hydro",
"hyper",
"hypo",
"infra",
"Indo",
"inter",
"intra",
"Judeo",
"macro",
"meta",
"micro",
"mini",
"multi",
"neo",
"neuro",
"non",
"para",
"peri",
"post",
"pre",
"pro",
"proto",
"pseudo",
"re",
"semi",
"sub",
"super",
"trans",
"un",
"vice",
}
local function is_english(term)
local title = mw.title.new(term)
if title and title.exists then
local content = title:getContent()
if content and content:find("==English==\n") then
return true
end
end
return false
end
local function en_split_hyphen_when_space(word)
if not word:find("-", nil, true) then
return nil
end
if args.hyphspace then
return "[[" .. word:gsub("%-+", " ") .. "|" .. word .. "]]"
end
if args.nosplithyph then
return "[[" .. word .. "]]"
end
if not args.splithyph then
local space_word = word:gsub("%-+", " ")
if is_english(space_word) then
return "[[" .. space_word .. "|" .. word .. "]]"
end
if is_english(word) then
return "[[" .. word .. "]]"
end
end
return nil
end
local function en_split_apostrophe(word)
local base = word:match("^(.*)'s$")
if base then
return "[[" .. base .. "]][[-'s|'s]]"
end
-- Only treat final apostrophe as possessive if preceded by something that looks like a plural ending in /z/.
-- In particular we don't want to do it for words like [[truckin']].
base = word:match("^(.*[sxz])'$")
if base then
if base:find("s$") then
local sg = singularize(base)
if is_english(sg) then
return "[[" .. sg .. "|" .. base .. "]][[-'|']]"
end
end
return "[[" .. base .. "]][[-'|']]"
end
return "[[" .. word .. "]]"
end
autohead = add_links_to_multiword_term(pagename, {
split_hyphen_when_space = en_split_hyphen_when_space,
split_apostrophe = en_split_apostrophe,
no_split_apostrophe_words = en_no_split_apostrophe_words,
include_hyphen_prefixes = en_include_hyphen_prefixes,
})
end
if not heads[1] then
heads = {{term = autohead}}
else
for _, headobj in ipairs(heads) do
local head = headobj.term
if head:find("^~") then
head = apply_link_modifiers(autohead, head:sub(2), lang)
headobj.term = head
elseif head:find("^[!?]$") then
-- If explicit head= just consists of ! or ?, add it to the end of the default head.
headobj.term = autohead .. head
end
if head == autohead then
track("redundant-head")
end
end
end
-- handle the=/def=
if args.the == "~" then
local newheads = {}
for _, headobj in ipairs(heads) do
local barehead = shallowCopy(headobj)
insert(newheads, barehead)
headobj.term = "the " .. headobj.term
insert(newheads, headobj)
end
heads = newheads
elseif args.the then
local the = require(yesno_module)(args.the)
if the then
for _, headobj in ipairs(heads) do
headobj.term = "the " .. headobj.term
end
end
end
local data = {
lang = lang,
pos_category = poscat,
categories = {},
heads = heads,
user_specified_heads = user_specified_heads,
-- We use our own splitting algorithm so the redundant head cat will be inaccurate.
no_redundant_head_cat = true,
inflections = {},
nomultiwordcat = args.nomultiwordcat,
sort_key = args.sort,
pagename = pagename,
id = args.id,
force_cat_output = force_cat,
}
local function inscat(cat)
insert(data.categories, langname .. " " .. m_sinhala.sinhala(cat))
end
local is_suffix = false
if args.suffix or not args.nosuffix and pagename:find("^%-") and not pagename:find("^%-%-") and poscat ~= "suffix forms" then
is_suffix = true
data.pos_category = "suffixes"
local singular_poscat = singularize(poscat)
inscat(singular_poscat .. "-forming suffixes")
insert(data.inflections, {label = singular_poscat .. "-forming suffix"})
end
if pos_func then
pos_func(args, data, is_suffix)
end
local extra_categories = {}
if pagename:find("[Qq]") then
-- Check for q not followed by u. We want to exclude things like [[13q deletion syndrome]] and [[BFOQ]] that
-- don't have a lowercase letter on either side, as well as things like [[& seq.]] and [[acq.]] that are
-- abbreviations for words containing a following u.
--
-- Approximate range of combining diacritics; we want to remove them so the checks below for
-- a lowercase letter next to the q aren't tripped up by diacritics on the letter.
local u300 = u(0x0300)
local u36F = u(0x036F)
local pagename_no_diacritics = ugsub(toNFD(pagename), "[" .. u300 .. "-" .. u36F .. "]", "")
if pagename_no_diacritics:find("[Qq][a-tv-z]") or pagename_no_diacritics:find("[a-z]q[^u.]") or
pagename_no_diacritics:find("[a-z]q$") then
inscat("words containing Q not followed by U")
end
end
-- toNFD performs decomposition, so letters that decompose to an ASCII
-- vowel and a diacritic, such as é, are counted as vowels and do not do not
-- need to be included in the pattern.
if not umatch(ulower(toNFD(pagename)), "[aeiouyæœøəªºαεηιουω]") then
inscat("words spelled without vowels")
end
if pagename:find("yre$") then
inscat('words ending in "-yre"')
end
if not pagename:find(" ") and ulen(pagename) >= 25 then
insert(extra_categories, "Long " .. langname .. " words")
end
if pagename:find("^[^aeiou ]*a[^aeiou ]*e[^aeiou ]*i[^aeiou ]*o[^aeiou ]*u[^aeiou ]*$") then
inscat("words that use all vowels in alphabetical order")
end
parse_and_insert_inflection(data, args, "abbr", "abbreviation")
if args.json then
return toJSON(data)
end
return full_headword(data)
.. (extra_categories[1]
and format_categories(extra_categories, lang, args.sort)
or "")
end
local function make_default_comparative(word)
if word == "good" or word == "well" then
return {"better"}
elseif word == "bad" or word == "badly" then
return {"worse"}
elseif word == "far" then
return {"further", "farther"}
else
return {add_suffix(word, "r")}
end
end
local function make_default_superlative(word)
if word == "good" or word == "well" then
return {"best"}
elseif word == "bad" or word == "badly" then
return {"worst"}
elseif word == "far" then
return {"furthest", "farthest"}
else
return {add_suffix(word, "st.superlative")}
end
end
-- This function does the common work between adjectives and adverbs.
local function process_comparative_args(data, args, plpos)
local pagename = data.pagename
local comps = parse_inflection(args, 1)
local sups = parse_inflection(args, "sup")
local outcomps, outsups
if args.componly then
if comps[1] then
error("Can't specify comparatives of comparative-only " .. plpos)
end
insert(data.inflections, {label = glossary_link("comparative") .. " form only"})
insert(data.categories, langname .. " comparative-only " .. plpos)
-- Set to empty list so we don't get any comparatives output, but process superlatives if specified.
outcomps = {}
if not sups[1] then
-- Set to empty list so we don't get any superlatives output unless explicitly given.
outsups = {}
end
elseif args.suponly then
if comps[1] or sups[1] then
error("Can't specify comparatives or superlatives of or superlative-only " .. plpos)
end
insert(data.inflections, {label = glossary_link("superlative") .. " form only"})
insert(data.categories, langname .. " superlative-only " .. plpos)
return
end
-- If the first parameter is ?, then don't show anything, just return.
if comps[1] and comps[1].term == "?" then
if comps[2] then
error("Can't specify additional comparatives along with '?'")
end
if sups[1] then
error("Can't specify superlatives along with '?' for the comparative")
end
return
end
if comps[1] and comps[1].term == "-" then
local hyphencomp = remove(comps, 1) -- Remove the "-" but retain for qualifiers, labels, references
-- Not (generally) comparable; may occasionally have a comparative
if comps[1] then
insert_fixed_inflection(data, "not generally <<comparable>>", hyphencomp)
elseif not sups[1] then
insert_fixed_inflection(data, "not <<comparable>>", hyphencomp)
insert(data.categories, langname .. " uncomparable " .. plpos)
return
else
-- No comparative, but a superlative. insert_inflection() will correctly generate 'no comparative' if we
-- pass in "-" as the value.
outcomps = {hyphencomp}
end
elseif not comps[1] then
comps = {{term = "more"}}
end
if not outcomps then -- not if we set `outcomps` to "-" above or processed a comparative-only term
outcomps = {}
-- Go over each parameter given and create a comparative and superlative form.
for _, compobj in ipairs(comps) do
local comp = compobj.term
if comp == "-" then
error("Comparative of '-' only allowed as first comparative")
end
if comp == "+" then
comp = "+more"
elseif comp == "more" and pagename ~= "many" and pagename ~= "much" then
comp = "+more"
elseif comp == "further" and pagename ~= "far" then
comp = "+further"
elseif comp == "better" and pagename ~= "good" and pagename ~= "well" then
comp = "+better"
elseif comp:find("~") then
comp = comp:gsub("~", replacement_escape(pagename))
end
compobj.origterm = comp
if comp == "+more" then
comp = "more [[" .. pagename .. "]]"
elseif comp == "+further" then
comp = {"further [[" .. pagename .. "]]", "farther [[" .. pagename .. "]]"}
elseif comp == "+better" then
comp = "better [[" .. pagename .. "]]"
elseif comp == "er" then
-- Add -er.
comp = add_suffix(pagename, "r")
elseif comp == "ier" then
if pagename:sub(-1) ~= "y" then
error("Can't specify 'ier' comparative unless the term ends with 'y': " .. pagename)
end
comp = pagename:gsub("e?y$", "ier")
elseif comp:find("^%+") then
local special = m_headword_utilities.get_special_indicator(comp, "noerror")
if special then
comp = m_headword_utilities.handle_multiword(pagename, special, make_default_comparative)
end
end
if type(comp) == "table" and not comp[2] then
comp = comp[1]
end
if type(comp) == "table" then
for i = 1, #comp - 1 do
local outobj = shallowCopy(compobj)
outobj.term = comp[i]
insert(outcomps, outobj)
end
compobj.term = comp[#comp]
insert(outcomps, compobj)
else
compobj.term = comp
insert(outcomps, compobj)
end
end
end
if sups[1] and sups[1].term == "-" then
if sups[2] then
error("Can't specify '-' as superlative followed by further values")
end
-- No superlative. insert_inflection() will correctly generate 'no superlative' if we pass in "-" as the value.
outsups = sups
else
if not sups[1] then
sups = {{term = "+"}}
end
end
-- `outsups` will be set if we set `outsups` to "-" above or processed a comparative-only term without superlatives.
if not outsups then
outsups = {}
local function process_sup(sup, special, supobj, compobj)
if special then
sup = m_headword_utilities.handle_multiword(pagename, special, make_default_superlative)
elseif sup == "-" or sup == "+" then
error(("Internal error: Superlative value of '%s' should have been handled earlier"):format(sup))
elseif sup == "+most" then
sup = "most [[" .. pagename .. "]]"
elseif sup == "+furthest" then
sup = {"furthest [[" .. pagename .. "]]", "farthest [[" .. pagename .. "]]"}
elseif sup == "+best" then
sup = "best [[" .. pagename .. "]]"
elseif sup == "est" then
-- Add -est.
sup = add_suffix(pagename, "st.superlative")
elseif sup == "iest" then
if pagename:sub(-1) ~= "y" then
error("Can't specify 'iest' superlative unless the term ends with 'y': " .. pagename)
end
sup = pagename:gsub("e?y$", "iest")
end
if type(sup) == "table" and not sup[2] then
sup = sup[1]
end
if compobj then
supobj = shallowCopy(supobj)
supobj = m_headword_utilities.combine_termobj_qualifiers_labels(supobj, compobj)
end
if type(sup) == "table" then
for i = 1, #sup - 1 do
local outobj = shallowCopy(supobj)
outobj.term = sup[i]
insert(outsups, outobj)
end
supobj.term = sup[#sup]
insert(outsups, supobj)
else
supobj.term = sup
insert(outsups, supobj)
end
end
for _, supobj in ipairs(sups) do
local sup = supobj.term
if sup == "-" then
error("Superlative of '-' only allowed as first superlative")
end
if sup == "+" then
if not comps[1] then
error("Superlative of '+' can't be specified when there are no comparatives")
end
for _, compobj in ipairs(comps) do
local comp = compobj.origterm
local special
if comp == "+more" then
sup = "+most"
elseif comp == "+further" then
sup = "+furthest"
elseif comp == "+better" then
sup = "+best"
elseif comp == "er" then
sup = "est"
elseif comp == "ier" then
sup = "iest"
else
if comp:find("^%+") then
special = m_headword_utilities.get_special_indicator(comp, "noerror")
end
if not special then
-- If the full comparative was given, then derive the superlative by replacing -er with
-- -est.
if comp:sub(-2) == "er" then
sup = comp:sub(1, -3) .. "est"
else
error(("The superlative cannot be derived automatically from comparative '%s' because it doesn't end in -er"):format(comp))
end
end
end
process_sup(sup, special, supobj, compobj)
end
else
local special = m_headword_utilities.get_special_indicator(sup, "noerror")
-- Do some work here rather than in process_sup() so we don't end up double-processing a term with a '~'
-- in it or a term that happens to be 'most' or similar after substitution of ~ in the comparative.
if not special then
if sup == "most" and pagename ~= "many" and pagename ~= "much" then
sup = "+most"
elseif sup == "furthest" and pagename ~= "far" then
sup = "+furthest"
elseif sup == "best" and pagename ~= "good" and pagename ~= "well" then
sup = "+best"
elseif sup:find("~") then
sup = sup:gsub("~", replacement_escape(pagename))
end
end
process_sup(sup, special, supobj)
end
end
end
insert_inflection(data, outcomps, "<<comparative>>", "comparative")
insert_inflection(data, outsups, "<<superlative>>", "superlative")
end
pos_functions["adjectives"] = {
params = {
[1] = list_param,
["comp_qual"] = {list = "comp\1_qual", allow_holes = true, replaced_by = false,
instead = "use <l:...> or <q:...> inline modifier on the comparative value",
},
["sup"] = list_param,
["sup_qual"] = {list = "sup\1_qual", allow_holes = true, replaced_by = false,
instead = "use <l:...> or <q:...> inline modifier on the superlative value",
},
["componly"] = boolean_param,
["suponly"] = boolean_param,
},
func = function(args, data)
-- Process the comparatives and superlatives.
process_comparative_args(data, args, "adjectives")
end,
}
pos_functions["adverbs"] = {
params = {
[1] = list_param,
["comp_qual"] = {list = "comp\1_qual", allow_holes = true, replaced_by = false,
instead = "use <l:...> or <q:...> inline modifier on the comparative value",
},
["sup"] = list_param,
["sup_qual"] = {list = "sup\1_qual", allow_holes = true, replaced_by = false,
instead = "use <l:...> or <q:...> inline modifier on the superlative value",
},
["componly"] = boolean_param,
["suponly"] = boolean_param,
},
func = function(args, data)
-- Process the comparatives and superlatives.
process_comparative_args(data, args, "adverbs")
end,
}
local function escape(str)
return (str:gsub("\\([:#])", "\\\\%1")
:gsub("[:#]", "\\%0"))
end
local function canonicalize_plural(pl, pagename, pos)
if pl == "+" then
return escape(add_suffix(pagename, "s.plural", pos))
elseif pl == "++" then
return escape(compute_plusplus_s_form(pagename, add_suffix(pagename, "s.plural", pos)))
elseif pl == "*" then
return escape(pagename)
elseif pl == "ies" then
if pagename:sub(-1) == "y" then
return escape(pagename:gsub("e?y$", pl))
end
error("Can't specify 'ies' plural unless the term ends with 'y'.")
elseif pl == "s" or pl == "es" or pl == "'s" then
return escape(pagename .. pl)
end
end
local function do_nouns(args, data, pos)
local pagename = data.pagename
pos = pos or "noun"
local plurals = parse_inflection(args, 1)
local function insert_plurale_tantum_inflections(is_plural_only, originating_label)
if args.sg[1] then
insert_fixed_inflection(data, "normally plural", originating_label)
parse_and_insert_inflection(data, args, "sg", "singular")
elseif is_plural_only then
insert_fixed_inflection(data, "plural only", originating_label)
end
if args.attr[1] then
parse_and_insert_inflection(data, args, "attr", "attributive")
end
end
local function first_pl_term()
return plurals[1] and plurals[1].term or nil
end
if first_pl_term() == "p" then
-- plurale tantum
if plurals[2] then
error("With plurale tantum noun, can't specify more than one plural")
end
data.genders = {"p"} -- this should auto-insert the correct 'pluralia tantum' category
insert_plurale_tantum_inflections("plural only", plurals[1])
return
end
local function inscat(cat)
insert(data.categories, langname .. " " .. m_sinhala.sinhala(cat))
end
local need_default_plural = pos == "noun"
if first_pl_term() == "sp" then
-- construed as singular or plural
sp = remove(plurals, 1) -- Remove the "sp" but retain it for its qualifiers, labels, references
inscat("nouns construed as singular or plural")
data.genders = {"s", "p"} -- this should auto-insert the correct 'pluralia tantum' category
insert_plurale_tantum_inflections(nil, sp)
need_default_plural = false
elseif first_pl_term() == "-" then
-- Uncountable noun; may occasionally have a plural
local hyphpl = remove(plurals, 1) -- Remove the "-" but retain for qualifiers, labels, references
inscat("uncountable nouns")
-- If plural forms were given explicitly, then show "usually"
if plurals[1] then
insert_fixed_inflection(data, "usually <<uncountable>>", hyphpl)
else
insert_fixed_inflection(data, "<<uncountable>>", hyphpl)
end
need_default_plural = false
elseif first_pl_term() == "#" then
-- Usually countable (e.g., "grilled cheese")
local hashpl = remove(plurals, 1) -- Remove the "#" but retain for qualifiers, labels, references
insert_fixed_inflection(data, "usually <<countable>>", hashpl)
inscat("uncountable nouns")
inscat("countable nouns")
-- If no plural was given, add a default one now
if not plurals[1] then
plurals[1] = {term = escape(add_suffix(pagename, "s.plural", pos))}
end
elseif first_pl_term() == "~" then
-- Mixed countable/uncountable noun, always has a plural
local tildepl = remove(plurals, 1) -- Remove the "~" but retain for qualifiers, labels, references
insert_fixed_inflection(data, "<<countable>> and <<uncountable>>", tildepl)
inscat("uncountable nouns")
inscat("countable nouns")
-- If no plural was given, add a default one now
if not plurals[1] then
plurals[1] = {term = escape(add_suffix(pagename, "s.plural", pos))}
end
end
-- Plural is unknown
if first_pl_term() == "?" then
local questionpl = remove(plurals, 1) -- Remove the "?" but retain for qualifiers, labels, references
-- Not desired; see [[Wiktionary:Tea_room/2021/August#"Plural unknown or uncertain"]]
-- insert_fixed_inflection(data, "plural unknown or uncertain", questionpl)
inscat("nouns with unknown or uncertain plurals")
if plurals[1] then
error("Can't specify explicit plurals along with '?' for unknown/uncertain plural")
end
return
end
-- Plural is not attested
if first_pl_term() == "!" then
local exclampl = remove(plurals, 1) -- Remove the "!" but retain for qualifiers, labels, references
insert_fixed_inflection(data, "plural not attested", exclampl)
inscat("nouns with unattested plurals")
if plurals[1] then
error("Can't specify explicit plurals along with '!' for unattested plural")
end
return
end
-- If no plural was given, maybe add a default one, otherwise (when "-" was given or proper noun) return.
if not plurals[1] then
if not need_default_plural then
inscat("uncountable nouns")
return
end
plurals[1] = {term = escape(add_suffix(pagename, "s.plural", pos))}
end
-- There are plural forms to show, so show them.
inscat("countable nouns")
local irregular, indeclinable
for i, pl in ipairs(plurals) do
local canon_pl = canonicalize_plural(pl.term, pagename, pos)
if canon_pl then
pl.term = canon_pl
end
local pl_term = get_link_page(pl.term, lang)
if not (pagename:find(" ") or is_regular_plural(pl_term, pagename)) then
irregular = true
if pl_term == pagename then
indeclinable = true
end
end
end
if irregular then
inscat("nouns with irregular plurals")
end
if indeclinable then
inscat("indeclinable nouns")
end
insert_inflection(data, plurals, "plural", "p")
end
-- Return the parameters to be used for nouns and proper nouns. Currently the same.
local noun_params = {
[1] = list_param,
["pl\1qual"] = {list = true, allow_holes = true, replaced_by = false,
instead = "use <l:...> or <q:...> inline modifier on the plural",
},
-- The following four only used for pluralia tantum (1=p)
["sg"] = list_param,
["attr"] = list_param,
}
pos_functions["nouns"] = {
params = noun_params,
func = do_nouns,
}
pos_functions["proper nouns"] = {
params = noun_params,
func = function(args, data)
return do_nouns(args, data, "proper noun")
end,
}
local function base_default_verb_forms(verb)
return escape(add_suffix(verb, "s.verb")), escape(add_suffix(verb, "ing")), escape(add_suffix(verb, "d"))
end
local function default_verb_forms(verb)
local full_s_form, full_ing_form, full_ed_form = base_default_verb_forms(verb)
if verb:find(" ") then
local first, rest = verb:match("^(.-)( .*)$")
local first_s_form, first_ing_form, first_ed_form = base_default_verb_forms(first)
return full_s_form, full_ing_form, full_ed_form, first_s_form .. rest, first_ing_form .. rest,
first_ed_form .. rest, first, rest
else
return full_s_form, full_ing_form, full_ed_form, nil, nil, nil, nil, nil
end
end
local function compute_double_last_cons_stem_of_split_verb(verb, ending)
local first, rest = verb:match("^(.-)( .*)$")
if not first then
error("Verb '" .. verb .. "' must have a space in it to use **")
end
local last_cons = first:match("([bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ])$")
if not last_cons then
error("First word '" .. first .. "' must end in a consonant to use **")
end
return first .. last_cons .. ending .. rest
end
local function check_non_nil_star_form(form, pagename)
if form == nil then
error("Verb '" .. pagename .. "' must have a space in it to use *, **, *l, *! or *'")
end
return form
end
local function sub_tilde(form, pagename)
if not form then
return nil
end
if form:find("~") then
form = form:gsub("~", replacement_escape(pagename))
end
return form
end
local deprecated_qual_replaced_by_inline_modifier = {
list = true, allow_holes = true, replaced_by = false,
instead = "use an inline modifier <q:...> or <l:...> on the value"
}
pos_functions["verbs"] = {
params = {
[1] = {list = "pres_3sg", disallow_holes = true},
["pres_3sg\1_qual"] = deprecated_qual_replaced_by_inline_modifier,
[2] = {list = "pres_ptc", disallow_holes = true},
["pres_ptc\1_qual"] = deprecated_qual_replaced_by_inline_modifier,
[3] = {list = "past", disallow_holes = true},
["past\1_qual"] = deprecated_qual_replaced_by_inline_modifier,
[4] = {list = "past_ptc", allow_holes = true},
["past_ptc\1_qual"] = deprecated_qual_replaced_by_inline_modifier,
["noautolinkverb"] = boolean_param,
["angle_bracket"] = boolean_param,
},
func = function(args, data)
-- Get parameters
local par1s
local par2s = parse_inflection(args, {2, "pres_ptc"})
local par3s = parse_inflection(args, {3, "past"})
local par4s = parse_inflection(args, {4, "past_ptc"})
local pres_3sgs, pres_ptcs, pasts, past_ptcs
local pagename = data.pagename
------------------------------------------- UTILITY FUNCTIONS #2 ------------------------------------------
-- These functions are used in both in the separate-parameter format and in the override params such as past_ptc2=.
local full_default_s, full_default_ing, full_default_ed, split_default_s, split_default_ing, split_default_ed
local lemma
local function set_lemma_and_default_forms(the_lemma)
lemma = the_lemma
full_default_s, full_default_ing, full_default_ed, split_default_s, split_default_ing, split_default_ed,
lemma_first, lemma_rest = default_verb_forms(the_lemma)
end
local function canonicalize_s_form(form)
if form == "+" then
error("Internal error: Should not see '+' here")
elseif form == "^" then
return full_default_s
elseif form == "*" then
return check_non_nil_star_form(split_default_s, lemma)
elseif form == "++" then
return compute_plusplus_s_form(lemma, full_default_s)
elseif form == "**" then
if lemma:find("^[^ ]*[szx] ") then
return compute_double_last_cons_stem_of_split_verb(lemma, "es")
else
return check_non_nil_star_form(split_default_s, lemma)
end
elseif form == "+!" then
return lemma .. "s"
elseif form == "*!" then
return check_non_nil_star_form(lemma_first) .. "s" .. lemma_rest
elseif form == "+'" then
return lemma .. "'s"
elseif form == "*'" then
return check_non_nil_star_form(lemma_first) .. "'s" .. lemma_rest
elseif form == "+l" then
if lemma:find("[szx]$") then
return {{term = full_default_s, l = {"US"}},
{term = compute_plusplus_s_form(lemma, full_default_s), l = {"UK"}}}
else
return compute_plusplus_s_form(lemma, full_default_s)
end
elseif form == "*l" then
if lemma:find("^[^ ]*[szx] ") then
return {{term = check_non_nil_star_form(split_default_s, lemma), l = {"US"}},
{term = compute_double_last_cons_stem_of_split_verb(lemma, "es"), l = {"UK"}}}
else
return check_non_nil_star_form(split_default_s, lemma)
end
else
return sub_tilde(form, lemma)
end
end
local function canonicalize_ing_form(form)
if form == "+" then
error("Internal error: Should not see '+' here")
elseif form == "^" then
return full_default_ing
elseif form == "*" then
return check_non_nil_star_form(split_default_ing, lemma)
elseif form == "++" then
return compute_double_last_cons_stem(lemma) .. "ing"
elseif form == "**" then
return compute_double_last_cons_stem_of_split_verb(lemma, "ing")
elseif form == "+!" then
return lemma .. "ing"
elseif form == "*!" then
return check_non_nil_star_form(lemma_first) .. "ing" .. lemma_rest
elseif form == "+'" then
return lemma .. "'ing"
elseif form == "*'" then
return check_non_nil_star_form(lemma_first) .. "'ing" .. lemma_rest
elseif form == "+l" then
return {{term = full_default_ing, l = {"US"}},
{term = compute_double_last_cons_stem(lemma) .. "ing", l = {"UK"}}}
elseif form == "*l" then
return {{term = check_non_nil_star_form(split_default_ing, lemma), l = {"US"}},
{term = compute_double_last_cons_stem_of_split_verb(lemma, "ing"), l = {"UK"}}}
else
return sub_tilde(form, lemma)
end
end
local function canonicalize_ed_form(form)
if form == "+" then
error("Internal error: Should not see '+' here")
elseif form == "^" then
return full_default_ed
elseif form == "*" then
return check_non_nil_star_form(split_default_ed, lemma)
elseif form == "++" then
return compute_double_last_cons_stem(lemma) .. "ed"
elseif form == "+!" then
return lemma .. "ed"
elseif form == "*!" then
return check_non_nil_star_form(lemma_first) .. "ed" .. lemma_rest
elseif form == "+'" then
return {{term = lemma .. "'d"}, {term = lemma .. "'ed"}}
elseif form == "*'" then
return {{term = check_non_nil_star_form(lemma_first) .. "'d" .. lemma_rest},
{term = check_non_nil_star_form(lemma_first) .. "'ed" .. lemma_rest}}
elseif form == "**" then
return compute_double_last_cons_stem_of_split_verb(lemma, "ed")
elseif form == "+l" then
return {{term = full_default_ed, l = {"US"}},
{term = compute_double_last_cons_stem(lemma) .. "ed", l = {"UK"}}}
elseif form == "*l" then
return {{term = check_non_nil_star_form(split_default_ed, lemma), l = {"US"}},
{term = compute_double_last_cons_stem_of_split_verb(lemma, "ed"), l = {"UK"}}}
else
return sub_tilde(form, lemma)
end
end
-- FIXME: options should be "+", "*", "++", "**", "+n", "*n", "++n" and "**n", but not "n"
local function canonicalize_en_form(form)
if form == "n" then
track("n4")
return add_suffix(lemma, "n")
end
return canonicalize_ed_form(form)
end
--------------------------------- MAIN PARSING/CONJUGATING CODE --------------------------------
local is_angle_bracket = args.angle_bracket
if is_angle_bracket then
if par2s[1] or par3s[1] or par4s[1] then
error("Can't specify explicit values for 2=, 3= or 4= along with the angle-bracket format")
end
elseif is_angle_bracket == nil and not par2s[1] and not par3s[1] and not par4s[1] and not args[1][2] and
args[1][1] and args[1][1]:find("<") then
if put.term_contains_top_level_html(args[1][1]) then
-- Often, term_contains_top_level_html() returns true on the angle-bracket format, which would
-- make the pcall() below succeed but leave the angle brackets as-is. Check for this and only do the
-- pcall() if term_contains_top_level_html() returns false.
is_angle_bracket = true
else
-- If it's ambiguous whether it's an angle-bracket format or separate params with an inline modifier,
-- try to parse as the latter. If an error occurs, treat as the former.
local ok
ok, par1s = pcall(parse_inflection, args, {1, "pres_3sg"})
if not ok then
par1s = nil
is_angle_bracket = true
end
end
end
if is_angle_bracket then
-------------------------- ANGLE-BRACKET FORMAT --------------------------
-- (0) Expand multiword term with angle brackets just on the first word.
local arg11 = args[1][1]
if arg11:find("^<.*>$") and pagename:find(" ") then
local first, rest = pagename:match("^(.-)( .*)$")
arg11 = first .. arg11 .. rest
end
-- (1) Parse the indicator specs inside of angle brackets.
local function parse_indicator_spec(angle_bracket_spec)
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
local segments = put.parse_balanced_segment_run(inside, "[", "]")
local comma_separated_groups = put.split_alternating_runs(segments, ",")
if #comma_separated_groups > 4 then
error("Too many comma-separated parts in indicator spec, expected at most 4: " ..
angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
error("Extraneous text after bracketed footnotes: '" .. concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
insert(footnotes, separated_group[j])
end
return footnotes
end
local function fetch_specs(comma_separated_group)
if not comma_separated_group then
return {{term = "+"}}
end
local specs = {}
local colon_separated_groups = put.split_alternating_runs(comma_separated_group, ":")
for _, colon_separated_group in ipairs(colon_separated_groups) do
local form = colon_separated_group[1]
if form == "*" or form == "**" or form == "*l" or form == "*!" or form == "*'" then
error("*, **, *l, *! and *' not allowed inside of indicator specs: " .. angle_bracket_spec)
end
if form == "" then
form = "+"
end
local termobj = {
term = form
}
local footnotes = fetch_footnotes(colon_separated_group)
if footnotes then
for _, footnote in ipairs(footnotes) do
m_headword_utilities.add_footnote_to_termobj(termobj, footnote)
end
end
insert(specs, termobj)
end
return specs
end
local s_specs = fetch_specs(comma_separated_groups[1])
local ing_specs = fetch_specs(comma_separated_groups[2])
local ed_specs = fetch_specs(comma_separated_groups[3])
local en_specs = fetch_specs(comma_separated_groups[4])
return {
forms = {},
s_specs = s_specs,
ing_specs = ing_specs,
ed_specs = ed_specs,
en_specs = en_specs,
}
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
}
local alternant_multiword_spec = iut.parse_inflected_text(arg11, parse_props)
-- (2) Check for user-specified brackets; remove any links from the lemma, but remember the original
-- form so we can use it below in the 'lemma_linked' form.
-- Check to see if there are brackets in the pre-text or post-text. If so, use the linked lemma (with the
-- verb autolinked unless noautolinkverb is given). Otherwise, use the default headword algorithm.
local function check_bracket(val)
if val:find("%[%[") then
alternant_multiword_spec.saw_bracket = true
end
end
for _, alternant_or_word_spec in ipairs(alternant_multiword_spec.alternant_or_word_specs) do
check_bracket(alternant_or_word_spec.before_text)
if alternant_or_word_spec.alternants then
for _, multiword_spec in ipairs(alternant_or_word_spec.alternants) do
for _, word_spec in ipairs(multiword_spec.word_specs) do
check_bracket(word_spec.before_text)
end
check_bracket(multiword_spec.post_text)
end
end
end
check_bracket(alternant_multiword_spec.post_text)
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = pagename
end
base.orig_lemma = base.lemma
base.lemma = remove_links(base.lemma)
if args.noautolinkverb or base.orig_lemma:find("%[%[") then
base.linked_lemma = base.orig_lemma
else
base.linked_lemma = "[[" .. base.orig_lemma .. "]]"
end
end)
-- (3) Conjugate the verbs according to the indicator specs parsed above.
local all_verb_slots = {
lemma = "infinitive",
lemma_linked = "infinitive",
s_form = "3|s|pres",
ing_form = "pres|ptcp",
ed_form = "past",
en_form = "past|ptcp",
}
local function conjugate_verb(base)
local function process_specs(slot, specs, canon_func, default_values, default_already_formobj)
local function insert_termobj_into_slot(termobj)
local formobj = m_headword_utilities.convert_termobj_to_formobj(termobj)
-- If the form is -, don't insert any forms, which will result in there being no overall forms
-- (in fact it will be nil). We check for that down below and substitute a single "-" as the
-- form, which in turn gets turned into special labels like "no present participle".
if formobj.form == "-" then
if formobj.footnotes then
error("Unable to preserve footnotes specified on missing form '-': FIXME: " ..
dump(formobj.footnotes))
end
else
iut.insert_form(base.forms, slot, formobj)
end
end
local function canonicalize_and_insert(arg)
local canon_arg = canon_func(arg)
if type(canon_arg) == "string" then
arg.term = canon_arg
insert_termobj_into_slot(arg)
else
for _, canon in ipairs(canon_arg) do
m_headword_utilities.combine_termobj_qualifiers_labels(canon, arg)
insert_termobj_into_slot(canon)
end
end
end
for _, arg in ipairs(specs) do
if arg.term == "+" then
if default_values then -- will be nil if past tense specified as - and no past ptc given
for _, val in ipairs(default_values) do
val = shallowCopy(val)
if default_already_formobj then
local argformobj = m_headword_utilities.convert_termobj_to_formobj(arg)
val.footnotes = iut.combine_footnotes(val.footnotes, argformobj.footnotes)
iut.insert_form(base.forms, slot, val)
else
m_headword_utilities.combine_termobj_qualifiers_labels(val, arg)
canonicalize_and_insert(val)
end
end
end
else
canonicalize_and_insert(arg)
end
end
end
set_lemma_and_default_forms(base.lemma)
local all_part_default_specs = {}
local function process_and_canonicalize_s_form(arg)
local form = arg.term
if form == "+" then
error("Internal error: '+' should have been converted to '^' by now")
end
if form == "*" or form == "**" or form == "*l" or form == "*!" or form == "*'" then
error(("Internal error: '%s' should have already thrown an error"):format(form))
end
if form == "^" or form == "++" or form == "+l" or form == "+!" or form == "+'" then
insert(all_part_default_specs, shallowCopy(arg))
end
return canonicalize_s_form(form)
end
process_specs("s_form", base.s_specs, process_and_canonicalize_s_form, {{term = "^"}})
if not all_part_default_specs[1] then
all_part_default_specs[1] = {term = "^"}
end
process_specs("ing_form", base.ing_specs, function(arg) return canonicalize_ing_form(arg.term) end,
all_part_default_specs)
process_specs("ed_form", base.ed_specs, function(arg) return canonicalize_ed_form(arg.term) end,
all_part_default_specs)
process_specs("en_form", base.en_specs, function(arg) return canonicalize_en_form(arg.term) end,
base.forms.ed_form, "default already formobj")
iut.insert_form(base.forms, "lemma", {form = base.lemma})
-- Add linked version of lemma for use in head=. We write this in a general fashion in case
-- there are multiple lemma forms (which isn't possible currently at this level, although it's
-- possible overall using the ((...,...)) notation).
iut.insert_forms(base.forms, "lemma_linked", iut.map_forms(base.forms.lemma, function(form)
if form == base.lemma and base.linked_lemma:find("%[%[") then
return base.linked_lemma
else
return form
end
end))
end
local inflect_props = {
slot_table = all_verb_slots,
inflect_word_spec = conjugate_verb,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
-- (4) Fetch the forms and put the conjugated lemmas in data.heads if not explicitly given.
local function fetch_termobjs(slot)
local forms = alternant_multiword_spec.forms[slot]
-- See above. This should only occur if the user explicitly used - for a spec.
if not forms or not forms[1] then
return {{term = "-"}}
end
local termobjs = {}
for _, formobj in ipairs(forms) do
insert(termobjs, m_headword_utilities.convert_formobj_to_termobj(formobj))
end
return termobjs
end
pres_3sgs = fetch_termobjs("s_form")
pres_ptcs = fetch_termobjs("ing_form")
pasts = fetch_termobjs("ed_form")
past_ptcs = fetch_termobjs("en_form")
-- Use the "linked" form of the lemma as the head if no head= explicitly given and the user specified
-- brackets in one of the lemmas. Otherwise we use the default headword-linking algorithm.
if not data.user_specified_heads[1] and alternant_multiword_spec.saw_bracket then
data.heads = {}
for _, lemma_obj in ipairs(alternant_multiword_spec.forms.lemma_linked) do
insert(data.heads, m_headword_utilities.convert_formobj_to_termobj(lemma_obj))
end
end
else
-------------------------- SEPARATE-PARAM FORMAT --------------------------
set_lemma_and_default_forms(pagename)
par1s = par1s or parse_inflection(args, {1, "pres_3sg"})
pres_3sgs = {}
pres_ptcs = {}
pasts = {}
past_ptcs = {}
if not par1s[1] then
par1s = {{term = "+"}}
end
if not par2s[1] then
par2s = {{term = "+"}}
end
if not par3s[1] then
par3s = {{term = "+"}}
end
if not par4s[1] then
par4s = {{term = "+"}}
end
local function process_argument(args, dest, canon_func, default_values, default_already_canonicalized)
local function canonicalize_and_insert(arg)
local canon_arg = canon_func(arg)
if type(canon_arg) == "string" then
arg.term = canon_arg
m_headword_utilities.insert_termobj_combining_duplicates(dest, arg)
else
for _, canon in ipairs(canon_arg) do
m_headword_utilities.combine_termobj_qualifiers_labels(canon, arg)
m_headword_utilities.insert_termobj_combining_duplicates(dest, canon)
end
end
end
for _, arg in ipairs(args) do
if arg.term == "+" then
for _, val in ipairs(default_values) do
val = shallowCopy(val)
m_headword_utilities.combine_termobj_qualifiers_labels(val, arg)
if default_already_canonicalized then
m_headword_utilities.insert_termobj_combining_duplicates(dest, val)
else
canonicalize_and_insert(val)
end
end
else
canonicalize_and_insert(arg)
end
end
end
local all_part_default_specs = {}
local function process_and_canonicalize_s_form(arg)
local form = arg.term
if form == "+" then
error("Internal error: '+' should have been converted to '^' by now")
end
if form == "^" or form == "++" or form == "+l" or form == "+!" or form == "+'" or
form == "*" or form == "**" or form == "*l" or form == "*!" or form == "*'" then
insert(all_part_default_specs, shallowCopy(arg))
end
return canonicalize_s_form(form)
end
process_argument(par1s, pres_3sgs, process_and_canonicalize_s_form, {{term = "^"}})
if not all_part_default_specs[1] then
all_part_default_specs[1] = {term = "^"}
end
process_argument(par2s, pres_ptcs, function(arg) return canonicalize_ing_form(arg.term) end,
all_part_default_specs)
process_argument(par3s, pasts, function(arg) return canonicalize_ed_form(arg.term) end,
all_part_default_specs)
process_argument(par4s, past_ptcs, function(arg) return canonicalize_en_form(arg.term) end,
pasts, "default already canonicalized")
end
------------------------------------------- INSERT INFLECTIONS ------------------------------------------
insert_inflection(data, pres_3sgs, "third-person singular simple present", "s-verb-form")
insert_inflection(data, pres_ptcs, "present participle", "ing-form")
if deepEquals(pasts, past_ptcs) then
insert_inflection(data, pasts, "simple past and past participle", "ed-form",
"no simple past or past participle")
else
insert_inflection(data, pasts, "simple past", "spast")
insert_inflection(data, past_ptcs, "past participle", "past|part")
end
if pagename:find(" ") then
-- Check for placeholder "it"
local words = split(pagename, " ")
for _, word in ipairs(words) do
if word == "it" or word == "its" or word == "it's" then
insert(data.categories, langname .. ' terms with placeholder "it"')
break
end
end
-- Check for phrasal verbs
local phrasal_adverbs = list_to_set{
-- NOTE: This should only contain common phrasal adverbs, not random words like [[low]],
-- [[adrift]], etc.
"aback",
"about",
"above",
"across",
"after",
"against",
"ahead",
"along",
"apart",
"around",
"as",
"aside",
"at",
"away",
"back",
"before",
"behind",
"below",
"between",
"beyond",
"by",
"down",
"for",
"forth",
"from",
"in",
"into",
"of",
"off",
"on",
"onto",
"out",
"over",
"past",
"round",
"through",
"to",
"together",
"towards",
"under",
"up",
"upon",
"with",
"without",
}
local allowed_non_adverb_words = list_to_set{
"it",
"one",
"oneself",
"someone",
}
local base = pagename
local seen_adverbs = {}
-- Only consider a verb to be phrasal if it consists of a single base verb followed exclusively by either
-- adverbs from `phrasal_adverbs` or placeholder words from `allowed_non_adverb_words`, where at
-- least one following word is from `phrasal_adverbs` (hence [[can it]] is not a phrasal verb).
while true do
local prev, word = base:match("^(.+) (.-)$")
if not prev then
break
end
if phrasal_adverbs[word] then
insert(seen_adverbs, word)
elseif allowed_non_adverb_words[word] then
-- do nothing
else
break
end
base = prev
end
if not base:find(" ") and seen_adverbs[1] then
insert(data.categories, langname .. " phrasal verbs")
for i = #seen_adverbs, 1, -1 do
insert(data.categories, langname .. ' phrasal verbs formed with "' .. seen_adverbs[i] ..
'"')
end
end
end
end,
}
-----------------------------------------------------------------------------------------
-- Suffix forms --
-----------------------------------------------------------------------------------------
pos_functions["suffix forms"] = {
params = {
[1] = {required = true, list = true, disallow_holes = true},
},
func = function(args, data, is_suffix)
local suffix_type = {}
for _, typ in ipairs(args[1]) do
insert(suffix_type, typ .. "-forming suffix")
end
insert(data.inflections, {label = "non-lemma form of " .. m_table.serialCommaJoin(suffix_type, {conj = "or"})})
end,
}
return export
ig886jlshqn14by72xayyzkb56bq41k
Module:languages/data/2
828
7906
235452
234128
2026-05-31T20:38:30Z
en>Surjection
0
Swedish ø sorted as ö
235452
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
-- Ideally, we want to move these into [[Module:languages/data]], but because (a) it's necessary to use require on that module, and (b) they're only used in this data module, it's less memory-efficient to do that at the moment. If it becomes possible to use mw.loadData, then these should be moved there.
s["de-Latn-sortkey"] = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.ringabove,
from = {"æ", "œ", "ß"},
to = {"ae", "oe", "ss"}
}
s["de-Latn-standardchars"] = "AaÄäBbCcDdEeFfGgHhIiJjKkLlMmNnOoÖöPpQqRrSsẞßTtUuÜüVvWwXxYyZz"
s["ka-stripdiacritics"] = {remove_diacritics = c.circ}
s["no-sortkey"] = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dacute .. c.caron .. c.cedilla,
remove_exceptions = {"å"},
from = {"æ", "ø", "å"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]}
}
s["no-standardchars"] = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÆæØøÅå" .. c.punc
s["sa-Deva-stripdiacritics"] = { -- Don't use remove_diacritics for accent marks, as १ and ३ should also be removed if (and only if) they carry any.
from = {"ॐ", "[१३]?[" .. c.anudatta .. c.udatta .. c.dsvarita .. c.tsvarita .. "]+"},
to = {"ओँ"},
}
s["tg-stripdiacritics"] = {remove_diacritics = c.grave .. c.acute}
s["tk-stripdiacritics"] = {remove_diacritics = c.macron}
local m = {}
m["aa"] = {
"Afar",
27811,
"cus-eas",
"Latn, Ethi",
strip_diacritics = {
Latn = {remove_diacritics = c.acute},
},
}
m["ab"] = {
"Abkhaz",
5111,
"cau-abz",
"Cyrl, Geor, Latn",
translit = {
Cyrl = "ab-translit",
-- Geor translit in [[Module:scripts/data]]
},
override_translit = true,
display_text = {
Cyrl = s["cau-Cyrl-displaytext"]
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.acute,
from = {"^а%-"},
to = {"а"},
},
Latn = s["cau-Latn-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {
"х'ә", -- 3 chars
"гь", "гә", "ӷь", "ҕь", "ӷә", "ҕә", "дә", "ё", "жь", "жә", "ҙә", "ӡә", "ӡ'", "кь", "кә", "қь", "қә", "ҟь", "ҟә", "ҫә", "тә", "ҭә", "ф'", "хь", "хә", "х'", "ҳә", "ць", "цә", "ц'", "ҵә", "ҵ'", "шь", "шә", "џь", -- 2 chars
"ӷ", "ҕ", "ҙ", "ӡ", "қ", "ҟ", "ԥ", "ҧ", "ҫ", "ҭ", "ҳ", "ҵ", "ҷ", "ҽ", "ҿ", "ҩ", "џ", "ә", -- 1 char
"^а",
},
to = {
"х" .. p[4],
"г" .. p[1], "г" .. p[2], "г" .. p[5], "г" .. p[6], "г" .. p[7], "г" .. p[8], "д" .. p[1], "е" .. p[1], "ж" .. p[1], "ж" .. p[2], "з" .. p[2], "з" .. p[4], "з" .. p[5], "к" .. p[1], "к" .. p[2], "к" .. p[4], "к" .. p[5], "к" .. p[7], "к" .. p[8], "с" .. p[2], "т" .. p[1], "т" .. p[3], "ф" .. p[1], "х" .. p[1], "х" .. p[2], "х" .. p[3], "х" .. p[6], "ц" .. p[1], "ц" .. p[2], "ц" .. p[3], "ц" .. p[5], "ц" .. p[6], "ш" .. p[1], "ш" .. p[2], "ы" .. p[3],
"г" .. p[3], "г" .. p[4], "з" .. p[1], "з" .. p[3], "к" .. p[3], "к" .. p[6], "п" .. p[1], "п" .. p[2], "с" .. p[1], "т" .. p[2], "х" .. p[5], "ц" .. p[4], "ч" .. p[1], "ч" .. p[2], "ч" .. p[3], "ы" .. p[1], "ы" .. p[2], "ь" .. p[1],
"",
}
},
},
}
m["ae"] = {
"Avestan",
29572,
"ira-cen",
"Avst, Gujr, Deva",
translit = {
Avst = "Avst-translit"
},
}
m["af"] = {
"Afrikaans",
14196,
"gmw-frk",
"Latn, Arab",
ancestors = "nl",
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.diaer .. c.ringabove .. c.cedilla .. "'",
from = {"['ʼ]n"},
to = {"n" .. p[1]}
}
},
}
m["ak"] = {
"Akan",
28026,
"alv-ctn",
"Latn",
}
m["am"] = {
"Amharic",
28244,
"sem-eth",
"Ethi",
translit = "Ethi-translit",
}
m["an"] = {
"Aragonese",
8765,
"roa-nar",
"Latn",
}
m["ar"] = {
"Arabic",
13955,
"sem-arb",
"Arab, Hebr, Syrc, Brai, Nbat",
translit = {
Arab = "ar-translit"
},
strip_diacritics = {
Arab = "ar-stripdiacritics",
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["as"] = {
"Assamese",
29401,
"inc-bas",
"as-Beng",
ancestors = "inc-mas",
translit = "as-translit",
}
m["av"] = {
"Avar",
29561,
"cau-ava",
"Cyrl, Latn, Arab",
ancestors = "oav",
translit = {
Cyrl = "cau-nec-translit",
Arab = "ar-translit",
},
override_translit = true,
display_text = {
Cyrl = s["cau-Cyrl-displaytext"],
},
strip_diacritics = {
Cyrl = s["cau-Cyrl-stripdiacritics"],
Latn = s["cau-Latn-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {"гъ", "гь", "гӏ", "ё", "кк", "къ", "кь", "кӏ", "лъ", "лӏ", "тӏ", "хх", "хъ", "хь", "хӏ", "цӏ", "чӏ"},
to = {"г" .. p[1], "г" .. p[2], "г" .. p[3], "е" .. p[1], "к" .. p[1], "к" .. p[2], "к" .. p[3], "к" .. p[4], "л" .. p[1], "л" .. p[2], "т" .. p[1], "х" .. p[1], "х" .. p[2], "х" .. p[3], "х" .. p[4], "ц" .. p[1], "ч" .. p[1]}
},
},
}
m["ay"] = {
"Aymara",
4627,
"sai-aym",
"Latn",
}
m["az"] = {
"Azerbaijani",
9292,
"trk-ogz",
"Latn, Cyrl, fa-Arab",
ancestors = "trk-oat",
dotted_dotless_i = true,
strip_diacritics = {
Latn = {
from = {"ʼ"},
to = {"'"},
},
["fa-Arab"] = {
module = "ar-stripdiacritics",
["from"] = {
"ۆ",
"ۇ",
"وْ",
"ڲ",
"ؽ",
},
["to"] = {
"و",
"و",
"و",
"گ",
"ی",
},
},
},
display_text = {
Latn = {
from = {"'"},
to = {"ʼ"}
}
},
sort_key = {
Latn = {
from = {
"i", -- Ensure "i" comes after "ı".
"ç", "ə", "ğ", "x", "ı", "q", "ö", "ş", "ü", "w"
},
to = {
"i" .. p[1],
"c" .. p[1], "e" .. p[1], "g" .. p[1], "h" .. p[1], "i", "k" .. p[1], "o" .. p[1], "s" .. p[1], "u" .. p[1], "z" .. p[1]
}
},
Cyrl = {
from = {"ғ", "ә", "ы", "ј", "ҝ", "ө", "ү", "һ", "ҹ"},
to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "и" .. p[2], "к" .. p[1], "о" .. p[1], "у" .. p[1], "х" .. p[1], "ч" .. p[1]}
},
},
}
m["ba"] = {
"Bashkir",
13389,
"trk-kbu",
"Cyrl",
translit = "ba-translit",
override_translit = true,
sort_key = {
from = {"ғ", "ҙ", "ё", "ҡ", "ң", "ө", "ҫ", "ү", "һ", "ә"},
to = {"г" .. p[1], "д" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "с" .. p[1], "у" .. p[1], "х" .. p[1], "э" .. p[1]}
},
}
m["be"] = {
"Belarusian",
9091,
"zle",
"Cyrl, Latn",
ancestors = "zle-mbe",
translit = {
Cyrl = "be-translit",
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.grave .. c.acute,
},
Latn = {
remove_diacritics = c.grave .. c.acute,
remove_exceptions = {"Ć", "ć", "Ń", "ń", "Ś", "ś", "Ź", "ź"},
},
},
sort_key = {
Cyrl = {
remove_diacritics = c.grave .. c.acute,
from = {"ґ", "ё", "і", "ў"},
to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "у" .. p[1]}
},
Latn = {
remove_diacritics = c.grave .. c.acute,
remove_exceptions = {"Ć", "ć", "Ń", "ń", "Ś", "ś", "Ź", "ź"},
from = {"ć", "č", "dz", "dź", "dž", "ch", "ł", "ń", "ś", "š", "ŭ", "ź", "ž"},
to = {"c" .. p[1], "c" .. p[2], "d" .. p[1], "d" .. p[2], "d" .. p[3], "h" .. p[1], "l" .. p[1], "n" .. p[1], "s" .. p[1], "s" .. p[2], "u" .. p[1], "z" .. p[1], "z" .. p[2]}
},
},
standard_chars = {
Cyrl = "АаБбВвГгДдЕеЁёЖжЗзІіЙйКкЛлМмНнОоПпРрСсТтУуЎўФфХхЦцЧчШшЫыЬьЭэЮюЯя",
Latn = "AaBbCcĆćČčDdEeFfGgHhIiJjKkLlŁłMmNnŃńOoPpRrSsŚśŠšTtUuŬŭVvYyZzŹźŽž",
(c.punc:gsub("'", "")) -- Exclude apostrophe.
},
}
m["bg"] = {
"Bulgarian",
7918,
"zls",
"Cyrl",
ancestors = "cu-bgm",
translit = "bg-translit",
strip_diacritics = {
remove_diacritics = c.grave .. c.acute,
remove_exceptions = {"%f[^%z%s]ѝ%f[%z%s]"},
},
sort_key = {
remove_diacritics = c.grave .. c.acute,
remove_exceptions = {"%f[^%z%s]ѝ%f[%z%s]"},
},
standard_chars = "АаБбВвГгДдЕеЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЬьЮюЯя" .. c.punc,
}
m["bh"] = {
"Bihari",
135305,
"inc-eas",
"Deva",
}
m["bi"] = {
"Bislama",
35452,
"crp",
"Latn",
ancestors = "en",
}
m["bm"] = {
"Bambara",
33243,
"dmn-emn",
"Latn, Nkoo",
sort_key = {
Latn = {
from = {"ɛ", "ɲ", "ŋ", "ɔ"},
to = {"e" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1]}
},
},
}
m["bn"] = {
"Bengali",
9610,
"inc-bas",
"Beng, Newa",
ancestors = "inc-mbn",
translit = {
Beng = "bn-translit"
},
}
m["bo"] = {
"Tibetan",
34271,
"sit-tib",
"Tibt", -- sometimes Deva?
ancestors = "xct",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["br"] = {
"Breton",
12107,
"cel-brs",
"Latn",
ancestors = "xbm",
sort_key = {
from = {"ch", "c['ʼ’]h"},
to = {"c" .. p[1], "c" .. p[2]}
},
}
m["ca"] = {
"Catalan",
7026,
"roa-ocr",
"Latn",
ancestors = "roa-oca",
sort_key = {remove_diacritics = c.grave .. c.acute .. c.diaer .. c.cedilla .. "·"},
standard_chars = "AaÀàBbCcÇçDdEeÉéÈèFfGgHhIiÍíÏïJjLlMmNnOoÓóÒòPpQqRrSsTtUuÚúÜüVvXxYyZz·" .. c.punc,
}
m["ce"] = {
"Chechen",
33350,
"cau-vay",
"Cyrl, Latn, Arab",
translit = {
Cyrl = "cau-nec-translit",
Arab = "ar-translit",
},
override_translit = true,
display_text = {
Cyrl = s["cau-Cyrl-displaytext"]
},
strip_diacritics = {
Cyrl = s["cau-Cyrl-stripdiacritics"],
Latn = s["cau-Latn-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {"аь", "гӏ", "ё", "кх", "къ", "кӏ", "оь", "пӏ", "тӏ", "уь", "хь", "хӏ", "цӏ", "чӏ", "юь", "яь"},
to = {"а" .. p[1], "г" .. p[1], "е" .. p[1], "к" .. p[1], "к" .. p[2], "к" .. p[3], "о" .. p[1], "п" .. p[1], "т" .. p[1], "у" .. p[1], "х" .. p[1], "х" .. p[2], "ц" .. p[1], "ч" .. p[1], "ю" .. p[1], "я" .. p[1]}
},
},
}
m["ch"] = {
"Chamorro",
33262,
"poz",
"Latn",
sort_key = {
remove_diacritics = "'",
from = {"å", "ch", "ñ", "ng"},
to = {"a" .. p[1], "c" .. p[1], "n" .. p[1], "n" .. p[2]}
},
}
m["co"] = {
"Corsican",
33111,
"roa-itr",
"Latn",
sort_key = {
from = {"chj", "ghj", "sc", "sg"},
to = {"c" .. p[1], "g" .. p[1], "s" .. p[1], "s" .. p[2]}
},
standard_chars = "AaÀàBbCcDdEeÈèFfGgHhIiÌìÏïJjLlMmNnOoÒòPpQqRrSsTtUuÙùÜüVvZz" .. c.punc,
}
m["cr"] = {
"Cree",
33390,
"alg",
"Latn, Cans",
translit = {
Cans = "cr-translit"
},
}
m["cs"] = {
"Czech",
9056,
"zlw",
"Latn",
ancestors = "cs-ear",
sort_key = {
from = {"á", "č", "ď", "é", "ě", "ch", "í", "ň", "ó", "ř", "š", "ť", "ú", "ů", "ý", "ž"},
to = {"a" .. p[1], "c" .. p[1], "d" .. p[1], "e" .. p[1], "e" .. p[2], "h" .. p[1], "i" .. p[1], "n" .. p[1], "o" .. p[1], "r" .. p[1], "s" .. p[1], "t" .. p[1], "u" .. p[1], "u" .. p[2], "y" .. p[1], "z" .. p[1]}
},
standard_chars = "AaÁáBbCcČčDdĎďEeÉéĚěFfGgHhIiÍíJjKkLlMmNnŇňOoÓóPpRrŘřSsŠšTtŤťUuÚúŮůVvYyÝýZzŽž" .. c.punc,
}
m["cu"] = {
"Old Church Slavonic",
35499,
"zls",
"Cyrs, Glag, Zname",
translit = {
Cyrs = "Cyrs-translit",
Glag = "Glag-translit"
},
-- Cyrs strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["cv"] = {
"Chuvash",
33348,
"trk-ogr",
"Cyrl",
ancestors = "cv-mid",
translit = "cv-translit",
override_translit = true,
sort_key = {
from = {"ӑ", "ё", "ӗ", "ҫ", "ӳ"},
to = {"а" .. p[1], "е" .. p[1], "е" .. p[2], "с" .. p[1], "у" .. p[1]}
},
}
m["cy"] = {
"Welsh",
9309,
"cel-brw",
"Latn",
ancestors = "wlm",
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. "'",
from = {"ch", "dd", "ff", "ng", "ll", "ph", "rh", "th"},
to = {"c" .. p[1], "d" .. p[1], "f" .. p[1], "g" .. p[1], "l" .. p[1], "p" .. p[1], "r" .. p[1], "t" .. p[1]}
},
standard_chars = "ÂâAaBbCcDdEeÊêFfGgHhIiÎîLlMmNnOoÔôPpRrSsTtUuÛûWwŴŵYyŶŷ" .. c.punc,
}
m["da"] = {
"Danish",
9035,
"gmq-eas",
"Latn",
ancestors = "gmq-oda",
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dacute .. c.caron .. c.cedilla,
remove_exceptions = {"å"},
from = {"æ", "ø", "å"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]}
},
standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÆæØøÅå" .. c.punc,
}
m["de"] = {
"German",
188,
"gmw-hgm",
"Latn, Latf, Brai",
ancestors = "de-ear",
sort_key = {
Latn = s["de-Latn-sortkey"],
Latf = s["de-Latn-sortkey"],
},
standard_chars = {
Latn = s["de-Latn-standardchars"],
Latf = s["de-Latn-standardchars"],
Brai = c.braille,
c.punc
}
}
m["dv"] = {
"Dhivehi",
32656,
"inc-ins",
"Thaa, Diak",
translit = {
Thaa = "dv-translit",
Diak = "Diak-translit",
},
ancestors = "dv-old",
override_translit = true,
}
m["dz"] = {
"Dzongkha",
33081,
"sit-tib",
"Tibt",
ancestors = "xct",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["ee"] = {
"Ewe",
30005,
"alv-gbe",
"Latn",
sort_key = {
remove_diacritics = c.tilde,
from = {"ɖ", "dz", "ɛ", "ƒ", "gb", "ɣ", "kp", "ny", "ŋ", "ɔ", "ts", "ʋ"},
to = {"d" .. p[1], "d" .. p[2], "e" .. p[1], "f" .. p[1], "g" .. p[1], "g" .. p[2], "k" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1], "t" .. p[1], "v" .. p[1]}
},
}
m["el"] = {
"Greek",
9129,
"grk",
"Grek, Polyt, Brai",
ancestors = "el-kth",
translit = "el-translit",
override_translit = true,
-- Grek and Polyt display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
standard_chars = {
Grek = "΅·ͺ΄ΑαΆάΒβΓγΔδΕεέΈΖζΗηΉήΘθΙιΊίΪϊΐΚκΛλΜμΝνΞξΟοΌόΠπΡρΣσςΤτΥυΎύΫϋΰΦφΧχΨψΩωΏώ",
Brai = c.braille,
c.punc
},
}
m["en"] = {
"English",
1860,
"gmw-ang",
"Latn, Brai, Shaw, Dsrt", -- entries in Shaw or Dsrt might require prior discussion
wikimedia_codes = "en, simple",
ancestors = "en-ear",
sort_key = {
Latn = {
-- Many of these are needed for sorting language names.
remove_diacritics = "'\"%-%.,%s·ʻʼ" .. c.diacritics,
-- These are found in pagenames.
from = {"[ɒæ🅱¢©ᴄðđəǝɜɡħʜıɨłŋɲøɔœꝑꝓꝕßʋ]"},
to = {{
["ɒ"] = "a", ["æ"] = "ae", ["🅱"] = "b", ["¢"] = "c", ["©"] = "c",
["ᴄ"] = "c", ["ð"] = "d", ["đ"] = "d", ["ə"] = "e", ["ǝ"] = "e",
["ɜ"] = "e", ["ɡ"] = "g", ["ħ"] = "h", ["ʜ"] = "h", ["ı"] = "i",
["ɨ"] = "i", ["ł"] = "l", ["ŋ"] = "n", ["ɲ"] = "n", ["ø"] = "o",
["ɔ"] = "o", ["œ"] = "oe", ["ꝑ"] = "p", ["ꝓ"] = "p", ["ꝕ"] = "p",
["ß"] = "ss", ["ʋ"] = "v",
}},
},
},
standard_chars = {
Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz",
Brai = c.braille,
c.punc
},
}
m["eo"] = {
"Esperanto",
143,
"art",
"Latn",
sort_key = {
remove_diacritics = c.grave .. c.acute,
from = {"ĉ", "ĝ", "ĥ", "ĵ", "ŝ", "ŭ"},
to = {"c" .. p[1], "g" .. p[1], "h" .. p[1], "j" .. p[1], "s" .. p[1], "u" .. p[1]}
},
standard_chars = "AaBbCcĈĉDdEeFfGgĜĝHhĤĥIiJjĴĵKkLlMmNnOoPpRrSsŜŝTtUuŬŭVvZz" .. c.punc,
}
m["es"] = {
"Spanish",
1321,
"roa-cas",
"Latn, Brai",
ancestors = "es-ear",
sort_key = {
Latn = {
remove_exceptions = {"ñ"},
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.diaer .. c.cedilla,
from = {"ª", "æ", "ñ", "º", "œ"},
to = {"a", "ae", "n" .. p[1], "o", "oe"}
},
},
standard_chars = {
Latn = "AaÁáBbCcDdEeÉéFfGgHhIiÍíJjLlMmNnÑñOoÓóPpQqRrSsTtUuÚúÜüVvXxYyZz",
Brai = c.braille,
c.punc
},
}
m["et"] = {
"Estonian",
9072,
"urj-fin",
"Latn",
sort_key = {
from = {
"š", "ž", "õ", "ä", "ö", "ü", -- 2 chars
"z" -- 1 char
},
to = {
"s" .. p[1], "s" .. p[3], "w" .. p[1], "w" .. p[2], "w" .. p[3], "w" .. p[4],
"s" .. p[2]
}
},
standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvÕõÄäÖöÜü" .. c.punc,
}
m["eu"] = {
"Basque",
8752,
"euq",
"Latn",
sort_key = {
from = {"ç", "ñ"},
to = {"c" .. p[1], "n" .. p[1]}
},
standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnÑñOoPpRrSsTtUuXxZz" .. c.punc,
}
m["fa"] = {
"Persian",
9168,
"ira-swi",
"fa-Arab, Hebr",
ancestors = "fa-cls",
strip_diacritics = {
["fa-Arab"] = {
-- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه"; hamzatu l-waṣli to a regular alif
from = {"هٔ", "ٱ"}, -- character "ۂ" code U+06C2 to "ه"; hamzatu l-waṣli to a regular alif
to = {"ه", "ا"},
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef,
},
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["ff"] = {
"Fula",
33454,
"alv-fwo",
"Latn, Adlm",
}
m["fi"] = {
"Finnish",
1412,
"urj-fin",
"Latn",
display_text = {
from = {"'"},
to = {"’"}
},
strip_diacritics = { -- used to indicate gemination of the next consonant
remove_diacritics = "ˣ",
from = {"’"},
to = {"'"},
},
sort_key = { -- [[Appendix:Finnish alphabet#Collation]] + "aͤ" and "oͤ" as historical variants of "ä" and "ö".
remove_diacritics = "'’:" .. c.diacritics,
remove_exceptions = {
"a[" .. c.ringabove .. c.diaer .. c.small_e .. "]", -- åäaͤ
"o[" .. c.diaer .. c.tilde .. c.dacute .. c.small_e .. "]", -- öõőoͤ
"u[" .. c.diaer .. c.dacute .. "]" -- üű
},
from = {"æ", "[ðđ]", "ł", "ŋ", "œ", "ß", "þ", "u[" .. c.diaer .. c.dacute .. "]", "å", "aͤ", "o[" .. c.tilde .. c.dacute .. c.small_e .. "]", "ø", "(.)['%-]"},
to = {"ae", "d", "l", "n", "oe", "ss", "th", "y", "z" .. p[1], "ä", "ö", "ö", "%1"}
},
standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÄäÖö" .. c.punc,
}
m["fj"] = {
"Fijian",
33295,
"poz-pcc",
"Latn",
}
m["fo"] = {
"Faroese",
25258,
"gmq-ins",
"Latn",
sort_key = {
from = {"á", "ð", "í", "ó", "ú", "ý", "æ", "ø"},
to = {"a" .. p[1], "d" .. p[1], "i" .. p[1], "o" .. p[1], "u" .. p[1], "y" .. p[1], "z" .. p[1], "z" .. p[2]}
},
standard_chars = "AaÁáBbDdÐðEeFfGgHhIiÍíJjKkLlMmNnOoÓóPpRrSsTtUuÚúVvYyÝýÆæØø" .. c.punc,
}
m["fr"] = {
"French",
150,
"roa-oil",
"Latn, Brai",
ancestors = "frm",
sort_key = {
Latn = s["roa-oil-sortkey"]
},
standard_chars = {
Latn = "AaÀàÂâBbCcÇçDdEeÉéÈèÊêËëFfGgHhIiÎîÏïJjLlMmNnOoÔôŒœPpQqRrSsTtUuÙùÛûÜüVvXxYyZz",
Brai = c.braille,
c.punc
},
}
m["fy"] = {
"West Frisian",
27175,
"gmw-fri",
"Latn",
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer,
from = {"y"},
to = {"i"}
},
standard_chars = "AaâäàÆæBbCcDdEeéêëèFfGgHhIiïìYyỳJjKkLlMmNnOoôöòPpRrSsTtUuúûüùVvWwZz" .. c.punc,
}
m["ga"] = {
"Irish",
9142,
"cel-gae",
"Latn, Latg",
ancestors = "mga",
sort_key = {
remove_diacritics = c.acute,
from = {"ḃ", "ċ", "ḋ", "ḟ", "ġ", "ṁ", "ṗ", "ṡ", "ṫ"},
to = {"bh", "ch", "dh", "fh", "gh", "mh", "ph", "sh", "th"}
},
standard_chars = "AaÁáBbCcDdEeÉéFfGgHhIiÍíLlMmNnOoÓóPpRrSsTtUuÚúVv" .. c.punc,
}
m["gd"] = {
"Scottish Gaelic",
9314,
"cel-gae",
"Latn, Latg",
ancestors = "mga",
sort_key = {remove_diacritics = c.grave .. c.acute},
standard_chars = "AaÀàBbCcDdEeÈèFfGgHhIiÌìLlMmNnOoÒòPpRrSsTtUuÙù" .. c.punc,
}
m["gl"] = {
"Galician",
9307,
"roa-gap",
"Latn",
sort_key = {
remove_diacritics = c.acute,
from = {"ñ"},
to = {"n" .. p[1]}
},
standard_chars = "AaÁáBbCcDdEeÉéFfGgHhIiÍíÏïLlMmNnÑñOoÓóPpQqRrSsTtUuÚúÜüVvXxZz" .. c.punc,
}
m["gu"] = {
"Gujarati",
5137,
"inc-wes",
"Arab, Gujr",
ancestors = "inc-mgu",
translit = {
Gujr = "gu-translit",
},
strip_diacritics = {
Arab = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.kasra .. c.shadda .. c.sukun},
Gujr = {remove_diacritics = "઼"},
},
}
m["gv"] = {
"Manx",
12175,
"cel-gae",
"Latn",
ancestors = "mga",
sort_key = {remove_diacritics = c.cedilla .. "-"},
standard_chars = "AaBbCcÇçDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwYy" .. c.punc,
}
m["ha"] = {
"Hausa",
56475,
"cdc-wst",
"Latn, Arab",
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron}
},
sort_key = {
Latn = {
from = {"ɓ", "b'", "ɗ", "d'", "ƙ", "k'", "sh", "ƴ", "'y"},
to = {"b" .. p[1], "b" .. p[2], "d" .. p[1], "d" .. p[2], "k" .. p[1], "k" .. p[2], "s" .. p[1], "y" .. p[1], "y" .. p[2]}
},
},
}
m["he"] = {
"Hebrew",
9288,
"sem-can",
"Hebr, Phnx, Brai, Samr",
ancestors = "he-med",
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
-- Samr strip_diacritics, sort_key in [[Module:scripts/data]]
-- Phnx translit in [[Module:scripts/data]] (NOTE: not present before, presumably an accidental omission)
}
m["hi"] = {
"Hindi",
1568,
"inc-hnd",
"Deva, Kthi, Newa",
translit = {
Deva = "hi-translit"
},
standard_chars = {
Deva = "अआइईउऊएऐओऔकखगघङचछजझञटठडढणतथदधनपफबभमयरलवशषसहत्रज्ञक्षक़ख़ग़ज़झ़ड़ढ़फ़काखागाघाङाचाछाजाझाञाटाठाडाढाणाताथादाधानापाफाबाभामायारालावाशाषासाहात्राज्ञाक्षाक़ाख़ाग़ाज़ाझ़ाड़ाढ़ाफ़ाकिखिगिघिङिचिछिजिझिञिटिठिडिढिणितिथिदिधिनिपिफिबिभिमियिरिलिविशिषिसिहित्रिज्ञिक्षिक़िख़िग़िज़िझ़िड़िढ़िफ़िकीखीगीघीङीचीछीजीझीञीटीठीडीढीणीतीथीदीधीनीपीफीबीभीमीयीरीलीवीशीषीसीहीत्रीज्ञीक्षीक़ीख़ीग़ीज़ीझ़ीड़ीढ़ीफ़ीकुखुगुघुङुचुछुजुझुञुटुठुडुढुणुतुथुदुधुनुपुफुबुभुमुयुरुलुवुशुषुसुहुत्रुज्ञुक्षुक़ुख़ुग़ुज़ुझ़ुड़ुढ़ुफ़ुकूखूगूघूङूचूछूजूझूञूटूठूडूढूणूतूथूदूधूनूपूफूबूभूमूयूरूलूवूशूषूसूहूत्रूज्ञूक्षूक़ूख़ूग़ूज़ूझ़ूड़ूढ़ूफ़ूकेखेगेघेङेचेछेजेझेञेटेठेडेढेणेतेथेदेधेनेपेफेबेभेमेयेरेलेवेशेषेसेहेत्रेज्ञेक्षेक़ेख़ेग़ेज़ेझ़ेड़ेढ़ेफ़ेकैखैगैघैङैचैछैजैझैञैटैठैडैढैणैतैथैदैधैनैपैफैबैभैमैयैरैलैवैशैषैसैहैत्रैज्ञैक्षैक़ैख़ैग़ैज़ैझ़ैड़ैढ़ैफ़ैकोखोगोघोङोचोछोजोझोञोटोठोडोढोणोतोथोदोधोनोपोफोबोभोमोयोरोलोवोशोषोसोहोत्रोज्ञोक्षोक़ोख़ोग़ोज़ोझ़ोड़ोढ़ोफ़ोकौखौगौघौङौचौछौजौझौञौटौठौडौढौणौतौथौदौधौनौपौफौबौभौमौयौरौलौवौशौषौसौहौत्रौज्ञौक्षौक़ौख़ौग़ौज़ौझ़ौड़ौढ़ौफ़ौक्ख्ग्घ्ङ्च्छ्ज्झ्ञ्ट्ठ्ड्ढ्ण्त्थ्द्ध्न्प्फ्ब्भ्म्य्र्ल्व्श्ष्स्ह्त्र्ज्ञ्क्ष्क़्ख़्ग़्ज़्झ़्ड़्ढ़्फ़्।॥०१२३४५६७८९॰",
c.punc
},
}
m["ho"] = {
"Hiri Motu",
33617,
"crp",
"Latn",
ancestors = "meu",
}
m["ht"] = {
"Haitian Creole",
33491,
"crp",
"Latn",
ancestors = "ht-sdm",
sort_key = {
from = {
"oun", -- 3 chars
"an", "ch", "è", "en", "ng", "ò", "on", "ou", "ui" -- 2 chars
},
to = {
"o" .. p[4],
"a" .. p[1], "c" .. p[1], "e" .. p[1], "e" .. p[2], "n" .. p[1], "o" .. p[1], "o" .. p[2], "o" .. p[3], "u" .. p[1]
}
},
}
m["hu"] = {
"Hungarian",
9067,
"urj-ugr",
"Latn, Hung",
ancestors = "ohu",
sort_key = {
Latn = {
from = {
"dzs", -- 3 chars
"á", "cs", "dz", "é", "gy", "í", "ly", "ny", "ó", "ö", "ő", "sz", "ty", "ú", "ü", "ű", "zs", -- 2 chars
},
to = {
"d" .. p[2],
"a" .. p[1], "c" .. p[1], "d" .. p[1], "e" .. p[1], "g" .. p[1], "i" .. p[1], "l" .. p[1], "n" .. p[1], "o" .. p[1], "o" .. p[2], "o" .. p[3], "s" .. p[1], "t" .. p[1], "u" .. p[1], "u" .. p[2], "u" .. p[3], "z" .. p[1],
}
},
},
standard_chars = {
Latn = "AaÁáBbCcDdEeÉéFfGgHhIiÍíJjKkLlMmNnOoÓóÖöŐőPpQqRrSsTtUuÚúÜüŰűVvWwXxYyZz",
c.punc
},
}
m["hy"] = {
"Armenian",
8785,
"hyx",
"Armn, Brai",
ancestors = "axm",
-- Armn translit in [[Module:scripts/data]]
override_translit = true,
strip_diacritics = {
Armn = {
remove_diacritics = "՛՜՞՟",
from = {"եւ", "<sup>յ</sup>", "<sup>ի</sup>", "<sup>է</sup>", "յ̵", "ՙ", "՚"},
to = {"և", "յ", "ի", "է", "ֈ", "ʻ", "’"}
},
},
sort_key = {
Armn = {
from = {
"ու", "եւ", -- 2 chars
"և" -- 1 char
},
to = {
"ւ", "եվ",
"եվ"
}
},
},
}
m["hz"] = {
"Herero",
33315,
"bnt-swb",
"Latn",
}
m["ia"] = {
"Interlingua",
35934,
"art",
"Latn",
}
m["id"] = {
"Indonesian",
9240,
"poz-mly",
"Latn",
ancestors = "ms",
standard_chars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" .. c.punc,
}
m["ie"] = {
"Interlingue",
35850,
"art",
"Latn",
type = "appendix-constructed",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ},
}
m["ig"] = {
"Igbo",
33578,
"alv-igb",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.macron},
sort_key = {
from = {"gb", "gh", "gw", "ị", "kp", "kw", "ṅ", "nw", "ny", "ọ", "sh", "ụ"},
to = {"g" .. p[1], "g" .. p[2], "g" .. p[3], "i" .. p[1], "k" .. p[1], "k" .. p[2], "n" .. p[1], "n" .. p[2], "n" .. p[3], "o" .. p[1], "s" .. p[1], "u" .. p[1]}
},
}
m["ii"] = {
"Nuosu",
34235,
"tbq-nlo",
"Yiii",
translit = "ii-translit",
}
m["ik"] = {
"Inupiaq",
27183,
"esx-inu",
"Latn",
sort_key = {
from = {
"ch", "ġ", "dj", "ḷ", "ł̣", "ñ", "ng", "r̂", "sr", "zr", -- 2 chars
"ł", "ŋ", "ʼ" -- 1 char
},
to = {
"c" .. p[1], "g" .. p[1], "h" .. p[1], "l" .. p[1], "l" .. p[3], "n" .. p[1], "n" .. p[2], "r" .. p[1], "s" .. p[1], "z" .. p[1],
"l" .. p[2], "n" .. p[2], "z" .. p[2]
}
},
}
m["io"] = {
"Ido",
35224,
"art",
"Latn",
}
m["is"] = {
"Icelandic",
294,
"gmq-ins",
"Latn",
sort_key = {
from = {"á", "ð", "é", "í", "ó", "ú", "ý", "þ", "æ", "ö"},
to = {"a" .. p[1], "d" .. p[1], "e" .. p[1], "i" .. p[1], "o" .. p[1], "u" .. p[1], "y" .. p[1], "z" .. p[1], "z" .. p[2], "z" .. p[3]}
},
standard_chars = "AaÁáBbDdÐðEeÉéFfGgHhIiÍíJjKkLlMmNnOoÓóPpRrSsTtUuÚúVvXxYyÝýÞþÆæÖö" .. c.punc,
}
m["it"] = {
"Italian",
652,
"roa-itr",
"Latn",
ancestors = "roa-oit",
sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.ringabove},
standard_chars = "AaÀàBbCcDdEeÈèÉéFfGgHhIiÌìLlMmNnOoÒòPpQqRrSsTtUuÙùVvZz" .. c.punc,
}
m["iu"] = {
"Inuktitut",
29921,
"esx-inu",
"Cans, Latn",
translit = {
Cans = "cr-translit"
},
override_translit = true,
}
m["ja"] = {
"Japanese",
5287,
"jpx",
"Jpan, Latn, Brai",
ancestors = "ja-ear",
translit = s["jpx-translit"],
link_tr = true,
display_text = s["jpx-displaytext"],
strip_diacritics = s["jpx-stripdiacritics"],
sort_key = s["jpx-sortkey"],
}
m["jv"] = {
"Javanese",
33549,
"poz",
"Latn, Java, Arab",
ancestors = "kaw",
translit = {
Java = "jv-translit"
},
link_tr = true,
strip_diacritics = {
Latn = {remove_diacritics = c.circ} -- Modern jv don't use ê
},
sort_key = {
Latn = {
from = {"å", "dh", "é", "è", "ng", "ny", "th"},
to = {"a" .. p[1], "d" .. p[1], "e" .. p[1], "e" .. p[2], "n" .. p[1], "n" .. p[2], "t" .. p[1]}
},
},
}
m["ka"] = {
"Georgian",
8108,
"ccs-gzn",
"Geor, Geok, Hebr", -- Hebr is used to write Judeo-Georgian
ancestors = "ka-mid",
-- Geor, Geok translit in [[Module:scripts/data]]
override_translit = true,
strip_diacritics = {
Geor = s["ka-stripdiacritics"],
Geok = s["ka-stripdiacritics"],
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["kg"] = {
"Kongo",
33702,
"bnt-kng",
"Latn",
}
m["ki"] = {
"Kikuyu",
33587,
"bnt-kka",
"Latn",
}
m["kj"] = {
"Kwanyama",
1405077,
"bnt-ova",
"Latn",
}
m["kk"] = {
"Kazakh",
9252,
"trk-kno",
"Cyrl, Latn, kk-Arab",
translit = {
Cyrl = {
from = {
"Ё", "ё", "Й", "й", "Нг", "нг", "Ӯ", "ӯ", -- 2 chars; are "Ӯ" and "ӯ" actually used?
"А", "а", "Ә", "ә", "Б", "б", "В", "в", "Г", "г", "Ғ", "ғ", "Д", "д", "Е", "е", "Ж", "ж", "З", "з", "И", "и", "К", "к", "Қ", "қ", "Л", "л", "М", "м", "Н", "н", "Ң", "ң", "О", "о", "Ө", "ө", "П", "п", "Р", "р", "С", "с", "Т", "т", "У", "у", "Ұ", "ұ", "Ү", "ү", "Ф", "ф", "Х", "х", "Һ", "һ", "Ц", "ц", "Ч", "ч", "Ш", "ш", "Щ", "щ", "Ъ", "ъ", "Ы", "ы", "І", "і", "Ь", "ь", "Э", "э", "Ю", "ю", "Я", "я", -- 1 char
},
to = {
"E", "e", "İ", "i", "Ñ", "ñ", "U", "u",
"A", "a", "Ä", "ä", "B", "b", "V", "v", "G", "g", "Ğ", "ğ", "D", "d", "E", "e", "J", "j", "Z", "z", "İ", "i", "K", "k", "Q", "q", "L", "l", "M", "m", "N", "n", "Ñ", "ñ", "O", "o", "Ö", "ö", "P", "p", "R", "r", "S", "s", "T", "t", "U", "u", "Ū", "ū", "Ü", "ü", "F", "f", "X", "x", "H", "h", "S", "s", "Ç", "ç", "Ş", "ş", "Ş", "ş", "", "", "Y", "y", "I", "ı", "", "", "É", "é", "Ü", "ü", "Ä", "ä",
}
}
},
-- override_translit = true,
sort_key = {
Cyrl = {
from = {"ә", "ғ", "ё", "қ", "ң", "ө", "ұ", "ү", "һ", "і"},
to = {"а" .. p[1], "г" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "у" .. p[2], "х" .. p[1], "ы" .. p[1]}
},
},
standard_chars = {
Cyrl = "АаӘәБбВвГгҒғДдЕеЁёЖжЗзИиЙйКкҚқЛлМмНнҢңОоӨөПпРрСсТтУуҰұҮүФфХхҺһЦцЧчШшЩщЪъЫыІіЬьЭэЮюЯя",
c.punc
},
}
m["kl"] = {
"Greenlandic",
25355,
"esx-inu",
"Latn",
sort_key = {
from = {"æ", "ø", "å"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]}
}
}
m["km"] = {
"Khmer",
9205,
"mkh-kmr",
"Khmr",
ancestors = "xhm",
translit = "km-translit",
}
m["kn"] = {
"Kannada",
33673,
"dra-kan",
"Knda, Tutg",
ancestors = "dra-mkn",
-- Knda translit in [[Module:scripts/data]]
}
m["ko"] = {
"Korean",
9176,
"qfa-kor",
"Kore, Brai",
ancestors = "ko-ear",
translit = {
Kore = "ko-translit",
},
-- Kore strip_diacritics in [[Module:scripts/data]]
}
m["kr"] = {
"Kanuri",
36094,
"ssa-sah",
"Latn, Arab",
-- the sortkey and strip_diacritics are only for standard Kanuri; when dialectal entries get added, someone will have to work out how the dialects should be represented orthographically
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.breve}
},
sort_key = {
Latn = {
from = {"ǝ", "ny", "ɍ", "sh"},
to = {"e" .. p[1], "n" .. p[1], "r" .. p[1], "s" .. p[1]}
},
},
}
m["ks"] = {
"Kashmiri",
33552,
"inc-kas",
"ks-Arab, Deva, Shrd, Latn",
translit = {
["ks-Arab"] = "ks-Arab-translit",
Deva = "ks-Deva-translit",
-- Shrd translit in [[Module:scripts/data]]
},
}
-- "kv" is treated as "koi", "kpv", see [[WT:LT]]
m["kw"] = {
"Cornish",
25289,
"cel-brs",
"Latn",
ancestors = "cnx",
sort_key = {
from = {"ch"},
to = {"c" .. p[1]}
},
}
m["ky"] = {
"Kyrgyz",
9255,
"trk-kkp",
"Cyrl, Latn, Arab",
translit = {
Cyrl = "ky-translit"
},
override_translit = true,
sort_key = {
Cyrl = {
from = {"ё", "ң", "ө", "ү"},
to = {"е" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1]}
},
},
}
m["la"] = {
"Latin",
397,
"itc-laf",
"Latn, Ital",
ancestors = "itc-ola",
-- Ital translit in [[Module:scripts/data]] (NOTE: formerly not present, probably an accidental omission)
display_text = {
Latn = s["itc-Latn-displaytext"]
},
strip_diacritics = {
Latn = s["itc-Latn-stripdiacritics"]
},
sort_key = {
Latn = s["itc-Latn-sortkey"]
},
standard_chars = {
Latn = "AaBbCcDdEeFfGgHhIiLlMmNnOoPpQqRrSsTtUuVvXx",
c.punc
},
}
m["lb"] = {
"Luxembourgish",
9051,
"gmw-hgm",
"Latn, Brai",
ancestors = "gmw-cfr",
sort_key = {
Latn = {
from = {"ä", "ë", "é"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]}
},
},
}
m["lg"] = {
"Luganda",
33368,
"bnt-nyg",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.circ},
sort_key = {
from = {"ŋ"},
to = {"n" .. p[1]}
},
}
m["li"] = {
"Limburgish",
102172,
"gmw-frk",
"Latn",
ancestors = "dum",
}
m["ln"] = {
"Lingala",
36217,
"bnt-bmo",
"Latn",
sort_key = {
remove_diacritics = c.acute .. c.circ .. c.caron,
from = {"ɛ", "gb", "mb", "mp", "nd", "ng", "nk", "ns", "nt", "ny", "nz", "ɔ"},
to = {"e" .. p[1], "g" .. p[1], "m" .. p[1], "m" .. p[2], "n" .. p[1], "n" .. p[2], "n" .. p[3], "n" .. p[4], "n" .. p[5], "n" .. p[6], "n" .. p[7], "o" .. p[1]}
},
}
m["lo"] = {
"Lao",
9211,
"tai-swe",
"Laoo", -- also Tai Noi/Lao Buhan script
translit = "lo-translit",
sort_key = "Laoo-sortkey",
standard_chars = "0-9ກຂຄງຈຊຍດຕຖທນບປຜຝພຟມຢຣລວສຫອຮຯ-ໝ" .. c.punc,
}
m["lt"] = {
"Lithuanian",
9083,
"bat-eas",
"Latn",
ancestors = "olt",
display_text = "lt-common",
strip_diacritics = "lt-common",
sort_key = "lt-common",
standard_chars = "AaĄąBbCcČčDdEeĘęĖėFfGgHhIiĮįYyJjKkLlMmNnOoPpRrSsŠšTtUuŲųŪūVvZzŽž" .. c.punc,
}
m["lu"] = {
"Luba-Katanga",
36157,
"bnt-lub",
"Latn",
}
m["lv"] = {
"Latvian",
9078,
"bat-eas",
"Latn",
strip_diacritics = {
-- This attempts to convert vowels with tone marks to vowels either with or without macrons. Specifically, there should be no macrons if the vowel is part of a diphthong (including resonant diphthongs such pìrksts -> pirksts not #pīrksts). What we do is first convert the vowel + tone mark to a vowel + tilde in a decomposed fashion, then remove the tilde in diphthongs, then convert the remaining vowel + tilde sequences to macroned vowels, then delete any other tilde. We leave already-macroned vowels alone: Both e.g. ar and ār occur before consonants. FIXME: This still might not be sufficient.
from = {"([Ee])" .. c.cedilla, "[" .. c.grave .. c.circ .. c.tilde .."]", "([aAeEiIoOuU])" .. c.tilde .."?([lrnmuiLRNMUI])" .. c.tilde .. "?([^aAeEiIoOuU])", "([aAeEiIoOuU])" .. c.tilde .."?([lrnmuiLRNMUI])" .. c.tilde .."?$", "([iI])" .. c.tilde .. "?([eE])" .. c.tilde .. "?", "([aAeEiIuU])" .. c.tilde, c.tilde},
to = {"%1", c.tilde, "%1%2%3", "%1%2", "%1%2", "%1" .. c.macron}
},
sort_key = {
from = {"ā", "č", "ē", "ģ", "ī", "ķ", "ļ", "ņ", "š", "ū", "ž"},
to = {"a" .. p[1], "c" .. p[1], "e" .. p[1], "g" .. p[1], "i" .. p[1], "k" .. p[1], "l" .. p[1], "n" .. p[1], "s" .. p[1], "u" .. p[1], "z" .. p[1]}
},
standard_chars = "AaĀāBbCcČčDdEeĒēFfGgĢģHhIiĪīJjKkĶķLlĻļMmNnŅņOoPpRrSsŠšTtUuŪūVvZzŽž" .. c.punc,
}
m["mg"] = {
"Malagasy",
7930,
"poz-bre",
"Latn, Arab",
}
m["mh"] = {
"Marshallese",
36280,
"poz-mic",
"Latn",
sort_key = {
from = {"ā", "ļ", "m̧", "ņ", "n̄", "o̧", "ō", "ū"},
to = {"a" .. p[1], "l" .. p[1], "m" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1], "o" .. p[2], "u" .. p[1]}
},
}
m["mi"] = {
"Māori",
36451,
"poz-pep",
"Latn",
sort_key = {
remove_diacritics = c.macron,
from = {"ng", "wh"},
to = {"n" .. p[1], "w" .. p[1]}
},
}
m["mk"] = {
"Macedonian",
9296,
"zls",
"Cyrl, Polyt",
ancestors = "cu",
translit = {
Cyrl = "mk-translit",
-- FIXME: formerly no translit specified for Polyt; unclear if the default [[Module:grc-translit]] is
-- acceptable, so we disable it for now
Polyt = false,
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.acute,
remove_exceptions = {"Ѓ", "ѓ", "Ќ", "ќ"}
},
},
sort_key = {
Cyrl = {
remove_diacritics = c.grave,
remove_exceptions = {"ѓ", "ќ"},
from = {"ѓ", "ѕ", "ј", "љ", "њ", "ќ", "џ"},
to = {"д" .. p[1], "з" .. p[1], "и" .. p[1], "л" .. p[1], "н" .. p[1], "т" .. p[1], "ч" .. p[1]}
},
},
-- Polyt display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
standard_chars = {
Cyrl = "АаБбВвГгДдЃѓЕеЖжЗзЅѕИиЈјКкЛлЉљМмНнЊњОоПпРрСсТтЌќУуФфХхЦцЧчЏџШш",
c.punc
},
}
m["ml"] = {
"Malayalam",
36236,
"dra-mal",
"Mlym",
override_translit = true,
-- Mlym translit in [[Module:scripts/data]]
}
m["mn"] = {
"Mongolian",
9246,
"xgn-cen",
"Cyrl, Mong, Latn, Brai",
ancestors = "cmg",
translit = {
Cyrl = "mn-translit",
-- Mong translit in [[Module:scripts/data]]
},
override_translit = true,
-- Mong display_text and strip_diacritics in [[Module:scripts/data]]
strip_diacritics = {
Cyrl = {remove_diacritics = c.grave .. c.acute},
},
sort_key = {
Cyrl = {
remove_diacritics = c.grave,
from = {"ё", "ө", "ү"},
to = {"е" .. p[1], "о" .. p[1], "у" .. p[1]}
},
},
standard_chars = {
Cyrl = "АаБбВвГгДдЕеЁёЖжЗзИиЙйЛлМмНнОоӨөРрСсТтУуҮүХхЦцЧчШшЫыЬьЭэЮюЯя—",
Brai = c.braille,
c.punc
},
}
-- "mo" is treated as "ro", see [[WT:LT]]
m["mr"] = {
"Marathi",
1571,
"inc-sou",
"Deva, Modi",
ancestors = "omr",
translit = {
Deva = "mr-translit",
Modi = "mr-Modi-translit",
},
strip_diacritics = {
Deva = {
from = {"च़", "ज़", "झ़"},
to = {"च", "ज", "झ"}
},
},
}
m["ms"] = {
"Malay",
9237,
"poz-mly",
"Latn, ms-Arab",
ancestors = "ms-cla",
standard_chars = {
Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz",
c.punc
},
}
m["mt"] = {
"Maltese",
9166,
"sem-arb",
"Latn",
display_text = {
from = {"'"},
to = {"’"}
},
strip_diacritics = {
from = {"’"},
to = {"'"},
},
ancestors = "sqr",
sort_key = {
from = {
"ċ", "ġ", "ż", -- Convert into PUA so that decomposed form does not get caught by the next step.
"([cgz])", -- Ensure "c" comes after "ċ", "g" comes after "ġ" and "z" comes after "ż".
"g" .. p[1] .. "ħ", -- "għ" after initial conversion of "g".
p[3], p[4], "ħ", "ie", p[5] -- Convert "ċ", "ġ", "ħ", "ie", "ż" into final output.
},
to = {
p[3], p[4], p[5],
"%1" .. p[1],
"g" .. p[2],
"c", "g", "h" .. p[1], "i" .. p[1], "z"
}
},
}
m["my"] = {
"Burmese",
9228,
"tbq-brm",
"Mymr",
ancestors = "obr",
translit = "my-translit",
override_translit = true,
sort_key = {
from = {"ျ", "ြ", "ွ", "ှ", "ဿ"},
to = {"္ယ", "္ရ", "္ဝ", "္ဟ", "သ္သ"}
},
}
m["na"] = {
"Nauruan",
13307,
"poz-mic",
"Latn",
}
m["nb"] = {
"Norwegian Bokmål",
25167,
"gmq",
"Latn",
wikimedia_codes = "no",
ancestors = "gmq-mno, da", -- da as an (but not the) ancestor of nb was agreed on - do not change without discussion
sort_key = s["no-sortkey"],
standard_chars = s["no-standardchars"],
}
m["nd"] = {
"Northern Ndebele",
35613,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["ne"] = {
"Nepali",
33823,
"inc-pah",
"Deva, Newa",
translit = {
Deva = "ne-translit"
},
}
m["ng"] = {
"Ndonga",
33900,
"bnt-ova",
"Latn",
}
m["nl"] = {
"Dutch",
7411,
"gmw-frk",
"Latn, Brai",
ancestors = "dum",
sort_key = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.diaer .. c.ringabove .. c.cedilla .. "'"},
},
standard_chars = {
Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZzÄäËëÏïÖöÜü",
Brai = c.braille,
c.punc
},
}
m["nn"] = {
"Norwegian Nynorsk",
25164,
"gmq-wes",
"Latn",
ancestors = "gmq-mno",
strip_diacritics = {
remove_diacritics = c.grave .. c.acute,
},
sort_key = s["no-sortkey"],
standard_chars = s["no-standardchars"],
}
m["no"] = {
"Norwegian",
9043,
"gmq-wes",
"Latn",
ancestors = "gmq-mno",
sort_key = s["no-sortkey"],
standard_chars = s["no-standardchars"],
}
m["nr"] = {
"Southern Ndebele",
36785,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["nv"] = {
"Navajo",
13310,
"apa",
"Latn, Brai",
sort_key = {
remove_diacritics = c.acute .. c.ogonek,
from = {
"chʼ", "tłʼ", "tsʼ", -- 3 chars
"ch", "dl", "dz", "gh", "hw", "kʼ", "kw", "sh", "tł", "ts", "zh", -- 2 chars
"ł", "ʼ" -- 1 char
},
to = {
"c" .. p[2], "t" .. p[2], "t" .. p[4],
"c" .. p[1], "d" .. p[1], "d" .. p[2], "g" .. p[1], "h" .. p[1], "k" .. p[1], "k" .. p[2], "s" .. p[1], "t" .. p[1], "t" .. p[3], "z" .. p[1],
"l" .. p[1], "z" .. p[2]
}
},
}
m["ny"] = {
"Chichewa",
33273,
"bnt-nys",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.circ},
sort_key = {
from = {"ng'"},
to = {"ng"}
},
}
m["oc"] = {
"Occitan",
14185,
"roa-ocr",
"Latn, Hebr",
ancestors = "pro",
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.diaer .. c.cedilla,
from = {"([lns])·h"},
to = {"%1h"}
},
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["oj"] = {
"Ojibwe",
33875,
"alg",
"Cans, Latn",
sort_key = {
Latn = {
from = {"aa", "ʼ", "ii", "oo", "sh", "zh"},
to = {"a" .. p[1], "h" .. p[1], "i" .. p[1], "o" .. p[1], "s" .. p[1], "z" .. p[1]}
},
},
}
m["om"] = {
"Oromo",
33864,
"cus-eas",
"Latn, Ethi",
}
m["or"] = {
"Odia",
33810,
"inc-eas",
"Orya",
ancestors = "inc-mor",
translit = "or-translit",
}
m["os"] = {
"Ossetian",
33968,
"xsc-sar",
"Cyrl, Geor, Latn",
ancestors = "oos",
translit = {
Cyrl = "os-translit",
-- Geor translit in [[Module:scripts/data]]
},
override_translit = true,
display_text = {
Cyrl = {
from = {"æ"},
to = {"ӕ"}
},
Latn = {
from = {"ӕ"},
to = {"æ"}
},
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.grave .. c.acute,
from = {"æ"},
to = {"ӕ"}
},
Latn = {
from = {"ӕ"},
to = {"æ"}
},
},
sort_key = {
Cyrl = {
from = {"ӕ", "гъ", "дж", "дз", "ё", "къ", "пъ", "тъ", "хъ", "цъ", "чъ"},
to = {"а" .. p[1], "г" .. p[1], "д" .. p[1], "д" .. p[2], "е" .. p[1], "к" .. p[1], "п" .. p[1], "т" .. p[1], "х" .. p[1], "ц" .. p[1], "ч" .. p[1]}
},
},
}
m["pa"] = {
"Punjabi",
58635,
"inc-pan",
"Guru, pa-Arab",
translit = {
Guru = "Guru-translit",
["pa-Arab"] = "pa-Arab-translit",
},
strip_diacritics = {
["pa-Arab"] = {
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna,
from = {"ݨ", "ࣇ"},
to = {"ن", "ل"}
},
},
}
m["pi"] = {
"Pali",
36727,
"inc-mid",
"Latn, Brah, Deva, Beng, Sinh, Mymr, Thai, Lana, Laoo, Khmr, Cakm", --and also Khom
ancestors = "sa",
translit = {
-- Brah translit in [[Module:scripts/data]]
Deva = "sa-translit",
Beng = "pi-translit",
Sinh = "si-translit",
Mymr = "pi-translit",
Thai = "pi-translit",
Lana = "pi-translit",
Laoo = "pi-translit",
Khmr = "pi-translit",
Cakm = "Cakm-translit",
},
strip_diacritics = {
Thai = {
from = {"ึ", u(0xF700), u(0xF70F)}, -- FIXME: Not clear what's going on with the PUA characters here.
to = {"ิํ", "ฐ", "ญ"}
},
Mymr = {
remove_diacritics = c.VS01,
},
},
sort_key = { -- FIXME: This needs to be converted into the current standardized format.
from = {"ā", "ī", "ū", "ḍ", "ḷ", "m[" .. c.dotabove .. c.dotbelow .. "]", "ṅ", "ñ", "ṇ", "ṭ", "ॐ", "([เโ])([ก-ฮ])", "([ເໂ])([ກ-ຮ])", "ᩔ", "ᩕ", "ᩖ", "ᩘ", "([ᨭ-ᨱ])ᩛ", "([ᨷ-ᨾ])ᩛ", "ᩤ", u(0xFE00), u(0x200D)},
to = {"a~", "i~", "u~", "d~", "l~", "m~", "n~", "n~~", "n~~~", "t~", "ओँ", "%2%1", "%2%1", "ᩈ᩠ᩈ", "᩠ᩁ", "᩠ᩃ", "ᨦ᩠", "%1᩠ᨮ", "%1᩠ᨻ", "ᩣ"}
},
}
m["pl"] = {
"Polish",
809,
"zlw-lch",
"Latn",
ancestors = "zlw-mpl",
sort_key = {
from = {"ą", "ć", "ę", "ł", "ń", "ó", "ś", "ź", "ż"},
to = {"a" .. p[1], "c" .. p[1], "e" .. p[1], "l" .. p[1], "n" .. p[1], "o" .. p[1], "s" .. p[1], "z" .. p[1], "z" .. p[2]}
},
standard_chars = "AaĄąBbCcĆćDdEeĘęFfGgHhIiJjKkLlŁłMmNnŃńOoÓóPpRrSsŚśTtUuWwYyZzŹźŻż" .. c.punc,
}
m["ps"] = {
"Pashto",
58680,
"ira-pat",
"ps-Arab",
strip_diacritics = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.zwarakay .. c.superalef},
}
m["pt"] = {
"Portuguese",
5146,
"roa-gap",
"Latn, Brai",
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.diaer .. c.cedilla,
from = {"ª", "æ", "º", "œ"},
to = {"a", "ae", "o", "oe"}
},
},
standard_chars = {
Latn = "AaÁáÂâÃãBbCcÇçDdEeÉéÊêFfGgHhIiÍíJjLlMmNnOoÓóÔôÕõPpQqRrSsTtUuÚúVvXxZz",
Brai = c.braille,
c.punc
},
}
m["qu"] = {
"Quechua",
5218,
"qwe",
"Latn",
}
m["rm"] = {
"Romansh",
13199,
"roa-rhe",
ancestors = "rm-old",
"Latn",
sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.small_e},
}
m["ro"] = {
"Romanian",
7913,
"roa-eas",
"Latn, Cyrl, Cyrs",
translit = {
Cyrl = "ro-translit"
},
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute,
from = {"ă", "â", "î", "ș", "ț"},
to = {"a" .. p[1], "a" .. p[2], "i" .. p[1], "s" .. p[1], "t" .. p[1]}
},
Cyrl = {
from = {"ӂ"},
to = {"ж" .. p[1]}
},
},
-- Cyrs strip_diacritics, sort_key in [[Module:scripts/data]]; presumably not present
standard_chars = {
Latn = "AaĂăÂâBbCcDdEeFfGgHhIiÎîJjLlMmNnOoPpRrSsȘșTtȚțUuVvXxZz",
Cyrl = "АаБбВвГгДдЕеЖжӁӂЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЫыЬьЭэЮюЯя",
c.punc
},
}
m["ru"] = {
"Russian",
7737,
"zle",
"Cyrl, Brai",
ancestors = "zle-mru",
translit = {
Cyrl = "ru-translit"
},
display_text = {
Cyrl = {
from = {"'"},
to = {"’"}
},
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.grave .. c.acute .. c.diaer,
remove_exceptions = {"Ё", "ё", "Ѣ̈", "ѣ̈", "Я̈", "я̈"},
from = {"’"},
to = {"'"},
},
},
sort_key = {
Cyrl = {
remove_diacritics = c.grave .. c.acute .. c.diaer,
from = {
"і", "ѣ", "ѳ", "ѵ"
},
to = {
"и" .. p[1], "ь" .. p[1], "я" .. p[2], "я" .. p[3]
}
},
},
standard_chars = {
Cyrl = "АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя—",
Brai = c.braille,
(c.punc:gsub("'", "")) -- Exclude apostrophe.
},
}
m["rw"] = {
"Rwanda-Rundi",
3217514,
"bnt-glb",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.circ .. c.macron .. c.caron},
}
m["sa"] = {
"Sanskrit",
11059,
"inc",
"as-Beng, Bali, Beng, Bhks, Brah, Mymr, xwo-Mong, Deva, Gujr, Guru, Gran, Hani, Java, Kthi, Knda, Kawi, Khar, Khmr, Laoo, Mlym, mnc-Mong, Marc, Modi, Mong, Nand, Newa, Orya, Phag, Ranj, Saur, Shrd, Sidd, Sinh, Soyo, Lana, Takr, Taml, Tang, Telu, Thai, Tibt, Tutg, Tirh, Zanb", --and also Khom; script codes sorted by canonical name rather than code for [[MOD:sa-convert]]
translit = {
Beng = "sa-Beng-translit",
["as-Beng"] = "sa-Beng-translit",
-- Brah translit in [[Module:scripts/data]]
Deva = "sa-translit",
Gujr = "sa-Gujr-translit",
Guru = "sa-Guru-translit",
Java = "sa-Java-translit",
Kthi = "sa-Kthi-translit",
Khmr = "pi-translit",
Knda = "sa-Knda-translit",
Lana = "pi-translit",
Laoo = "pi-translit",
Mlym = "sa-Mlym-translit",
Modi = "sa-Modi-translit",
-- Mong, mnc-Mong, xwo-Mong translit in [[Module:scripts/data]]
-- NOTE: Formerly used xal-translit for transliterating xwo-Mong but that only handles Cyrillic; it has
-- code to transliterate xwo-Mong but it's broken so I've replaced it with the default xwo-translit.
Mymr = "pi-translit",
Orya = "sa-Orya-translit",
-- Shrd translit in [[Module:scripts/data]]
-- Sidd translit in [[Module:scripts/data]]
Sinh = "si-translit",
Taml = "sa-Taml-translit",
Telu = "sa-Telu-translit",
Thai = "pi-translit",
-- Tibt translit in [[Module:scripts/data]]
},
-- Mong display_text and strip_diacritics in [[Module:scripts/data]]
-- Tibt display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
strip_diacritics = {
Deva = s["sa-Deva-stripdiacritics"],
Mymr = {
remove_diacritics = c.VS01,
},
Thai = {
from = {"ึ", u(0xF700), u(0xF70F)}, -- FIXME: Not clear what's going on with the PUA characters here.
to = {"ิํ", "ฐ", "ญ"}
},
},
sort_key = {
Deva = s["sa-Deva-stripdiacritics"], -- until we have a proper Sanskrit sorting algorithm.
Lana = { -- Tai Tham
from = {"ᩔ", "ᩕ", "ᩖ", "ᩘ", "([ᨭ-ᨱ])ᩛ", "([ᨷ-ᨾ])ᩛ", "ᩤ"},
to = {"ᩈ᩠ᩈ", "᩠ᩁ", "᩠ᩃ", "ᨦ᩠", "%1᩠ᨮ", "%1᩠ᨻ", "ᩣ"},
},
Laoo = "Laoo-sortkey",
Latn = {
from = {"ā", "ī", "ū", "ḍ", "ḷ", "ḹ", "m[" .. c.dotabove .. c.dotbelow .. "]", "ṅ", "ñ", "ṇ", "ṛ", "ṝ", "ś", "ṣ", "ṭ"},
to = {"a~", "i~", "u~", "d~", "l~", "l~~", "m~", "n~", "n~~", "n~~~", "r~", "r~~", "s~", "s~~", "t~"},
},
Mymr = {
remove_diacritics = c.VS01,
},
Thai = "Thai-sortkey",
-- FIXME: The previous sort key which mixed all scripts removed ZWJ; I don't know which script(s) this was
-- intended for and there are no other languages which remove it in the sort key AFAIK. If it needs to be
-- removed, specify the script(s) it needs to be removed under or add handling for the "all" script that applies
-- regardless of script.
--all = {
-- remove_diacritics = c.ZWJ,
--},
},
}
m["sc"] = {
"Sardinian",
33976,
"roa-sou",
"Latn",
ancestors = "sc-old",
}
m["sd"] = {
"Sindhi",
33997,
"inc-snd",
"sd-Arab, Deva, Sind, Khoj",
translit = {
Sind = "Sind-translit",
["sd-Arab"] = "sd-Arab-translit"
},
strip_diacritics = {
["sd-Arab"] = {
remove_diacritics = c.kashida .. c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef,
from = {"ٱ"},
to = {"ا"}
},
},
}
m["se"] = {
"Northern Sami",
33947,
"smi",
"Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
strip_diacritics = {remove_diacritics = c.macron .. c.dotbelow .. "'ˈ"},
sort_key = {
from = {"á", "č", "đ", "ŋ", "š", "ŧ", "ž"},
to = {"a" .. p[1], "c" .. p[1], "d" .. p[1], "n" .. p[1], "s" .. p[1], "t" .. p[1], "z" .. p[1]}
},
standard_chars = "AaÁáBbCcČčDdĐđEeFfGgHhIiJjKkLlMmNnŊŋOoPpRrSsŠšTtŦŧUuVvZzŽž" .. c.punc,
}
m["sg"] = {
"Sango",
33954,
"crp",
"Latn",
ancestors = "ngb",
}
m["sh"] = {
"Serbo-Croatian",
9301,
"zls",
"Latn, Cyrl, Glag, Arab",
ietf_subtag = "hbs", -- ISO 639-3 code, since "sh" is deprecated from ISO 639-1
wikimedia_codes = "sh, bs, hr, sr",
strip_diacritics = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve,
remove_exceptions = {"Ć", "ć", "Ś", "ś", "Ź", "ź"}
},
Cyrl = {
remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve,
remove_exceptions = {"З́", "з́", "С́", "с́"}
},
},
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve,
remove_exceptions = {"ć", "ś", "ź"},
from = {"č", "ć", "dž", "đ", "lj", "nj", "š", "ś", "ž", "ź"},
to = {"c" .. p[1], "c" .. p[2], "d" .. p[1], "d" .. p[2], "l" .. p[1], "n" .. p[1], "s" .. p[1], "s" .. p[2], "z" .. p[1], "z" .. p[2]}
},
Cyrl = {
remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve,
remove_exceptions = {"з́", "с́"},
from = {"ђ", "з́", "ј", "љ", "њ", "с́", "ћ", "џ"},
to = {"д" .. p[1], "з" .. p[1], "и" .. p[1], "л" .. p[1], "н" .. p[1], "с" .. p[1], "т" .. p[1], "ч" .. p[1]}
},
},
standard_chars = {
Latn = "AaBbCcČčĆćDdĐđEeFfGgHhIiJjKkLlMmNnOoPpRrSsŠšTtUuVvZzŽž",
Cyrl = "АаБбВвГгДдЂђЕеЖжЗзИиЈјКкЛлЉљМмНнЊњОоПпРрСсТтЋћУуФфХхЦцЧчЏџШш",
c.punc
},
}
m["si"] = {
"Sinhalese",
13267,
"inc-ins",
"Sinh",
translit = "si-translit",
override_translit = true,
}
m["sk"] = {
"Slovak",
9058,
"zlw",
"Latn",
ancestors = "zlw-osk",
sort_key = {remove_diacritics = c.acute .. c.circ .. c.diaer .. c.caron},
standard_chars = "AaÁáÄäBbCcČčDdĎďEeÉéFfGgHhIiÍíJjKkLlĹ弾MmNnŇňOoÓóÔôPpRrŔŕSsŠšTtŤťUuÚúVvYyÝýZzŽž" .. c.punc,
}
m["sl"] = {
"Slovene",
9063,
"zls",
"Latn",
strip_diacritics = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.dgrave .. c.invbreve .. c.dotbelow,
remove_exceptions = {"Ć", "ć", "Ǵ", "ǵ", "Ś", "ś", "Ź", "ź"},
from = {"Ə", "ə", "Ł", "ł"},
to = {"E", "e", "L", "l"},
},
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dotabove .. c.ringabove .. c.dgrave .. c.invbreve .. c.dotbelow .. c.ringbelow .. c.ogonek,
remove_exceptions = {"ć", "ǵ", "ś", "ź"},
from = {"ä", "č", "ć", "đ", "ə", "ë", "ǧ", "ǵ", "ï", "ł", "ö", "š", "ś", "ü", "ž", "ź"},
to = {"a" .. p[1], "c" .. p[1], "c" .. p[2], "d" .. p[1], "e", "e" .. p[1], "g" .. p[1], "g" .. p[2], "i" .. p[1], "l", "o" .. p[1], "s" .. p[1], "s" .. p[2], "u" .. p[1], "z" .. p[1], "z" .. p[2]},
},
standard_chars = "AaBbCcČčDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsŠšTtUuVvZzŽž" .. c.punc,
}
m["sm"] = {
"Samoan",
34011,
"poz-pnp",
"Latn",
}
m["sn"] = {
"Shona",
34004,
"bnt-sho",
"Latn",
strip_diacritics = {remove_diacritics = c.acute},
}
m["so"] = {
"Somali",
13275,
"cus-som",
"Latn, Arab, Osma",
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ}
},
}
m["sq"] = {
"Albanian",
8748,
"sqj",
"Latn, Grek, ota-Arab, Elba, Todr, Vith",
translit = {
Elba = "Elba-translit",
Vith = "Vith-translit",
},
-- Grek display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
strip_diacritics = {
Latn = {
remove_diacritics = c.acute .. c.circ .. c.macron,
from = {'^[ie] (%w)', '^të (%w)'}, to = {'%1', '%1'},
},
},
sort_key = {
Latn = {
remove_diacritics = c.acute .. c.circ .. c.macron .. c.tilde .. c.breve .. c.caron,
from = {'^[ie] (%w)', '^të (%w)', 'ç', 'dh', 'ë', 'gj', 'll', 'nj', 'rr', 'sh', 'th', 'xh', 'zh'},
to = {'%1', '%1', 'c'..p[1], 'd'..p[1], 'e'..p[1], 'g'..p[1], 'l'..p[1], 'n'..p[1], 'r'..p[1], 's'..p[1], 't'..p[1], 'x'..p[1], 'z'..p[1]},
}
-- TODO: Grek if the default sort key is unsuitable
},
standard_chars = {
Latn = "AaBbCcÇçDdEeËëFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvXxYyZz",
c.punc
},
}
m["ss"] = {
"Swazi",
34014,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["st"] = {
"Sotho",
34340,
"bnt-sts",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["su"] = {
"Sundanese",
34002,
"poz-msa",
"Latn, Sund, Arab",
ancestors = "osn",
translit = {
Sund = "Sund-translit"
},
}
m["sv"] = {
"Swedish",
9027,
"gmq-eas",
"Latn",
ancestors = "gmq-osw-lat",
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dacute .. c.caron .. c.cedilla .. "':",
remove_exceptions = {"å"},
from = {"ø", "æ", "œ", "ß", "å", "aͤ", "oͤ"},
to = {"ö", "ae", "oe", "ss", "z" .. p[1], "ä", "ö"}
},
standard_chars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvXxYyÅåÄäÖö" .. c.punc,
}
m["sw"] = {
"Swahili",
7838,
"bnt-swh",
"Latn, Arab",
sort_key = {
Latn = {
from = {"ng'"},
to = {"ng" .. p[1]}
},
},
}
m["ta"] = {
"Tamil",
5885,
"dra-tam",
"Taml",
ancestors = "ta-mid",
translit = "ta-translit",
override_translit = true,
}
m["te"] = {
"Telugu",
8097,
"dra-tel",
"Telu",
translit = "te-translit",
override_translit = true,
}
m["tg"] = {
"Tajik",
9260,
"ira-swi",
"Cyrl, fa-Arab, Latn",
ancestors = "fa-cls",
translit = {
Cyrl = "tg-translit"
},
override_translit = true,
strip_diacritics = {
Cyrl = s["tg-stripdiacritics"],
Latn = s["tg-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {"ғ", "ё", "ӣ", "қ", "ӯ", "ҳ", "ҷ"},
to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "к" .. p[1], "у" .. p[1], "х" .. p[1], "ч" .. p[1]}
},
},
}
m["th"] = {
"Thai",
9217,
"tai-swe",
"Thai, Khomt, Brai",
translit = {
Thai = "th-translit"
},
sort_key = {
Thai = "Thai-sortkey"
},
}
m["ti"] = {
"Tigrinya",
34124,
"sem-eth",
"Ethi",
translit = "Ethi-translit",
}
m["tk"] = {
"Turkmen",
9267,
"trk-ogz",
"Latn, Cyrl, Arab",
strip_diacritics = {
Latn = s["tk-stripdiacritics"],
Cyrl = s["tk-stripdiacritics"],
},
sort_key = {
Latn = {
from = {"ç", "ä", "ž", "ň", "ö", "ş", "ü", "ý"},
to = {"c" .. p[1], "e" .. p[1], "j" .. p[1], "n" .. p[1], "o" .. p[1], "s" .. p[1], "u" .. p[1], "y" .. p[1]}
},
Cyrl = {
from = {"ё", "җ", "ң", "ө", "ү", "ә"},
to = {"е" .. p[1], "ж" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "э" .. p[1]}
},
},
ancestors = "trk-eog",
}
m["tl"] = {
"Tagalog",
34057,
"phi",
"Latn, Tglg",
translit = {
Tglg = "tl-translit"
},
override_translit = true,
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ}
},
standard_chars = {
Latn = "AaBbKkDdEeGgHhIiLlMmNnOoPpRrSsTtUuWwYy",
c.punc
},
sort_key = {
Latn = "tl-sortkey",
},
}
m["tn"] = {
"Tswana",
34137,
"bnt-sts",
"Latn",
}
m["to"] = {
"Tongan",
34094,
"poz-ton",
"Latn",
strip_diacritics = {remove_diacritics = c.acute},
sort_key = {remove_diacritics = c.macron},
}
m["tr"] = {
"Turkish",
256,
"trk-ogz",
"Latn",
ancestors = "ota",
dotted_dotless_i = true,
sort_key = {
from = {
-- Ignore circumflex, but account for capital Î wrongly becoming ı + circ due to dotted dotless I logic.
"ı" .. c.circ, c.circ,
"i", -- Ensure "i" comes after "ı".
"ç", "ğ", "ı", "ö", "ş", "ü"
},
to = {
"i", "",
"i" .. p[1],
"c" .. p[1], "g" .. p[1], "i", "o" .. p[1], "s" .. p[1], "u" .. p[1]
}
},
standard_chars = "AaÂâBbCcÇçDdEeFfGgĞğHhIıİiÎîJjKkLlMmNnOoÖöPpRrSsŞşTtUuÛûÜüVvYyZz" .. c.punc,
}
m["ts"] = {
"Tsonga",
34327,
"bnt-tsr",
"Latn",
}
m["tt"] = {
"Tatar",
25285,
"trk-kbu",
"Cyrl, Latn, tt-Arab",
translit = {
Cyrl = "tt-translit",
["tt-Arab"] = "tt-translit"
},
--override_translit = true, -- enable override until Module code can detect Russian loans such as [[аэропорт]]
dotted_dotless_i = true,
sort_key = {
Cyrl = {
from = {"ә", "ў", "ғ", "ё", "җ", "қ", "ң", "ө", "ү", "һ"},
to = {"а" .. p[1], "в" .. p[1], "г" .. p[1], "е" .. p[1], "ж" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "х" .. p[1]}
},
Latn = {
from = {
"i", -- Ensure "i" comes after "ı".
"ä", "ə", "ç", "ğ", "ı", "ñ", "ŋ", "ö", "ɵ", "ş", "ü"
},
to = {
"i" .. p[1],
"a" .. p[1], "a" .. p[2], "c" .. p[1], "g" .. p[1], "i", "n" .. p[1], "n" .. p[2], "o" .. p[1], "o" .. p[2], "s" .. p[1], "u" .. p[1]
}
},
},
}
-- "tw" is treated as "ak", see [[WT:LT]]
m["ty"] = {
"Tahitian",
34128,
"poz-pep",
"Latn",
}
m["ug"] = {
"Uyghur",
13263,
"trk-kar",
"ug-Arab, Latn, Cyrl",
ancestors = "chg",
translit = {
["ug-Arab"] = "ug-translit",
Cyrl = "ug-translit",
},
override_translit = true,
}
m["uk"] = {
"Ukrainian",
8798,
"zle",
"Cyrl",
ancestors = "zle-muk",
translit = "uk-translit",
strip_diacritics = {remove_diacritics = c.grave .. c.acute},
sort_key = {
remove_diacritics = c.grave .. c.acute,
from = {
"ї", -- 2 chars
"ґ", "є", "і" -- 1 char
},
to = {
"и" .. p[2],
"г" .. p[1], "е" .. p[1], "и" .. p[1]
}
},
standard_chars = "АаБбВвГгДдЕеЄєЖжЗзИиІіЇїЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЬьЮюЯя" .. c.punc:gsub("'", ""), -- Exclude apostrophe.
}
m["ur"] = {
"Urdu",
1617,
"inc-hnd",
"ur-Arab, Hebr",
translit = {
["ur-Arab"] = "ur-translit"
},
strip_diacritics = {
["ur-Arab"] = {
-- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه"; hamzatu l-waṣli to a regular alif
from = {"هٔ", "ۂ", "ٱ"},
to = {"ہ", "ہ", "ا"},
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna .. c.superalef
},
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
standard_chars = {
["ur-Arab"] = "ایببپتثجچحخدذرزژسشصضطظعغفقکگلࣇڷمنݨوؤہھئٹڈڑآے",
c.punc,
},
}
m["uz"] = {
"Uzbek",
9264,
"trk-kar",
"Latn, Cyrl, fa-Arab",
ancestors = "chg",
translit = {
Cyrl = "uz-translit"
},
sort_key = {
Latn = {
from = {"oʻ", "gʻ", "sh", "ch", "ng"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3], "z" .. p[4], "z" .. p[5]}
},
Cyrl = {
from = {"ё", "ў", "қ", "ғ", "ҳ"},
to = {"е" .. p[1], "я" .. p[1], "я" .. p[2], "я" .. p[3], "я" .. p[4]}
},
},
strip_diacritics = {
["fa-Arab"] = "ar-stripdiacritics",
},
}
m["ve"] = {
"Venda",
32704,
"bnt-bso",
"Latn",
}
m["vi"] = {
"Vietnamese",
9199,
"mkh-vie",
"Latn, Hani",
ancestors = "mkh-mvi",
sort_key = {
Latn = "vi-sortkey",
Hani = "Hani-sortkey",
},
}
m["vo"] = {
"Volapük",
36986,
"art",
"Latn",
}
m["wa"] = {
"Walloon",
34219,
"roa-oil",
"Latn",
sort_key = s["roa-oil-sortkey"],
}
m["wo"] = {
"Wolof",
34257,
"alv-fwo",
"Latn, Arab, Gara",
}
m["xh"] = {
"Xhosa",
13218,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["yi"] = {
"Yiddish",
8641,
"gmw-hgm",
"Hebr, Latn",
ancestors = "gmh",
translit = {
Hebr = "yi-translit",
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["yo"] = {
"Yoruba",
34311,
"alv-yor",
"Latn, Arab",
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.macron}
},
sort_key = {
Latn = {
from = {"ẹ", "ɛ", "gb", "ị", "kp", "ọ", "ɔ", "ṣ", "sh", "ụ"},
to = {"e" .. p[1], "e" .. p[1], "g" .. p[1], "i" .. p[1], "k" .. p[1], "o" .. p[1], "o" .. p[1], "s" .. p[1], "s" .. p[1], "u" .. p[1]}
},
},
}
m["za"] = {
"Zhuang",
13216,
"tai",
"Latn, Hani",
sort_key = {
Latn = "za-sortkey",
Hani = "Hani-sortkey",
},
}
m["zh"] = {
"Chinese",
7850,
"zhx",
"Hants, Latn, Bopo, Nshu, Brai",
ancestors = "ltc",
generate_forms = "zh-generateforms",
translit = {
Hani = "zh-translit",
Bopo = "zh-translit",
},
sort_key = {
Hani = "Hani-sortkey"
},
}
m["zu"] = {
"Zulu",
10179,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
return require("Module:languages").finalizeData(m, "language")
5fa8phvhgeh3ec9j59qc1zn00yjd9wj
235453
235452
2026-06-02T10:42:24Z
Lee
19
[[:en:Module:languages/data/2]] වෙතින් එක් සංශෝධනයක්
235452
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
-- Ideally, we want to move these into [[Module:languages/data]], but because (a) it's necessary to use require on that module, and (b) they're only used in this data module, it's less memory-efficient to do that at the moment. If it becomes possible to use mw.loadData, then these should be moved there.
s["de-Latn-sortkey"] = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.ringabove,
from = {"æ", "œ", "ß"},
to = {"ae", "oe", "ss"}
}
s["de-Latn-standardchars"] = "AaÄäBbCcDdEeFfGgHhIiJjKkLlMmNnOoÖöPpQqRrSsẞßTtUuÜüVvWwXxYyZz"
s["ka-stripdiacritics"] = {remove_diacritics = c.circ}
s["no-sortkey"] = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dacute .. c.caron .. c.cedilla,
remove_exceptions = {"å"},
from = {"æ", "ø", "å"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]}
}
s["no-standardchars"] = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÆæØøÅå" .. c.punc
s["sa-Deva-stripdiacritics"] = { -- Don't use remove_diacritics for accent marks, as १ and ३ should also be removed if (and only if) they carry any.
from = {"ॐ", "[१३]?[" .. c.anudatta .. c.udatta .. c.dsvarita .. c.tsvarita .. "]+"},
to = {"ओँ"},
}
s["tg-stripdiacritics"] = {remove_diacritics = c.grave .. c.acute}
s["tk-stripdiacritics"] = {remove_diacritics = c.macron}
local m = {}
m["aa"] = {
"Afar",
27811,
"cus-eas",
"Latn, Ethi",
strip_diacritics = {
Latn = {remove_diacritics = c.acute},
},
}
m["ab"] = {
"Abkhaz",
5111,
"cau-abz",
"Cyrl, Geor, Latn",
translit = {
Cyrl = "ab-translit",
-- Geor translit in [[Module:scripts/data]]
},
override_translit = true,
display_text = {
Cyrl = s["cau-Cyrl-displaytext"]
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.acute,
from = {"^а%-"},
to = {"а"},
},
Latn = s["cau-Latn-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {
"х'ә", -- 3 chars
"гь", "гә", "ӷь", "ҕь", "ӷә", "ҕә", "дә", "ё", "жь", "жә", "ҙә", "ӡә", "ӡ'", "кь", "кә", "қь", "қә", "ҟь", "ҟә", "ҫә", "тә", "ҭә", "ф'", "хь", "хә", "х'", "ҳә", "ць", "цә", "ц'", "ҵә", "ҵ'", "шь", "шә", "џь", -- 2 chars
"ӷ", "ҕ", "ҙ", "ӡ", "қ", "ҟ", "ԥ", "ҧ", "ҫ", "ҭ", "ҳ", "ҵ", "ҷ", "ҽ", "ҿ", "ҩ", "џ", "ә", -- 1 char
"^а",
},
to = {
"х" .. p[4],
"г" .. p[1], "г" .. p[2], "г" .. p[5], "г" .. p[6], "г" .. p[7], "г" .. p[8], "д" .. p[1], "е" .. p[1], "ж" .. p[1], "ж" .. p[2], "з" .. p[2], "з" .. p[4], "з" .. p[5], "к" .. p[1], "к" .. p[2], "к" .. p[4], "к" .. p[5], "к" .. p[7], "к" .. p[8], "с" .. p[2], "т" .. p[1], "т" .. p[3], "ф" .. p[1], "х" .. p[1], "х" .. p[2], "х" .. p[3], "х" .. p[6], "ц" .. p[1], "ц" .. p[2], "ц" .. p[3], "ц" .. p[5], "ц" .. p[6], "ш" .. p[1], "ш" .. p[2], "ы" .. p[3],
"г" .. p[3], "г" .. p[4], "з" .. p[1], "з" .. p[3], "к" .. p[3], "к" .. p[6], "п" .. p[1], "п" .. p[2], "с" .. p[1], "т" .. p[2], "х" .. p[5], "ц" .. p[4], "ч" .. p[1], "ч" .. p[2], "ч" .. p[3], "ы" .. p[1], "ы" .. p[2], "ь" .. p[1],
"",
}
},
},
}
m["ae"] = {
"Avestan",
29572,
"ira-cen",
"Avst, Gujr, Deva",
translit = {
Avst = "Avst-translit"
},
}
m["af"] = {
"Afrikaans",
14196,
"gmw-frk",
"Latn, Arab",
ancestors = "nl",
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.diaer .. c.ringabove .. c.cedilla .. "'",
from = {"['ʼ]n"},
to = {"n" .. p[1]}
}
},
}
m["ak"] = {
"Akan",
28026,
"alv-ctn",
"Latn",
}
m["am"] = {
"Amharic",
28244,
"sem-eth",
"Ethi",
translit = "Ethi-translit",
}
m["an"] = {
"Aragonese",
8765,
"roa-nar",
"Latn",
}
m["ar"] = {
"Arabic",
13955,
"sem-arb",
"Arab, Hebr, Syrc, Brai, Nbat",
translit = {
Arab = "ar-translit"
},
strip_diacritics = {
Arab = "ar-stripdiacritics",
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["as"] = {
"Assamese",
29401,
"inc-bas",
"as-Beng",
ancestors = "inc-mas",
translit = "as-translit",
}
m["av"] = {
"Avar",
29561,
"cau-ava",
"Cyrl, Latn, Arab",
ancestors = "oav",
translit = {
Cyrl = "cau-nec-translit",
Arab = "ar-translit",
},
override_translit = true,
display_text = {
Cyrl = s["cau-Cyrl-displaytext"],
},
strip_diacritics = {
Cyrl = s["cau-Cyrl-stripdiacritics"],
Latn = s["cau-Latn-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {"гъ", "гь", "гӏ", "ё", "кк", "къ", "кь", "кӏ", "лъ", "лӏ", "тӏ", "хх", "хъ", "хь", "хӏ", "цӏ", "чӏ"},
to = {"г" .. p[1], "г" .. p[2], "г" .. p[3], "е" .. p[1], "к" .. p[1], "к" .. p[2], "к" .. p[3], "к" .. p[4], "л" .. p[1], "л" .. p[2], "т" .. p[1], "х" .. p[1], "х" .. p[2], "х" .. p[3], "х" .. p[4], "ц" .. p[1], "ч" .. p[1]}
},
},
}
m["ay"] = {
"Aymara",
4627,
"sai-aym",
"Latn",
}
m["az"] = {
"Azerbaijani",
9292,
"trk-ogz",
"Latn, Cyrl, fa-Arab",
ancestors = "trk-oat",
dotted_dotless_i = true,
strip_diacritics = {
Latn = {
from = {"ʼ"},
to = {"'"},
},
["fa-Arab"] = {
module = "ar-stripdiacritics",
["from"] = {
"ۆ",
"ۇ",
"وْ",
"ڲ",
"ؽ",
},
["to"] = {
"و",
"و",
"و",
"گ",
"ی",
},
},
},
display_text = {
Latn = {
from = {"'"},
to = {"ʼ"}
}
},
sort_key = {
Latn = {
from = {
"i", -- Ensure "i" comes after "ı".
"ç", "ə", "ğ", "x", "ı", "q", "ö", "ş", "ü", "w"
},
to = {
"i" .. p[1],
"c" .. p[1], "e" .. p[1], "g" .. p[1], "h" .. p[1], "i", "k" .. p[1], "o" .. p[1], "s" .. p[1], "u" .. p[1], "z" .. p[1]
}
},
Cyrl = {
from = {"ғ", "ә", "ы", "ј", "ҝ", "ө", "ү", "һ", "ҹ"},
to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "и" .. p[2], "к" .. p[1], "о" .. p[1], "у" .. p[1], "х" .. p[1], "ч" .. p[1]}
},
},
}
m["ba"] = {
"Bashkir",
13389,
"trk-kbu",
"Cyrl",
translit = "ba-translit",
override_translit = true,
sort_key = {
from = {"ғ", "ҙ", "ё", "ҡ", "ң", "ө", "ҫ", "ү", "һ", "ә"},
to = {"г" .. p[1], "д" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "с" .. p[1], "у" .. p[1], "х" .. p[1], "э" .. p[1]}
},
}
m["be"] = {
"Belarusian",
9091,
"zle",
"Cyrl, Latn",
ancestors = "zle-mbe",
translit = {
Cyrl = "be-translit",
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.grave .. c.acute,
},
Latn = {
remove_diacritics = c.grave .. c.acute,
remove_exceptions = {"Ć", "ć", "Ń", "ń", "Ś", "ś", "Ź", "ź"},
},
},
sort_key = {
Cyrl = {
remove_diacritics = c.grave .. c.acute,
from = {"ґ", "ё", "і", "ў"},
to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "у" .. p[1]}
},
Latn = {
remove_diacritics = c.grave .. c.acute,
remove_exceptions = {"Ć", "ć", "Ń", "ń", "Ś", "ś", "Ź", "ź"},
from = {"ć", "č", "dz", "dź", "dž", "ch", "ł", "ń", "ś", "š", "ŭ", "ź", "ž"},
to = {"c" .. p[1], "c" .. p[2], "d" .. p[1], "d" .. p[2], "d" .. p[3], "h" .. p[1], "l" .. p[1], "n" .. p[1], "s" .. p[1], "s" .. p[2], "u" .. p[1], "z" .. p[1], "z" .. p[2]}
},
},
standard_chars = {
Cyrl = "АаБбВвГгДдЕеЁёЖжЗзІіЙйКкЛлМмНнОоПпРрСсТтУуЎўФфХхЦцЧчШшЫыЬьЭэЮюЯя",
Latn = "AaBbCcĆćČčDdEeFfGgHhIiJjKkLlŁłMmNnŃńOoPpRrSsŚśŠšTtUuŬŭVvYyZzŹźŽž",
(c.punc:gsub("'", "")) -- Exclude apostrophe.
},
}
m["bg"] = {
"Bulgarian",
7918,
"zls",
"Cyrl",
ancestors = "cu-bgm",
translit = "bg-translit",
strip_diacritics = {
remove_diacritics = c.grave .. c.acute,
remove_exceptions = {"%f[^%z%s]ѝ%f[%z%s]"},
},
sort_key = {
remove_diacritics = c.grave .. c.acute,
remove_exceptions = {"%f[^%z%s]ѝ%f[%z%s]"},
},
standard_chars = "АаБбВвГгДдЕеЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЬьЮюЯя" .. c.punc,
}
m["bh"] = {
"Bihari",
135305,
"inc-eas",
"Deva",
}
m["bi"] = {
"Bislama",
35452,
"crp",
"Latn",
ancestors = "en",
}
m["bm"] = {
"Bambara",
33243,
"dmn-emn",
"Latn, Nkoo",
sort_key = {
Latn = {
from = {"ɛ", "ɲ", "ŋ", "ɔ"},
to = {"e" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1]}
},
},
}
m["bn"] = {
"Bengali",
9610,
"inc-bas",
"Beng, Newa",
ancestors = "inc-mbn",
translit = {
Beng = "bn-translit"
},
}
m["bo"] = {
"Tibetan",
34271,
"sit-tib",
"Tibt", -- sometimes Deva?
ancestors = "xct",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["br"] = {
"Breton",
12107,
"cel-brs",
"Latn",
ancestors = "xbm",
sort_key = {
from = {"ch", "c['ʼ’]h"},
to = {"c" .. p[1], "c" .. p[2]}
},
}
m["ca"] = {
"Catalan",
7026,
"roa-ocr",
"Latn",
ancestors = "roa-oca",
sort_key = {remove_diacritics = c.grave .. c.acute .. c.diaer .. c.cedilla .. "·"},
standard_chars = "AaÀàBbCcÇçDdEeÉéÈèFfGgHhIiÍíÏïJjLlMmNnOoÓóÒòPpQqRrSsTtUuÚúÜüVvXxYyZz·" .. c.punc,
}
m["ce"] = {
"Chechen",
33350,
"cau-vay",
"Cyrl, Latn, Arab",
translit = {
Cyrl = "cau-nec-translit",
Arab = "ar-translit",
},
override_translit = true,
display_text = {
Cyrl = s["cau-Cyrl-displaytext"]
},
strip_diacritics = {
Cyrl = s["cau-Cyrl-stripdiacritics"],
Latn = s["cau-Latn-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {"аь", "гӏ", "ё", "кх", "къ", "кӏ", "оь", "пӏ", "тӏ", "уь", "хь", "хӏ", "цӏ", "чӏ", "юь", "яь"},
to = {"а" .. p[1], "г" .. p[1], "е" .. p[1], "к" .. p[1], "к" .. p[2], "к" .. p[3], "о" .. p[1], "п" .. p[1], "т" .. p[1], "у" .. p[1], "х" .. p[1], "х" .. p[2], "ц" .. p[1], "ч" .. p[1], "ю" .. p[1], "я" .. p[1]}
},
},
}
m["ch"] = {
"Chamorro",
33262,
"poz",
"Latn",
sort_key = {
remove_diacritics = "'",
from = {"å", "ch", "ñ", "ng"},
to = {"a" .. p[1], "c" .. p[1], "n" .. p[1], "n" .. p[2]}
},
}
m["co"] = {
"Corsican",
33111,
"roa-itr",
"Latn",
sort_key = {
from = {"chj", "ghj", "sc", "sg"},
to = {"c" .. p[1], "g" .. p[1], "s" .. p[1], "s" .. p[2]}
},
standard_chars = "AaÀàBbCcDdEeÈèFfGgHhIiÌìÏïJjLlMmNnOoÒòPpQqRrSsTtUuÙùÜüVvZz" .. c.punc,
}
m["cr"] = {
"Cree",
33390,
"alg",
"Latn, Cans",
translit = {
Cans = "cr-translit"
},
}
m["cs"] = {
"Czech",
9056,
"zlw",
"Latn",
ancestors = "cs-ear",
sort_key = {
from = {"á", "č", "ď", "é", "ě", "ch", "í", "ň", "ó", "ř", "š", "ť", "ú", "ů", "ý", "ž"},
to = {"a" .. p[1], "c" .. p[1], "d" .. p[1], "e" .. p[1], "e" .. p[2], "h" .. p[1], "i" .. p[1], "n" .. p[1], "o" .. p[1], "r" .. p[1], "s" .. p[1], "t" .. p[1], "u" .. p[1], "u" .. p[2], "y" .. p[1], "z" .. p[1]}
},
standard_chars = "AaÁáBbCcČčDdĎďEeÉéĚěFfGgHhIiÍíJjKkLlMmNnŇňOoÓóPpRrŘřSsŠšTtŤťUuÚúŮůVvYyÝýZzŽž" .. c.punc,
}
m["cu"] = {
"Old Church Slavonic",
35499,
"zls",
"Cyrs, Glag, Zname",
translit = {
Cyrs = "Cyrs-translit",
Glag = "Glag-translit"
},
-- Cyrs strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["cv"] = {
"Chuvash",
33348,
"trk-ogr",
"Cyrl",
ancestors = "cv-mid",
translit = "cv-translit",
override_translit = true,
sort_key = {
from = {"ӑ", "ё", "ӗ", "ҫ", "ӳ"},
to = {"а" .. p[1], "е" .. p[1], "е" .. p[2], "с" .. p[1], "у" .. p[1]}
},
}
m["cy"] = {
"Welsh",
9309,
"cel-brw",
"Latn",
ancestors = "wlm",
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. "'",
from = {"ch", "dd", "ff", "ng", "ll", "ph", "rh", "th"},
to = {"c" .. p[1], "d" .. p[1], "f" .. p[1], "g" .. p[1], "l" .. p[1], "p" .. p[1], "r" .. p[1], "t" .. p[1]}
},
standard_chars = "ÂâAaBbCcDdEeÊêFfGgHhIiÎîLlMmNnOoÔôPpRrSsTtUuÛûWwŴŵYyŶŷ" .. c.punc,
}
m["da"] = {
"Danish",
9035,
"gmq-eas",
"Latn",
ancestors = "gmq-oda",
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dacute .. c.caron .. c.cedilla,
remove_exceptions = {"å"},
from = {"æ", "ø", "å"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]}
},
standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÆæØøÅå" .. c.punc,
}
m["de"] = {
"German",
188,
"gmw-hgm",
"Latn, Latf, Brai",
ancestors = "de-ear",
sort_key = {
Latn = s["de-Latn-sortkey"],
Latf = s["de-Latn-sortkey"],
},
standard_chars = {
Latn = s["de-Latn-standardchars"],
Latf = s["de-Latn-standardchars"],
Brai = c.braille,
c.punc
}
}
m["dv"] = {
"Dhivehi",
32656,
"inc-ins",
"Thaa, Diak",
translit = {
Thaa = "dv-translit",
Diak = "Diak-translit",
},
ancestors = "dv-old",
override_translit = true,
}
m["dz"] = {
"Dzongkha",
33081,
"sit-tib",
"Tibt",
ancestors = "xct",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["ee"] = {
"Ewe",
30005,
"alv-gbe",
"Latn",
sort_key = {
remove_diacritics = c.tilde,
from = {"ɖ", "dz", "ɛ", "ƒ", "gb", "ɣ", "kp", "ny", "ŋ", "ɔ", "ts", "ʋ"},
to = {"d" .. p[1], "d" .. p[2], "e" .. p[1], "f" .. p[1], "g" .. p[1], "g" .. p[2], "k" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1], "t" .. p[1], "v" .. p[1]}
},
}
m["el"] = {
"Greek",
9129,
"grk",
"Grek, Polyt, Brai",
ancestors = "el-kth",
translit = "el-translit",
override_translit = true,
-- Grek and Polyt display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
standard_chars = {
Grek = "΅·ͺ΄ΑαΆάΒβΓγΔδΕεέΈΖζΗηΉήΘθΙιΊίΪϊΐΚκΛλΜμΝνΞξΟοΌόΠπΡρΣσςΤτΥυΎύΫϋΰΦφΧχΨψΩωΏώ",
Brai = c.braille,
c.punc
},
}
m["en"] = {
"English",
1860,
"gmw-ang",
"Latn, Brai, Shaw, Dsrt", -- entries in Shaw or Dsrt might require prior discussion
wikimedia_codes = "en, simple",
ancestors = "en-ear",
sort_key = {
Latn = {
-- Many of these are needed for sorting language names.
remove_diacritics = "'\"%-%.,%s·ʻʼ" .. c.diacritics,
-- These are found in pagenames.
from = {"[ɒæ🅱¢©ᴄðđəǝɜɡħʜıɨłŋɲøɔœꝑꝓꝕßʋ]"},
to = {{
["ɒ"] = "a", ["æ"] = "ae", ["🅱"] = "b", ["¢"] = "c", ["©"] = "c",
["ᴄ"] = "c", ["ð"] = "d", ["đ"] = "d", ["ə"] = "e", ["ǝ"] = "e",
["ɜ"] = "e", ["ɡ"] = "g", ["ħ"] = "h", ["ʜ"] = "h", ["ı"] = "i",
["ɨ"] = "i", ["ł"] = "l", ["ŋ"] = "n", ["ɲ"] = "n", ["ø"] = "o",
["ɔ"] = "o", ["œ"] = "oe", ["ꝑ"] = "p", ["ꝓ"] = "p", ["ꝕ"] = "p",
["ß"] = "ss", ["ʋ"] = "v",
}},
},
},
standard_chars = {
Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz",
Brai = c.braille,
c.punc
},
}
m["eo"] = {
"Esperanto",
143,
"art",
"Latn",
sort_key = {
remove_diacritics = c.grave .. c.acute,
from = {"ĉ", "ĝ", "ĥ", "ĵ", "ŝ", "ŭ"},
to = {"c" .. p[1], "g" .. p[1], "h" .. p[1], "j" .. p[1], "s" .. p[1], "u" .. p[1]}
},
standard_chars = "AaBbCcĈĉDdEeFfGgĜĝHhĤĥIiJjĴĵKkLlMmNnOoPpRrSsŜŝTtUuŬŭVvZz" .. c.punc,
}
m["es"] = {
"Spanish",
1321,
"roa-cas",
"Latn, Brai",
ancestors = "es-ear",
sort_key = {
Latn = {
remove_exceptions = {"ñ"},
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.diaer .. c.cedilla,
from = {"ª", "æ", "ñ", "º", "œ"},
to = {"a", "ae", "n" .. p[1], "o", "oe"}
},
},
standard_chars = {
Latn = "AaÁáBbCcDdEeÉéFfGgHhIiÍíJjLlMmNnÑñOoÓóPpQqRrSsTtUuÚúÜüVvXxYyZz",
Brai = c.braille,
c.punc
},
}
m["et"] = {
"Estonian",
9072,
"urj-fin",
"Latn",
sort_key = {
from = {
"š", "ž", "õ", "ä", "ö", "ü", -- 2 chars
"z" -- 1 char
},
to = {
"s" .. p[1], "s" .. p[3], "w" .. p[1], "w" .. p[2], "w" .. p[3], "w" .. p[4],
"s" .. p[2]
}
},
standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvÕõÄäÖöÜü" .. c.punc,
}
m["eu"] = {
"Basque",
8752,
"euq",
"Latn",
sort_key = {
from = {"ç", "ñ"},
to = {"c" .. p[1], "n" .. p[1]}
},
standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnÑñOoPpRrSsTtUuXxZz" .. c.punc,
}
m["fa"] = {
"Persian",
9168,
"ira-swi",
"fa-Arab, Hebr",
ancestors = "fa-cls",
strip_diacritics = {
["fa-Arab"] = {
-- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه"; hamzatu l-waṣli to a regular alif
from = {"هٔ", "ٱ"}, -- character "ۂ" code U+06C2 to "ه"; hamzatu l-waṣli to a regular alif
to = {"ه", "ا"},
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef,
},
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["ff"] = {
"Fula",
33454,
"alv-fwo",
"Latn, Adlm",
}
m["fi"] = {
"Finnish",
1412,
"urj-fin",
"Latn",
display_text = {
from = {"'"},
to = {"’"}
},
strip_diacritics = { -- used to indicate gemination of the next consonant
remove_diacritics = "ˣ",
from = {"’"},
to = {"'"},
},
sort_key = { -- [[Appendix:Finnish alphabet#Collation]] + "aͤ" and "oͤ" as historical variants of "ä" and "ö".
remove_diacritics = "'’:" .. c.diacritics,
remove_exceptions = {
"a[" .. c.ringabove .. c.diaer .. c.small_e .. "]", -- åäaͤ
"o[" .. c.diaer .. c.tilde .. c.dacute .. c.small_e .. "]", -- öõőoͤ
"u[" .. c.diaer .. c.dacute .. "]" -- üű
},
from = {"æ", "[ðđ]", "ł", "ŋ", "œ", "ß", "þ", "u[" .. c.diaer .. c.dacute .. "]", "å", "aͤ", "o[" .. c.tilde .. c.dacute .. c.small_e .. "]", "ø", "(.)['%-]"},
to = {"ae", "d", "l", "n", "oe", "ss", "th", "y", "z" .. p[1], "ä", "ö", "ö", "%1"}
},
standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÄäÖö" .. c.punc,
}
m["fj"] = {
"Fijian",
33295,
"poz-pcc",
"Latn",
}
m["fo"] = {
"Faroese",
25258,
"gmq-ins",
"Latn",
sort_key = {
from = {"á", "ð", "í", "ó", "ú", "ý", "æ", "ø"},
to = {"a" .. p[1], "d" .. p[1], "i" .. p[1], "o" .. p[1], "u" .. p[1], "y" .. p[1], "z" .. p[1], "z" .. p[2]}
},
standard_chars = "AaÁáBbDdÐðEeFfGgHhIiÍíJjKkLlMmNnOoÓóPpRrSsTtUuÚúVvYyÝýÆæØø" .. c.punc,
}
m["fr"] = {
"French",
150,
"roa-oil",
"Latn, Brai",
ancestors = "frm",
sort_key = {
Latn = s["roa-oil-sortkey"]
},
standard_chars = {
Latn = "AaÀàÂâBbCcÇçDdEeÉéÈèÊêËëFfGgHhIiÎîÏïJjLlMmNnOoÔôŒœPpQqRrSsTtUuÙùÛûÜüVvXxYyZz",
Brai = c.braille,
c.punc
},
}
m["fy"] = {
"West Frisian",
27175,
"gmw-fri",
"Latn",
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer,
from = {"y"},
to = {"i"}
},
standard_chars = "AaâäàÆæBbCcDdEeéêëèFfGgHhIiïìYyỳJjKkLlMmNnOoôöòPpRrSsTtUuúûüùVvWwZz" .. c.punc,
}
m["ga"] = {
"Irish",
9142,
"cel-gae",
"Latn, Latg",
ancestors = "mga",
sort_key = {
remove_diacritics = c.acute,
from = {"ḃ", "ċ", "ḋ", "ḟ", "ġ", "ṁ", "ṗ", "ṡ", "ṫ"},
to = {"bh", "ch", "dh", "fh", "gh", "mh", "ph", "sh", "th"}
},
standard_chars = "AaÁáBbCcDdEeÉéFfGgHhIiÍíLlMmNnOoÓóPpRrSsTtUuÚúVv" .. c.punc,
}
m["gd"] = {
"Scottish Gaelic",
9314,
"cel-gae",
"Latn, Latg",
ancestors = "mga",
sort_key = {remove_diacritics = c.grave .. c.acute},
standard_chars = "AaÀàBbCcDdEeÈèFfGgHhIiÌìLlMmNnOoÒòPpRrSsTtUuÙù" .. c.punc,
}
m["gl"] = {
"Galician",
9307,
"roa-gap",
"Latn",
sort_key = {
remove_diacritics = c.acute,
from = {"ñ"},
to = {"n" .. p[1]}
},
standard_chars = "AaÁáBbCcDdEeÉéFfGgHhIiÍíÏïLlMmNnÑñOoÓóPpQqRrSsTtUuÚúÜüVvXxZz" .. c.punc,
}
m["gu"] = {
"Gujarati",
5137,
"inc-wes",
"Arab, Gujr",
ancestors = "inc-mgu",
translit = {
Gujr = "gu-translit",
},
strip_diacritics = {
Arab = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.kasra .. c.shadda .. c.sukun},
Gujr = {remove_diacritics = "઼"},
},
}
m["gv"] = {
"Manx",
12175,
"cel-gae",
"Latn",
ancestors = "mga",
sort_key = {remove_diacritics = c.cedilla .. "-"},
standard_chars = "AaBbCcÇçDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwYy" .. c.punc,
}
m["ha"] = {
"Hausa",
56475,
"cdc-wst",
"Latn, Arab",
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron}
},
sort_key = {
Latn = {
from = {"ɓ", "b'", "ɗ", "d'", "ƙ", "k'", "sh", "ƴ", "'y"},
to = {"b" .. p[1], "b" .. p[2], "d" .. p[1], "d" .. p[2], "k" .. p[1], "k" .. p[2], "s" .. p[1], "y" .. p[1], "y" .. p[2]}
},
},
}
m["he"] = {
"Hebrew",
9288,
"sem-can",
"Hebr, Phnx, Brai, Samr",
ancestors = "he-med",
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
-- Samr strip_diacritics, sort_key in [[Module:scripts/data]]
-- Phnx translit in [[Module:scripts/data]] (NOTE: not present before, presumably an accidental omission)
}
m["hi"] = {
"Hindi",
1568,
"inc-hnd",
"Deva, Kthi, Newa",
translit = {
Deva = "hi-translit"
},
standard_chars = {
Deva = "अआइईउऊएऐओऔकखगघङचछजझञटठडढणतथदधनपफबभमयरलवशषसहत्रज्ञक्षक़ख़ग़ज़झ़ड़ढ़फ़काखागाघाङाचाछाजाझाञाटाठाडाढाणाताथादाधानापाफाबाभामायारालावाशाषासाहात्राज्ञाक्षाक़ाख़ाग़ाज़ाझ़ाड़ाढ़ाफ़ाकिखिगिघिङिचिछिजिझिञिटिठिडिढिणितिथिदिधिनिपिफिबिभिमियिरिलिविशिषिसिहित्रिज्ञिक्षिक़िख़िग़िज़िझ़िड़िढ़िफ़िकीखीगीघीङीचीछीजीझीञीटीठीडीढीणीतीथीदीधीनीपीफीबीभीमीयीरीलीवीशीषीसीहीत्रीज्ञीक्षीक़ीख़ीग़ीज़ीझ़ीड़ीढ़ीफ़ीकुखुगुघुङुचुछुजुझुञुटुठुडुढुणुतुथुदुधुनुपुफुबुभुमुयुरुलुवुशुषुसुहुत्रुज्ञुक्षुक़ुख़ुग़ुज़ुझ़ुड़ुढ़ुफ़ुकूखूगूघूङूचूछूजूझूञूटूठूडूढूणूतूथूदूधूनूपूफूबूभूमूयूरूलूवूशूषूसूहूत्रूज्ञूक्षूक़ूख़ूग़ूज़ूझ़ूड़ूढ़ूफ़ूकेखेगेघेङेचेछेजेझेञेटेठेडेढेणेतेथेदेधेनेपेफेबेभेमेयेरेलेवेशेषेसेहेत्रेज्ञेक्षेक़ेख़ेग़ेज़ेझ़ेड़ेढ़ेफ़ेकैखैगैघैङैचैछैजैझैञैटैठैडैढैणैतैथैदैधैनैपैफैबैभैमैयैरैलैवैशैषैसैहैत्रैज्ञैक्षैक़ैख़ैग़ैज़ैझ़ैड़ैढ़ैफ़ैकोखोगोघोङोचोछोजोझोञोटोठोडोढोणोतोथोदोधोनोपोफोबोभोमोयोरोलोवोशोषोसोहोत्रोज्ञोक्षोक़ोख़ोग़ोज़ोझ़ोड़ोढ़ोफ़ोकौखौगौघौङौचौछौजौझौञौटौठौडौढौणौतौथौदौधौनौपौफौबौभौमौयौरौलौवौशौषौसौहौत्रौज्ञौक्षौक़ौख़ौग़ौज़ौझ़ौड़ौढ़ौफ़ौक्ख्ग्घ्ङ्च्छ्ज्झ्ञ्ट्ठ्ड्ढ्ण्त्थ्द्ध्न्प्फ्ब्भ्म्य्र्ल्व्श्ष्स्ह्त्र्ज्ञ्क्ष्क़्ख़्ग़्ज़्झ़्ड़्ढ़्फ़्।॥०१२३४५६७८९॰",
c.punc
},
}
m["ho"] = {
"Hiri Motu",
33617,
"crp",
"Latn",
ancestors = "meu",
}
m["ht"] = {
"Haitian Creole",
33491,
"crp",
"Latn",
ancestors = "ht-sdm",
sort_key = {
from = {
"oun", -- 3 chars
"an", "ch", "è", "en", "ng", "ò", "on", "ou", "ui" -- 2 chars
},
to = {
"o" .. p[4],
"a" .. p[1], "c" .. p[1], "e" .. p[1], "e" .. p[2], "n" .. p[1], "o" .. p[1], "o" .. p[2], "o" .. p[3], "u" .. p[1]
}
},
}
m["hu"] = {
"Hungarian",
9067,
"urj-ugr",
"Latn, Hung",
ancestors = "ohu",
sort_key = {
Latn = {
from = {
"dzs", -- 3 chars
"á", "cs", "dz", "é", "gy", "í", "ly", "ny", "ó", "ö", "ő", "sz", "ty", "ú", "ü", "ű", "zs", -- 2 chars
},
to = {
"d" .. p[2],
"a" .. p[1], "c" .. p[1], "d" .. p[1], "e" .. p[1], "g" .. p[1], "i" .. p[1], "l" .. p[1], "n" .. p[1], "o" .. p[1], "o" .. p[2], "o" .. p[3], "s" .. p[1], "t" .. p[1], "u" .. p[1], "u" .. p[2], "u" .. p[3], "z" .. p[1],
}
},
},
standard_chars = {
Latn = "AaÁáBbCcDdEeÉéFfGgHhIiÍíJjKkLlMmNnOoÓóÖöŐőPpQqRrSsTtUuÚúÜüŰűVvWwXxYyZz",
c.punc
},
}
m["hy"] = {
"Armenian",
8785,
"hyx",
"Armn, Brai",
ancestors = "axm",
-- Armn translit in [[Module:scripts/data]]
override_translit = true,
strip_diacritics = {
Armn = {
remove_diacritics = "՛՜՞՟",
from = {"եւ", "<sup>յ</sup>", "<sup>ի</sup>", "<sup>է</sup>", "յ̵", "ՙ", "՚"},
to = {"և", "յ", "ի", "է", "ֈ", "ʻ", "’"}
},
},
sort_key = {
Armn = {
from = {
"ու", "եւ", -- 2 chars
"և" -- 1 char
},
to = {
"ւ", "եվ",
"եվ"
}
},
},
}
m["hz"] = {
"Herero",
33315,
"bnt-swb",
"Latn",
}
m["ia"] = {
"Interlingua",
35934,
"art",
"Latn",
}
m["id"] = {
"Indonesian",
9240,
"poz-mly",
"Latn",
ancestors = "ms",
standard_chars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" .. c.punc,
}
m["ie"] = {
"Interlingue",
35850,
"art",
"Latn",
type = "appendix-constructed",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ},
}
m["ig"] = {
"Igbo",
33578,
"alv-igb",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.macron},
sort_key = {
from = {"gb", "gh", "gw", "ị", "kp", "kw", "ṅ", "nw", "ny", "ọ", "sh", "ụ"},
to = {"g" .. p[1], "g" .. p[2], "g" .. p[3], "i" .. p[1], "k" .. p[1], "k" .. p[2], "n" .. p[1], "n" .. p[2], "n" .. p[3], "o" .. p[1], "s" .. p[1], "u" .. p[1]}
},
}
m["ii"] = {
"Nuosu",
34235,
"tbq-nlo",
"Yiii",
translit = "ii-translit",
}
m["ik"] = {
"Inupiaq",
27183,
"esx-inu",
"Latn",
sort_key = {
from = {
"ch", "ġ", "dj", "ḷ", "ł̣", "ñ", "ng", "r̂", "sr", "zr", -- 2 chars
"ł", "ŋ", "ʼ" -- 1 char
},
to = {
"c" .. p[1], "g" .. p[1], "h" .. p[1], "l" .. p[1], "l" .. p[3], "n" .. p[1], "n" .. p[2], "r" .. p[1], "s" .. p[1], "z" .. p[1],
"l" .. p[2], "n" .. p[2], "z" .. p[2]
}
},
}
m["io"] = {
"Ido",
35224,
"art",
"Latn",
}
m["is"] = {
"Icelandic",
294,
"gmq-ins",
"Latn",
sort_key = {
from = {"á", "ð", "é", "í", "ó", "ú", "ý", "þ", "æ", "ö"},
to = {"a" .. p[1], "d" .. p[1], "e" .. p[1], "i" .. p[1], "o" .. p[1], "u" .. p[1], "y" .. p[1], "z" .. p[1], "z" .. p[2], "z" .. p[3]}
},
standard_chars = "AaÁáBbDdÐðEeÉéFfGgHhIiÍíJjKkLlMmNnOoÓóPpRrSsTtUuÚúVvXxYyÝýÞþÆæÖö" .. c.punc,
}
m["it"] = {
"Italian",
652,
"roa-itr",
"Latn",
ancestors = "roa-oit",
sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.ringabove},
standard_chars = "AaÀàBbCcDdEeÈèÉéFfGgHhIiÌìLlMmNnOoÒòPpQqRrSsTtUuÙùVvZz" .. c.punc,
}
m["iu"] = {
"Inuktitut",
29921,
"esx-inu",
"Cans, Latn",
translit = {
Cans = "cr-translit"
},
override_translit = true,
}
m["ja"] = {
"Japanese",
5287,
"jpx",
"Jpan, Latn, Brai",
ancestors = "ja-ear",
translit = s["jpx-translit"],
link_tr = true,
display_text = s["jpx-displaytext"],
strip_diacritics = s["jpx-stripdiacritics"],
sort_key = s["jpx-sortkey"],
}
m["jv"] = {
"Javanese",
33549,
"poz",
"Latn, Java, Arab",
ancestors = "kaw",
translit = {
Java = "jv-translit"
},
link_tr = true,
strip_diacritics = {
Latn = {remove_diacritics = c.circ} -- Modern jv don't use ê
},
sort_key = {
Latn = {
from = {"å", "dh", "é", "è", "ng", "ny", "th"},
to = {"a" .. p[1], "d" .. p[1], "e" .. p[1], "e" .. p[2], "n" .. p[1], "n" .. p[2], "t" .. p[1]}
},
},
}
m["ka"] = {
"Georgian",
8108,
"ccs-gzn",
"Geor, Geok, Hebr", -- Hebr is used to write Judeo-Georgian
ancestors = "ka-mid",
-- Geor, Geok translit in [[Module:scripts/data]]
override_translit = true,
strip_diacritics = {
Geor = s["ka-stripdiacritics"],
Geok = s["ka-stripdiacritics"],
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["kg"] = {
"Kongo",
33702,
"bnt-kng",
"Latn",
}
m["ki"] = {
"Kikuyu",
33587,
"bnt-kka",
"Latn",
}
m["kj"] = {
"Kwanyama",
1405077,
"bnt-ova",
"Latn",
}
m["kk"] = {
"Kazakh",
9252,
"trk-kno",
"Cyrl, Latn, kk-Arab",
translit = {
Cyrl = {
from = {
"Ё", "ё", "Й", "й", "Нг", "нг", "Ӯ", "ӯ", -- 2 chars; are "Ӯ" and "ӯ" actually used?
"А", "а", "Ә", "ә", "Б", "б", "В", "в", "Г", "г", "Ғ", "ғ", "Д", "д", "Е", "е", "Ж", "ж", "З", "з", "И", "и", "К", "к", "Қ", "қ", "Л", "л", "М", "м", "Н", "н", "Ң", "ң", "О", "о", "Ө", "ө", "П", "п", "Р", "р", "С", "с", "Т", "т", "У", "у", "Ұ", "ұ", "Ү", "ү", "Ф", "ф", "Х", "х", "Һ", "һ", "Ц", "ц", "Ч", "ч", "Ш", "ш", "Щ", "щ", "Ъ", "ъ", "Ы", "ы", "І", "і", "Ь", "ь", "Э", "э", "Ю", "ю", "Я", "я", -- 1 char
},
to = {
"E", "e", "İ", "i", "Ñ", "ñ", "U", "u",
"A", "a", "Ä", "ä", "B", "b", "V", "v", "G", "g", "Ğ", "ğ", "D", "d", "E", "e", "J", "j", "Z", "z", "İ", "i", "K", "k", "Q", "q", "L", "l", "M", "m", "N", "n", "Ñ", "ñ", "O", "o", "Ö", "ö", "P", "p", "R", "r", "S", "s", "T", "t", "U", "u", "Ū", "ū", "Ü", "ü", "F", "f", "X", "x", "H", "h", "S", "s", "Ç", "ç", "Ş", "ş", "Ş", "ş", "", "", "Y", "y", "I", "ı", "", "", "É", "é", "Ü", "ü", "Ä", "ä",
}
}
},
-- override_translit = true,
sort_key = {
Cyrl = {
from = {"ә", "ғ", "ё", "қ", "ң", "ө", "ұ", "ү", "һ", "і"},
to = {"а" .. p[1], "г" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "у" .. p[2], "х" .. p[1], "ы" .. p[1]}
},
},
standard_chars = {
Cyrl = "АаӘәБбВвГгҒғДдЕеЁёЖжЗзИиЙйКкҚқЛлМмНнҢңОоӨөПпРрСсТтУуҰұҮүФфХхҺһЦцЧчШшЩщЪъЫыІіЬьЭэЮюЯя",
c.punc
},
}
m["kl"] = {
"Greenlandic",
25355,
"esx-inu",
"Latn",
sort_key = {
from = {"æ", "ø", "å"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]}
}
}
m["km"] = {
"Khmer",
9205,
"mkh-kmr",
"Khmr",
ancestors = "xhm",
translit = "km-translit",
}
m["kn"] = {
"Kannada",
33673,
"dra-kan",
"Knda, Tutg",
ancestors = "dra-mkn",
-- Knda translit in [[Module:scripts/data]]
}
m["ko"] = {
"Korean",
9176,
"qfa-kor",
"Kore, Brai",
ancestors = "ko-ear",
translit = {
Kore = "ko-translit",
},
-- Kore strip_diacritics in [[Module:scripts/data]]
}
m["kr"] = {
"Kanuri",
36094,
"ssa-sah",
"Latn, Arab",
-- the sortkey and strip_diacritics are only for standard Kanuri; when dialectal entries get added, someone will have to work out how the dialects should be represented orthographically
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.breve}
},
sort_key = {
Latn = {
from = {"ǝ", "ny", "ɍ", "sh"},
to = {"e" .. p[1], "n" .. p[1], "r" .. p[1], "s" .. p[1]}
},
},
}
m["ks"] = {
"Kashmiri",
33552,
"inc-kas",
"ks-Arab, Deva, Shrd, Latn",
translit = {
["ks-Arab"] = "ks-Arab-translit",
Deva = "ks-Deva-translit",
-- Shrd translit in [[Module:scripts/data]]
},
}
-- "kv" is treated as "koi", "kpv", see [[WT:LT]]
m["kw"] = {
"Cornish",
25289,
"cel-brs",
"Latn",
ancestors = "cnx",
sort_key = {
from = {"ch"},
to = {"c" .. p[1]}
},
}
m["ky"] = {
"Kyrgyz",
9255,
"trk-kkp",
"Cyrl, Latn, Arab",
translit = {
Cyrl = "ky-translit"
},
override_translit = true,
sort_key = {
Cyrl = {
from = {"ё", "ң", "ө", "ү"},
to = {"е" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1]}
},
},
}
m["la"] = {
"Latin",
397,
"itc-laf",
"Latn, Ital",
ancestors = "itc-ola",
-- Ital translit in [[Module:scripts/data]] (NOTE: formerly not present, probably an accidental omission)
display_text = {
Latn = s["itc-Latn-displaytext"]
},
strip_diacritics = {
Latn = s["itc-Latn-stripdiacritics"]
},
sort_key = {
Latn = s["itc-Latn-sortkey"]
},
standard_chars = {
Latn = "AaBbCcDdEeFfGgHhIiLlMmNnOoPpQqRrSsTtUuVvXx",
c.punc
},
}
m["lb"] = {
"Luxembourgish",
9051,
"gmw-hgm",
"Latn, Brai",
ancestors = "gmw-cfr",
sort_key = {
Latn = {
from = {"ä", "ë", "é"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]}
},
},
}
m["lg"] = {
"Luganda",
33368,
"bnt-nyg",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.circ},
sort_key = {
from = {"ŋ"},
to = {"n" .. p[1]}
},
}
m["li"] = {
"Limburgish",
102172,
"gmw-frk",
"Latn",
ancestors = "dum",
}
m["ln"] = {
"Lingala",
36217,
"bnt-bmo",
"Latn",
sort_key = {
remove_diacritics = c.acute .. c.circ .. c.caron,
from = {"ɛ", "gb", "mb", "mp", "nd", "ng", "nk", "ns", "nt", "ny", "nz", "ɔ"},
to = {"e" .. p[1], "g" .. p[1], "m" .. p[1], "m" .. p[2], "n" .. p[1], "n" .. p[2], "n" .. p[3], "n" .. p[4], "n" .. p[5], "n" .. p[6], "n" .. p[7], "o" .. p[1]}
},
}
m["lo"] = {
"Lao",
9211,
"tai-swe",
"Laoo", -- also Tai Noi/Lao Buhan script
translit = "lo-translit",
sort_key = "Laoo-sortkey",
standard_chars = "0-9ກຂຄງຈຊຍດຕຖທນບປຜຝພຟມຢຣລວສຫອຮຯ-ໝ" .. c.punc,
}
m["lt"] = {
"Lithuanian",
9083,
"bat-eas",
"Latn",
ancestors = "olt",
display_text = "lt-common",
strip_diacritics = "lt-common",
sort_key = "lt-common",
standard_chars = "AaĄąBbCcČčDdEeĘęĖėFfGgHhIiĮįYyJjKkLlMmNnOoPpRrSsŠšTtUuŲųŪūVvZzŽž" .. c.punc,
}
m["lu"] = {
"Luba-Katanga",
36157,
"bnt-lub",
"Latn",
}
m["lv"] = {
"Latvian",
9078,
"bat-eas",
"Latn",
strip_diacritics = {
-- This attempts to convert vowels with tone marks to vowels either with or without macrons. Specifically, there should be no macrons if the vowel is part of a diphthong (including resonant diphthongs such pìrksts -> pirksts not #pīrksts). What we do is first convert the vowel + tone mark to a vowel + tilde in a decomposed fashion, then remove the tilde in diphthongs, then convert the remaining vowel + tilde sequences to macroned vowels, then delete any other tilde. We leave already-macroned vowels alone: Both e.g. ar and ār occur before consonants. FIXME: This still might not be sufficient.
from = {"([Ee])" .. c.cedilla, "[" .. c.grave .. c.circ .. c.tilde .."]", "([aAeEiIoOuU])" .. c.tilde .."?([lrnmuiLRNMUI])" .. c.tilde .. "?([^aAeEiIoOuU])", "([aAeEiIoOuU])" .. c.tilde .."?([lrnmuiLRNMUI])" .. c.tilde .."?$", "([iI])" .. c.tilde .. "?([eE])" .. c.tilde .. "?", "([aAeEiIuU])" .. c.tilde, c.tilde},
to = {"%1", c.tilde, "%1%2%3", "%1%2", "%1%2", "%1" .. c.macron}
},
sort_key = {
from = {"ā", "č", "ē", "ģ", "ī", "ķ", "ļ", "ņ", "š", "ū", "ž"},
to = {"a" .. p[1], "c" .. p[1], "e" .. p[1], "g" .. p[1], "i" .. p[1], "k" .. p[1], "l" .. p[1], "n" .. p[1], "s" .. p[1], "u" .. p[1], "z" .. p[1]}
},
standard_chars = "AaĀāBbCcČčDdEeĒēFfGgĢģHhIiĪīJjKkĶķLlĻļMmNnŅņOoPpRrSsŠšTtUuŪūVvZzŽž" .. c.punc,
}
m["mg"] = {
"Malagasy",
7930,
"poz-bre",
"Latn, Arab",
}
m["mh"] = {
"Marshallese",
36280,
"poz-mic",
"Latn",
sort_key = {
from = {"ā", "ļ", "m̧", "ņ", "n̄", "o̧", "ō", "ū"},
to = {"a" .. p[1], "l" .. p[1], "m" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1], "o" .. p[2], "u" .. p[1]}
},
}
m["mi"] = {
"Māori",
36451,
"poz-pep",
"Latn",
sort_key = {
remove_diacritics = c.macron,
from = {"ng", "wh"},
to = {"n" .. p[1], "w" .. p[1]}
},
}
m["mk"] = {
"Macedonian",
9296,
"zls",
"Cyrl, Polyt",
ancestors = "cu",
translit = {
Cyrl = "mk-translit",
-- FIXME: formerly no translit specified for Polyt; unclear if the default [[Module:grc-translit]] is
-- acceptable, so we disable it for now
Polyt = false,
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.acute,
remove_exceptions = {"Ѓ", "ѓ", "Ќ", "ќ"}
},
},
sort_key = {
Cyrl = {
remove_diacritics = c.grave,
remove_exceptions = {"ѓ", "ќ"},
from = {"ѓ", "ѕ", "ј", "љ", "њ", "ќ", "џ"},
to = {"д" .. p[1], "з" .. p[1], "и" .. p[1], "л" .. p[1], "н" .. p[1], "т" .. p[1], "ч" .. p[1]}
},
},
-- Polyt display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
standard_chars = {
Cyrl = "АаБбВвГгДдЃѓЕеЖжЗзЅѕИиЈјКкЛлЉљМмНнЊњОоПпРрСсТтЌќУуФфХхЦцЧчЏџШш",
c.punc
},
}
m["ml"] = {
"Malayalam",
36236,
"dra-mal",
"Mlym",
override_translit = true,
-- Mlym translit in [[Module:scripts/data]]
}
m["mn"] = {
"Mongolian",
9246,
"xgn-cen",
"Cyrl, Mong, Latn, Brai",
ancestors = "cmg",
translit = {
Cyrl = "mn-translit",
-- Mong translit in [[Module:scripts/data]]
},
override_translit = true,
-- Mong display_text and strip_diacritics in [[Module:scripts/data]]
strip_diacritics = {
Cyrl = {remove_diacritics = c.grave .. c.acute},
},
sort_key = {
Cyrl = {
remove_diacritics = c.grave,
from = {"ё", "ө", "ү"},
to = {"е" .. p[1], "о" .. p[1], "у" .. p[1]}
},
},
standard_chars = {
Cyrl = "АаБбВвГгДдЕеЁёЖжЗзИиЙйЛлМмНнОоӨөРрСсТтУуҮүХхЦцЧчШшЫыЬьЭэЮюЯя—",
Brai = c.braille,
c.punc
},
}
-- "mo" is treated as "ro", see [[WT:LT]]
m["mr"] = {
"Marathi",
1571,
"inc-sou",
"Deva, Modi",
ancestors = "omr",
translit = {
Deva = "mr-translit",
Modi = "mr-Modi-translit",
},
strip_diacritics = {
Deva = {
from = {"च़", "ज़", "झ़"},
to = {"च", "ज", "झ"}
},
},
}
m["ms"] = {
"Malay",
9237,
"poz-mly",
"Latn, ms-Arab",
ancestors = "ms-cla",
standard_chars = {
Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz",
c.punc
},
}
m["mt"] = {
"Maltese",
9166,
"sem-arb",
"Latn",
display_text = {
from = {"'"},
to = {"’"}
},
strip_diacritics = {
from = {"’"},
to = {"'"},
},
ancestors = "sqr",
sort_key = {
from = {
"ċ", "ġ", "ż", -- Convert into PUA so that decomposed form does not get caught by the next step.
"([cgz])", -- Ensure "c" comes after "ċ", "g" comes after "ġ" and "z" comes after "ż".
"g" .. p[1] .. "ħ", -- "għ" after initial conversion of "g".
p[3], p[4], "ħ", "ie", p[5] -- Convert "ċ", "ġ", "ħ", "ie", "ż" into final output.
},
to = {
p[3], p[4], p[5],
"%1" .. p[1],
"g" .. p[2],
"c", "g", "h" .. p[1], "i" .. p[1], "z"
}
},
}
m["my"] = {
"Burmese",
9228,
"tbq-brm",
"Mymr",
ancestors = "obr",
translit = "my-translit",
override_translit = true,
sort_key = {
from = {"ျ", "ြ", "ွ", "ှ", "ဿ"},
to = {"္ယ", "္ရ", "္ဝ", "္ဟ", "သ္သ"}
},
}
m["na"] = {
"Nauruan",
13307,
"poz-mic",
"Latn",
}
m["nb"] = {
"Norwegian Bokmål",
25167,
"gmq",
"Latn",
wikimedia_codes = "no",
ancestors = "gmq-mno, da", -- da as an (but not the) ancestor of nb was agreed on - do not change without discussion
sort_key = s["no-sortkey"],
standard_chars = s["no-standardchars"],
}
m["nd"] = {
"Northern Ndebele",
35613,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["ne"] = {
"Nepali",
33823,
"inc-pah",
"Deva, Newa",
translit = {
Deva = "ne-translit"
},
}
m["ng"] = {
"Ndonga",
33900,
"bnt-ova",
"Latn",
}
m["nl"] = {
"Dutch",
7411,
"gmw-frk",
"Latn, Brai",
ancestors = "dum",
sort_key = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.diaer .. c.ringabove .. c.cedilla .. "'"},
},
standard_chars = {
Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZzÄäËëÏïÖöÜü",
Brai = c.braille,
c.punc
},
}
m["nn"] = {
"Norwegian Nynorsk",
25164,
"gmq-wes",
"Latn",
ancestors = "gmq-mno",
strip_diacritics = {
remove_diacritics = c.grave .. c.acute,
},
sort_key = s["no-sortkey"],
standard_chars = s["no-standardchars"],
}
m["no"] = {
"Norwegian",
9043,
"gmq-wes",
"Latn",
ancestors = "gmq-mno",
sort_key = s["no-sortkey"],
standard_chars = s["no-standardchars"],
}
m["nr"] = {
"Southern Ndebele",
36785,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["nv"] = {
"Navajo",
13310,
"apa",
"Latn, Brai",
sort_key = {
remove_diacritics = c.acute .. c.ogonek,
from = {
"chʼ", "tłʼ", "tsʼ", -- 3 chars
"ch", "dl", "dz", "gh", "hw", "kʼ", "kw", "sh", "tł", "ts", "zh", -- 2 chars
"ł", "ʼ" -- 1 char
},
to = {
"c" .. p[2], "t" .. p[2], "t" .. p[4],
"c" .. p[1], "d" .. p[1], "d" .. p[2], "g" .. p[1], "h" .. p[1], "k" .. p[1], "k" .. p[2], "s" .. p[1], "t" .. p[1], "t" .. p[3], "z" .. p[1],
"l" .. p[1], "z" .. p[2]
}
},
}
m["ny"] = {
"Chichewa",
33273,
"bnt-nys",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.circ},
sort_key = {
from = {"ng'"},
to = {"ng"}
},
}
m["oc"] = {
"Occitan",
14185,
"roa-ocr",
"Latn, Hebr",
ancestors = "pro",
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.diaer .. c.cedilla,
from = {"([lns])·h"},
to = {"%1h"}
},
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["oj"] = {
"Ojibwe",
33875,
"alg",
"Cans, Latn",
sort_key = {
Latn = {
from = {"aa", "ʼ", "ii", "oo", "sh", "zh"},
to = {"a" .. p[1], "h" .. p[1], "i" .. p[1], "o" .. p[1], "s" .. p[1], "z" .. p[1]}
},
},
}
m["om"] = {
"Oromo",
33864,
"cus-eas",
"Latn, Ethi",
}
m["or"] = {
"Odia",
33810,
"inc-eas",
"Orya",
ancestors = "inc-mor",
translit = "or-translit",
}
m["os"] = {
"Ossetian",
33968,
"xsc-sar",
"Cyrl, Geor, Latn",
ancestors = "oos",
translit = {
Cyrl = "os-translit",
-- Geor translit in [[Module:scripts/data]]
},
override_translit = true,
display_text = {
Cyrl = {
from = {"æ"},
to = {"ӕ"}
},
Latn = {
from = {"ӕ"},
to = {"æ"}
},
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.grave .. c.acute,
from = {"æ"},
to = {"ӕ"}
},
Latn = {
from = {"ӕ"},
to = {"æ"}
},
},
sort_key = {
Cyrl = {
from = {"ӕ", "гъ", "дж", "дз", "ё", "къ", "пъ", "тъ", "хъ", "цъ", "чъ"},
to = {"а" .. p[1], "г" .. p[1], "д" .. p[1], "д" .. p[2], "е" .. p[1], "к" .. p[1], "п" .. p[1], "т" .. p[1], "х" .. p[1], "ц" .. p[1], "ч" .. p[1]}
},
},
}
m["pa"] = {
"Punjabi",
58635,
"inc-pan",
"Guru, pa-Arab",
translit = {
Guru = "Guru-translit",
["pa-Arab"] = "pa-Arab-translit",
},
strip_diacritics = {
["pa-Arab"] = {
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna,
from = {"ݨ", "ࣇ"},
to = {"ن", "ل"}
},
},
}
m["pi"] = {
"Pali",
36727,
"inc-mid",
"Latn, Brah, Deva, Beng, Sinh, Mymr, Thai, Lana, Laoo, Khmr, Cakm", --and also Khom
ancestors = "sa",
translit = {
-- Brah translit in [[Module:scripts/data]]
Deva = "sa-translit",
Beng = "pi-translit",
Sinh = "si-translit",
Mymr = "pi-translit",
Thai = "pi-translit",
Lana = "pi-translit",
Laoo = "pi-translit",
Khmr = "pi-translit",
Cakm = "Cakm-translit",
},
strip_diacritics = {
Thai = {
from = {"ึ", u(0xF700), u(0xF70F)}, -- FIXME: Not clear what's going on with the PUA characters here.
to = {"ิํ", "ฐ", "ญ"}
},
Mymr = {
remove_diacritics = c.VS01,
},
},
sort_key = { -- FIXME: This needs to be converted into the current standardized format.
from = {"ā", "ī", "ū", "ḍ", "ḷ", "m[" .. c.dotabove .. c.dotbelow .. "]", "ṅ", "ñ", "ṇ", "ṭ", "ॐ", "([เโ])([ก-ฮ])", "([ເໂ])([ກ-ຮ])", "ᩔ", "ᩕ", "ᩖ", "ᩘ", "([ᨭ-ᨱ])ᩛ", "([ᨷ-ᨾ])ᩛ", "ᩤ", u(0xFE00), u(0x200D)},
to = {"a~", "i~", "u~", "d~", "l~", "m~", "n~", "n~~", "n~~~", "t~", "ओँ", "%2%1", "%2%1", "ᩈ᩠ᩈ", "᩠ᩁ", "᩠ᩃ", "ᨦ᩠", "%1᩠ᨮ", "%1᩠ᨻ", "ᩣ"}
},
}
m["pl"] = {
"Polish",
809,
"zlw-lch",
"Latn",
ancestors = "zlw-mpl",
sort_key = {
from = {"ą", "ć", "ę", "ł", "ń", "ó", "ś", "ź", "ż"},
to = {"a" .. p[1], "c" .. p[1], "e" .. p[1], "l" .. p[1], "n" .. p[1], "o" .. p[1], "s" .. p[1], "z" .. p[1], "z" .. p[2]}
},
standard_chars = "AaĄąBbCcĆćDdEeĘęFfGgHhIiJjKkLlŁłMmNnŃńOoÓóPpRrSsŚśTtUuWwYyZzŹźŻż" .. c.punc,
}
m["ps"] = {
"Pashto",
58680,
"ira-pat",
"ps-Arab",
strip_diacritics = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.zwarakay .. c.superalef},
}
m["pt"] = {
"Portuguese",
5146,
"roa-gap",
"Latn, Brai",
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.diaer .. c.cedilla,
from = {"ª", "æ", "º", "œ"},
to = {"a", "ae", "o", "oe"}
},
},
standard_chars = {
Latn = "AaÁáÂâÃãBbCcÇçDdEeÉéÊêFfGgHhIiÍíJjLlMmNnOoÓóÔôÕõPpQqRrSsTtUuÚúVvXxZz",
Brai = c.braille,
c.punc
},
}
m["qu"] = {
"Quechua",
5218,
"qwe",
"Latn",
}
m["rm"] = {
"Romansh",
13199,
"roa-rhe",
ancestors = "rm-old",
"Latn",
sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.small_e},
}
m["ro"] = {
"Romanian",
7913,
"roa-eas",
"Latn, Cyrl, Cyrs",
translit = {
Cyrl = "ro-translit"
},
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute,
from = {"ă", "â", "î", "ș", "ț"},
to = {"a" .. p[1], "a" .. p[2], "i" .. p[1], "s" .. p[1], "t" .. p[1]}
},
Cyrl = {
from = {"ӂ"},
to = {"ж" .. p[1]}
},
},
-- Cyrs strip_diacritics, sort_key in [[Module:scripts/data]]; presumably not present
standard_chars = {
Latn = "AaĂăÂâBbCcDdEeFfGgHhIiÎîJjLlMmNnOoPpRrSsȘșTtȚțUuVvXxZz",
Cyrl = "АаБбВвГгДдЕеЖжӁӂЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЫыЬьЭэЮюЯя",
c.punc
},
}
m["ru"] = {
"Russian",
7737,
"zle",
"Cyrl, Brai",
ancestors = "zle-mru",
translit = {
Cyrl = "ru-translit"
},
display_text = {
Cyrl = {
from = {"'"},
to = {"’"}
},
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.grave .. c.acute .. c.diaer,
remove_exceptions = {"Ё", "ё", "Ѣ̈", "ѣ̈", "Я̈", "я̈"},
from = {"’"},
to = {"'"},
},
},
sort_key = {
Cyrl = {
remove_diacritics = c.grave .. c.acute .. c.diaer,
from = {
"і", "ѣ", "ѳ", "ѵ"
},
to = {
"и" .. p[1], "ь" .. p[1], "я" .. p[2], "я" .. p[3]
}
},
},
standard_chars = {
Cyrl = "АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя—",
Brai = c.braille,
(c.punc:gsub("'", "")) -- Exclude apostrophe.
},
}
m["rw"] = {
"Rwanda-Rundi",
3217514,
"bnt-glb",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.circ .. c.macron .. c.caron},
}
m["sa"] = {
"Sanskrit",
11059,
"inc",
"as-Beng, Bali, Beng, Bhks, Brah, Mymr, xwo-Mong, Deva, Gujr, Guru, Gran, Hani, Java, Kthi, Knda, Kawi, Khar, Khmr, Laoo, Mlym, mnc-Mong, Marc, Modi, Mong, Nand, Newa, Orya, Phag, Ranj, Saur, Shrd, Sidd, Sinh, Soyo, Lana, Takr, Taml, Tang, Telu, Thai, Tibt, Tutg, Tirh, Zanb", --and also Khom; script codes sorted by canonical name rather than code for [[MOD:sa-convert]]
translit = {
Beng = "sa-Beng-translit",
["as-Beng"] = "sa-Beng-translit",
-- Brah translit in [[Module:scripts/data]]
Deva = "sa-translit",
Gujr = "sa-Gujr-translit",
Guru = "sa-Guru-translit",
Java = "sa-Java-translit",
Kthi = "sa-Kthi-translit",
Khmr = "pi-translit",
Knda = "sa-Knda-translit",
Lana = "pi-translit",
Laoo = "pi-translit",
Mlym = "sa-Mlym-translit",
Modi = "sa-Modi-translit",
-- Mong, mnc-Mong, xwo-Mong translit in [[Module:scripts/data]]
-- NOTE: Formerly used xal-translit for transliterating xwo-Mong but that only handles Cyrillic; it has
-- code to transliterate xwo-Mong but it's broken so I've replaced it with the default xwo-translit.
Mymr = "pi-translit",
Orya = "sa-Orya-translit",
-- Shrd translit in [[Module:scripts/data]]
-- Sidd translit in [[Module:scripts/data]]
Sinh = "si-translit",
Taml = "sa-Taml-translit",
Telu = "sa-Telu-translit",
Thai = "pi-translit",
-- Tibt translit in [[Module:scripts/data]]
},
-- Mong display_text and strip_diacritics in [[Module:scripts/data]]
-- Tibt display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
strip_diacritics = {
Deva = s["sa-Deva-stripdiacritics"],
Mymr = {
remove_diacritics = c.VS01,
},
Thai = {
from = {"ึ", u(0xF700), u(0xF70F)}, -- FIXME: Not clear what's going on with the PUA characters here.
to = {"ิํ", "ฐ", "ญ"}
},
},
sort_key = {
Deva = s["sa-Deva-stripdiacritics"], -- until we have a proper Sanskrit sorting algorithm.
Lana = { -- Tai Tham
from = {"ᩔ", "ᩕ", "ᩖ", "ᩘ", "([ᨭ-ᨱ])ᩛ", "([ᨷ-ᨾ])ᩛ", "ᩤ"},
to = {"ᩈ᩠ᩈ", "᩠ᩁ", "᩠ᩃ", "ᨦ᩠", "%1᩠ᨮ", "%1᩠ᨻ", "ᩣ"},
},
Laoo = "Laoo-sortkey",
Latn = {
from = {"ā", "ī", "ū", "ḍ", "ḷ", "ḹ", "m[" .. c.dotabove .. c.dotbelow .. "]", "ṅ", "ñ", "ṇ", "ṛ", "ṝ", "ś", "ṣ", "ṭ"},
to = {"a~", "i~", "u~", "d~", "l~", "l~~", "m~", "n~", "n~~", "n~~~", "r~", "r~~", "s~", "s~~", "t~"},
},
Mymr = {
remove_diacritics = c.VS01,
},
Thai = "Thai-sortkey",
-- FIXME: The previous sort key which mixed all scripts removed ZWJ; I don't know which script(s) this was
-- intended for and there are no other languages which remove it in the sort key AFAIK. If it needs to be
-- removed, specify the script(s) it needs to be removed under or add handling for the "all" script that applies
-- regardless of script.
--all = {
-- remove_diacritics = c.ZWJ,
--},
},
}
m["sc"] = {
"Sardinian",
33976,
"roa-sou",
"Latn",
ancestors = "sc-old",
}
m["sd"] = {
"Sindhi",
33997,
"inc-snd",
"sd-Arab, Deva, Sind, Khoj",
translit = {
Sind = "Sind-translit",
["sd-Arab"] = "sd-Arab-translit"
},
strip_diacritics = {
["sd-Arab"] = {
remove_diacritics = c.kashida .. c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef,
from = {"ٱ"},
to = {"ا"}
},
},
}
m["se"] = {
"Northern Sami",
33947,
"smi",
"Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
strip_diacritics = {remove_diacritics = c.macron .. c.dotbelow .. "'ˈ"},
sort_key = {
from = {"á", "č", "đ", "ŋ", "š", "ŧ", "ž"},
to = {"a" .. p[1], "c" .. p[1], "d" .. p[1], "n" .. p[1], "s" .. p[1], "t" .. p[1], "z" .. p[1]}
},
standard_chars = "AaÁáBbCcČčDdĐđEeFfGgHhIiJjKkLlMmNnŊŋOoPpRrSsŠšTtŦŧUuVvZzŽž" .. c.punc,
}
m["sg"] = {
"Sango",
33954,
"crp",
"Latn",
ancestors = "ngb",
}
m["sh"] = {
"Serbo-Croatian",
9301,
"zls",
"Latn, Cyrl, Glag, Arab",
ietf_subtag = "hbs", -- ISO 639-3 code, since "sh" is deprecated from ISO 639-1
wikimedia_codes = "sh, bs, hr, sr",
strip_diacritics = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve,
remove_exceptions = {"Ć", "ć", "Ś", "ś", "Ź", "ź"}
},
Cyrl = {
remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve,
remove_exceptions = {"З́", "з́", "С́", "с́"}
},
},
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve,
remove_exceptions = {"ć", "ś", "ź"},
from = {"č", "ć", "dž", "đ", "lj", "nj", "š", "ś", "ž", "ź"},
to = {"c" .. p[1], "c" .. p[2], "d" .. p[1], "d" .. p[2], "l" .. p[1], "n" .. p[1], "s" .. p[1], "s" .. p[2], "z" .. p[1], "z" .. p[2]}
},
Cyrl = {
remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve,
remove_exceptions = {"з́", "с́"},
from = {"ђ", "з́", "ј", "љ", "њ", "с́", "ћ", "џ"},
to = {"д" .. p[1], "з" .. p[1], "и" .. p[1], "л" .. p[1], "н" .. p[1], "с" .. p[1], "т" .. p[1], "ч" .. p[1]}
},
},
standard_chars = {
Latn = "AaBbCcČčĆćDdĐđEeFfGgHhIiJjKkLlMmNnOoPpRrSsŠšTtUuVvZzŽž",
Cyrl = "АаБбВвГгДдЂђЕеЖжЗзИиЈјКкЛлЉљМмНнЊњОоПпРрСсТтЋћУуФфХхЦцЧчЏџШш",
c.punc
},
}
m["si"] = {
"Sinhalese",
13267,
"inc-ins",
"Sinh",
translit = "si-translit",
override_translit = true,
}
m["sk"] = {
"Slovak",
9058,
"zlw",
"Latn",
ancestors = "zlw-osk",
sort_key = {remove_diacritics = c.acute .. c.circ .. c.diaer .. c.caron},
standard_chars = "AaÁáÄäBbCcČčDdĎďEeÉéFfGgHhIiÍíJjKkLlĹ弾MmNnŇňOoÓóÔôPpRrŔŕSsŠšTtŤťUuÚúVvYyÝýZzŽž" .. c.punc,
}
m["sl"] = {
"Slovene",
9063,
"zls",
"Latn",
strip_diacritics = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.dgrave .. c.invbreve .. c.dotbelow,
remove_exceptions = {"Ć", "ć", "Ǵ", "ǵ", "Ś", "ś", "Ź", "ź"},
from = {"Ə", "ə", "Ł", "ł"},
to = {"E", "e", "L", "l"},
},
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dotabove .. c.ringabove .. c.dgrave .. c.invbreve .. c.dotbelow .. c.ringbelow .. c.ogonek,
remove_exceptions = {"ć", "ǵ", "ś", "ź"},
from = {"ä", "č", "ć", "đ", "ə", "ë", "ǧ", "ǵ", "ï", "ł", "ö", "š", "ś", "ü", "ž", "ź"},
to = {"a" .. p[1], "c" .. p[1], "c" .. p[2], "d" .. p[1], "e", "e" .. p[1], "g" .. p[1], "g" .. p[2], "i" .. p[1], "l", "o" .. p[1], "s" .. p[1], "s" .. p[2], "u" .. p[1], "z" .. p[1], "z" .. p[2]},
},
standard_chars = "AaBbCcČčDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsŠšTtUuVvZzŽž" .. c.punc,
}
m["sm"] = {
"Samoan",
34011,
"poz-pnp",
"Latn",
}
m["sn"] = {
"Shona",
34004,
"bnt-sho",
"Latn",
strip_diacritics = {remove_diacritics = c.acute},
}
m["so"] = {
"Somali",
13275,
"cus-som",
"Latn, Arab, Osma",
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ}
},
}
m["sq"] = {
"Albanian",
8748,
"sqj",
"Latn, Grek, ota-Arab, Elba, Todr, Vith",
translit = {
Elba = "Elba-translit",
Vith = "Vith-translit",
},
-- Grek display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
strip_diacritics = {
Latn = {
remove_diacritics = c.acute .. c.circ .. c.macron,
from = {'^[ie] (%w)', '^të (%w)'}, to = {'%1', '%1'},
},
},
sort_key = {
Latn = {
remove_diacritics = c.acute .. c.circ .. c.macron .. c.tilde .. c.breve .. c.caron,
from = {'^[ie] (%w)', '^të (%w)', 'ç', 'dh', 'ë', 'gj', 'll', 'nj', 'rr', 'sh', 'th', 'xh', 'zh'},
to = {'%1', '%1', 'c'..p[1], 'd'..p[1], 'e'..p[1], 'g'..p[1], 'l'..p[1], 'n'..p[1], 'r'..p[1], 's'..p[1], 't'..p[1], 'x'..p[1], 'z'..p[1]},
}
-- TODO: Grek if the default sort key is unsuitable
},
standard_chars = {
Latn = "AaBbCcÇçDdEeËëFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvXxYyZz",
c.punc
},
}
m["ss"] = {
"Swazi",
34014,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["st"] = {
"Sotho",
34340,
"bnt-sts",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["su"] = {
"Sundanese",
34002,
"poz-msa",
"Latn, Sund, Arab",
ancestors = "osn",
translit = {
Sund = "Sund-translit"
},
}
m["sv"] = {
"Swedish",
9027,
"gmq-eas",
"Latn",
ancestors = "gmq-osw-lat",
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dacute .. c.caron .. c.cedilla .. "':",
remove_exceptions = {"å"},
from = {"ø", "æ", "œ", "ß", "å", "aͤ", "oͤ"},
to = {"ö", "ae", "oe", "ss", "z" .. p[1], "ä", "ö"}
},
standard_chars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvXxYyÅåÄäÖö" .. c.punc,
}
m["sw"] = {
"Swahili",
7838,
"bnt-swh",
"Latn, Arab",
sort_key = {
Latn = {
from = {"ng'"},
to = {"ng" .. p[1]}
},
},
}
m["ta"] = {
"Tamil",
5885,
"dra-tam",
"Taml",
ancestors = "ta-mid",
translit = "ta-translit",
override_translit = true,
}
m["te"] = {
"Telugu",
8097,
"dra-tel",
"Telu",
translit = "te-translit",
override_translit = true,
}
m["tg"] = {
"Tajik",
9260,
"ira-swi",
"Cyrl, fa-Arab, Latn",
ancestors = "fa-cls",
translit = {
Cyrl = "tg-translit"
},
override_translit = true,
strip_diacritics = {
Cyrl = s["tg-stripdiacritics"],
Latn = s["tg-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {"ғ", "ё", "ӣ", "қ", "ӯ", "ҳ", "ҷ"},
to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "к" .. p[1], "у" .. p[1], "х" .. p[1], "ч" .. p[1]}
},
},
}
m["th"] = {
"Thai",
9217,
"tai-swe",
"Thai, Khomt, Brai",
translit = {
Thai = "th-translit"
},
sort_key = {
Thai = "Thai-sortkey"
},
}
m["ti"] = {
"Tigrinya",
34124,
"sem-eth",
"Ethi",
translit = "Ethi-translit",
}
m["tk"] = {
"Turkmen",
9267,
"trk-ogz",
"Latn, Cyrl, Arab",
strip_diacritics = {
Latn = s["tk-stripdiacritics"],
Cyrl = s["tk-stripdiacritics"],
},
sort_key = {
Latn = {
from = {"ç", "ä", "ž", "ň", "ö", "ş", "ü", "ý"},
to = {"c" .. p[1], "e" .. p[1], "j" .. p[1], "n" .. p[1], "o" .. p[1], "s" .. p[1], "u" .. p[1], "y" .. p[1]}
},
Cyrl = {
from = {"ё", "җ", "ң", "ө", "ү", "ә"},
to = {"е" .. p[1], "ж" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "э" .. p[1]}
},
},
ancestors = "trk-eog",
}
m["tl"] = {
"Tagalog",
34057,
"phi",
"Latn, Tglg",
translit = {
Tglg = "tl-translit"
},
override_translit = true,
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ}
},
standard_chars = {
Latn = "AaBbKkDdEeGgHhIiLlMmNnOoPpRrSsTtUuWwYy",
c.punc
},
sort_key = {
Latn = "tl-sortkey",
},
}
m["tn"] = {
"Tswana",
34137,
"bnt-sts",
"Latn",
}
m["to"] = {
"Tongan",
34094,
"poz-ton",
"Latn",
strip_diacritics = {remove_diacritics = c.acute},
sort_key = {remove_diacritics = c.macron},
}
m["tr"] = {
"Turkish",
256,
"trk-ogz",
"Latn",
ancestors = "ota",
dotted_dotless_i = true,
sort_key = {
from = {
-- Ignore circumflex, but account for capital Î wrongly becoming ı + circ due to dotted dotless I logic.
"ı" .. c.circ, c.circ,
"i", -- Ensure "i" comes after "ı".
"ç", "ğ", "ı", "ö", "ş", "ü"
},
to = {
"i", "",
"i" .. p[1],
"c" .. p[1], "g" .. p[1], "i", "o" .. p[1], "s" .. p[1], "u" .. p[1]
}
},
standard_chars = "AaÂâBbCcÇçDdEeFfGgĞğHhIıİiÎîJjKkLlMmNnOoÖöPpRrSsŞşTtUuÛûÜüVvYyZz" .. c.punc,
}
m["ts"] = {
"Tsonga",
34327,
"bnt-tsr",
"Latn",
}
m["tt"] = {
"Tatar",
25285,
"trk-kbu",
"Cyrl, Latn, tt-Arab",
translit = {
Cyrl = "tt-translit",
["tt-Arab"] = "tt-translit"
},
--override_translit = true, -- enable override until Module code can detect Russian loans such as [[аэропорт]]
dotted_dotless_i = true,
sort_key = {
Cyrl = {
from = {"ә", "ў", "ғ", "ё", "җ", "қ", "ң", "ө", "ү", "һ"},
to = {"а" .. p[1], "в" .. p[1], "г" .. p[1], "е" .. p[1], "ж" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "х" .. p[1]}
},
Latn = {
from = {
"i", -- Ensure "i" comes after "ı".
"ä", "ə", "ç", "ğ", "ı", "ñ", "ŋ", "ö", "ɵ", "ş", "ü"
},
to = {
"i" .. p[1],
"a" .. p[1], "a" .. p[2], "c" .. p[1], "g" .. p[1], "i", "n" .. p[1], "n" .. p[2], "o" .. p[1], "o" .. p[2], "s" .. p[1], "u" .. p[1]
}
},
},
}
-- "tw" is treated as "ak", see [[WT:LT]]
m["ty"] = {
"Tahitian",
34128,
"poz-pep",
"Latn",
}
m["ug"] = {
"Uyghur",
13263,
"trk-kar",
"ug-Arab, Latn, Cyrl",
ancestors = "chg",
translit = {
["ug-Arab"] = "ug-translit",
Cyrl = "ug-translit",
},
override_translit = true,
}
m["uk"] = {
"Ukrainian",
8798,
"zle",
"Cyrl",
ancestors = "zle-muk",
translit = "uk-translit",
strip_diacritics = {remove_diacritics = c.grave .. c.acute},
sort_key = {
remove_diacritics = c.grave .. c.acute,
from = {
"ї", -- 2 chars
"ґ", "є", "і" -- 1 char
},
to = {
"и" .. p[2],
"г" .. p[1], "е" .. p[1], "и" .. p[1]
}
},
standard_chars = "АаБбВвГгДдЕеЄєЖжЗзИиІіЇїЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЬьЮюЯя" .. c.punc:gsub("'", ""), -- Exclude apostrophe.
}
m["ur"] = {
"Urdu",
1617,
"inc-hnd",
"ur-Arab, Hebr",
translit = {
["ur-Arab"] = "ur-translit"
},
strip_diacritics = {
["ur-Arab"] = {
-- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه"; hamzatu l-waṣli to a regular alif
from = {"هٔ", "ۂ", "ٱ"},
to = {"ہ", "ہ", "ا"},
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna .. c.superalef
},
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
standard_chars = {
["ur-Arab"] = "ایببپتثجچحخدذرزژسشصضطظعغفقکگلࣇڷمنݨوؤہھئٹڈڑآے",
c.punc,
},
}
m["uz"] = {
"Uzbek",
9264,
"trk-kar",
"Latn, Cyrl, fa-Arab",
ancestors = "chg",
translit = {
Cyrl = "uz-translit"
},
sort_key = {
Latn = {
from = {"oʻ", "gʻ", "sh", "ch", "ng"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3], "z" .. p[4], "z" .. p[5]}
},
Cyrl = {
from = {"ё", "ў", "қ", "ғ", "ҳ"},
to = {"е" .. p[1], "я" .. p[1], "я" .. p[2], "я" .. p[3], "я" .. p[4]}
},
},
strip_diacritics = {
["fa-Arab"] = "ar-stripdiacritics",
},
}
m["ve"] = {
"Venda",
32704,
"bnt-bso",
"Latn",
}
m["vi"] = {
"Vietnamese",
9199,
"mkh-vie",
"Latn, Hani",
ancestors = "mkh-mvi",
sort_key = {
Latn = "vi-sortkey",
Hani = "Hani-sortkey",
},
}
m["vo"] = {
"Volapük",
36986,
"art",
"Latn",
}
m["wa"] = {
"Walloon",
34219,
"roa-oil",
"Latn",
sort_key = s["roa-oil-sortkey"],
}
m["wo"] = {
"Wolof",
34257,
"alv-fwo",
"Latn, Arab, Gara",
}
m["xh"] = {
"Xhosa",
13218,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["yi"] = {
"Yiddish",
8641,
"gmw-hgm",
"Hebr, Latn",
ancestors = "gmh",
translit = {
Hebr = "yi-translit",
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["yo"] = {
"Yoruba",
34311,
"alv-yor",
"Latn, Arab",
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.macron}
},
sort_key = {
Latn = {
from = {"ẹ", "ɛ", "gb", "ị", "kp", "ọ", "ɔ", "ṣ", "sh", "ụ"},
to = {"e" .. p[1], "e" .. p[1], "g" .. p[1], "i" .. p[1], "k" .. p[1], "o" .. p[1], "o" .. p[1], "s" .. p[1], "s" .. p[1], "u" .. p[1]}
},
},
}
m["za"] = {
"Zhuang",
13216,
"tai",
"Latn, Hani",
sort_key = {
Latn = "za-sortkey",
Hani = "Hani-sortkey",
},
}
m["zh"] = {
"Chinese",
7850,
"zhx",
"Hants, Latn, Bopo, Nshu, Brai",
ancestors = "ltc",
generate_forms = "zh-generateforms",
translit = {
Hani = "zh-translit",
Bopo = "zh-translit",
},
sort_key = {
Hani = "Hani-sortkey"
},
}
m["zu"] = {
"Zulu",
10179,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
return require("Module:languages").finalizeData(m, "language")
5fa8phvhgeh3ec9j59qc1zn00yjd9wj
235455
235453
2026-06-02T10:44:08Z
Pinthura
2424
භාෂා නාම සිංහලට පරිවර්තනය
235455
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
-- Ideally, we want to move these into [[Module:languages/data]], but because (a) it's necessary to use require on that module, and (b) they're only used in this data module, it's less memory-efficient to do that at the moment. If it becomes possible to use mw.loadData, then these should be moved there.
s["de-Latn-sortkey"] = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.ringabove,
from = {"æ", "œ", "ß"},
to = {"ae", "oe", "ss"}
}
s["de-Latn-standardchars"] = "AaÄäBbCcDdEeFfGgHhIiJjKkLlMmNnOoÖöPpQqRrSsẞßTtUuÜüVvWwXxYyZz"
s["ka-stripdiacritics"] = {remove_diacritics = c.circ}
s["no-sortkey"] = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dacute .. c.caron .. c.cedilla,
remove_exceptions = {"å"},
from = {"æ", "ø", "å"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]}
}
s["no-standardchars"] = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÆæØøÅå" .. c.punc
s["sa-Deva-stripdiacritics"] = { -- Don't use remove_diacritics for accent marks, as १ and ३ should also be removed if (and only if) they carry any.
from = {"ॐ", "[१३]?[" .. c.anudatta .. c.udatta .. c.dsvarita .. c.tsvarita .. "]+"},
to = {"ओँ"},
}
s["tg-stripdiacritics"] = {remove_diacritics = c.grave .. c.acute}
s["tk-stripdiacritics"] = {remove_diacritics = c.macron}
local m = {}
m["aa"] = {
"Afar",
27811,
"cus-eas",
"Latn, Ethi",
strip_diacritics = {
Latn = {remove_diacritics = c.acute},
},
}
m["ab"] = {
"Abkhaz",
5111,
"cau-abz",
"Cyrl, Geor, Latn",
translit = {
Cyrl = "ab-translit",
-- Geor translit in [[Module:scripts/data]]
},
override_translit = true,
display_text = {
Cyrl = s["cau-Cyrl-displaytext"]
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.acute,
from = {"^а%-"},
to = {"а"},
},
Latn = s["cau-Latn-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {
"х'ә", -- 3 chars
"гь", "гә", "ӷь", "ҕь", "ӷә", "ҕә", "дә", "ё", "жь", "жә", "ҙә", "ӡә", "ӡ'", "кь", "кә", "қь", "қә", "ҟь", "ҟә", "ҫә", "тә", "ҭә", "ф'", "хь", "хә", "х'", "ҳә", "ць", "цә", "ц'", "ҵә", "ҵ'", "шь", "шә", "џь", -- 2 chars
"ӷ", "ҕ", "ҙ", "ӡ", "қ", "ҟ", "ԥ", "ҧ", "ҫ", "ҭ", "ҳ", "ҵ", "ҷ", "ҽ", "ҿ", "ҩ", "џ", "ә", -- 1 char
"^а",
},
to = {
"х" .. p[4],
"г" .. p[1], "г" .. p[2], "г" .. p[5], "г" .. p[6], "г" .. p[7], "г" .. p[8], "д" .. p[1], "е" .. p[1], "ж" .. p[1], "ж" .. p[2], "з" .. p[2], "з" .. p[4], "з" .. p[5], "к" .. p[1], "к" .. p[2], "к" .. p[4], "к" .. p[5], "к" .. p[7], "к" .. p[8], "с" .. p[2], "т" .. p[1], "т" .. p[3], "ф" .. p[1], "х" .. p[1], "х" .. p[2], "х" .. p[3], "х" .. p[6], "ц" .. p[1], "ц" .. p[2], "ц" .. p[3], "ц" .. p[5], "ц" .. p[6], "ш" .. p[1], "ш" .. p[2], "ы" .. p[3],
"г" .. p[3], "г" .. p[4], "з" .. p[1], "з" .. p[3], "к" .. p[3], "к" .. p[6], "п" .. p[1], "п" .. p[2], "с" .. p[1], "т" .. p[2], "х" .. p[5], "ц" .. p[4], "ч" .. p[1], "ч" .. p[2], "ч" .. p[3], "ы" .. p[1], "ы" .. p[2], "ь" .. p[1],
"",
}
},
},
}
m["ae"] = {
"Avestan",
29572,
"ira-cen",
"Avst, Gujr, Deva",
translit = {
Avst = "Avst-translit"
},
}
m["af"] = {
"Afrikaans",
14196,
"gmw-frk",
"Latn, Arab",
ancestors = "nl",
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.diaer .. c.ringabove .. c.cedilla .. "'",
from = {"['ʼ]n"},
to = {"n" .. p[1]}
}
},
}
m["ak"] = {
"Akan",
28026,
"alv-ctn",
"Latn",
}
m["am"] = {
"ඇම්හාරික්",
28244,
"sem-eth",
"Ethi",
translit = "Ethi-translit",
}
m["an"] = {
"Aragonese",
8765,
"roa-nar",
"Latn",
}
m["ar"] = {
"අරාබි",
13955,
"sem-arb",
"Arab, Hebr, Syrc, Brai, Nbat",
translit = {
Arab = "ar-translit"
},
strip_diacritics = {
Arab = "ar-stripdiacritics",
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["as"] = {
"Assamese",
29401,
"inc-bas",
"as-Beng",
ancestors = "inc-mas",
translit = "as-translit",
}
m["av"] = {
"Avar",
29561,
"cau-ava",
"Cyrl, Latn, Arab",
ancestors = "oav",
translit = {
Cyrl = "cau-nec-translit",
Arab = "ar-translit",
},
override_translit = true,
display_text = {
Cyrl = s["cau-Cyrl-displaytext"],
},
strip_diacritics = {
Cyrl = s["cau-Cyrl-stripdiacritics"],
Latn = s["cau-Latn-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {"гъ", "гь", "гӏ", "ё", "кк", "къ", "кь", "кӏ", "лъ", "лӏ", "тӏ", "хх", "хъ", "хь", "хӏ", "цӏ", "чӏ"},
to = {"г" .. p[1], "г" .. p[2], "г" .. p[3], "е" .. p[1], "к" .. p[1], "к" .. p[2], "к" .. p[3], "к" .. p[4], "л" .. p[1], "л" .. p[2], "т" .. p[1], "х" .. p[1], "х" .. p[2], "х" .. p[3], "х" .. p[4], "ц" .. p[1], "ч" .. p[1]}
},
},
}
m["ay"] = {
"අයිමාරා",
4627,
"sai-aym",
"Latn",
}
m["az"] = {
"අසර්බයිජානි",
9292,
"trk-ogz",
"Latn, Cyrl, fa-Arab",
ancestors = "trk-oat",
dotted_dotless_i = true,
strip_diacritics = {
Latn = {
from = {"ʼ"},
to = {"'"},
},
["fa-Arab"] = {
module = "ar-stripdiacritics",
["from"] = {
"ۆ",
"ۇ",
"وْ",
"ڲ",
"ؽ",
},
["to"] = {
"و",
"و",
"و",
"گ",
"ی",
},
},
},
display_text = {
Latn = {
from = {"'"},
to = {"ʼ"}
}
},
sort_key = {
Latn = {
from = {
"i", -- Ensure "i" comes after "ı".
"ç", "ə", "ğ", "x", "ı", "q", "ö", "ş", "ü", "w"
},
to = {
"i" .. p[1],
"c" .. p[1], "e" .. p[1], "g" .. p[1], "h" .. p[1], "i", "k" .. p[1], "o" .. p[1], "s" .. p[1], "u" .. p[1], "z" .. p[1]
}
},
Cyrl = {
from = {"ғ", "ә", "ы", "ј", "ҝ", "ө", "ү", "һ", "ҹ"},
to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "и" .. p[2], "к" .. p[1], "о" .. p[1], "у" .. p[1], "х" .. p[1], "ч" .. p[1]}
},
},
}
m["ba"] = {
"Bashkir",
13389,
"trk-kbu",
"Cyrl",
translit = "ba-translit",
override_translit = true,
sort_key = {
from = {"ғ", "ҙ", "ё", "ҡ", "ң", "ө", "ҫ", "ү", "һ", "ә"},
to = {"г" .. p[1], "д" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "с" .. p[1], "у" .. p[1], "х" .. p[1], "э" .. p[1]}
},
}
m["be"] = {
"බෙලරුසියානු",
9091,
"zle",
"Cyrl, Latn",
ancestors = "zle-mbe",
translit = {
Cyrl = "be-translit",
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.grave .. c.acute,
},
Latn = {
remove_diacritics = c.grave .. c.acute,
remove_exceptions = {"Ć", "ć", "Ń", "ń", "Ś", "ś", "Ź", "ź"},
},
},
sort_key = {
Cyrl = {
remove_diacritics = c.grave .. c.acute,
from = {"ґ", "ё", "і", "ў"},
to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "у" .. p[1]}
},
Latn = {
remove_diacritics = c.grave .. c.acute,
remove_exceptions = {"Ć", "ć", "Ń", "ń", "Ś", "ś", "Ź", "ź"},
from = {"ć", "č", "dz", "dź", "dž", "ch", "ł", "ń", "ś", "š", "ŭ", "ź", "ž"},
to = {"c" .. p[1], "c" .. p[2], "d" .. p[1], "d" .. p[2], "d" .. p[3], "h" .. p[1], "l" .. p[1], "n" .. p[1], "s" .. p[1], "s" .. p[2], "u" .. p[1], "z" .. p[1], "z" .. p[2]}
},
},
standard_chars = {
Cyrl = "АаБбВвГгДдЕеЁёЖжЗзІіЙйКкЛлМмНнОоПпРрСсТтУуЎўФфХхЦцЧчШшЫыЬьЭэЮюЯя",
Latn = "AaBbCcĆćČčDdEeFfGgHhIiJjKkLlŁłMmNnŃńOoPpRrSsŚśŠšTtUuŬŭVvYyZzŹźŽž",
(c.punc:gsub("'", "")) -- Exclude apostrophe.
},
}
m["bg"] = {
"බල්ගේරියානු",
7918,
"zls",
"Cyrl",
ancestors = "cu-bgm",
translit = "bg-translit",
strip_diacritics = {
remove_diacritics = c.grave .. c.acute,
remove_exceptions = {"%f[^%z%s]ѝ%f[%z%s]"},
},
sort_key = {
remove_diacritics = c.grave .. c.acute,
remove_exceptions = {"%f[^%z%s]ѝ%f[%z%s]"},
},
standard_chars = "АаБбВвГгДдЕеЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЬьЮюЯя" .. c.punc,
}
m["bh"] = {
"බිහාරී",
135305,
"inc-eas",
"Deva",
}
m["bi"] = {
"Bislama",
35452,
"crp",
"Latn",
ancestors = "en",
}
m["bm"] = {
"Bambara",
33243,
"dmn-emn",
"Latn, Nkoo",
sort_key = {
Latn = {
from = {"ɛ", "ɲ", "ŋ", "ɔ"},
to = {"e" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1]}
},
},
}
m["bn"] = {
"බෙංගාලි",
9610,
"inc-bas",
"Beng, Newa",
ancestors = "inc-mbn",
translit = {
Beng = "bn-translit"
},
}
m["bo"] = {
"ටිබෙට්",
34271,
"sit-tib",
"Tibt", -- sometimes Deva?
ancestors = "xct",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["br"] = {
"බ්රෙටන්",
12107,
"cel-brs",
"Latn",
ancestors = "xbm",
sort_key = {
from = {"ch", "c['ʼ’]h"},
to = {"c" .. p[1], "c" .. p[2]}
},
}
m["ca"] = {
"Catalan",
7026,
"roa-ocr",
"Latn",
ancestors = "roa-oca",
sort_key = {remove_diacritics = c.grave .. c.acute .. c.diaer .. c.cedilla .. "·"},
standard_chars = "AaÀàBbCcÇçDdEeÉéÈèFfGgHhIiÍíÏïJjLlMmNnOoÓóÒòPpQqRrSsTtUuÚúÜüVvXxYyZz·" .. c.punc,
}
m["ce"] = {
"Chechen",
33350,
"cau-vay",
"Cyrl, Latn, Arab",
translit = {
Cyrl = "cau-nec-translit",
Arab = "ar-translit",
},
override_translit = true,
display_text = {
Cyrl = s["cau-Cyrl-displaytext"]
},
strip_diacritics = {
Cyrl = s["cau-Cyrl-stripdiacritics"],
Latn = s["cau-Latn-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {"аь", "гӏ", "ё", "кх", "къ", "кӏ", "оь", "пӏ", "тӏ", "уь", "хь", "хӏ", "цӏ", "чӏ", "юь", "яь"},
to = {"а" .. p[1], "г" .. p[1], "е" .. p[1], "к" .. p[1], "к" .. p[2], "к" .. p[3], "о" .. p[1], "п" .. p[1], "т" .. p[1], "у" .. p[1], "х" .. p[1], "х" .. p[2], "ц" .. p[1], "ч" .. p[1], "ю" .. p[1], "я" .. p[1]}
},
},
}
m["ch"] = {
"Chamorro",
33262,
"poz",
"Latn",
sort_key = {
remove_diacritics = "'",
from = {"å", "ch", "ñ", "ng"},
to = {"a" .. p[1], "c" .. p[1], "n" .. p[1], "n" .. p[2]}
},
}
m["co"] = {
"Corsican",
33111,
"roa-itr",
"Latn",
sort_key = {
from = {"chj", "ghj", "sc", "sg"},
to = {"c" .. p[1], "g" .. p[1], "s" .. p[1], "s" .. p[2]}
},
standard_chars = "AaÀàBbCcDdEeÈèFfGgHhIiÌìÏïJjLlMmNnOoÒòPpQqRrSsTtUuÙùÜüVvZz" .. c.punc,
}
m["cr"] = {
"Cree",
33390,
"alg",
"Latn, Cans",
translit = {
Cans = "cr-translit"
},
}
m["cs"] = {
"චෙක්",
9056,
"zlw",
"Latn",
ancestors = "cs-ear",
sort_key = {
from = {"á", "č", "ď", "é", "ě", "ch", "í", "ň", "ó", "ř", "š", "ť", "ú", "ů", "ý", "ž"},
to = {"a" .. p[1], "c" .. p[1], "d" .. p[1], "e" .. p[1], "e" .. p[2], "h" .. p[1], "i" .. p[1], "n" .. p[1], "o" .. p[1], "r" .. p[1], "s" .. p[1], "t" .. p[1], "u" .. p[1], "u" .. p[2], "y" .. p[1], "z" .. p[1]}
},
standard_chars = "AaÁáBbCcČčDdĎďEeÉéĚěFfGgHhIiÍíJjKkLlMmNnŇňOoÓóPpRrŘřSsŠšTtŤťUuÚúŮůVvYyÝýZzŽž" .. c.punc,
}
m["cu"] = {
"Old Church Slavonic",
35499,
"zls",
"Cyrs, Glag, Zname",
translit = {
Cyrs = "Cyrs-translit",
Glag = "Glag-translit"
},
-- Cyrs strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["cv"] = {
"Chuvash",
33348,
"trk-ogr",
"Cyrl",
ancestors = "cv-mid",
translit = "cv-translit",
override_translit = true,
sort_key = {
from = {"ӑ", "ё", "ӗ", "ҫ", "ӳ"},
to = {"а" .. p[1], "е" .. p[1], "е" .. p[2], "с" .. p[1], "у" .. p[1]}
},
}
m["cy"] = {
"වේල්ස",
9309,
"cel-brw",
"Latn",
ancestors = "wlm",
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. "'",
from = {"ch", "dd", "ff", "ng", "ll", "ph", "rh", "th"},
to = {"c" .. p[1], "d" .. p[1], "f" .. p[1], "g" .. p[1], "l" .. p[1], "p" .. p[1], "r" .. p[1], "t" .. p[1]}
},
standard_chars = "ÂâAaBbCcDdEeÊêFfGgHhIiÎîLlMmNnOoÔôPpRrSsTtUuÛûWwŴŵYyŶŷ" .. c.punc,
}
m["da"] = {
"ඩෙන්මාර්ක",
9035,
"gmq-eas",
"Latn",
ancestors = "gmq-oda",
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dacute .. c.caron .. c.cedilla,
remove_exceptions = {"å"},
from = {"æ", "ø", "å"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]}
},
standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÆæØøÅå" .. c.punc,
}
m["de"] = {
"ජර්මානු",
188,
"gmw-hgm",
"Latn, Latf, Brai",
ancestors = "de-ear",
sort_key = {
Latn = s["de-Latn-sortkey"],
Latf = s["de-Latn-sortkey"],
},
standard_chars = {
Latn = s["de-Latn-standardchars"],
Latf = s["de-Latn-standardchars"],
Brai = c.braille,
c.punc
}
}
m["dv"] = {
"දිවෙහි",
32656,
"inc-ins",
"Thaa, Diak",
translit = {
Thaa = "dv-translit",
Diak = "Diak-translit",
},
ancestors = "dv-old",
override_translit = true,
}
m["dz"] = {
"Dzongkha",
33081,
"sit-tib",
"Tibt",
ancestors = "xct",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["ee"] = {
"Ewe",
30005,
"alv-gbe",
"Latn",
sort_key = {
remove_diacritics = c.tilde,
from = {"ɖ", "dz", "ɛ", "ƒ", "gb", "ɣ", "kp", "ny", "ŋ", "ɔ", "ts", "ʋ"},
to = {"d" .. p[1], "d" .. p[2], "e" .. p[1], "f" .. p[1], "g" .. p[1], "g" .. p[2], "k" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1], "t" .. p[1], "v" .. p[1]}
},
}
m["el"] = {
"ග්රීක",
9129,
"grk",
"Grek, Polyt, Brai",
ancestors = "el-kth",
translit = "el-translit",
override_translit = true,
-- Grek and Polyt display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
standard_chars = {
Grek = "΅·ͺ΄ΑαΆάΒβΓγΔδΕεέΈΖζΗηΉήΘθΙιΊίΪϊΐΚκΛλΜμΝνΞξΟοΌόΠπΡρΣσςΤτΥυΎύΫϋΰΦφΧχΨψΩωΏώ",
Brai = c.braille,
c.punc
},
}
m["en"] = {
"ඉංග්රීසි",
1860,
"gmw-ang",
"Latn, Brai, Shaw, Dsrt", -- entries in Shaw or Dsrt might require prior discussion
wikimedia_codes = "en, simple",
ancestors = "en-ear",
sort_key = {
Latn = {
-- Many of these are needed for sorting language names.
remove_diacritics = "'\"%-%.,%s·ʻʼ" .. c.diacritics,
-- These are found in pagenames.
from = {"[ɒæ🅱¢©ᴄðđəǝɜɡħʜıɨłŋɲøɔœꝑꝓꝕßʋ]"},
to = {{
["ɒ"] = "a", ["æ"] = "ae", ["🅱"] = "b", ["¢"] = "c", ["©"] = "c",
["ᴄ"] = "c", ["ð"] = "d", ["đ"] = "d", ["ə"] = "e", ["ǝ"] = "e",
["ɜ"] = "e", ["ɡ"] = "g", ["ħ"] = "h", ["ʜ"] = "h", ["ı"] = "i",
["ɨ"] = "i", ["ł"] = "l", ["ŋ"] = "n", ["ɲ"] = "n", ["ø"] = "o",
["ɔ"] = "o", ["œ"] = "oe", ["ꝑ"] = "p", ["ꝓ"] = "p", ["ꝕ"] = "p",
["ß"] = "ss", ["ʋ"] = "v",
}},
},
},
standard_chars = {
Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz",
Brai = c.braille,
c.punc
},
}
m["eo"] = {
"එස්පෙරාන්තො",
143,
"art",
"Latn",
sort_key = {
remove_diacritics = c.grave .. c.acute,
from = {"ĉ", "ĝ", "ĥ", "ĵ", "ŝ", "ŭ"},
to = {"c" .. p[1], "g" .. p[1], "h" .. p[1], "j" .. p[1], "s" .. p[1], "u" .. p[1]}
},
standard_chars = "AaBbCcĈĉDdEeFfGgĜĝHhĤĥIiJjĴĵKkLlMmNnOoPpRrSsŜŝTtUuŬŭVvZz" .. c.punc,
}
m["es"] = {
"ස්පාඤ්ඤ",
1321,
"roa-cas",
"Latn, Brai",
ancestors = "es-ear",
sort_key = {
Latn = {
remove_exceptions = {"ñ"},
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.diaer .. c.cedilla,
from = {"ª", "æ", "ñ", "º", "œ"},
to = {"a", "ae", "n" .. p[1], "o", "oe"}
},
},
standard_chars = {
Latn = "AaÁáBbCcDdEeÉéFfGgHhIiÍíJjLlMmNnÑñOoÓóPpQqRrSsTtUuÚúÜüVvXxYyZz",
Brai = c.braille,
c.punc
},
}
m["et"] = {
"එස්තෝනියානු",
9072,
"urj-fin",
"Latn",
sort_key = {
from = {
"š", "ž", "õ", "ä", "ö", "ü", -- 2 chars
"z" -- 1 char
},
to = {
"s" .. p[1], "s" .. p[3], "w" .. p[1], "w" .. p[2], "w" .. p[3], "w" .. p[4],
"s" .. p[2]
}
},
standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvÕõÄäÖöÜü" .. c.punc,
}
m["eu"] = {
"බාස්ක්",
8752,
"euq",
"Latn",
sort_key = {
from = {"ç", "ñ"},
to = {"c" .. p[1], "n" .. p[1]}
},
standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnÑñOoPpRrSsTtUuXxZz" .. c.punc,
}
m["fa"] = {
"පර්සියානු",
9168,
"ira-swi",
"fa-Arab, Hebr",
ancestors = "fa-cls",
strip_diacritics = {
["fa-Arab"] = {
-- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه"; hamzatu l-waṣli to a regular alif
from = {"هٔ", "ٱ"}, -- character "ۂ" code U+06C2 to "ه"; hamzatu l-waṣli to a regular alif
to = {"ه", "ا"},
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef,
},
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["ff"] = {
"Fula",
33454,
"alv-fwo",
"Latn, Adlm",
}
m["fi"] = {
"ෆින්ලන්ත",
1412,
"urj-fin",
"Latn",
display_text = {
from = {"'"},
to = {"’"}
},
strip_diacritics = { -- used to indicate gemination of the next consonant
remove_diacritics = "ˣ",
from = {"’"},
to = {"'"},
},
sort_key = { -- [[Appendix:Finnish alphabet#Collation]] + "aͤ" and "oͤ" as historical variants of "ä" and "ö".
remove_diacritics = "'’:" .. c.diacritics,
remove_exceptions = {
"a[" .. c.ringabove .. c.diaer .. c.small_e .. "]", -- åäaͤ
"o[" .. c.diaer .. c.tilde .. c.dacute .. c.small_e .. "]", -- öõőoͤ
"u[" .. c.diaer .. c.dacute .. "]" -- üű
},
from = {"æ", "[ðđ]", "ł", "ŋ", "œ", "ß", "þ", "u[" .. c.diaer .. c.dacute .. "]", "å", "aͤ", "o[" .. c.tilde .. c.dacute .. c.small_e .. "]", "ø", "(.)['%-]"},
to = {"ae", "d", "l", "n", "oe", "ss", "th", "y", "z" .. p[1], "ä", "ö", "ö", "%1"}
},
standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÄäÖö" .. c.punc,
}
m["fj"] = {
"Fijian",
33295,
"poz-pcc",
"Latn",
}
m["fo"] = {
"Faroese",
25258,
"gmq-ins",
"Latn",
sort_key = {
from = {"á", "ð", "í", "ó", "ú", "ý", "æ", "ø"},
to = {"a" .. p[1], "d" .. p[1], "i" .. p[1], "o" .. p[1], "u" .. p[1], "y" .. p[1], "z" .. p[1], "z" .. p[2]}
},
standard_chars = "AaÁáBbDdÐðEeFfGgHhIiÍíJjKkLlMmNnOoÓóPpRrSsTtUuÚúVvYyÝýÆæØø" .. c.punc,
}
m["fr"] = {
"ප්රංශ",
150,
"roa-oil",
"Latn, Brai",
ancestors = "frm",
sort_key = {
Latn = s["roa-oil-sortkey"]
},
standard_chars = {
Latn = "AaÀàÂâBbCcÇçDdEeÉéÈèÊêËëFfGgHhIiÎîÏïJjLlMmNnOoÔôŒœPpQqRrSsTtUuÙùÛûÜüVvXxYyZz",
Brai = c.braille,
c.punc
},
}
m["fy"] = {
"West Frisian",
27175,
"gmw-fri",
"Latn",
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer,
from = {"y"},
to = {"i"}
},
standard_chars = "AaâäàÆæBbCcDdEeéêëèFfGgHhIiïìYyỳJjKkLlMmNnOoôöòPpRrSsTtUuúûüùVvWwZz" .. c.punc,
}
m["ga"] = {
"අයිරිෂ්",
9142,
"cel-gae",
"Latn, Latg",
ancestors = "mga",
sort_key = {
remove_diacritics = c.acute,
from = {"ḃ", "ċ", "ḋ", "ḟ", "ġ", "ṁ", "ṗ", "ṡ", "ṫ"},
to = {"bh", "ch", "dh", "fh", "gh", "mh", "ph", "sh", "th"}
},
standard_chars = "AaÁáBbCcDdEeÉéFfGgHhIiÍíLlMmNnOoÓóPpRrSsTtUuÚúVv" .. c.punc,
}
m["gd"] = {
"ස්කොට්ස් ගේලික්",
9314,
"cel-gae",
"Latn, Latg",
ancestors = "mga",
sort_key = {remove_diacritics = c.grave .. c.acute},
standard_chars = "AaÀàBbCcDdEeÈèFfGgHhIiÌìLlMmNnOoÒòPpRrSsTtUuÙù" .. c.punc,
}
m["gl"] = {
"Galician",
9307,
"roa-gap",
"Latn",
sort_key = {
remove_diacritics = c.acute,
from = {"ñ"},
to = {"n" .. p[1]}
},
standard_chars = "AaÁáBbCcDdEeÉéFfGgHhIiÍíÏïLlMmNnÑñOoÓóPpQqRrSsTtUuÚúÜüVvXxZz" .. c.punc,
}
m["gu"] = {
"ගුජරාටි",
5137,
"inc-wes",
"Arab, Gujr",
ancestors = "inc-mgu",
translit = {
Gujr = "gu-translit",
},
strip_diacritics = {
Arab = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.kasra .. c.shadda .. c.sukun},
Gujr = {remove_diacritics = "઼"},
},
}
m["gv"] = {
"මැන්ක්ස්",
12175,
"cel-gae",
"Latn",
ancestors = "mga",
sort_key = {remove_diacritics = c.cedilla .. "-"},
standard_chars = "AaBbCcÇçDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwYy" .. c.punc,
}
m["ha"] = {
"Hausa",
56475,
"cdc-wst",
"Latn, Arab",
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron}
},
sort_key = {
Latn = {
from = {"ɓ", "b'", "ɗ", "d'", "ƙ", "k'", "sh", "ƴ", "'y"},
to = {"b" .. p[1], "b" .. p[2], "d" .. p[1], "d" .. p[2], "k" .. p[1], "k" .. p[2], "s" .. p[1], "y" .. p[1], "y" .. p[2]}
},
},
}
m["he"] = {
"හීබෲ",
9288,
"sem-can",
"Hebr, Phnx, Brai, Samr",
ancestors = "he-med",
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
-- Samr strip_diacritics, sort_key in [[Module:scripts/data]]
-- Phnx translit in [[Module:scripts/data]] (NOTE: not present before, presumably an accidental omission)
}
m["hi"] = {
"හින්දි",
1568,
"inc-hnd",
"Deva, Kthi, Newa",
translit = {
Deva = "hi-translit"
},
standard_chars = {
Deva = "अआइईउऊएऐओऔकखगघङचछजझञटठडढणतथदधनपफबभमयरलवशषसहत्रज्ञक्षक़ख़ग़ज़झ़ड़ढ़फ़काखागाघाङाचाछाजाझाञाटाठाडाढाणाताथादाधानापाफाबाभामायारालावाशाषासाहात्राज्ञाक्षाक़ाख़ाग़ाज़ाझ़ाड़ाढ़ाफ़ाकिखिगिघिङिचिछिजिझिञिटिठिडिढिणितिथिदिधिनिपिफिबिभिमियिरिलिविशिषिसिहित्रिज्ञिक्षिक़िख़िग़िज़िझ़िड़िढ़िफ़िकीखीगीघीङीचीछीजीझीञीटीठीडीढीणीतीथीदीधीनीपीफीबीभीमीयीरीलीवीशीषीसीहीत्रीज्ञीक्षीक़ीख़ीग़ीज़ीझ़ीड़ीढ़ीफ़ीकुखुगुघुङुचुछुजुझुञुटुठुडुढुणुतुथुदुधुनुपुफुबुभुमुयुरुलुवुशुषुसुहुत्रुज्ञुक्षुक़ुख़ुग़ुज़ुझ़ुड़ुढ़ुफ़ुकूखूगूघूङूचूछूजूझूञूटूठूडूढूणूतूथूदूधूनूपूफूबूभूमूयूरूलूवूशूषूसूहूत्रूज्ञूक्षूक़ूख़ूग़ूज़ूझ़ूड़ूढ़ूफ़ूकेखेगेघेङेचेछेजेझेञेटेठेडेढेणेतेथेदेधेनेपेफेबेभेमेयेरेलेवेशेषेसेहेत्रेज्ञेक्षेक़ेख़ेग़ेज़ेझ़ेड़ेढ़ेफ़ेकैखैगैघैङैचैछैजैझैञैटैठैडैढैणैतैथैदैधैनैपैफैबैभैमैयैरैलैवैशैषैसैहैत्रैज्ञैक्षैक़ैख़ैग़ैज़ैझ़ैड़ैढ़ैफ़ैकोखोगोघोङोचोछोजोझोञोटोठोडोढोणोतोथोदोधोनोपोफोबोभोमोयोरोलोवोशोषोसोहोत्रोज्ञोक्षोक़ोख़ोग़ोज़ोझ़ोड़ोढ़ोफ़ोकौखौगौघौङौचौछौजौझौञौटौठौडौढौणौतौथौदौधौनौपौफौबौभौमौयौरौलौवौशौषौसौहौत्रौज्ञौक्षौक़ौख़ौग़ौज़ौझ़ौड़ौढ़ौफ़ौक्ख्ग्घ्ङ्च्छ्ज्झ्ञ्ट्ठ्ड्ढ्ण्त्थ्द्ध्न्प्फ्ब्भ्म्य्र्ल्व्श्ष्स्ह्त्र्ज्ञ्क्ष्क़्ख़्ग़्ज़्झ़्ड़्ढ़्फ़्।॥०१२३४५६७८९॰",
c.punc
},
}
m["ho"] = {
"Hiri Motu",
33617,
"crp",
"Latn",
ancestors = "meu",
}
m["ht"] = {
"Haitian Creole",
33491,
"crp",
"Latn",
ancestors = "ht-sdm",
sort_key = {
from = {
"oun", -- 3 chars
"an", "ch", "è", "en", "ng", "ò", "on", "ou", "ui" -- 2 chars
},
to = {
"o" .. p[4],
"a" .. p[1], "c" .. p[1], "e" .. p[1], "e" .. p[2], "n" .. p[1], "o" .. p[1], "o" .. p[2], "o" .. p[3], "u" .. p[1]
}
},
}
m["hu"] = {
"හංගේරියානු",
9067,
"urj-ugr",
"Latn, Hung",
ancestors = "ohu",
sort_key = {
Latn = {
from = {
"dzs", -- 3 chars
"á", "cs", "dz", "é", "gy", "í", "ly", "ny", "ó", "ö", "ő", "sz", "ty", "ú", "ü", "ű", "zs", -- 2 chars
},
to = {
"d" .. p[2],
"a" .. p[1], "c" .. p[1], "d" .. p[1], "e" .. p[1], "g" .. p[1], "i" .. p[1], "l" .. p[1], "n" .. p[1], "o" .. p[1], "o" .. p[2], "o" .. p[3], "s" .. p[1], "t" .. p[1], "u" .. p[1], "u" .. p[2], "u" .. p[3], "z" .. p[1],
}
},
},
standard_chars = {
Latn = "AaÁáBbCcDdEeÉéFfGgHhIiÍíJjKkLlMmNnOoÓóÖöŐőPpQqRrSsTtUuÚúÜüŰűVvWwXxYyZz",
c.punc
},
}
m["hy"] = {
"ආමේනියානු",
8785,
"hyx",
"Armn, Brai",
ancestors = "axm",
-- Armn translit in [[Module:scripts/data]]
override_translit = true,
strip_diacritics = {
Armn = {
remove_diacritics = "՛՜՞՟",
from = {"եւ", "<sup>յ</sup>", "<sup>ի</sup>", "<sup>է</sup>", "յ̵", "ՙ", "՚"},
to = {"և", "յ", "ի", "է", "ֈ", "ʻ", "’"}
},
},
sort_key = {
Armn = {
from = {
"ու", "եւ", -- 2 chars
"և" -- 1 char
},
to = {
"ւ", "եվ",
"եվ"
}
},
},
}
m["hz"] = {
"Herero",
33315,
"bnt-swb",
"Latn",
}
m["ia"] = {
"Interlingua",
35934,
"art",
"Latn",
}
m["id"] = {
"ඉන්දුනීසියානු",
9240,
"poz-mly",
"Latn",
ancestors = "ms",
standard_chars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" .. c.punc,
}
m["ie"] = {
"Interlingue",
35850,
"art",
"Latn",
type = "appendix-constructed",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ},
}
m["ig"] = {
"Igbo",
33578,
"alv-igb",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.macron},
sort_key = {
from = {"gb", "gh", "gw", "ị", "kp", "kw", "ṅ", "nw", "ny", "ọ", "sh", "ụ"},
to = {"g" .. p[1], "g" .. p[2], "g" .. p[3], "i" .. p[1], "k" .. p[1], "k" .. p[2], "n" .. p[1], "n" .. p[2], "n" .. p[3], "o" .. p[1], "s" .. p[1], "u" .. p[1]}
},
}
m["ii"] = {
"Nuosu",
34235,
"tbq-nlo",
"Yiii",
translit = "ii-translit",
}
m["ik"] = {
"Inupiaq",
27183,
"esx-inu",
"Latn",
sort_key = {
from = {
"ch", "ġ", "dj", "ḷ", "ł̣", "ñ", "ng", "r̂", "sr", "zr", -- 2 chars
"ł", "ŋ", "ʼ" -- 1 char
},
to = {
"c" .. p[1], "g" .. p[1], "h" .. p[1], "l" .. p[1], "l" .. p[3], "n" .. p[1], "n" .. p[2], "r" .. p[1], "s" .. p[1], "z" .. p[1],
"l" .. p[2], "n" .. p[2], "z" .. p[2]
}
},
}
m["io"] = {
"Ido",
35224,
"art",
"Latn",
}
m["is"] = {
"අයිස්ලන්ත",
294,
"gmq-ins",
"Latn",
sort_key = {
from = {"á", "ð", "é", "í", "ó", "ú", "ý", "þ", "æ", "ö"},
to = {"a" .. p[1], "d" .. p[1], "e" .. p[1], "i" .. p[1], "o" .. p[1], "u" .. p[1], "y" .. p[1], "z" .. p[1], "z" .. p[2], "z" .. p[3]}
},
standard_chars = "AaÁáBbDdÐðEeÉéFfGgHhIiÍíJjKkLlMmNnOoÓóPpRrSsTtUuÚúVvXxYyÝýÞþÆæÖö" .. c.punc,
}
m["it"] = {
"ඉතාලි",
652,
"roa-itr",
"Latn",
ancestors = "roa-oit",
sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.ringabove},
standard_chars = "AaÀàBbCcDdEeÈèÉéFfGgHhIiÌìLlMmNnOoÒòPpQqRrSsTtUuÙùVvZz" .. c.punc,
}
m["iu"] = {
"Inuktitut",
29921,
"esx-inu",
"Cans, Latn",
translit = {
Cans = "cr-translit"
},
override_translit = true,
}
m["ja"] = {
"ජපන්",
5287,
"jpx",
"Jpan, Latn, Brai",
ancestors = "ja-ear",
translit = s["jpx-translit"],
link_tr = true,
display_text = s["jpx-displaytext"],
strip_diacritics = s["jpx-stripdiacritics"],
sort_key = s["jpx-sortkey"],
}
m["jv"] = {
"ජාවා",
33549,
"poz",
"Latn, Java, Arab",
ancestors = "kaw",
translit = {
Java = "jv-translit"
},
link_tr = true,
strip_diacritics = {
Latn = {remove_diacritics = c.circ} -- Modern jv don't use ê
},
sort_key = {
Latn = {
from = {"å", "dh", "é", "è", "ng", "ny", "th"},
to = {"a" .. p[1], "d" .. p[1], "e" .. p[1], "e" .. p[2], "n" .. p[1], "n" .. p[2], "t" .. p[1]}
},
},
}
m["ka"] = {
"ජෝර්ජියානු",
8108,
"ccs-gzn",
"Geor, Geok, Hebr", -- Hebr is used to write Judeo-Georgian
ancestors = "ka-mid",
-- Geor, Geok translit in [[Module:scripts/data]]
override_translit = true,
strip_diacritics = {
Geor = s["ka-stripdiacritics"],
Geok = s["ka-stripdiacritics"],
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["kg"] = {
"කොංගෝ",
33702,
"bnt-kng",
"Latn",
}
m["ki"] = {
"Kikuyu",
33587,
"bnt-kka",
"Latn",
}
m["kj"] = {
"Kwanyama",
1405077,
"bnt-ova",
"Latn",
}
m["kk"] = {
"Kazakh",
9252,
"trk-kno",
"Cyrl, Latn, kk-Arab",
translit = {
Cyrl = {
from = {
"Ё", "ё", "Й", "й", "Нг", "нг", "Ӯ", "ӯ", -- 2 chars; are "Ӯ" and "ӯ" actually used?
"А", "а", "Ә", "ә", "Б", "б", "В", "в", "Г", "г", "Ғ", "ғ", "Д", "д", "Е", "е", "Ж", "ж", "З", "з", "И", "и", "К", "к", "Қ", "қ", "Л", "л", "М", "м", "Н", "н", "Ң", "ң", "О", "о", "Ө", "ө", "П", "п", "Р", "р", "С", "с", "Т", "т", "У", "у", "Ұ", "ұ", "Ү", "ү", "Ф", "ф", "Х", "х", "Һ", "һ", "Ц", "ц", "Ч", "ч", "Ш", "ш", "Щ", "щ", "Ъ", "ъ", "Ы", "ы", "І", "і", "Ь", "ь", "Э", "э", "Ю", "ю", "Я", "я", -- 1 char
},
to = {
"E", "e", "İ", "i", "Ñ", "ñ", "U", "u",
"A", "a", "Ä", "ä", "B", "b", "V", "v", "G", "g", "Ğ", "ğ", "D", "d", "E", "e", "J", "j", "Z", "z", "İ", "i", "K", "k", "Q", "q", "L", "l", "M", "m", "N", "n", "Ñ", "ñ", "O", "o", "Ö", "ö", "P", "p", "R", "r", "S", "s", "T", "t", "U", "u", "Ū", "ū", "Ü", "ü", "F", "f", "X", "x", "H", "h", "S", "s", "Ç", "ç", "Ş", "ş", "Ş", "ş", "", "", "Y", "y", "I", "ı", "", "", "É", "é", "Ü", "ü", "Ä", "ä",
}
}
},
-- override_translit = true,
sort_key = {
Cyrl = {
from = {"ә", "ғ", "ё", "қ", "ң", "ө", "ұ", "ү", "һ", "і"},
to = {"а" .. p[1], "г" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "у" .. p[2], "х" .. p[1], "ы" .. p[1]}
},
},
standard_chars = {
Cyrl = "АаӘәБбВвГгҒғДдЕеЁёЖжЗзИиЙйКкҚқЛлМмНнҢңОоӨөПпРрСсТтУуҰұҮүФфХхҺһЦцЧчШшЩщЪъЫыІіЬьЭэЮюЯя",
c.punc
},
}
m["kl"] = {
"Greenlandic",
25355,
"esx-inu",
"Latn",
sort_key = {
from = {"æ", "ø", "å"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]}
}
}
m["km"] = {
"Khmer",
9205,
"mkh-kmr",
"Khmr",
ancestors = "xhm",
translit = "km-translit",
}
m["kn"] = {
"කන්නඩ",
33673,
"dra-kan",
"Knda, Tutg",
ancestors = "dra-mkn",
-- Knda translit in [[Module:scripts/data]]
}
m["ko"] = {
"කොරියානු",
9176,
"qfa-kor",
"Kore, Brai",
ancestors = "ko-ear",
translit = {
Kore = "ko-translit",
},
-- Kore strip_diacritics in [[Module:scripts/data]]
}
m["kr"] = {
"Kanuri",
36094,
"ssa-sah",
"Latn, Arab",
-- the sortkey and strip_diacritics are only for standard Kanuri; when dialectal entries get added, someone will have to work out how the dialects should be represented orthographically
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.breve}
},
sort_key = {
Latn = {
from = {"ǝ", "ny", "ɍ", "sh"},
to = {"e" .. p[1], "n" .. p[1], "r" .. p[1], "s" .. p[1]}
},
},
}
m["ks"] = {
"කාෂ්මීරි",
33552,
"inc-kas",
"ks-Arab, Deva, Shrd, Latn",
translit = {
["ks-Arab"] = "ks-Arab-translit",
Deva = "ks-Deva-translit",
-- Shrd translit in [[Module:scripts/data]]
},
}
-- "kv" is treated as "koi", "kpv", see [[WT:LT]]
m["kw"] = {
"කෝනිෂ්",
25289,
"cel-brs",
"Latn",
ancestors = "cnx",
sort_key = {
from = {"ch"},
to = {"c" .. p[1]}
},
}
m["ky"] = {
"Kyrgyz",
9255,
"trk-kkp",
"Cyrl, Latn, Arab",
translit = {
Cyrl = "ky-translit"
},
override_translit = true,
sort_key = {
Cyrl = {
from = {"ё", "ң", "ө", "ү"},
to = {"е" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1]}
},
},
}
m["la"] = {
"ලතින්",
397,
"itc-laf",
"Latn, Ital",
ancestors = "itc-ola",
-- Ital translit in [[Module:scripts/data]] (NOTE: formerly not present, probably an accidental omission)
display_text = {
Latn = s["itc-Latn-displaytext"]
},
strip_diacritics = {
Latn = s["itc-Latn-stripdiacritics"]
},
sort_key = {
Latn = s["itc-Latn-sortkey"]
},
standard_chars = {
Latn = "AaBbCcDdEeFfGgHhIiLlMmNnOoPpQqRrSsTtUuVvXx",
c.punc
},
}
m["lb"] = {
"Luxembourgish",
9051,
"gmw-hgm",
"Latn, Brai",
ancestors = "gmw-cfr",
sort_key = {
Latn = {
from = {"ä", "ë", "é"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]}
},
},
}
m["lg"] = {
"Luganda",
33368,
"bnt-nyg",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.circ},
sort_key = {
from = {"ŋ"},
to = {"n" .. p[1]}
},
}
m["li"] = {
"Limburgish",
102172,
"gmw-frk",
"Latn",
ancestors = "dum",
}
m["ln"] = {
"Lingala",
36217,
"bnt-bmo",
"Latn",
sort_key = {
remove_diacritics = c.acute .. c.circ .. c.caron,
from = {"ɛ", "gb", "mb", "mp", "nd", "ng", "nk", "ns", "nt", "ny", "nz", "ɔ"},
to = {"e" .. p[1], "g" .. p[1], "m" .. p[1], "m" .. p[2], "n" .. p[1], "n" .. p[2], "n" .. p[3], "n" .. p[4], "n" .. p[5], "n" .. p[6], "n" .. p[7], "o" .. p[1]}
},
}
m["lo"] = {
"ලාඕ",
9211,
"tai-swe",
"Laoo", -- also Tai Noi/Lao Buhan script
translit = "lo-translit",
sort_key = "Laoo-sortkey",
standard_chars = "0-9ກຂຄງຈຊຍດຕຖທນບປຜຝພຟມຢຣລວສຫອຮຯ-ໝ" .. c.punc,
}
m["lt"] = {
"Lithuanian",
9083,
"bat-eas",
"Latn",
ancestors = "olt",
display_text = "lt-common",
strip_diacritics = "lt-common",
sort_key = "lt-common",
standard_chars = "AaĄąBbCcČčDdEeĘęĖėFfGgHhIiĮįYyJjKkLlMmNnOoPpRrSsŠšTtUuŲųŪūVvZzŽž" .. c.punc,
}
m["lu"] = {
"Luba-Katanga",
36157,
"bnt-lub",
"Latn",
}
m["lv"] = {
"Latvian",
9078,
"bat-eas",
"Latn",
strip_diacritics = {
-- This attempts to convert vowels with tone marks to vowels either with or without macrons. Specifically, there should be no macrons if the vowel is part of a diphthong (including resonant diphthongs such pìrksts -> pirksts not #pīrksts). What we do is first convert the vowel + tone mark to a vowel + tilde in a decomposed fashion, then remove the tilde in diphthongs, then convert the remaining vowel + tilde sequences to macroned vowels, then delete any other tilde. We leave already-macroned vowels alone: Both e.g. ar and ār occur before consonants. FIXME: This still might not be sufficient.
from = {"([Ee])" .. c.cedilla, "[" .. c.grave .. c.circ .. c.tilde .."]", "([aAeEiIoOuU])" .. c.tilde .."?([lrnmuiLRNMUI])" .. c.tilde .. "?([^aAeEiIoOuU])", "([aAeEiIoOuU])" .. c.tilde .."?([lrnmuiLRNMUI])" .. c.tilde .."?$", "([iI])" .. c.tilde .. "?([eE])" .. c.tilde .. "?", "([aAeEiIuU])" .. c.tilde, c.tilde},
to = {"%1", c.tilde, "%1%2%3", "%1%2", "%1%2", "%1" .. c.macron}
},
sort_key = {
from = {"ā", "č", "ē", "ģ", "ī", "ķ", "ļ", "ņ", "š", "ū", "ž"},
to = {"a" .. p[1], "c" .. p[1], "e" .. p[1], "g" .. p[1], "i" .. p[1], "k" .. p[1], "l" .. p[1], "n" .. p[1], "s" .. p[1], "u" .. p[1], "z" .. p[1]}
},
standard_chars = "AaĀāBbCcČčDdEeĒēFfGgĢģHhIiĪīJjKkĶķLlĻļMmNnŅņOoPpRrSsŠšTtUuŪūVvZzŽž" .. c.punc,
}
m["mg"] = {
"Malagasy",
7930,
"poz-bre",
"Latn, Arab",
}
m["mh"] = {
"Marshallese",
36280,
"poz-mic",
"Latn",
sort_key = {
from = {"ā", "ļ", "m̧", "ņ", "n̄", "o̧", "ō", "ū"},
to = {"a" .. p[1], "l" .. p[1], "m" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1], "o" .. p[2], "u" .. p[1]}
},
}
m["mi"] = {
"Māori",
36451,
"poz-pep",
"Latn",
sort_key = {
remove_diacritics = c.macron,
from = {"ng", "wh"},
to = {"n" .. p[1], "w" .. p[1]}
},
}
m["mk"] = {
"මැසඩෝනියානු",
9296,
"zls",
"Cyrl, Polyt",
ancestors = "cu",
translit = {
Cyrl = "mk-translit",
-- FIXME: formerly no translit specified for Polyt; unclear if the default [[Module:grc-translit]] is
-- acceptable, so we disable it for now
Polyt = false,
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.acute,
remove_exceptions = {"Ѓ", "ѓ", "Ќ", "ќ"}
},
},
sort_key = {
Cyrl = {
remove_diacritics = c.grave,
remove_exceptions = {"ѓ", "ќ"},
from = {"ѓ", "ѕ", "ј", "љ", "њ", "ќ", "џ"},
to = {"д" .. p[1], "з" .. p[1], "и" .. p[1], "л" .. p[1], "н" .. p[1], "т" .. p[1], "ч" .. p[1]}
},
},
-- Polyt display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
standard_chars = {
Cyrl = "АаБбВвГгДдЃѓЕеЖжЗзЅѕИиЈјКкЛлЉљМмНнЊњОоПпРрСсТтЌќУуФфХхЦцЧчЏџШш",
c.punc
},
}
m["ml"] = {
"මලයාලම්",
36236,
"dra-mal",
"Mlym",
override_translit = true,
-- Mlym translit in [[Module:scripts/data]]
}
m["mn"] = {
"මොංගෝලියානු",
9246,
"xgn-cen",
"Cyrl, Mong, Latn, Brai",
ancestors = "cmg",
translit = {
Cyrl = "mn-translit",
-- Mong translit in [[Module:scripts/data]]
},
override_translit = true,
-- Mong display_text and strip_diacritics in [[Module:scripts/data]]
strip_diacritics = {
Cyrl = {remove_diacritics = c.grave .. c.acute},
},
sort_key = {
Cyrl = {
remove_diacritics = c.grave,
from = {"ё", "ө", "ү"},
to = {"е" .. p[1], "о" .. p[1], "у" .. p[1]}
},
},
standard_chars = {
Cyrl = "АаБбВвГгДдЕеЁёЖжЗзИиЙйЛлМмНнОоӨөРрСсТтУуҮүХхЦцЧчШшЫыЬьЭэЮюЯя—",
Brai = c.braille,
c.punc
},
}
-- "mo" is treated as "ro", see [[WT:LT]]
m["mr"] = {
"මරාථි",
1571,
"inc-sou",
"Deva, Modi",
ancestors = "omr",
translit = {
Deva = "mr-translit",
Modi = "mr-Modi-translit",
},
strip_diacritics = {
Deva = {
from = {"च़", "ज़", "झ़"},
to = {"च", "ज", "झ"}
},
},
}
m["ms"] = {
"මැලේ",
9237,
"poz-mly",
"Latn, ms-Arab",
ancestors = "ms-cla",
standard_chars = {
Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz",
c.punc
},
}
m["mt"] = {
"Maltese",
9166,
"sem-arb",
"Latn",
display_text = {
from = {"'"},
to = {"’"}
},
strip_diacritics = {
from = {"’"},
to = {"'"},
},
ancestors = "sqr",
sort_key = {
from = {
"ċ", "ġ", "ż", -- Convert into PUA so that decomposed form does not get caught by the next step.
"([cgz])", -- Ensure "c" comes after "ċ", "g" comes after "ġ" and "z" comes after "ż".
"g" .. p[1] .. "ħ", -- "għ" after initial conversion of "g".
p[3], p[4], "ħ", "ie", p[5] -- Convert "ċ", "ġ", "ħ", "ie", "ż" into final output.
},
to = {
p[3], p[4], p[5],
"%1" .. p[1],
"g" .. p[2],
"c", "g", "h" .. p[1], "i" .. p[1], "z"
}
},
}
m["my"] = {
"බුරුම",
9228,
"tbq-brm",
"Mymr",
ancestors = "obr",
translit = "my-translit",
override_translit = true,
sort_key = {
from = {"ျ", "ြ", "ွ", "ှ", "ဿ"},
to = {"္ယ", "္ရ", "္ဝ", "္ဟ", "သ္သ"}
},
}
m["na"] = {
"Nauruan",
13307,
"poz-mic",
"Latn",
}
m["nb"] = {
"Norwegian Bokmål",
25167,
"gmq",
"Latn",
wikimedia_codes = "no",
ancestors = "gmq-mno, da", -- da as an (but not the) ancestor of nb was agreed on - do not change without discussion
sort_key = s["no-sortkey"],
standard_chars = s["no-standardchars"],
}
m["nd"] = {
"Northern Ndebele",
35613,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["ne"] = {
"Nepali",
33823,
"inc-pah",
"Deva, Newa",
translit = {
Deva = "ne-translit"
},
}
m["ng"] = {
"Ndonga",
33900,
"bnt-ova",
"Latn",
}
m["nl"] = {
"ඕලන්ද",
7411,
"gmw-frk",
"Latn, Brai",
ancestors = "dum",
sort_key = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.diaer .. c.ringabove .. c.cedilla .. "'"},
},
standard_chars = {
Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZzÄäËëÏïÖöÜü",
Brai = c.braille,
c.punc
},
}
m["nn"] = {
"Norwegian Nynorsk",
25164,
"gmq-wes",
"Latn",
ancestors = "gmq-mno",
strip_diacritics = {
remove_diacritics = c.grave .. c.acute,
},
sort_key = s["no-sortkey"],
standard_chars = s["no-standardchars"],
}
m["no"] = {
"නෝර්වීජියානු",
9043,
"gmq-wes",
"Latn",
ancestors = "gmq-mno",
sort_key = s["no-sortkey"],
standard_chars = s["no-standardchars"],
}
m["nr"] = {
"Southern Ndebele",
36785,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["nv"] = {
"Navajo",
13310,
"apa",
"Latn, Brai",
sort_key = {
remove_diacritics = c.acute .. c.ogonek,
from = {
"chʼ", "tłʼ", "tsʼ", -- 3 chars
"ch", "dl", "dz", "gh", "hw", "kʼ", "kw", "sh", "tł", "ts", "zh", -- 2 chars
"ł", "ʼ" -- 1 char
},
to = {
"c" .. p[2], "t" .. p[2], "t" .. p[4],
"c" .. p[1], "d" .. p[1], "d" .. p[2], "g" .. p[1], "h" .. p[1], "k" .. p[1], "k" .. p[2], "s" .. p[1], "t" .. p[1], "t" .. p[3], "z" .. p[1],
"l" .. p[1], "z" .. p[2]
}
},
}
m["ny"] = {
"Chichewa",
33273,
"bnt-nys",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.circ},
sort_key = {
from = {"ng'"},
to = {"ng"}
},
}
m["oc"] = {
"Occitan",
14185,
"roa-ocr",
"Latn, Hebr",
ancestors = "pro",
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.diaer .. c.cedilla,
from = {"([lns])·h"},
to = {"%1h"}
},
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["oj"] = {
"Ojibwe",
33875,
"alg",
"Cans, Latn",
sort_key = {
Latn = {
from = {"aa", "ʼ", "ii", "oo", "sh", "zh"},
to = {"a" .. p[1], "h" .. p[1], "i" .. p[1], "o" .. p[1], "s" .. p[1], "z" .. p[1]}
},
},
}
m["om"] = {
"Oromo",
33864,
"cus-eas",
"Latn, Ethi",
}
m["or"] = {
"Odia",
33810,
"inc-eas",
"Orya",
ancestors = "inc-mor",
translit = "or-translit",
}
m["os"] = {
"Ossetian",
33968,
"xsc-sar",
"Cyrl, Geor, Latn",
ancestors = "oos",
translit = {
Cyrl = "os-translit",
-- Geor translit in [[Module:scripts/data]]
},
override_translit = true,
display_text = {
Cyrl = {
from = {"æ"},
to = {"ӕ"}
},
Latn = {
from = {"ӕ"},
to = {"æ"}
},
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.grave .. c.acute,
from = {"æ"},
to = {"ӕ"}
},
Latn = {
from = {"ӕ"},
to = {"æ"}
},
},
sort_key = {
Cyrl = {
from = {"ӕ", "гъ", "дж", "дз", "ё", "къ", "пъ", "тъ", "хъ", "цъ", "чъ"},
to = {"а" .. p[1], "г" .. p[1], "д" .. p[1], "д" .. p[2], "е" .. p[1], "к" .. p[1], "п" .. p[1], "т" .. p[1], "х" .. p[1], "ц" .. p[1], "ч" .. p[1]}
},
},
}
m["pa"] = {
"Punjabi",
58635,
"inc-pan",
"Guru, pa-Arab",
translit = {
Guru = "Guru-translit",
["pa-Arab"] = "pa-Arab-translit",
},
strip_diacritics = {
["pa-Arab"] = {
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna,
from = {"ݨ", "ࣇ"},
to = {"ن", "ل"}
},
},
}
m["pi"] = {
"පාලි",
36727,
"inc-mid",
"Latn, Brah, Deva, Beng, Sinh, Mymr, Thai, Lana, Laoo, Khmr, Cakm", --and also Khom
ancestors = "sa",
translit = {
-- Brah translit in [[Module:scripts/data]]
Deva = "sa-translit",
Beng = "pi-translit",
Sinh = "si-translit",
Mymr = "pi-translit",
Thai = "pi-translit",
Lana = "pi-translit",
Laoo = "pi-translit",
Khmr = "pi-translit",
Cakm = "Cakm-translit",
},
strip_diacritics = {
Thai = {
from = {"ึ", u(0xF700), u(0xF70F)}, -- FIXME: Not clear what's going on with the PUA characters here.
to = {"ิํ", "ฐ", "ญ"}
},
Mymr = {
remove_diacritics = c.VS01,
},
},
sort_key = { -- FIXME: This needs to be converted into the current standardized format.
from = {"ā", "ī", "ū", "ḍ", "ḷ", "m[" .. c.dotabove .. c.dotbelow .. "]", "ṅ", "ñ", "ṇ", "ṭ", "ॐ", "([เโ])([ก-ฮ])", "([ເໂ])([ກ-ຮ])", "ᩔ", "ᩕ", "ᩖ", "ᩘ", "([ᨭ-ᨱ])ᩛ", "([ᨷ-ᨾ])ᩛ", "ᩤ", u(0xFE00), u(0x200D)},
to = {"a~", "i~", "u~", "d~", "l~", "m~", "n~", "n~~", "n~~~", "t~", "ओँ", "%2%1", "%2%1", "ᩈ᩠ᩈ", "᩠ᩁ", "᩠ᩃ", "ᨦ᩠", "%1᩠ᨮ", "%1᩠ᨻ", "ᩣ"}
},
}
m["pl"] = {
"පෝලන්ත",
809,
"zlw-lch",
"Latn",
ancestors = "zlw-mpl",
sort_key = {
from = {"ą", "ć", "ę", "ł", "ń", "ó", "ś", "ź", "ż"},
to = {"a" .. p[1], "c" .. p[1], "e" .. p[1], "l" .. p[1], "n" .. p[1], "o" .. p[1], "s" .. p[1], "z" .. p[1], "z" .. p[2]}
},
standard_chars = "AaĄąBbCcĆćDdEeĘęFfGgHhIiJjKkLlŁłMmNnŃńOoÓóPpRrSsŚśTtUuWwYyZzŹźŻż" .. c.punc,
}
m["ps"] = {
"Pashto",
58680,
"ira-pat",
"ps-Arab",
strip_diacritics = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.zwarakay .. c.superalef},
}
m["pt"] = {
"පෘතුගීසි",
5146,
"roa-gap",
"Latn, Brai",
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.diaer .. c.cedilla,
from = {"ª", "æ", "º", "œ"},
to = {"a", "ae", "o", "oe"}
},
},
standard_chars = {
Latn = "AaÁáÂâÃãBbCcÇçDdEeÉéÊêFfGgHhIiÍíJjLlMmNnOoÓóÔôÕõPpQqRrSsTtUuÚúVvXxZz",
Brai = c.braille,
c.punc
},
}
m["qu"] = {
"ක්වෙච්වා",
5218,
"qwe",
"Latn",
}
m["rm"] = {
"Romansh",
13199,
"roa-rhe",
ancestors = "rm-old",
"Latn",
sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.small_e},
}
m["ro"] = {
"රුමේනියානු",
7913,
"roa-eas",
"Latn, Cyrl, Cyrs",
translit = {
Cyrl = "ro-translit"
},
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute,
from = {"ă", "â", "î", "ș", "ț"},
to = {"a" .. p[1], "a" .. p[2], "i" .. p[1], "s" .. p[1], "t" .. p[1]}
},
Cyrl = {
from = {"ӂ"},
to = {"ж" .. p[1]}
},
},
-- Cyrs strip_diacritics, sort_key in [[Module:scripts/data]]; presumably not present
standard_chars = {
Latn = "AaĂăÂâBbCcDdEeFfGgHhIiÎîJjLlMmNnOoPpRrSsȘșTtȚțUuVvXxZz",
Cyrl = "АаБбВвГгДдЕеЖжӁӂЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЫыЬьЭэЮюЯя",
c.punc
},
}
m["ru"] = {
"රුසියානු",
7737,
"zle",
"Cyrl, Brai",
ancestors = "zle-mru",
translit = {
Cyrl = "ru-translit"
},
display_text = {
Cyrl = {
from = {"'"},
to = {"’"}
},
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.grave .. c.acute .. c.diaer,
remove_exceptions = {"Ё", "ё", "Ѣ̈", "ѣ̈", "Я̈", "я̈"},
from = {"’"},
to = {"'"},
},
},
sort_key = {
Cyrl = {
remove_diacritics = c.grave .. c.acute .. c.diaer,
from = {
"і", "ѣ", "ѳ", "ѵ"
},
to = {
"и" .. p[1], "ь" .. p[1], "я" .. p[2], "я" .. p[3]
}
},
},
standard_chars = {
Cyrl = "АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя—",
Brai = c.braille,
(c.punc:gsub("'", "")) -- Exclude apostrophe.
},
}
m["rw"] = {
"Rwanda-Rundi",
3217514,
"bnt-glb",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.circ .. c.macron .. c.caron},
}
m["sa"] = {
"සංස්කෘත",
11059,
"inc",
"as-Beng, Bali, Beng, Bhks, Brah, Mymr, xwo-Mong, Deva, Gujr, Guru, Gran, Hani, Java, Kthi, Knda, Kawi, Khar, Khmr, Laoo, Mlym, mnc-Mong, Marc, Modi, Mong, Nand, Newa, Orya, Phag, Ranj, Saur, Shrd, Sidd, Sinh, Soyo, Lana, Takr, Taml, Tang, Telu, Thai, Tibt, Tutg, Tirh, Zanb", --and also Khom; script codes sorted by canonical name rather than code for [[MOD:sa-convert]]
translit = {
Beng = "sa-Beng-translit",
["as-Beng"] = "sa-Beng-translit",
-- Brah translit in [[Module:scripts/data]]
Deva = "sa-translit",
Gujr = "sa-Gujr-translit",
Guru = "sa-Guru-translit",
Java = "sa-Java-translit",
Kthi = "sa-Kthi-translit",
Khmr = "pi-translit",
Knda = "sa-Knda-translit",
Lana = "pi-translit",
Laoo = "pi-translit",
Mlym = "sa-Mlym-translit",
Modi = "sa-Modi-translit",
-- Mong, mnc-Mong, xwo-Mong translit in [[Module:scripts/data]]
-- NOTE: Formerly used xal-translit for transliterating xwo-Mong but that only handles Cyrillic; it has
-- code to transliterate xwo-Mong but it's broken so I've replaced it with the default xwo-translit.
Mymr = "pi-translit",
Orya = "sa-Orya-translit",
-- Shrd translit in [[Module:scripts/data]]
-- Sidd translit in [[Module:scripts/data]]
Sinh = "si-translit",
Taml = "sa-Taml-translit",
Telu = "sa-Telu-translit",
Thai = "pi-translit",
-- Tibt translit in [[Module:scripts/data]]
},
-- Mong display_text and strip_diacritics in [[Module:scripts/data]]
-- Tibt display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
strip_diacritics = {
Deva = s["sa-Deva-stripdiacritics"],
Mymr = {
remove_diacritics = c.VS01,
},
Thai = {
from = {"ึ", u(0xF700), u(0xF70F)}, -- FIXME: Not clear what's going on with the PUA characters here.
to = {"ิํ", "ฐ", "ญ"}
},
},
sort_key = {
Deva = s["sa-Deva-stripdiacritics"], -- until we have a proper Sanskrit sorting algorithm.
Lana = { -- Tai Tham
from = {"ᩔ", "ᩕ", "ᩖ", "ᩘ", "([ᨭ-ᨱ])ᩛ", "([ᨷ-ᨾ])ᩛ", "ᩤ"},
to = {"ᩈ᩠ᩈ", "᩠ᩁ", "᩠ᩃ", "ᨦ᩠", "%1᩠ᨮ", "%1᩠ᨻ", "ᩣ"},
},
Laoo = "Laoo-sortkey",
Latn = {
from = {"ā", "ī", "ū", "ḍ", "ḷ", "ḹ", "m[" .. c.dotabove .. c.dotbelow .. "]", "ṅ", "ñ", "ṇ", "ṛ", "ṝ", "ś", "ṣ", "ṭ"},
to = {"a~", "i~", "u~", "d~", "l~", "l~~", "m~", "n~", "n~~", "n~~~", "r~", "r~~", "s~", "s~~", "t~"},
},
Mymr = {
remove_diacritics = c.VS01,
},
Thai = "Thai-sortkey",
-- FIXME: The previous sort key which mixed all scripts removed ZWJ; I don't know which script(s) this was
-- intended for and there are no other languages which remove it in the sort key AFAIK. If it needs to be
-- removed, specify the script(s) it needs to be removed under or add handling for the "all" script that applies
-- regardless of script.
--all = {
-- remove_diacritics = c.ZWJ,
--},
},
}
m["sc"] = {
"Sardinian",
33976,
"roa-sou",
"Latn",
ancestors = "sc-old",
}
m["sd"] = {
"සින්ධි",
33997,
"inc-snd",
"sd-Arab, Deva, Sind, Khoj",
translit = {
Sind = "Sind-translit",
["sd-Arab"] = "sd-Arab-translit"
},
strip_diacritics = {
["sd-Arab"] = {
remove_diacritics = c.kashida .. c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef,
from = {"ٱ"},
to = {"ا"}
},
},
}
m["se"] = {
"Northern Sami",
33947,
"smi",
"Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
strip_diacritics = {remove_diacritics = c.macron .. c.dotbelow .. "'ˈ"},
sort_key = {
from = {"á", "č", "đ", "ŋ", "š", "ŧ", "ž"},
to = {"a" .. p[1], "c" .. p[1], "d" .. p[1], "n" .. p[1], "s" .. p[1], "t" .. p[1], "z" .. p[1]}
},
standard_chars = "AaÁáBbCcČčDdĐđEeFfGgHhIiJjKkLlMmNnŊŋOoPpRrSsŠšTtŦŧUuVvZzŽž" .. c.punc,
}
m["sg"] = {
"Sango",
33954,
"crp",
"Latn",
ancestors = "ngb",
}
m["sh"] = {
"සර්බෝ-ක්රොඒෂියානු",
9301,
"zls",
"Latn, Cyrl, Glag, Arab",
ietf_subtag = "hbs", -- ISO 639-3 code, since "sh" is deprecated from ISO 639-1
wikimedia_codes = "sh, bs, hr, sr",
strip_diacritics = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve,
remove_exceptions = {"Ć", "ć", "Ś", "ś", "Ź", "ź"}
},
Cyrl = {
remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve,
remove_exceptions = {"З́", "з́", "С́", "с́"}
},
},
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve,
remove_exceptions = {"ć", "ś", "ź"},
from = {"č", "ć", "dž", "đ", "lj", "nj", "š", "ś", "ž", "ź"},
to = {"c" .. p[1], "c" .. p[2], "d" .. p[1], "d" .. p[2], "l" .. p[1], "n" .. p[1], "s" .. p[1], "s" .. p[2], "z" .. p[1], "z" .. p[2]}
},
Cyrl = {
remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve,
remove_exceptions = {"з́", "с́"},
from = {"ђ", "з́", "ј", "љ", "њ", "с́", "ћ", "џ"},
to = {"д" .. p[1], "з" .. p[1], "и" .. p[1], "л" .. p[1], "н" .. p[1], "с" .. p[1], "т" .. p[1], "ч" .. p[1]}
},
},
standard_chars = {
Latn = "AaBbCcČčĆćDdĐđEeFfGgHhIiJjKkLlMmNnOoPpRrSsŠšTtUuVvZzŽž",
Cyrl = "АаБбВвГгДдЂђЕеЖжЗзИиЈјКкЛлЉљМмНнЊњОоПпРрСсТтЋћУуФфХхЦцЧчЏџШш",
c.punc
},
}
m["si"] = {
"සිංහල",
13267,
"inc-ins",
"Sinh",
translit = "si-translit",
override_translit = true,
}
m["sk"] = {
"Slovak",
9058,
"zlw",
"Latn",
ancestors = "zlw-osk",
sort_key = {remove_diacritics = c.acute .. c.circ .. c.diaer .. c.caron},
standard_chars = "AaÁáÄäBbCcČčDdĎďEeÉéFfGgHhIiÍíJjKkLlĹ弾MmNnŇňOoÓóÔôPpRrŔŕSsŠšTtŤťUuÚúVvYyÝýZzŽž" .. c.punc,
}
m["sl"] = {
"Slovene",
9063,
"zls",
"Latn",
strip_diacritics = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.dgrave .. c.invbreve .. c.dotbelow,
remove_exceptions = {"Ć", "ć", "Ǵ", "ǵ", "Ś", "ś", "Ź", "ź"},
from = {"Ə", "ə", "Ł", "ł"},
to = {"E", "e", "L", "l"},
},
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dotabove .. c.ringabove .. c.dgrave .. c.invbreve .. c.dotbelow .. c.ringbelow .. c.ogonek,
remove_exceptions = {"ć", "ǵ", "ś", "ź"},
from = {"ä", "č", "ć", "đ", "ə", "ë", "ǧ", "ǵ", "ï", "ł", "ö", "š", "ś", "ü", "ž", "ź"},
to = {"a" .. p[1], "c" .. p[1], "c" .. p[2], "d" .. p[1], "e", "e" .. p[1], "g" .. p[1], "g" .. p[2], "i" .. p[1], "l", "o" .. p[1], "s" .. p[1], "s" .. p[2], "u" .. p[1], "z" .. p[1], "z" .. p[2]},
},
standard_chars = "AaBbCcČčDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsŠšTtUuVvZzŽž" .. c.punc,
}
m["sm"] = {
"Samoan",
34011,
"poz-pnp",
"Latn",
}
m["sn"] = {
"Shona",
34004,
"bnt-sho",
"Latn",
strip_diacritics = {remove_diacritics = c.acute},
}
m["so"] = {
"සෝමාලි",
13275,
"cus-som",
"Latn, Arab, Osma",
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ}
},
}
m["sq"] = {
"Albanian",
8748,
"sqj",
"Latn, Grek, ota-Arab, Elba, Todr, Vith",
translit = {
Elba = "Elba-translit",
Vith = "Vith-translit",
},
-- Grek display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
strip_diacritics = {
Latn = {
remove_diacritics = c.acute .. c.circ .. c.macron,
from = {'^[ie] (%w)', '^të (%w)'}, to = {'%1', '%1'},
},
},
sort_key = {
Latn = {
remove_diacritics = c.acute .. c.circ .. c.macron .. c.tilde .. c.breve .. c.caron,
from = {'^[ie] (%w)', '^të (%w)', 'ç', 'dh', 'ë', 'gj', 'll', 'nj', 'rr', 'sh', 'th', 'xh', 'zh'},
to = {'%1', '%1', 'c'..p[1], 'd'..p[1], 'e'..p[1], 'g'..p[1], 'l'..p[1], 'n'..p[1], 'r'..p[1], 's'..p[1], 't'..p[1], 'x'..p[1], 'z'..p[1]},
}
-- TODO: Grek if the default sort key is unsuitable
},
standard_chars = {
Latn = "AaBbCcÇçDdEeËëFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvXxYyZz",
c.punc
},
}
m["ss"] = {
"Swazi",
34014,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["st"] = {
"Sotho",
34340,
"bnt-sts",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["su"] = {
"සුන්ඩා",
34002,
"poz-msa",
"Latn, Sund, Arab",
ancestors = "osn",
translit = {
Sund = "Sund-translit"
},
}
m["sv"] = {
"ස්වීඩන්",
9027,
"gmq-eas",
"Latn",
ancestors = "gmq-osw-lat",
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dacute .. c.caron .. c.cedilla .. "':",
remove_exceptions = {"å"},
from = {"ø", "æ", "œ", "ß", "å", "aͤ", "oͤ"},
to = {"ö", "ae", "oe", "ss", "z" .. p[1], "ä", "ö"}
},
standard_chars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvXxYyÅåÄäÖö" .. c.punc,
}
m["sw"] = {
"Swahili",
7838,
"bnt-swh",
"Latn, Arab",
sort_key = {
Latn = {
from = {"ng'"},
to = {"ng" .. p[1]}
},
},
}
m["ta"] = {
"දෙමළ",
5885,
"dra-tam",
"Taml",
ancestors = "ta-mid",
translit = "ta-translit",
override_translit = true,
}
m["te"] = {
"තෙලිඟු",
8097,
"dra-tel",
"Telu",
translit = "te-translit",
override_translit = true,
}
m["tg"] = {
"Tajik",
9260,
"ira-swi",
"Cyrl, fa-Arab, Latn",
ancestors = "fa-cls",
translit = {
Cyrl = "tg-translit"
},
override_translit = true,
strip_diacritics = {
Cyrl = s["tg-stripdiacritics"],
Latn = s["tg-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {"ғ", "ё", "ӣ", "қ", "ӯ", "ҳ", "ҷ"},
to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "к" .. p[1], "у" .. p[1], "х" .. p[1], "ч" .. p[1]}
},
},
}
m["th"] = {
"තායි",
9217,
"tai-swe",
"Thai, Khomt, Brai",
translit = {
Thai = "th-translit"
},
sort_key = {
Thai = "Thai-sortkey"
},
}
m["ti"] = {
"Tigrinya",
34124,
"sem-eth",
"Ethi",
translit = "Ethi-translit",
}
m["tk"] = {
"Turkmen",
9267,
"trk-ogz",
"Latn, Cyrl, Arab",
strip_diacritics = {
Latn = s["tk-stripdiacritics"],
Cyrl = s["tk-stripdiacritics"],
},
sort_key = {
Latn = {
from = {"ç", "ä", "ž", "ň", "ö", "ş", "ü", "ý"},
to = {"c" .. p[1], "e" .. p[1], "j" .. p[1], "n" .. p[1], "o" .. p[1], "s" .. p[1], "u" .. p[1], "y" .. p[1]}
},
Cyrl = {
from = {"ё", "җ", "ң", "ө", "ү", "ә"},
to = {"е" .. p[1], "ж" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "э" .. p[1]}
},
},
ancestors = "trk-eog",
}
m["tl"] = {
"Tagalog",
34057,
"phi",
"Latn, Tglg",
translit = {
Tglg = "tl-translit"
},
override_translit = true,
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ}
},
standard_chars = {
Latn = "AaBbKkDdEeGgHhIiLlMmNnOoPpRrSsTtUuWwYy",
c.punc
},
sort_key = {
Latn = "tl-sortkey",
},
}
m["tn"] = {
"Tswana",
34137,
"bnt-sts",
"Latn",
}
m["to"] = {
"Tongan",
34094,
"poz-ton",
"Latn",
strip_diacritics = {remove_diacritics = c.acute},
sort_key = {remove_diacritics = c.macron},
}
m["tr"] = {
"තුර්කි",
256,
"trk-ogz",
"Latn",
ancestors = "ota",
dotted_dotless_i = true,
sort_key = {
from = {
-- Ignore circumflex, but account for capital Î wrongly becoming ı + circ due to dotted dotless I logic.
"ı" .. c.circ, c.circ,
"i", -- Ensure "i" comes after "ı".
"ç", "ğ", "ı", "ö", "ş", "ü"
},
to = {
"i", "",
"i" .. p[1],
"c" .. p[1], "g" .. p[1], "i", "o" .. p[1], "s" .. p[1], "u" .. p[1]
}
},
standard_chars = "AaÂâBbCcÇçDdEeFfGgĞğHhIıİiÎîJjKkLlMmNnOoÖöPpRrSsŞşTtUuÛûÜüVvYyZz" .. c.punc,
}
m["ts"] = {
"Tsonga",
34327,
"bnt-tsr",
"Latn",
}
m["tt"] = {
"Tatar",
25285,
"trk-kbu",
"Cyrl, Latn, tt-Arab",
translit = {
Cyrl = "tt-translit",
["tt-Arab"] = "tt-translit"
},
--override_translit = true, -- enable override until Module code can detect Russian loans such as [[аэропорт]]
dotted_dotless_i = true,
sort_key = {
Cyrl = {
from = {"ә", "ў", "ғ", "ё", "җ", "қ", "ң", "ө", "ү", "һ"},
to = {"а" .. p[1], "в" .. p[1], "г" .. p[1], "е" .. p[1], "ж" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "х" .. p[1]}
},
Latn = {
from = {
"i", -- Ensure "i" comes after "ı".
"ä", "ə", "ç", "ğ", "ı", "ñ", "ŋ", "ö", "ɵ", "ş", "ü"
},
to = {
"i" .. p[1],
"a" .. p[1], "a" .. p[2], "c" .. p[1], "g" .. p[1], "i", "n" .. p[1], "n" .. p[2], "o" .. p[1], "o" .. p[2], "s" .. p[1], "u" .. p[1]
}
},
},
}
-- "tw" is treated as "ak", see [[WT:LT]]
m["ty"] = {
"Tahitian",
34128,
"poz-pep",
"Latn",
}
m["ug"] = {
"Uyghur",
13263,
"trk-kar",
"ug-Arab, Latn, Cyrl",
ancestors = "chg",
translit = {
["ug-Arab"] = "ug-translit",
Cyrl = "ug-translit",
},
override_translit = true,
}
m["uk"] = {
"යුක්රේනියානු",
8798,
"zle",
"Cyrl",
ancestors = "zle-muk",
translit = "uk-translit",
strip_diacritics = {remove_diacritics = c.grave .. c.acute},
sort_key = {
remove_diacritics = c.grave .. c.acute,
from = {
"ї", -- 2 chars
"ґ", "є", "і" -- 1 char
},
to = {
"и" .. p[2],
"г" .. p[1], "е" .. p[1], "и" .. p[1]
}
},
standard_chars = "АаБбВвГгДдЕеЄєЖжЗзИиІіЇїЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЬьЮюЯя" .. c.punc:gsub("'", ""), -- Exclude apostrophe.
}
m["ur"] = {
"උර්දු",
1617,
"inc-hnd",
"ur-Arab, Hebr",
translit = {
["ur-Arab"] = "ur-translit"
},
strip_diacritics = {
["ur-Arab"] = {
-- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه"; hamzatu l-waṣli to a regular alif
from = {"هٔ", "ۂ", "ٱ"},
to = {"ہ", "ہ", "ا"},
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna .. c.superalef
},
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
standard_chars = {
["ur-Arab"] = "ایببپتثجچحخدذرزژسشصضطظعغفقکگلࣇڷمنݨوؤہھئٹڈڑآے",
c.punc,
},
}
m["uz"] = {
"උස්බෙක්",
9264,
"trk-kar",
"Latn, Cyrl, fa-Arab",
ancestors = "chg",
translit = {
Cyrl = "uz-translit"
},
sort_key = {
Latn = {
from = {"oʻ", "gʻ", "sh", "ch", "ng"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3], "z" .. p[4], "z" .. p[5]}
},
Cyrl = {
from = {"ё", "ў", "қ", "ғ", "ҳ"},
to = {"е" .. p[1], "я" .. p[1], "я" .. p[2], "я" .. p[3], "я" .. p[4]}
},
},
strip_diacritics = {
["fa-Arab"] = "ar-stripdiacritics",
},
}
m["ve"] = {
"Venda",
32704,
"bnt-bso",
"Latn",
}
m["vi"] = {
"වියට්නාම",
9199,
"mkh-vie",
"Latn, Hani",
ancestors = "mkh-mvi",
sort_key = {
Latn = "vi-sortkey",
Hani = "Hani-sortkey",
},
}
m["vo"] = {
"Volapük",
36986,
"art",
"Latn",
}
m["wa"] = {
"Walloon",
34219,
"roa-oil",
"Latn",
sort_key = s["roa-oil-sortkey"],
}
m["wo"] = {
"Wolof",
34257,
"alv-fwo",
"Latn, Arab, Gara",
}
m["xh"] = {
"Xhosa",
13218,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["yi"] = {
"යිඩිශ්",
8641,
"gmw-hgm",
"Hebr, Latn",
ancestors = "gmh",
translit = {
Hebr = "yi-translit",
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["yo"] = {
"Yoruba",
34311,
"alv-yor",
"Latn, Arab",
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.macron}
},
sort_key = {
Latn = {
from = {"ẹ", "ɛ", "gb", "ị", "kp", "ọ", "ɔ", "ṣ", "sh", "ụ"},
to = {"e" .. p[1], "e" .. p[1], "g" .. p[1], "i" .. p[1], "k" .. p[1], "o" .. p[1], "o" .. p[1], "s" .. p[1], "s" .. p[1], "u" .. p[1]}
},
},
}
m["za"] = {
"Zhuang",
13216,
"tai",
"Latn, Hani",
sort_key = {
Latn = "za-sortkey",
Hani = "Hani-sortkey",
},
}
m["zh"] = {
"චීන",
7850,
"zhx",
"Hants, Latn, Bopo, Nshu, Brai",
ancestors = "ltc",
generate_forms = "zh-generateforms",
translit = {
Hani = "zh-translit",
Bopo = "zh-translit",
},
sort_key = {
Hani = "Hani-sortkey"
},
}
m["zu"] = {
"සූලූ",
10179,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
return require("Module:languages").finalizeData(m, "language")
bqs5deg1t1z3fjo62571xg3d3n5l35g
Module:headword
828
7947
235397
230352
2026-06-02T04:27:46Z
Lee
19
[[Prākrit]], [[:ප්රවර්ගය:ඉංග්රීසි terms spelled with ◌̄]] සිට [[:ප්රවර්ගය:ඉංග්රීසි යෙදුම්, ◌̄ භාවිතා කොට ලියන ලද]] වෙතට යොමු කිරීම
235397
Scribunto
text/plain
local m_sinhala_project = require("Module:sinhala project")
local m_sinhala = require("Module:sinhala")
local export = {}
-- Named constants for all modules used, to make it easier to swap out sandbox versions.
local debug_track_module = "Module:debug/track"
local en_utilities_module = "Module:en-utilities"
local si_utilities_module = "Module:si-utilities"
local gender_and_number_module = "Module:gender and number"
local headword_data_module = "Module:headword/data"
local headword_page_module = "Module:headword/page"
local links_module = "Module:links"
local load_module = "Module:load"
local pages_module = "Module:pages"
local palindromes_module = "Module:palindromes"
local pron_qualifier_module = "Module:pron qualifier"
local scripts_module = "Module:scripts"
local scripts_data_module = "Module:scripts/data"
local script_utilities_module = "Module:script utilities"
local script_utilities_data_module = "Module:script utilities/data"
local string_utilities_module = "Module:string utilities"
local table_module = "Module:table"
local utilities_module = "Module:utilities"
local concat = table.concat
local dump = mw.dumpObject
local insert = table.insert
local ipairs = ipairs
local max = math.max
local new_title = mw.title.new
local pairs = pairs
local require = require
local toNFC = mw.ustring.toNFC
local toNFD = mw.ustring.toNFD
local type = type
local ufind = mw.ustring.find
local ugmatch = mw.ustring.gmatch
local ugsub = mw.ustring.gsub
local umatch = mw.ustring.match
--[==[
Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==]
local function debug_track(...)
debug_track = require(debug_track_module)
return debug_track(...)
end
local function encode_entities(...)
encode_entities = require(string_utilities_module).encode_entities
return encode_entities(...)
end
local function extend(...)
extend = require(table_module).extend
return extend(...)
end
local function find_best_script_without_lang(...)
find_best_script_without_lang = require(scripts_module).findBestScriptWithoutLang
return find_best_script_without_lang(...)
end
local function format_categories(...)
format_categories = require(utilities_module).format_categories
return format_categories(...)
end
local function format_genders(...)
format_genders = require(gender_and_number_module).format_genders
return format_genders(...)
end
local function format_pron_qualifiers(...)
format_pron_qualifiers = require(pron_qualifier_module).format_qualifiers
return format_pron_qualifiers(...)
end
local function full_link(...)
full_link = require(links_module).full_link
return full_link(...)
end
local function get_current_L2(...)
get_current_L2 = require(pages_module).get_current_L2
return get_current_L2(...)
end
local function get_link_page(...)
get_link_page = require(links_module).get_link_page
return get_link_page(...)
end
local function get_script(...)
get_script = require(scripts_module).getByCode
return get_script(...)
end
local function is_palindrome(...)
is_palindrome = require(palindromes_module).is_palindrome
return is_palindrome(...)
end
local function language_link(...)
language_link = require(links_module).language_link
return language_link(...)
end
local function load_data(...)
load_data = require(load_module).load_data
return load_data(...)
end
local function pattern_escape(...)
pattern_escape = require(string_utilities_module).pattern_escape
return pattern_escape(...)
end
local function pluralize(...)
pluralize = require(si_utilities_module).pluralize
return pluralize(...)
end
local function process_page(...)
process_page = require(headword_page_module).process_page
return process_page(...)
end
local function remove_links(...)
remove_links = require(links_module).remove_links
return remove_links(...)
end
local function shallow_copy(...)
shallow_copy = require(table_module).shallowCopy
return shallow_copy(...)
end
local function tag_text(...)
tag_text = require(script_utilities_module).tag_text
return tag_text(...)
end
local function tag_transcription(...)
tag_transcription = require(script_utilities_module).tag_transcription
return tag_transcription(...)
end
local function tag_translit(...)
tag_translit = require(script_utilities_module).tag_translit
return tag_translit(...)
end
local function trim(...)
trim = require(string_utilities_module).trim
return trim(...)
end
local function ulen(...)
ulen = require(string_utilities_module).len
return ulen(...)
end
--[==[
Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==]
local m_data
local function get_data()
m_data = load_data(headword_data_module)
return m_data
end
local script_data
local function get_script_data()
script_data = load_data(scripts_data_module)
return script_data
end
local script_utilities_data
local function get_script_utilities_data()
script_utilities_data = load_data(script_utilities_data_module)
return script_utilities_data
end
-- If set to true, categories always appear, even in non-mainspace pages
local test_force_categories = false
-- Add a tracking category to track entries with certain (unusually undesirable) properties. `track_id` is an identifier
-- for the particular property being tracked and goes into the tracking page. Specifically, this adds a link in the
-- page text to [[Wiktionary:Tracking/headword/TRACK_ID]], meaning you can find all entries with the `track_id` property
-- by visiting [[Special:WhatLinksHere/Wiktionary:Tracking/headword/TRACK_ID]].
--
-- If `lang` (a language object) is given, an additional tracking page [[Wiktionary:Tracking/headword/TRACK_ID/CODE]] is
-- linked to where CODE is the language code of `lang`, and you can find all entries in the combination of `track_id`
-- and `lang` by visiting [[Special:WhatLinksHere/Wiktionary:Tracking/headword/TRACK_ID/CODE]]. This makes it possible to
-- isolate only the entries with a specific tracking property that are in a given language. Note that if `lang`
-- references at etymology-only language, both that language's code and its full parent's code are tracked.
local function track(track_id, lang)
local tracking_page = "headword/" .. track_id
if lang and lang:hasType("etymology-only") then
debug_track{tracking_page, tracking_page .. "/" .. lang:getCode(),
tracking_page .. "/" .. lang:getFullCode()}
elseif lang then
debug_track{tracking_page, tracking_page .. "/" .. lang:getCode()}
else
debug_track(tracking_page)
end
return true
end
local function text_in_script(text, script_code)
local sc = get_script(script_code)
if not sc then
error("Internal error: Bad script code " .. script_code)
end
local characters = sc.characters
local out
if characters then
text = ugsub(text, "%W", "")
out = ufind(text, "[" .. characters .. "]")
end
if out then
return true
else
return false
end
end
local spacingPunctuation = "[%s%p]+"
--[[ List of punctuation or spacing characters that are found inside of words.
Used to exclude characters from the regex above. ]]
local wordPunc = "-#%%&@־׳״'.·*’་•:᠊"
local notWordPunc = "[^" .. wordPunc .. "]+"
-- Format a term (either a head term or an inflection term) along with any left or right qualifiers, labels, references
-- or customized separator: `part` is the object specifying the term (and `lang` the language of the term), which should
-- optionally contain:
-- * left qualifiers in `q`, an array of strings;
-- * right qualifiers in `qq`, an array of strings;
-- * left labels in `l`, an array of strings;
-- * right labels in `ll`, an array of strings;
-- * references in `refs`, an array either of strings (formatted reference text) or objects containing fields `text`
-- (formatted reference text) and optionally `name` and/or `group`;
-- * a separator in `separator`, defaulting to " <i>or</i> " if this is not the first term (j > 1), otherwise "".
-- `formatted` is the formatted version of the term itself, and `j` is the index of the term.
local function format_term_with_qualifiers_and_refs(lang, part, formatted, j)
local function part_non_empty(field)
local list = part[field]
if not list then
return nil
end
if type(list) ~= "table" then
error(("Internal error: Wrong type for `part.%s`=%s, should be \"table\""):format(field, dump(list)))
end
return list[1]
end
if part_non_empty("q") or part_non_empty("qq") or part_non_empty("l") or
part_non_empty("ll") or part_non_empty("refs") then
formatted = format_pron_qualifiers {
lang = lang,
text = formatted,
q = part.q,
qq = part.qq,
l = part.l,
ll = part.ll,
refs = part.refs,
}
end
local separator = part.separator or j > 1 and " <i>or</i> " -- use "" to request no separator
if separator then
formatted = separator .. formatted
end
return formatted
end
--[==[Return true if the given head is multiword according to the algorithm used in full_headword().]==]
function export.head_is_multiword(head)
for possibleWordBreak in ugmatch(head, spacingPunctuation) do
if umatch(possibleWordBreak, notWordPunc) then
return true
end
end
return false
end
do
local function workaround_to_exclude_chars(s)
return (ugsub(s, notWordPunc, "\2%1\1"))
end
--[==[Add links to a multiword head.]==]
function export.add_multiword_links(head, default)
head = "\1" .. ugsub(head, spacingPunctuation, workaround_to_exclude_chars) .. "\2"
if default then
head = head
:gsub("(\1[^\2]*)\\([:#][^\2]*\2)", "%1\\\\%2")
:gsub("(\1[^\2]*)([:#][^\2]*\2)", "%1\\%2")
end
--Escape any remaining square brackets to stop them breaking links (e.g. "[citation needed]").
head = encode_entities(head, "[]", true, true)
--[=[
use this when workaround is no longer needed:
head = "[[" .. ugsub(head, WORDBREAKCHARS, "]]%1[[") .. "]]"
Remove any empty links, which could have been created above
at the beginning or end of the string.
]=]
return (head
:gsub("\1\2", "")
:gsub("[\1\2]", {["\1"] = "[[", ["\2"] = "]]"}))
end
end
local function non_categorizable(full_raw_pagename)
return full_raw_pagename:find("^උපග්රන්ථය:Gestures/") or
-- Unsupported titles with descriptive names.
(full_raw_pagename:find("^Unsupported titles/") and not full_raw_pagename:find("`"))
end
local function tag_text_and_add_quals_and_refs(data, head, formatted, j)
-- Add language and script wrapper.
formatted = tag_text(formatted, data.lang, head.sc, "head", nil, j == 1 and data.id or nil)
-- Add qualifiers, labels, references and separator.
return format_term_with_qualifiers_and_refs(data.lang, head, formatted, j)
end
-- Format a headword with transliterations.
local function format_headword(data)
-- Are there non-empty transliterations?
local has_translits = false
local has_manual_translits = false
------ Format the headwords. ------
local head_parts = {}
local unique_head_parts = {}
local has_multiple_heads = not not data.heads[2]
for j, head in ipairs(data.heads) do
if head.tr or head.ts then
has_translits = true
end
if head.tr and head.tr_manual or head.ts then
has_manual_translits = true
end
local formatted
-- Apply processing to the headword, for formatting links and such.
if head.term:find("[[", nil, true) and head.sc:getCode() ~= "Image" then
formatted = language_link{term = head.term, lang = data.lang}
else
formatted = data.lang:makeDisplayText(head.term, head.sc, true)
end
local head_part = tag_text_and_add_quals_and_refs(data, head, formatted, j)
insert(head_parts, head_part)
-- If multiple heads, try to determine whether all heads display the same. To do this we need to effectively
-- rerun the text tagging and addition of qualifiers and references, using 1 for all indices.
if has_multiple_heads then
local unique_head_part
if j == 1 then
unique_head_part = head_part
else
unique_head_part = tag_text_and_add_quals_and_refs(data, head, formatted, 1)
end
unique_head_parts[unique_head_part] = true
end
end
local set_size = 0
if has_multiple_heads then
for _ in pairs(unique_head_parts) do
set_size = set_size + 1
end
end
if set_size == 1 then
head_parts = head_parts[1]
else
head_parts = concat(head_parts)
end
if has_manual_translits then
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/manual-tr]]
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/manual-tr/LANGCODE]]
track("manual-tr", data.lang)
end
------ Format the transliterations and transcriptions. ------
local translits_formatted
if has_translits then
local translit_parts = {}
for _, head in ipairs(data.heads) do
if head.tr or head.ts then
local this_parts = {}
if head.tr then
insert(this_parts, tag_translit(head.tr, data.lang:getCode(), "head", nil, head.tr_manual))
if head.ts then
insert(this_parts, " ")
end
end
if head.ts then
insert(this_parts, "/" .. tag_transcription(head.ts, data.lang:getCode(), "head") .. "/")
end
insert(translit_parts, concat(this_parts))
end
end
translits_formatted = " (" .. concat(translit_parts, " <i>or</i> ") .. ")"
local langname = data.lang:getCanonicalName()
local transliteration_page = new_title(langname .. " transliteration", "Wiktionary")
local saw_translit_page = false
if transliteration_page and transliteration_page:getContent() then
translits_formatted = " [[Wiktionary:" .. langname .. " transliteration|•]]" .. translits_formatted
saw_translit_page = true
end
-- If data.lang is an etymology-only language and we didn't find a translation page for it, fall back to the
-- full parent.
if not saw_translit_page and data.lang:hasType("etymology-only") then
langname = data.lang:getFullName()
transliteration_page = new_title(langname .. " transliteration", "Wiktionary")
if transliteration_page and transliteration_page:getContent() then
translits_formatted = " [[Wiktionary:" .. langname .. " transliteration|•]]" .. translits_formatted
end
end
else
translits_formatted = ""
end
------ Paste heads and transliterations/transcriptions. ------
local lemma_gloss
if data.gloss then
lemma_gloss = ' <span class="ib-content qualifier-content">' .. data.gloss .. '</span>'
else
lemma_gloss = ""
end
return head_parts .. translits_formatted .. lemma_gloss
end
local function format_headword_genders(data)
local retval = ""
if data.genders and data.genders[1] then
if data.gloss then
retval = ","
end
local pos_for_cat
if not data.nogendercat then
local no_gender_cat = (m_data or get_data()).no_gender_cat
if not (no_gender_cat[data.lang:getCode()] or no_gender_cat[data.lang:getFullCode()]) then
pos_for_cat = (m_data or get_data()).pos_for_gender_number_cat[data.pos_category:gsub("^reconstructed ", "")]
end
end
local text, cats = format_genders(data.genders, data.lang, pos_for_cat)
if cats then
extend(data.categories, cats)
end
retval = retval .. " " .. text
end
return retval
end
-- Forward reference
local format_inflections
local function format_inflection_parts(data, parts)
for j, part in ipairs(parts) do
if type(part) ~= "table" then
part = {term = part}
end
local partaccel = part.accel
local face = part.face or "bold"
if face ~= "bold" and face ~= "plain" and face ~= "hypothetical" then
error("The face `" .. face .. "` " .. (
(script_utilities_data or get_script_utilities_data()).faces[face] and
"should not be used for non-headword terms on the headword line." or
"is invalid."
))
end
-- Here the final part 'or data.nolinkinfl' allows to have 'nolinkinfl=true'
-- right into the 'data' table to disable inflection links of the entire headword
-- when inflected forms aren't entry-worthy, e.g.: in Vulgar Latin
local nolinkinfl = part.face == "hypothetical" or (part.nolink and track("nolink") or part.nolinkinfl) or (
data.nolink and track("nolink") or data.nolinkinfl)
local formatted
if part.label then
-- FIXME: There should be a better way of italicizing a label. As is, this isn't customizable.
formatted = "<i>" .. m_sinhala.sinhala(part.label) .. "</i>"
else
-- Convert the term into a full link. Don't show a transliteration here unless enable_auto_translit is
-- requested, either at the `parts` level (i.e. per inflection) or at the `data.inflections` level (i.e.
-- specified for all inflections). This is controllable in {{head}} using autotrinfl=1 for all inflections,
-- or fNautotr=1 for an individual inflection (remember that a single inflection may be associated with
-- multiple terms). The reason for doing this is to avoid clutter in headword lines by default in languages
-- where the script is relatively straightforward to read by learners (e.g. Greek, Russian), but allow it
-- to be enabled in languages with more complex scripts (e.g. Arabic).
--
-- FIXME: With nested inflections, should we also respect `enable_auto_translit` at the top level of the
-- nested inflections structure?
local tr = part.tr or not (parts.enable_auto_translit or data.inflections.enable_auto_translit) and "-" or nil
-- FIXME: Temporary errors added 2025-10-03. Remove after a month or so.
if part.translit then
error("Internal error: Use field `tr` not `translit` for specifying an inflection part translit")
end
if part.transcription then
error("Internal error: Use field `ts` not `transcription` for specifying an inflection part transcription")
end
local postprocess_annotations
if part.inflections then
postprocess_annotations = function(infldata)
insert(infldata.annotations, format_inflections(data, part.inflections))
end
end
formatted = full_link(
{
term = not nolinkinfl and part.term or nil,
alt = part.alt or (nolinkinfl and part.term or nil),
lang = part.lang or data.lang,
sc = part.sc or parts.sc or nil,
gloss = part.gloss,
pos = part.pos,
lit = part.lit,
id = part.id,
genders = part.genders,
tr = tr,
ts = part.ts,
accel = partaccel or parts.accel,
postprocess_annotations = postprocess_annotations,
},
face
)
end
parts[j] = format_term_with_qualifiers_and_refs(part.lang or data.lang, part,
formatted, j)
end
local parts_output
if parts[1] then
parts_output = (parts.label and " " or "") .. concat(parts)
elseif parts.request then
parts_output = " <small>[please provide]</small>"
insert(data.categories, "Requests for inflections in " .. data.lang:getFullName() .. " entries")
else
parts_output = ""
end
local parts_label = parts.label and ("<i>" .. m_sinhala.sinhala(parts.label) .. "</i>") or ""
return format_term_with_qualifiers_and_refs(data.lang, parts, parts_label .. parts_output, 1)
end
-- Format the inflections following the headword or nested after a given inflection. Declared local above.
function format_inflections(data, inflections)
if inflections and inflections[1] then
-- Format each inflection individually.
for key, infl in ipairs(inflections) do
inflections[key] = format_inflection_parts(data, infl)
end
return concat(inflections, ", ")
else
return ""
end
end
-- Format the top-level inflections following the headword. Currently this just adds parens around the
-- formatted comma-separated inflections in `data.inflections`.
local function format_top_level_inflections(data)
local result = format_inflections(data, data.inflections)
if result ~= "" then
return " (" .. result .. ")"
else
return result
end
end
-- Forward reference
local check_red_link_inflections
-- Check a single inflection (which consists of a label and zero or more terms, each possibly with nested inflections)
-- for red links. If so, insert a red-link category based on `plpos` (the plural part of speech to insert in the
-- category), stop further processing, and return true. If no red links found, return false.
local function check_red_link_inflection_parts(data, parts, plpos)
for _, part in ipairs(parts) do
if type(part) ~= "table" then
part = {term = part}
end
local term = part.term
if term and not term:find("%[%[") then
local stripped_physical_term = get_link_page(term, data.lang, part.sc or parts.sc or nil)
if stripped_physical_term then
local title = mw.title.new(stripped_physical_term)
if title and not title:getContent() then
insert(data.categories, data.lang:getFullName() .. " " .. m_sinhala.sinhala(plpos) .. ", යොමු වචන පේළි තුළ රතු සබැඳි සහිත")
return true
end
end
end
if part.inflections then
if check_red_link_inflections(data, part.inflections, plpos) then
return true
end
end
end
return false
end
-- Check a set of inflections (each of which describes a single inflection of the term, such as feminine or plural, and
-- consists of a label and zero or more terms, each possibly with nested inflections) for red links. If so, insert a
-- red-link category based on `plpos` (the plural part of speech to insert in the category), stop further processing,
-- and return true. If no red links found, return false.
function check_red_link_inflections(data, inflections, plpos)
if inflections and inflections[1] then
-- Check each inflection individually.
for key, infl in ipairs(inflections) do
if check_red_link_inflection_parts(data, infl, plpos) then
return true
end
end
end
return false
end
-- Check the top-level inflections in `data.inflections`, along with any nested inflections, for red links. If so,
-- insert a red-link category based on `plpos` (the plural part of speech to insert in the category), stop further
-- processing, and return true. If no red links found, return false.
local function check_red_link_inflections_top_level(data, plpos)
return check_red_link_inflections(data, data.inflections, plpos)
end
--[==[
Returns the plural form of `pos`, a raw part of speech input, which could be singular or
plural. Irregular plural POS are taken into account (e.g. "kanji" pluralizes to
"kanji").
]==]
function export.pluralize_pos(pos)
-- Make the plural form of the part of speech
return (m_data or get_data()).irregular_plurals[pos] or
pos:sub(-1) == "s" and pos or
pluralize(pos)
end
--[==[
Return "lemma" if the given POS is a lemma, "non-lemma form" if a non-lemma form, or nil
if unknown. The POS passed in must be in its plural form ("nouns", "prefixes", etc.).
If you have a POS in its singular form, call {export.pluralize_pos()} above to pluralize it
in a smart fashion that knows when to add "-s" and when to add "-es", and also takes
into account any irregular plurals.
If `best_guess` is given and the POS is in neither the lemma nor non-lemma list, guess
based on whether it ends in " forms"; otherwise, return nil.
]==]
function export.pos_lemma_or_nonlemma(plpos, best_guess)
local m_headword_data = m_data or get_data()
local isLemma = m_headword_data.lemmas
-- Is it a lemma category?
if isLemma[plpos] then
return "lemma"
end
local plpos_no_recon = plpos:gsub("^reconstructed ", "")
if isLemma[plpos_no_recon] then
return "lemma"
end
-- Is it a nonlemma category?
local isNonLemma = m_headword_data.nonlemmas
if isNonLemma[plpos] or isNonLemma[plpos_no_recon] then
return "non-lemma form"
end
local plpos_no_mut = plpos:gsub("^mutated ", "")
if isLemma[plpos_no_mut] or isNonLemma[plpos_no_mut] then
return "non-lemma form"
elseif best_guess then
return plpos:find(" forms$") and "non-lemma form" or "lemma"
else
return nil
end
end
--[==[
Canonicalize a part of speech as specified in 2= in {{tl|head}}. This checks for POS aliases and non-lemma form
aliases ending in 'f', and then pluralizes if the POS term does not have an invariable plural.
]==]
function export.canonicalize_pos(pos)
-- FIXME: Temporary code to throw an error for alias 'pre' (= preposition) that will go away.
if pos == "pre" then
-- Don't throw error on 'pref' as it's an alias for "prefix".
error("POS 'pre' for 'preposition' no longer allowed as it's too ambiguous; use 'prep'")
end
-- Likewise for pro = pronoun.
if pos == "pro" or pos == "prof" then
error("POS 'pro' for 'pronoun' no longer allowed as it's too ambiguous; use 'pron'")
end
local m_headword_data = m_data or get_data()
if m_headword_data.pos_aliases[pos] then
pos = m_headword_data.pos_aliases[pos]
elseif pos:sub(-1) == "f" then
pos = pos:sub(1, -2)
pos = (m_headword_data.pos_aliases[pos] or pos) .. " forms"
end
return export.pluralize_pos(pos)
end
-- Find and return the maximum index in the array `data[element]` (which may have gaps in it), and initialize it to a
-- zero-length array if unspecified. Check to make sure all keys are numeric (other than "maxindex", which is set by
-- [[Module:parameters]] for list parameters), all values are strings, and unless `allow_blank_string` is given,
-- no blank (zero-length) strings are present.
local function init_and_find_maximum_index(data, element, allow_blank_string)
local maxind = 0
if not data[element] then
data[element] = {}
end
local typ = type(data[element])
if typ ~= "table" then
error(("Internal error: In full_headword(), `data.%s` must be an array but is a %s"):format(element, typ))
end
for k, v in pairs(data[element]) do
if k ~= "maxindex" then
if type(k) ~= "number" then
error(("Internal error: Unrecognized non-numeric key '%s' in `data.%s`"):format(k, element))
end
if k > maxind then
maxind = k
end
if v then
if type(v) ~= "string" then
error(("Internal error: For key '%s' in `data.%s`, value should be a string but is a %s"):format(k, element, type(v)))
end
if not allow_blank_string and v == "" then
error(("Internal error: For key '%s' in `data.%s`, blank string not allowed; use 'false' for the default"):format(k, element))
end
end
end
end
return maxind
end
--[==[
-- Add the page to various maintenance categories for the language and the
-- whole page. These are placed in the headword somewhat arbitrarily, but
-- mainly because headword templates are mandatory for entries (meaning that
-- in theory it provides full coverage).
--
-- This is provided as an external entry point so that modules which transclude
-- information from other entries (such as {{tl|ja-see}}) can take advantage
-- of this feature as well, because they are used in place of a conventional
-- headword template.]==]
do
-- Handle any manual sortkeys that have been specified in raw categories
-- by tracking if they are the same or different from the automatically-
-- generated sortkey, so that we can track them in maintenance
-- categories.
local function handle_raw_sortkeys(tbl, sortkey, page, lang, lang_cats)
sortkey = sortkey or lang:makeSortKey(page.pagename)
-- If there are raw categories with no sortkey, then they will be
-- sorted based on the default MediaWiki sortkey, so we check against
-- that.
if tbl == true then
if page.raw_defaultsort ~= sortkey then
insert(lang_cats, lang:getFullName() .. " යෙදුම්, non-redundant non-automated සෝට්කී සහිත")
end
return
end
local redundant, different
for k in pairs(tbl) do
if k == sortkey then
redundant = true
else
different = true
end
end
if redundant then
insert(lang_cats, lang:getFullName() .. " terms with redundant sortkeys")
end
if different then
insert(lang_cats, lang:getFullName() .. " යෙදුම්, non-redundant non-automated සෝට්කී සහිත")
end
return sortkey
end
function export.maintenance_cats(page, lang, lang_cats, page_cats)
extend(page_cats, page.cats)
lang = lang:getFull() -- since we are just generating categories
local canonical = lang:getCanonicalName()
local tbl, sortkey = page.wikitext_topic_cat[lang:getCode()]
if tbl then
sortkey = handle_raw_sortkeys(tbl, sortkey, page, lang, lang_cats)
insert(lang_cats, canonical .. " ප්රවේශ, ඍජු එක් කිරීම මගින් මාතෘකා ප්රවර්ග දක්වා ඇති")
end
tbl = page.wikitext_langname_cat[canonical]
if tbl then
handle_raw_sortkeys(tbl, sortkey, page, lang, lang_cats)
insert(lang_cats, canonical .. " ප්රවේශ, ඍජු එක් කිරීම මගින් භාෂා නාම ප්රවර්ග දක්වා ඇති")
end
if get_current_L2() ~= canonical then
insert(lang_cats, canonical .. " ප්රවේශ, දෝෂ සහගත භාෂා ශීර්ෂක සහිත")
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/incorrect language header]]
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/incorrect language header/LANGCODE]]
track("incorrect language header", lang)
end
end
end
--[==[This is the primary external entry point.
{{lua|full_headword(data)}}
This is used by {{temp|head}} and various language-specific headword templates (e.g. {{temp|ru-adj}} for Russian adjectives, {{temp|de-noun}} for German nouns, etc.) to display an entire headword line.
See [[#Further explanations for full_headword()]]
]==]
function export.full_headword(data)
-- Prevent data from being destructively modified.
local data = shallow_copy(data)
------------ 1. Basic checks for old-style (multi-arg) calling convention. ------------
if data.getCanonicalName then
error("Internal error: In full_headword(), the first argument `data` needs to be a Lua object (table) of properties, not a language object")
end
if not data.lang or type(data.lang) ~= "table" or not data.lang.getCode then
error("Internal error: In full_headword(), the first argument `data` needs to be a Lua object (table) and `data.lang` must be a language object")
end
if data.id and type(data.id) ~= "string" then
error("Internal error: The id in the data table should be a string.")
end
------------ 2. Initialize pagename etc. ------------
local langcode = data.lang:getCode()
local full_langcode = data.lang:getFullCode()
local langname = data.lang:getCanonicalName()
local full_langname = data.lang:getFullName()
local raw_pagename = data.pagename
local page
local m_headword_data = m_data or get_data()
if raw_pagename and raw_pagename ~= m_headword_data.pagename then -- for testing, doc pages, etc.
-- data.pagename is often set on documentation and test pages through the pagename= parameter of various
-- templates, to emulate running on that page. Having a large number of such test templates on a single
-- page often leads to timeouts, because we fetch and parse the contents of each page in turn. However,
-- we don't really need to do that and can function fine without fetching and parsing the contents of a
-- given page, so turn off content fetching/parsing (and also setting the DEFAULTSORT key through a parser
-- function, which is *slooooow*) in certain namespaces where test and documentation templates are likely to
-- be found and where actual content does not live (User, Template, Module).
local actual_namespace = m_headword_data.page.namespace
local no_fetch_content = actual_namespace == "User" or actual_namespace == "Template" or
actual_namespace == "Module"
page = process_page(raw_pagename, no_fetch_content)
else
page = m_headword_data.page
end
local namespace = m_sinhala_project.getPageNamespaceFromParams(page.namespace, page.pagename)
------------ 3. Initialize `data.heads` table; if old-style, convert to new-style. ------------
if type(data.heads) == "table" and type(data.heads[1]) == "table" then
-- new-style
if data.translits or data.transcriptions then
error("Internal error: In full_headword(), if `data.heads` is new-style (array of head objects), `data.translits` and `data.transcriptions` cannot be given")
end
else
-- convert old-style `heads`, `translits` and `transcriptions` to new-style
local maxind = max(
init_and_find_maximum_index(data, "heads"),
init_and_find_maximum_index(data, "translits", true),
init_and_find_maximum_index(data, "transcriptions", true)
)
for i = 1, maxind do
data.heads[i] = {
term = data.heads[i],
tr = data.translits[i],
ts = data.transcriptions[i],
}
end
end
-- Make sure there's at least one head.
if not data.heads[1] then
data.heads[1] = {}
end
------------ 4. Initialize and validate `data.categories` and `data.whole_page_categories`, and determine `pos_category` if not given, and add basic categories. ------------
-- EXPERIMENTAL: see [[Wiktionary:Beer parlour/2024/June#Decluttering the altform mess]]
if data.altform then
data.noposcat = true
end
init_and_find_maximum_index(data, "categories")
init_and_find_maximum_index(data, "whole_page_categories")
local pos_category_already_present = false
if data.categories[1] then
local escaped_langname = pattern_escape(full_langname)
local matches_lang_pattern = "^" .. escaped_langname .. " "
for _, cat in ipairs(data.categories) do
-- Does the category begin with the language name? If not, tag it with a tracking category.
if not cat:find(matches_lang_pattern) then
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/no lang category]]
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/no lang category/LANGCODE]]
track("no lang category", data.lang)
end
end
-- If `pos_category` not given, try to infer it from the first specified category. If this doesn't work, we
-- throw an error below.
if not data.pos_category and data.categories[1]:find(matches_lang_pattern) then
data.pos_category = data.categories[1]:gsub(matches_lang_pattern, "")
-- Optimization to avoid inserting category already present.
pos_category_already_present = true
end
end
if not data.pos_category then
error("Internal error: `data.pos_category` not specified and could not be inferred from the categories given in "
.. "`data.categories`. Either specify the plural part of speech in `data.pos_category` "
.. "(e.g. \"proper nouns\") or ensure that the first category in `data.categories` is formed from the "
.. "language's canonical name plus the plural part of speech (e.g. \"Norwegian Bokmål proper nouns\")."
)
end
-- Insert a category at the beginning for the part of speech unless it's already present or `data.noposcat` given.
if not pos_category_already_present and not data.noposcat then
local pos_category = full_langname .. " " .. m_sinhala.sinhala(data.pos_category)
-- FIXME: [[User:Theknightwho]] Why is this special case here? Please add an explanatory comment.
if pos_category ~= "Translingual Han characters" then
insert(data.categories, 1, pos_category)
end
end
-- Try to determine whether the part of speech refers to a lemma or a non-lemma form; if we can figure this out,
-- add an appropriate category.
local postype = export.pos_lemma_or_nonlemma(data.pos_category)
if not postype then
-- We don't know what this category is, so tag it with a tracking category.
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos]]
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/LANGCODE]]
track("unrecognized pos", data.lang)
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/POS]]
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/POS/LANGCODE]]
track("unrecognized pos/pos/" .. data.pos_category, data.lang)
elseif not data.noposcat then
insert(data.categories, 1, full_langname .. " " .. m_sinhala.sinhala_plural(postype))
end
-- EXPERIMENTAL: see [[Wiktionary:Beer parlour/2024/June#Decluttering the altform mess]]
if data.altform then
insert(data.categories, 1, full_langname .. " alternative forms")
end
------------ 5. Create a default headword, and add links to multiword page names. ------------
-- Determine if this is an "anti-asterisk" term, i.e. an attested term in a language that must normally be
-- reconstructed.
local is_anti_asterisk = data.heads[1].term and data.heads[1].term:find("^!!")
local lang_reconstructed = data.lang:hasType("reconstructed")
if is_anti_asterisk then
if not lang_reconstructed then
error("Anti-asterisk feature (head= beginning with !!) can only be used with reconstructed languages")
end
lang_reconstructed = false
end
-- Determine if term is reconstructed
local is_reconstructed = namespace == "Reconstruction" or lang_reconstructed
-- Create a default headword based on the pagename, which is determined in
-- advance by the data module so that it only needs to be done once.
local default_head = page.pagename
-- Add links to multi-word page names when appropriate
if not (is_reconstructed or data.nolinkhead) then
local no_links = m_headword_data.no_multiword_links
if not (no_links[langcode] or no_links[full_langcode]) and export.head_is_multiword(default_head) then
default_head = export.add_multiword_links(default_head, true)
end
end
if is_reconstructed then
default_head = "*" .. default_head
end
------------ 6. Check the namespace against the language type. ------------
if namespace == "" then
if lang_reconstructed then
error("Entries in " .. langname .. " must be placed in the Reconstruction: namespace")
elseif data.lang:hasType("appendix-constructed") then
error("Entries in " .. langname .. " must be placed in the Appendix: namespace")
end
elseif namespace == "Citations" or namespace == "Thesaurus" then
error("Headword templates should not be used in the " .. namespace .. ": namespace.")
end
------------ 7. Fill in missing values in `data.heads`. ------------
-- True if any script among the headword scripts has spaces in it.
local any_script_has_spaces = false
-- True if any term has a redundant head= param.
local has_redundant_head_param = false
for _, head in ipairs(data.heads) do
------ 7a. If missing head, replace with default head.
if not head.term then
head.term = default_head
elseif head.term == default_head then
has_redundant_head_param = true
elseif is_anti_asterisk and head.term == "!!" then
-- If explicit head=!! is given, it's an anti-asterisk term and we fill in the default head.
head.term = "!!" .. default_head
elseif head.term:find("^[!?]$") then
-- If explicit head= just consists of ! or ?, add it to the end of the default head.
head.term = default_head .. head.term
end
head.term_no_initial_bang_bang = is_anti_asterisk and head.term:sub(3) or head.term
if is_reconstructed then
local head_term = head.term
if head_term:find("%[%[") then
head_term = remove_links(head_term)
end
if head_term:sub(1, 1) ~= "*" then
error("The headword '" .. head_term .. "' must begin with '*' to indicate that it is reconstructed.")
end
end
------ 7b. Try to detect the script(s) if not provided. If a per-head script is provided, that takes precedence,
------ otherwise fall back to the overall script if given. If neither given, autodetect the script.
local auto_sc = data.lang:findBestScript(head.term)
if (
auto_sc:getCode() == "None" and
find_best_script_without_lang(head.term):getCode() ~= "None"
) then
insert(data.categories, full_langname .. " terms in nonstandard scripts")
end
if not (head.sc or data.sc) then -- No script code given, so use autodetected script.
head.sc = auto_sc
else
if not head.sc then -- Overall script code given.
head.sc = data.sc
end
-- Track uses of sc parameter.
if head.sc:getCode() == auto_sc:getCode() then
track("redundant script code", data.lang)
if not data.no_script_code_cat then
insert(data.categories, full_langname .. " terms with redundant script codes")
end
else
track("non-redundant manual script code", data.lang)
if not data.no_script_code_cat then
insert(data.categories, full_langname .. " terms with non-redundant manual script codes")
end
end
end
-- If using a discouraged character sequence, add to maintenance category.
if head.sc:hasNormalizationFixes() == true then
local composed_head = toNFC(head.term)
if head.sc:fixDiscouragedSequences(composed_head) ~= composed_head then
insert(data.whole_page_categories, "Pages using discouraged character sequences")
end
end
any_script_has_spaces = any_script_has_spaces or head.sc:hasSpaces()
------ 7c. Create automatic transliterations for any non-Latin headwords without manual translit given
------ (provided automatic translit is available, e.g. not in Persian or Hebrew).
-- Make transliterations
head.tr_manual = nil
-- Try to generate a transliteration if necessary
if head.tr == "-" then
head.tr = nil
else
local notranslit = m_headword_data.notranslit
if not (notranslit[langcode] or notranslit[full_langcode]) and head.sc:isTransliterated() then
head.tr_manual = not not head.tr
local text = head.term_no_initial_bang_bang
if not data.lang:link_tr(head.sc) then
text = remove_links(text)
end
local automated_tr = data.lang:transliterate(text, head.sc)
if automated_tr then
local manual_tr = head.tr
if manual_tr then
if remove_links(manual_tr) == remove_links(automated_tr) then
insert(data.categories, full_langname .. " terms with redundant transliterations")
else
insert(data.categories, full_langname .. " terms with non-redundant manual transliterations")
end
end
if not manual_tr then
head.tr = automated_tr
end
end
-- There is still no transliteration?
-- Add the entry to a cleanup category.
if not head.tr then
head.tr = "<small>transliteration needed</small>"
-- FIXME: No current support for 'Request for transliteration of Classical Persian terms' or similar.
-- Consider adding this support in [[Module:category tree/poscatboiler/data/entry maintenance]].
insert(data.categories, "Requests for transliteration of " .. full_langname .. " terms")
else
-- Otherwise, trim it.
head.tr = trim(head.tr)
end
end
end
-- Link to the transliteration entry for languages that require this.
if head.tr and data.lang:link_tr(head.sc) then
head.tr = full_link{
term = head.tr,
lang = data.lang,
sc = get_script("Latn"),
tr = "-"
}
end
end
------------ 8. Maybe tag the title with the appropriate script code, using the `display_title` mechanism. ------------
-- Assumes that the scripts in "toBeTagged" will never occur in the Reconstruction namespace.
-- (FIXME: Don't make assumptions like this, and if you need to do so, throw an error if the assumption is violated.)
-- Avoid tagging ASCII as Hani even when it is tagged as Hani in the headword, as in [[check]]. The check for ASCII
-- might need to be expanded to a check for any Latin characters and whitespace or punctuation.
local display_title
-- Where there are multiple headwords, use the script for the first. This assumes the first headword is similar to
-- the pagename, and that headwords that are in different scripts from the pagename aren't first. This seems to be
-- about the best we can do (alternatively we could potentially do script detection on the pagename).
local dt_script = data.heads[1].sc
local dt_script_code = dt_script:getCode()
local page_non_ascii = namespace == "" and not page.pagename:find("^[%z\1-\127]+$")
local unsupported_pagename, unsupported = page.full_raw_pagename:gsub("^Unsupported titles/", "")
if unsupported == 1 and page.unsupported_titles[unsupported_pagename] then
display_title = 'Unsupported titles/<span class="' .. dt_script_code .. '">' .. page.unsupported_titles[unsupported_pagename] .. '</span>'
elseif page_non_ascii and m_headword_data.toBeTagged[dt_script_code]
or (dt_script_code == "Jpan" and (text_in_script(page.pagename, "Hira") or text_in_script(page.pagename, "Kana")))
or (dt_script_code == "Kore" and text_in_script(page.pagename, "Hang")) then
display_title = '<span class="' .. dt_script_code .. '">' .. page.full_raw_pagename .. '</span>'
-- Keep Han entries region-neutral in the display title.
elseif page_non_ascii and (dt_script_code == "Hant" or dt_script_code == "Hans") then
display_title = '<span class="Hani">' .. page.full_raw_pagename .. '</span>'
elseif namespace == "Reconstruction" then
local matched
display_title, matched = ugsub(
page.full_raw_pagename,
"^(Reconstruction:[^/]+/)(.+)$",
function(before, term)
return before .. tag_text(term, data.lang, dt_script)
end
)
if matched == 0 then
display_title = nil
end
end
-- FIXME: Generalize this.
-- If the current language uses ur-Arab (for Urdu, etc.), ku-Arab (Central Kurdish) or pa-Arab
-- (Shahmukhi, for Punjabi) and there's more than one language on the page, don't set the display title
-- because these three scripts display in Nastaliq and we don't want this for terms that also exist in other
-- languages that don't display in Nastaliq (e.g. Arabic or Persian) to display in Nastaliq. Because the word
-- "Urdu" occurs near the end of the alphabet, Urdu fonts tend to override the fonts of other languages.
-- FIXME: This is checking for more than one language on the page but instead needs to check if there are any
-- languages using scripts other than the ones just mentioned.
if (dt_script_code == "ur-Arab" or dt_script_code == "ku-Arab" or dt_script_code == "pa-Arab") and page.L2_list.n > 1 then
display_title = nil
end
if display_title then
mw.getCurrentFrame():callParserFunction(
"DISPLAYTITLE",
display_title
)
end
------------ 9. Insert additional categories. ------------
if data.force_cat_output then
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/force cat output]]
track("force cat output")
end
if has_redundant_head_param then
if not data.no_redundant_head_cat then
-- This is not the right way to go about this; too many exceptions and problems due to language-specific headword
-- handling customization. If we want this, it should be opt-in by a given language passing in the default headword.
-- insert(data.categories, full_langname .. " terms with redundant head parameter")
end
end
-- If the first head is multiword (after removing links), maybe insert into "LANG multiword terms".
if not data.nomultiwordcat and any_script_has_spaces and postype == "lemma" then
local no_multiword_cat = m_headword_data.no_multiword_cat
if not (no_multiword_cat[langcode] or no_multiword_cat[full_langcode]) then
-- Check for spaces or hyphens, but exclude prefixes and suffixes.
-- Use the pagename, not the head= value, because the latter may have extra
-- junk in it, e.g. superscripted text that throws off the algorithm.
local no_hyphen = m_headword_data.hyphen_not_multiword_sep
-- Exclude hyphens if the data module states that they should for this language.
local checkpattern = (no_hyphen[langcode] or no_hyphen[full_langcode]) and ".[%s፡]." or ".[%s%-፡]."
local is_multiword = umatch(page.pagename, checkpattern)
if is_multiword and not non_categorizable(page.full_raw_pagename) then
insert(data.categories, full_langname .. " බහු පද යෙදුම්")
elseif not is_multiword then
local long_word_threshold = m_headword_data.long_word_thresholds[langcode] or
m_headword_data.long_word_thresholds[full_langcode]
if long_word_threshold and ulen(page.pagename) >= long_word_threshold then
insert(data.categories, "Long " .. full_langname .. " words")
end
end
end
end
local default_sccat = m_headword_data.default_sccat
if data.sccat or data.sccat == nil and (default_sccat[langcode] or default_sccat[full_langcode]) then
for _, head in ipairs(data.heads) do
insert(data.categories, full_langname .. " " .. m_sinhala.sinhala(data.pos_category) .. ", " ..
head.sc:getDisplayForm() .. " භාවිතා කොට ලියන ලද ")
end
end
-- Reconstructed terms often use weird combinations of scripts and realistically aren't spelled so much as notated.
if namespace ~= "Reconstruction" then
-- Map from languages to a string containing the characters to ignore when considering whether a term has
-- multiple written scripts in it. Typically these are Greek or Cyrillic letters used for their phonetic
-- values.
local characters_to_ignore = {
["aaq"] = "αάὰ", -- Penobscot (Algonquian)
["acy"] = "δθ", -- Cypriot Arabic
["aez"] = "β", -- Aeka (Trans-New Guinea)
["anc"] = "γ", -- Ngas (Chadic/Afroasiatic)
["aou"] = "χ", -- A'ou (Kra-Dai)
["art-blk"] = "ч", -- Bolak (conlang)
["awg"] = "β", -- Anguthimri (Pama-Nyungan)
["az"] = "ь", -- Azerbaijani (Turkic; Yañalif Latin spelling, c. 1928 - 1938)
["ba"] = "ь", -- Bashkir (Turkic; Yañalif Latin spelling, c. 1928 - 1938)
["bhp"] = "β", -- Bima (Austronesian)
["bjz"] = "β", -- Baruga (Trans-New Guinea)
["byk"] = "θ", -- Biao (Kra-Dai)
["cdy"] = "θ", -- Chadong (Kra-Dai)
["chp"] = "θ", -- Chipewyan (Athabaskan)
["cjh"] = "χ", -- Upper Chehalis (Salishan)
["clm"] = "χ", -- Klallam (Salishan)
["col"] = "χ", -- Colombia-Wenatchi (Salishan)
["coo"] = "χθ", -- Comox (Salishan)
["crx"] = "θ", -- Carrier (Athabaskan)
["ets"] = "θ", -- Yekhee (Edoid/Niger-Congo)
["ett"] = "χ", -- Etruscan (isolate; in romanizations)
["fla"] = "χ", -- Montana Salish (Salishan)
["grt"] = "་", -- Garo (South Asian Sino-Tibetan)
["gmw-gts"] = "χ", -- Gottscheerish (Bavarian variant spoken in Slovenia)
["hur"] = "χθ", -- Halkomelem (Salishan)
["itc-psa"] = "f", -- Pre-Samnite (Italic; normally written in Greek)
["izh"] = "ь", -- Ingrian (Finnic)
["kic"] = "θ", -- Kickapoo (Algonquian)
["kk"] = "ь", -- Kazakh (Turkic; Yañalif Latin spelling, c. 1928 - 1938)
["ky"] = "ь", -- Kyrgyz (Turkic; Yañalif Latin spelling, c. 1928 - 1938)
["lil"] = "χ", -- Lillooet (Salishan)
["lsi"] = "ꓹ", -- Lashi (Lolo-Burmese/Sino-Tibetan; represents a glottal stop)
["mhz"] = "β", -- Mor (Austronesian)
["mqn"] = "β", -- Moronene (Austronesian)
["neg"]= "ӡā", -- Negidal (Tungusic; normally in Cyrillic)
["oka"] = "χ", -- Okanagan (Salishan)
["ole"] = "θ", -- Olekha (Sino-Tibetan)
["oui"] = "γβ", -- Old Uyghur (Turkic; FIXME: others? E.g. Greek delta (δ)?)
["pox"] = "χ", -- Polabian (West Slavic)
["rif"] = "ε", -- Tarifit (Berber)
["rom"] = "Θθ", -- Romani (Indic: International Standard; two different thetas???)
["rpn"] = "β", -- Repanbitip (Austronesian)
["sah"] = "ь", -- Yakut (Turkic; 1929 - 1939 Latin spelling)
["sit-jap"] = "χ", -- Japhug (Sino-Tibetan)
["sjw"] = "θ", -- Shawnee (Algonquian)
["squ"] = "χ", -- Squamish (Salishan)
["str"] = "χθ", -- Saanich (Salishan)
["teh"] = "χ", -- Tehuelche (Chonan; spoken in Argentina)
["tep"] = "η", -- Tepecano (Uto-Aztecan)
["thp"] = "χ", -- Thompson (Salishan)
["tk"] = "ь", -- Turkmen (Turkic; Yañalif Latin spelling, c. 1928 - 1938)
["tt"] = "ь", -- Kazakh (Turkic; Yañalif Latin spelling, c. 1928 - 1938)
["twa"] = "χ", -- Twana (Salishan)
["wbl"] = "ы", -- Wakhi (Iranian)
["xbc"] = "ϸ", -- Bactrian (Iranian; represents š; normally written in Greek)
["yha"] = "θ", -- Baha (Kra-Dai)
["za"] = "зч", -- Zhuang (Tai/Kra-Dai); 1957-1982 alphabet used two Cyrillic letters (as well as some others like
-- ƃ, ƅ, ƨ, ɯ and ɵ that look like Cyrillic or Greek but are actually Latin)
["zlw-slv"] = "χђћ", -- Slovincian (West Slavic; FIXME: χ is Greek, the other two are Cyrillic, but I'm not sure
-- the currect characters are being chosen in the entry names)
["zng"] = "θ", -- Mang (Mon-Khmer)
["ztp"] = "θ", -- Loxicha Zapotec (Zapotecan)
}
-- Determine how many real scripts are found in the pagename, where we exclude symbols and such. We exclude
-- scripts whose `character_category` is false as well as Zmth (mathematical notation symbols), which has a
-- category of "Mathematical notation symbols". When counting scripts, we need to elide language-specific
-- variants because e.g. Beng and as-Beng have slightly different characters but we don't want to consider them
-- two different scripts (e.g. [[এৰ]] has two characters which are detected respectively as Beng and as-Beng).
local seen_scripts = {}
local num_seen_scripts = 0
local num_loops = 0
local canon_pagename = page.pagename
local ch_to_ignore = characters_to_ignore[full_langcode]
if ch_to_ignore then
canon_pagename = ugsub(canon_pagename, "[" .. ch_to_ignore .. "]", "")
end
while true do
if canon_pagename == "" or num_seen_scripts >= 2 or num_loops >= 10 then
break
end
-- Make sure we don't get into a loop checking the same script over and over again; happens with e.g. [[ᠪᡳ]]
num_loops = num_loops + 1
local pagename_script = find_best_script_without_lang(canon_pagename, "None only as last resort")
local script_chars = pagename_script.characters
if not script_chars then
-- we are stuck; this happens with None
break
end
local script_code = pagename_script:getCode()
local replaced
canon_pagename, replaced = ugsub(canon_pagename, "[" .. script_chars .. "]", "")
if (
replaced and
script_code ~= "Zmth" and
(script_data or get_script_data())[script_code] and
script_data[script_code].character_category ~= false
) then
script_code = script_code:gsub("^.-%-", "")
if not seen_scripts[script_code] then
seen_scripts[script_code] = true
num_seen_scripts = num_seen_scripts + 1
end
end
end
if num_seen_scripts > 1 then
insert(data.categories, full_langname .. " terms written in multiple scripts")
end
end
-- Categorise for unusual characters. Takes into account combining characters, so that we can categorise for characters with diacritics that aren't encoded as atomic characters (e.g. U̠). These can be in two formats: single combining characters (i.e. character + diacritic(s)) or double combining characters (i.e. character + diacritic(s) + character). Each can have any number of diacritics.
local standard = data.lang:getStandardCharacters()
if standard and not non_categorizable(page.full_raw_pagename) then
local function char_category(char)
local specials = {
["#"] = "number sign",
["("] = "parentheses",
[")"] = "parentheses",
["<"] = "angle brackets",
[">"] = "angle brackets",
["["] = "square brackets",
["]"] = "square brackets",
["_"] = "underscore",
["{"] = "braces",
["|"] = "vertical line",
["}"] = "braces",
["ß"] = "ẞ",
["\205\133"] = "", -- this is UTF-8 for U+0345 ( ͅ)
["\239\191\189"] = "replacement character",
}
char = toNFD(char)
:gsub(".[\128-\191]*", function(m)
local new_m = specials[m]
new_m = new_m or m:uupper()
return new_m
end)
return toNFC(char)
end
if full_langcode ~= "hi" and full_langcode ~= "lo" then
local standard_chars_scripts = {}
for _, head in ipairs(data.heads) do
standard_chars_scripts[head.sc:getCode()] = true
end
-- Iterate over the scripts, in case there is more than one (as they can have different sets of standard characters).
for code in pairs(standard_chars_scripts) do
local sc_standard = data.lang:getStandardCharacters(code)
if sc_standard then
if page.pagename_len > 1 then
local explode_standard = {}
local function explode(char)
explode_standard[char] = true
return ""
end
local sc_standard = ugsub(sc_standard, page.comb_chars.combined_double, explode)
sc_standard = ugsub(sc_standard,page.comb_chars.combined_single, explode)
:gsub(".[\128-\191]*", explode)
local num_cat_inserted
for char in pairs(page.explode_pagename) do
if not explode_standard[char] then
if char:find("[0-9]") then
if not num_cat_inserted then
insert(data.categories, full_langname .. " terms spelled with numbers")
num_cat_inserted = true
end
elseif ufind(char, page.emoji_pattern) then
insert(data.categories, full_langname .. " terms spelled with emoji")
else
local upper = char_category(char)
if not explode_standard[upper] then
char = upper
end
insert(data.categories, ("%s යෙදුම්, %s භාවිතා කොට ලියන ලද"):format(full_langname, char))
end
end
end
end
-- If a diacritic doesn't appear in any of the standard characters, also categorise for it generally.
sc_standard = toNFD(sc_standard)
for diacritic in ugmatch(page.decompose_pagename, page.comb_chars.diacritics_single) do
if not umatch(sc_standard, diacritic) then
insert(data.categories, ("%s යෙදුම්, ◌%s භාවිතා කොට ලියන ලද"):format(full_langname, diacritic))
end
end
for diacritic in ugmatch(page.decompose_pagename, page.comb_chars.diacritics_double) do
if not umatch(sc_standard, diacritic) then
insert(data.categories, full_langname .. " terms spelled with ◌" .. diacritic .. "◌")
end
end
end
end
-- Ancient Greek, Hindi and Lao handled the old way for now, as their standard chars still need to be converted to the new format (because there are a lot of them).
elseif ulen(page.pagename) ~= 1 then
for character in ugmatch(page.pagename, "([^" .. standard .. "])") do
local upper = char_category(character)
if not umatch(upper, "[" .. standard .. "]") then
character = upper
end
insert(data.categories, ("%s යෙදුම්, %s භාවිතා කොට ලියන ලද"):format(full_langname, character))
end
end
end
if data.heads[1].sc:isSystem("alphabet") then
local pagename, i = page.pagename:ulower(), 2
while umatch(pagename, "(%a)" .. ("%1"):rep(i)) do
i = i + 1
insert(data.categories, full_langname .. " terms with " .. i .. " consecutive instances of the same letter")
end
end
-- Categorise for palindromes
if not data.nopalindromecat and namespace ~= "Reconstruction" and ulen(page.pagename) > 2
-- FIXME: Use of first script here seems hacky. What is the clean way of doing this in the presence of
-- multiple scripts?
and is_palindrome(page.pagename, data.lang, data.heads[1].sc) then
insert(data.categories, full_langname .. " palindromes")
end
if namespace == "" and not lang_reconstructed then
for _, head in ipairs(data.heads) do
if page.full_raw_pagename ~= get_link_page(remove_links(head.term), data.lang, head.sc) then
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/pagename spelling mismatch]]
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/pagename spelling mismatch/LANGCODE]]
track("pagename spelling mismatch", data.lang)
break
end
end
end
-- Add red link category if called for and we're not a "large" page, where such checks are disabled.
if data.checkredlinks and not m_headword_data.large_pages[m_headword_data.pagename] then
local plposcat = type(data.checkredlinks) == "string" and data.checkredlinks or data.pos_category
check_red_link_inflections_top_level(data, plposcat)
end
-- Add to various maintenance categories.
export.maintenance_cats(page, data.lang, data.categories, data.whole_page_categories)
------------ 10. Format and return headwords, genders, inflections and categories. ------------
-- Format and return all the gathered information. This may add more categories (e.g. gender/number categories),
-- so make sure we do it before evaluating `data.categories`.
local text = '<span class="headword-line">' ..
format_headword(data) ..
format_headword_genders(data) ..
format_top_level_inflections(data) .. '</span>'
-- Language-specific categories.
local cats = format_categories(
data.categories, data.lang, data.sort_key, page.encoded_pagename,
data.force_cat_output or test_force_categories, data.heads[1].sc
)
-- Language-agnostic categories.
local whole_page_cats = format_categories(
data.whole_page_categories, nil, "-"
)
return text .. cats .. whole_page_cats
end
return export
qzhq8wdjo0x0pc9c91gihvik2cgiu28
Module:fr-headword
828
8015
235461
196400
2026-01-27T01:01:56Z
en>Saph
0
235461
Scribunto
text/plain
local export = {}
local pos_functions = {}
local force_cat = false -- for testing; if true, categories appear in non-mainspace pages
local check_missing = false -- whether to check for missing forms
local require_when_needed = require("Module:utilities/require when needed")
local m_table = require("Module:table")
local lang = require("Module:languages").getByCode("fr")
local langname = lang:getCanonicalName()
local en_utilities_module = "Module:en-utilities"
local headword_utilities_module = "Module:headword utilities"
local romut_module = "Module:romance utilities"
local m_en_utilities = require_when_needed(en_utilities_module)
local m_headword_utilities = require_when_needed(headword_utilities_module)
local glossary_link = require_when_needed(headword_utilities_module, "glossary_link")
local boolean_param = {type = "boolean"}
local list_param = {list = true, disallow_holes = true}
local concat = table.concat
local insert = table.insert
local remove = table.remove
local sort = table.sort
local u = mw.ustring.char
local nnbsp = u(0x202F) -- NNBSP = narrow non-breaking space, used before ? and ! in French
local prepositions = {
"à ",
"aux? ",
"d[eu] ",
"d['’]",
"des ",
"en ",
"sous ",
"sur ",
"avec ",
"pour ",
"par ",
"dans ",
"contre ",
"sans ",
"comme ",
"jusqu['’]",
-- We could list others but you get diminishing returns
}
local no_split_apostrophe_words = {
["c'est"] = true,
["quelqu'un"] = true,
["aujourd'hui"] = true,
}
local function track(page)
require("Module:debug").track("fr-headword/" .. page)
return true
end
-----------------------------------------------------------------------------------------
-- Utility functions --
-----------------------------------------------------------------------------------------
local function replace_hash_with_lemma(term, lemma)
-- If there is a % sign in the lemma, we have to replace it with %% so it doesn't get interpreted as a capture replace
-- expression.
lemma = lemma:gsub("%%", "%%%%")
-- Assign to a variable to discard second return value.
term = term:gsub("#", lemma)
return term
end
-- Parse and insert an inflection not requiring additional processing into `data.inflections`. The raw arguments come
-- from `args[field]`, which is parsed for inline modifiers. `label` is the label that the inflections are given;
-- `accel` is the accelerator form, or nil.
local function parse_and_insert_inflection(data, args, field, label, accel)
m_headword_utilities.parse_and_insert_inflection {
headdata = data,
forms = args[field],
paramname = field,
splitchar = ",",
label = label,
accel = accel and {form = accel} or nil,
}
end
local function make_plural(form, special)
local retval = require(romut_module).handle_multiword(form, special, make_plural, prepositions)
if retval then
if #retval > 1 then
error("Internal error: Got multiple plurals from handle_multiword(): " .. concat(retval))
end
return retval[1]
end
if form:match("[sxz]$") then
return form
elseif form:match("au$") then
return form .. "x"
elseif form:match("al$") then
return form:gsub("al$", "aux")
end
return form .. "s"
end
local function make_feminine(form, special)
local retval = require(romut_module).handle_multiword(form, special, make_feminine, prepositions)
if retval then
if #retval > 1 then
error("Internal error: Got multiple feminines from handle_multiword(): " .. concat(retval))
end
return retval[1]
end
if form:match("e$") then
return form
elseif form:match("en$") then
return form .. "ne"
elseif form:match("er$") then
return form:gsub("er$", "ère")
elseif form:match("el$") then
return form .. "le"
elseif form:match("et$") then
return form .. "te"
elseif form:match("on$") then
return form .. "ne"
elseif form:match("ieur$") then
return form .. "e"
elseif form:match("teur$") then
return form:gsub("teur$", "trice")
elseif form:match("eu[rx]$") then
return form:gsub("eu[rx]$", "euse")
elseif form:match("if$") then
return form:gsub("if$", "ive")
elseif form:match("c$") then
return form:gsub("c$", "que")
elseif form:match("eau$") then
return form:gsub("eau$", "elle")
else
return form .. "e"
end
end
-- For bot use
function export.make_feminine(frame)
local masc = frame.args[1] or error("Masculine in 1= is required.")
local special = frame.args[2]
return make_feminine(masc, special)
end
-- Handle generation of feminine or plural inflections when "+" is encountered. `list` is the existing base forms
-- (strings or form objects) that need to be inflected. `defobj` is the form object whose `term` field is "+"; any
-- qualifiers, labels and/or references from that form object will be combined with those of the base form. `inflfun`
-- is the function to do the inflection, which is passed two arguments, the base form value (a string) and the
-- `special` value specified for handling multiword expressions (or nil if no value specified). Returns the new list
-- of inflected form objects.
local function make_inflection(list, defobj, inflfun, special)
local newlist = {}
for _, form in ipairs(list) do
if type(form) == "string" then
form = {term = form}
end
local infl = inflfun(form.term, special)
local formobj = m_table.shallowCopy(form)
formobj.term = infl
m_headword_utilities.combine_termobj_qualifiers_labels(formobj, defobj)
insert(newlist, formobj)
end
return newlist
end
-----------------------------------------------------------------------------------------
-- Main entry point --
-----------------------------------------------------------------------------------------
-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
local poscat = frame.args[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.")
local params = {
["head"] = list_param,
["id"] = true,
["json"] = boolean_param,
["splithyph"] = boolean_param,
["nolink"] = boolean_param,
["nolinkhead"] = {type = "boolean", alias_of = "nolink"},
["abbr"] = list_param,
["pagename"] = true, -- for testing
}
if pos_functions[poscat] then
for key, val in pairs(pos_functions[poscat].params) do
params[key] = val
end
end
local parargs = frame:getParent().args
local args = require("Module:parameters").process(parargs, params)
local pagename = args.pagename or mw.loadData("Module:headword/data").pagename
local user_specified_heads = args.head
local heads = user_specified_heads
if args.nolink then
if not heads[1] then
heads = {pagename}
end
else
local romut = require(romut_module)
local auto_linked_head = romut.add_links_to_multiword_term(pagename, args.splithyph, no_split_apostrophe_words)
if not heads[1] then
heads = {auto_linked_head}
else
for i, head in ipairs(heads) do
if head:find("^~") then
head = romut.apply_link_modifiers(auto_linked_head, head:sub(2))
heads[i] = head
elseif head:find("^[!?]$") then
-- If explicit head= just consists of ! or ?, add it to the end of the default head after a
-- NNBSP (thin non-breaking space).
head = auto_linked_head .. nnbsp .. head
heads[i] = head
end
if head == auto_linked_head then
track("redundant-head")
end
end
end
end
local data = {
lang = lang,
pos_category = pos_functions[poscat] and pos_functions[poscat].pos_category or poscat,
categories = {},
heads = heads,
user_specified_heads = user_specified_heads,
no_redundant_head_cat = not user_specified_heads[1],
genders = {},
inflections = {},
pagename = pagename,
id = args.id,
checkredlinks = check_missing and (pos_functions[poscat] and pos_functions[poscat].redlink_pos or true) or false,
}
if pagename:find("^%-") and poscat ~= "suffix forms" then
data.is_suffix = true
data.pos_category = "suffixes"
data.checkredlinks = check_missing
local singular_poscat = require(en_utilities_module).singularize(poscat)
insert(data.categories, langname .. " " .. singular_poscat .. "-forming suffixes")
insert(data.inflections, {label = singular_poscat .. "-forming suffix"})
end
if pos_functions[poscat] then
pos_functions[poscat].func(args, data)
end
parse_and_insert_inflection(data, args, "abbr", "abbreviation")
if args.json then
return require("Module:JSON").toJSON(data)
end
return require("Module:headword").full_headword(data)
end
-----------------------------------------------------------------------------------------
-- Nouns --
-----------------------------------------------------------------------------------------
local allowed_genders = m_table.listToSet {
"m", "f", "mf", "mfbysense", "mfequiv", "gneut", "m-p", "f-p", "mf-p", "mfbysense-p", "mfequiv-p", "gneut-p",
"?", "?-p",
}
local additional_allowed_pronoun_genders = m_table.listToSet {
"m-s", "f-s", "mf-s",
"p", -- mf-p doesn't make sense for e.g. [[iels]]/[[ielles]]
"n", -- e.g. [[ceci]]/[[cela]]
}
local function validate_genders(genders, is_pronoun)
for _, g in ipairs(genders) do
if type(g) == "table" then
g = g.spec
end
if not allowed_genders[g] and (not is_pronoun or not additional_allowed_pronoun_genders[g]) then
error("Unrecognized gender: " .. g)
end
end
end
local function make_qual_replaced_by(replacement)
return {list = true, allow_holes = true, replaced_by = false,
instead = ("use an inline modifier on |%s= such as <q:...>, <qq:...>, <l:...> or <ll:...>"):format(replacement)
}
end
local function make_alias_replaced_by(replacement, reason)
return {list = true, disallow_holes = true, replaced_by = replacement, reason = reason or
"for consistency with the corresponding parameter in other Romance-language headword templates"
}
end
local function get_noun_params(is_proper)
return {
[1] = {list = "g", disallow_holes = true, required = not is_proper, default = "?", type = "genders",
flatten = true}, -- gender(s)
["g"] = {replaced_by = 1, reason = "for consistency"},
[2] = list_param, --plural override(s)
["pqual"] = make_qual_replaced_by("2"),
["f"] = list_param, --feminine form(s)
["fqual"] = make_qual_replaced_by("f"),
["m"] = list_param, --masculine form(s)
["fqual"] = make_qual_replaced_by("m"),
["dim"] = list_param, --diminutive(s)
["dimqual"] = make_qual_replaced_by("dim"),
["aug"] = list_param, --diminutive(s)
["pej"] = list_param, --pejorative(s)
["dem"] = list_param, --demonym(s)
["fdem"] = list_param, --female demonym(s)
}
end
local function do_noun(args, data, pos, is_proper)
local is_plurale_tantum = false
local has_singular = false
if pos == "cardinal noun" then
pos = "numeral"
insert(data.categories, 1, langname .. " cardinal numbers")
end
if data.is_suffix then
pos = "suffix"
end
local plpos = require(en_utilities_module).pluralize(pos)
validate_genders(args[1])
data.genders = args[1]
-- Check for specific genders and pluralia tantum.
for _, g in ipairs(args[1]) do
if type(g) == "table" then
g = g.spec
end
if g:find("-p$") then
is_plurale_tantum = true
else
has_singular = true
end
end
local lemma = data.pagename
-- Plural
local plurals = {}
local function insert_noun_inflection(terms, label, accel)
m_headword_utilities.insert_inflection {
headdata = data,
terms = terms,
label = label,
accel = accel and {form = accel} or nil,
}
end
if is_plurale_tantum and not has_singular then
if args[2][1] then
error("Can't specify plurals of plurale tantum " .. pos)
end
insert(data.inflections, {label = glossary_link("plural only")})
else
plurals = m_headword_utilities.parse_term_list_with_modifiers {
paramname = {2, "pl"},
forms = args[2],
splitchar = ",",
}
-- Check for special plural signals
local mode = nil
local pl1 = plurals[1]
if pl1 and #pl1.term == 1 then
mode = pl1.term
if mode == "?" or mode == "!" or mode == "-" or mode == "~" then
pl1.term = nil
if next(pl1) then
error(("Can't specify inline modifiers with plural code '%s'"):format(mode))
end
table.remove(plurals, 1) -- Remove the mode parameter
elseif mode ~= "+" and mode ~= "#" and not mode:find("[a-zA-Z]") then
error(("Unexpected plural code '%s'"):format(mode))
end
end
if is_plurale_tantum then
-- both singular and plural
insert(data.inflections, {label = "sometimes " .. glossary_link("plural only") .. ", in variation"})
end
if mode == "?" then
-- Plural is unknown
insert(data.categories, langname .. " " .. plpos .. " with unknown or uncertain plurals")
elseif mode == "!" then
-- Plural is not attested
insert(data.inflections, {label = "plural not attested"})
insert(data.categories, langname .. " " .. plpos .. " with unattested plurals")
if plurals[1] then
error("Can't specify any plurals along with unattested plural code '!'")
end
elseif mode == "-" then
-- Uncountable noun; may occasionally have a plural
insert(data.categories, langname .. " uncountable " .. plpos)
-- If plural forms were given explicitly, then show "usually"
if plurals[1] then
insert(data.inflections, {label = "usually " .. glossary_link("uncountable")})
insert(data.categories, langname .. " countable " .. plpos)
else
insert(data.inflections, {label = glossary_link("uncountable")})
end
else
-- Countable or mixed countable/uncountable
if not plurals[1] and not is_proper then
plurals[1] = {term = "+"}
end
if mode == "~" then
-- Mixed countable/uncountable noun, always has a plural
insert(data.inflections, {label = glossary_link("countable") .. " and " .. glossary_link("uncountable")})
insert(data.categories, langname .. " uncountable " .. plpos)
insert(data.categories, langname .. " countable " .. plpos)
elseif plurals[1] then
-- Countable nouns
insert(data.categories, langname .. " countable " .. plpos)
else
-- Uncountable nouns
insert(data.categories, langname .. " uncountable " .. plpos)
end
end
-- Gather plurals, handling requests for default plurals.
for _, pl in ipairs(plurals) do
if pl.term == "+" then
pl.term = make_plural(lemma)
elseif pl.term:find("^%+") then
pl.term = require(romut_module).get_special_indicator(pl.term)
pl.term = make_plural(lemma, pl.term)
elseif pl.term == "s" or pl.term == "x" then
-- FIXME, convert to #s or #x
pl.term = lemma .. pl.term
else
pl.term = replace_hash_with_lemma(pl.term, lemma)
end
end
local pl1 = plurals[1]
if pl1 and not plurals[2] and pl1.term == lemma then
insert(data.inflections, {label = glossary_link("invariable"),
q = pl1.q, qq = pl1.qq, l = pl1.l, ll = pl1.ll, refs = pl1.refs
})
insert(data.categories, langname .. " indeclinable " .. plpos)
else
insert_noun_inflection(plurals, "plural", "p")
end
if plurals[2] then
insert(data.categories, langname .. " " .. plpos .. " with multiple plurals")
end
end
-- Gather masculines/feminines. For each one, generate the corresponding plural. `field` is the name of the field
-- containing the masculine or feminine forms (normally "m" or "f"); and `inflect` is a function of one or two
-- arguments to generate the default masculine or feminine from the lemma (the arguments are the lemma and
-- optionally a "special" flag to indicate how to handle multiword lemmas, and the function is normally
-- make_feminine or make_masculine [which doesn't exist, FIXME]).
local function handle_mf(field, inflect, default_plurals)
local function call_inflect(special)
if inflect then
-- Generate default feminine.
return inflect(lemma, special)
else
-- FIXME
error("Can't generate default masculine currently")
end
end
local mfs = m_headword_utilities.parse_term_list_with_modifiers {
paramname = field,
forms = args[field],
splitchar = ",",
frob = function(term)
if term == "+" then
-- Generate default masculine/feminine.
term = call_inflect()
elseif term == "e" and field == "f" then
-- FIXME: remove this special case
term = lemma .. "e"
else
term = replace_hash_with_lemma(term, lemma)
end
local special = require(romut_module).get_special_indicator(term)
if special then
term = call_inflect(special)
end
return term
end
}
return mfs
end
local feminines = handle_mf("f", make_feminine)
local masculine_plurals = {}
local masculines = handle_mf("m", nil)
local function parse_and_insert_noun_inflection(field, label, accel)
parse_and_insert_inflection(data, args, field, label, accel)
end
insert_noun_inflection(feminines, "feminine", "f")
insert_noun_inflection(masculines, "masculine")
parse_and_insert_noun_inflection("dim", "diminutive")
parse_and_insert_noun_inflection("aug", "augmentative")
parse_and_insert_noun_inflection("pej", "pejorative")
parse_and_insert_noun_inflection("dem", "demonym")
parse_and_insert_noun_inflection("fdem", "female demonym")
end
pos_functions["nouns"] = {
params = get_noun_params(),
func = function(args, data)
do_noun(args, data, "noun")
end,
}
pos_functions["proper nouns"] = {
params = get_noun_params("is proper"),
func = function(args, data)
do_noun(args, data, "noun", "is proper")
end,
}
pos_functions["cardinal nouns"] = {
params = get_noun_params(),
func = function(args, data)
do_noun(args, data, "cardinal noun")
end,
pos_category = "numerals",
}
local function get_pronoun_pos(pos)
return {
params = {
[1] = {list = "g", disallow_holes = true, required = true, default = "?", type = "genders",
flatten = true}, -- gender(s)
["g"] = {replaced_by = 1, reason = "for consistency"},
["f"] = list_param,
["fqual"] = make_qual_replaced_by("f"),
["m"] = list_param,
["mqual"] = make_qual_replaced_by("m"),
["mv"] = list_param,
["mvqual"] = make_qual_replaced_by("mv"),
["fpl"] = list_param,
["fp"] = make_alias_replaced_by("fpl"),
["fpqual"] = make_qual_replaced_by("fpl"),
["mpl"] = list_param,
["mp"] = make_alias_replaced_by("mpl"),
["mpqual"] = make_qual_replaced_by("mpl"),
["pl"] = list_param,
["p"] = make_alias_replaced_by("pl"),
["pqual"] = make_qual_replaced_by("pl"),
["type"] = list_param,
},
func = function(args, data)
-- Validate and add genders.
validate_genders(args[1], "is pronoun")
data.genders = args[1]
local plpos = require(en_utilities_module).pluralize(pos)
local function parse_and_insert_pronoun_inflection(field, label, accel)
parse_and_insert_inflection(data, args, field, label, accel)
end
-- Parse and insert all inflections.
parse_and_insert_pronoun_inflection("m", "masculine")
parse_and_insert_pronoun_inflection("mv", "masculine singular before vowel")
parse_and_insert_pronoun_inflection("f", "feminine")
parse_and_insert_pronoun_inflection("mpl", "masculine plural")
parse_and_insert_pronoun_inflection("fpl", "feminine plural")
parse_and_insert_pronoun_inflection("pl", "plural")
-- Categorize by "type"
for _, ty in ipairs(args.type) do
local category
if ty == "indefinite" then
category = "indefinite"
elseif ty == "interrogative" then
category = "interrogative"
elseif ty == "personal" then
category = "personal"
elseif ty == "possessive" then
category = "possessive"
elseif ty == "reflexive" then
category = "reflexive"
elseif ty == "relative" then
category = "relative"
end
if category then
if type(category) == "table" then
for _, cat in ipairs(category) do
insert(data.categories, langname .. " " .. cat .. " pronouns")
end
else
insert(data.categories, langname .. " " .. category .. " pronouns")
end
end
end
end
}
end
pos_functions["pronouns"] = get_pronoun_pos("pronoun")
pos_functions["determiners"] = get_pronoun_pos("determiner")
local function get_misc_pos()
return {
params = {
[1] = {replaced_by = "head", reason = "for consistency with other French headword templates"},
},
func = function(args, data)
end
}
end
pos_functions["adverbs"] = get_misc_pos()
pos_functions["prepositions"] = get_misc_pos()
pos_functions["phrases"] = get_misc_pos()
pos_functions["prepositional phrases"] = get_misc_pos()
pos_functions["proverbs"] = get_misc_pos()
pos_functions["punctuation marks"] = get_misc_pos()
pos_functions["diacritical marks"] = get_misc_pos()
pos_functions["interjections"] = get_misc_pos()
pos_functions["prefixes"] = get_misc_pos()
pos_functions["abbreviations"] = get_misc_pos()
local function do_adjective(pos)
return {
params = {
[1] = true,
["inv"] = boolean_param,
["sp"] = true, -- special indicator: "first", "first-last", etc.
["onlyg"] = true,
["m"] = list_param,
["mqual"] = make_qual_replaced_by("m"),
["mv"] = list_param,
["mvqual"] = make_qual_replaced_by("mv"),
["f"] = list_param,
["fqual"] = make_qual_replaced_by("f"),
["mpl"] = list_param,
["mp"] = make_alias_replaced_by("mpl"),
["mpqual"] = make_qual_replaced_by("mpl"),
["fpl"] = list_param,
["fp"] = make_alias_replaced_by("fpl"),
["fpqual"] = make_qual_replaced_by("fpl"),
["pl"] = list_param,
["p"] = make_alias_replaced_by("pl"),
["pqual"] = make_qual_replaced_by("pl"),
["base"] = list_param,
["current"] = make_alias_replaced_by("base", "because the old name was obscure and did not clarify the purpose of the parameter"),
["comp"] = list_param,
["compqual"] = make_qual_replaced_by("comp"),
["sup"] = list_param,
["supqual"] = make_qual_replaced_by("sup"),
["intr"] = boolean_param,
},
pos_category = pos == "cardinal adjective" and "numerals" or nil,
redlink_pos = pos == "participle" and "participles" or nil,
func = function(args, data)
local is_numeral = false
if pos == "cardinal adjective" then
pos = "numeral"
is_numeral = true
insert(data.categories, 1, langname .. " cardinal numbers")
end
if data.is_suffix then
pos = "suffix"
end
local plpos = require(en_utilities_module).pluralize(pos)
if not is_numeral then
if args.onlyg == "p" or args.onlyg == "m-p" or args.onlyg == "f-p" then
insert(data.categories, langname .. " pluralia tantum")
end
if args.onlyg == "s" or args.onlyg == "f-s" or args.onlyg == "f-s" then
insert(data.categories, langname .. " singularia tantum")
end
if args.onlyg then
insert(data.categories, langname .. " defective " .. plpos)
end
end
local lemma = data.pagename
local function insert_inflection(terms, label, accel)
m_headword_utilities.insert_inflection {
headdata = data,
terms = terms,
label = label,
accel = accel and {form = accel} or nil,
}
end
local function process_inflection(label, arg, accel, get_default, explicit_default_only)
local orig_infls = m_headword_utilities.parse_term_list_with_modifiers {
paramname = arg,
forms = args[arg],
splitchar = ",",
}
if not orig_infls[1] then
if explicit_default_only or not get_default then
orig_infls = {}
else
orig_infls = {{term = "+"}}
end
end
local infls = {}
if orig_infls[1] then
for _, infl in ipairs(orig_infls) do
if infl.term == "+" then
local defs
if get_default then
defs = get_default(infl)
else
error("Can't use '+' with " .. arg .. "=; no default available")
end
for _, def in ipairs(defs) do
insert(infls, def)
end
elseif infl.term == "e" or infl.term == "s" or infl.term == "x" then
-- FIXME: delete this in favor of #e, #s, #x
infl.term = lemma .. infl.term
insert(infls, infl)
else
infl.term = replace_hash_with_lemma(infl.term, lemma)
insert(infls, infl)
end
end
insert_inflection(infls, label, accel)
end
return infls
end
if args.sp and not require(romut_module).allowed_special_indicators[args.sp] then
local indicators = {}
for indic, _ in pairs(require(romut_module).allowed_special_indicators) do
insert(indicators, "'" .. indic .. "'")
end
sort(indicators)
error("Special inflection indicator beginning can only be " ..
mw.text.listToText(indicators) .. ": " .. args.sp)
end
local function get_base()
return args.base[1] and args.base or {lemma}
end
if args.onlyg == "p" then
insert(data.inflections, {label = "plural only"})
if args[1] ~= "mf" then
-- Handle feminine plurals
process_inflection("feminine plural", "fpl", "f|p")
end
elseif args.onlyg == "s" then
insert(data.inflections, {label = "singular only"})
if not (args[1] == "mf" or not args.f[1] and lemma:match("e$")) then
-- Handle feminines
process_inflection("feminine singular", "f", "f", function(defobj)
return make_inflection(get_base(), defobj, make_feminine, args.sp)
end)
end
elseif args.onlyg == "m" then
insert(data.genders, "m")
insert(data.inflections, {label = "masculine only"})
-- Handle masculine plurals
process_inflection("masculine plural", "mpl", "m|p", function(defobj)
return make_inflection(get_base(), defobj, make_plural, args.sp)
end)
elseif args.onlyg == "f" then
insert(data.genders, "f")
insert(data.inflections, {label = "feminine only"})
-- Handle feminine plurals
process_inflection("feminine plural", "fpl", "f|p", function(defobj)
return make_inflection(get_base(), defobj, make_plural, args.sp)
end)
elseif args.onlyg then
insert(data.genders, args.onlyg)
insert(data.inflections, {label = "defective"})
else
-- Gather genders
local gender = args[1]
-- Default to mf if base form ends in -e and no feminine,
-- feminine plural or gender specified
if not gender and not args.f[1] and not args.fpl[1] and lemma:match("e$")
and not lemma:find(" ", nil, true) then
gender = "mf"
end
if args.intr then
insert(data.inflections, {label = glossary_link("intransitive")})
insert(data.inflections, {label = "hence " .. glossary_link("invariable")})
args.inv = true
elseif args.inv then
insert(data.inflections, {label = glossary_link("invariable")})
end
-- Handle plurals of mf adjectives
if not args.inv and gender == "mf" then
process_inflection("plural", "pl", "p", function(defobj)
return make_inflection(get_base(), defobj, make_plural, args.sp)
end)
end
if not args.inv and gender ~= "mf" then
-- Handle masculine form if not same as lemma; e.g. [[sûr de soi]] with m=+, m2=sûr de lui
process_inflection("masculine singular", "m", "m|s",
function(defobj)
defobj = m_table.shallowCopy(defobj)
defobj.term = lemma
return {defobj}
end, "explicit default only")
-- Handle case of special masculine singular before vowel
process_inflection("masculine singular before vowel", "mv", "m|s")
-- Handle feminines
local feminines = process_inflection("feminine", "f", "f|s", function(defobj)
return make_inflection(get_base(), defobj, make_feminine, args.sp)
end)
-- Handle masculine plurals
process_inflection("masculine plural", "mpl", "m|p", function(defobj)
return make_inflection(get_base(), defobj, make_plural, args.sp)
end)
-- Handle feminine plurals
process_inflection("feminine plural", "fpl", "f|p", function(defobj)
return make_inflection(feminines, defobj, make_plural, args.sp)
end)
end
end
-- Handle comparatives
process_inflection("comparative", "comp", "comparative")
-- Handle superlatives
process_inflection("superlative", "sup", "superlative")
end
}
end
pos_functions["adjectives"] = do_adjective("adjective")
pos_functions["past participles"] = do_adjective("participle")
pos_functions["cardinal adjectives"] = do_adjective("cardinal adjective")
pos_functions["verbs"] = {
params = {
["type"] = list_param,
},
func = function(args, data)
local pos = "verbs"
for _, ty in ipairs(args.type) do
local category, label
if ty == "auxiliary" then
category = "auxiliary"
elseif ty == "defective" then
category = "defective"
label = glossary_link("defective")
elseif ty == "impersonal" then
category = "impersonal"
label = glossary_link("impersonal")
elseif ty == "modal" then
category = "modal"
elseif ty == "reflexive" then
category = "reflexive"
elseif ty == "transitive" then
label = glossary_link("transitive")
category = "transitive"
elseif ty == "intransitive" then
label = glossary_link("intransitive")
category = "intransitive"
elseif ty == "ambitransitive" or ty == "ambi" then
category = {"transitive", "intransitive"}
label = glossary_link("transitive") .. " and " .. glossary_link("intransitive")
end
if category then
if type(category) == "table" then
for _, cat in ipairs(category) do
insert(data.categories, langname .. " " .. cat .. " " .. pos)
end
else
insert(data.categories, langname .. " " .. category .. " " .. pos)
end
end
if label then
insert(data.inflections, {label = label})
end
end
end
}
pos_functions["cardinal invariable"] = {
params = {},
func = function(args, data)
data.pos_category = "numerals"
insert(data.categories, langname .. " cardinal numbers")
insert(data.categories, langname .. " indeclinable numerals")
insert(data.inflections, {label = glossary_link("invariable")})
end
}
-----------------------------------------------------------------------------------------
-- Suffix forms --
-----------------------------------------------------------------------------------------
pos_functions["suffix forms"] = {
params = {
[1] = {required = true, list = true, disallow_holes = true},
["g"] = {list = true, disallow_holes = true, type = "genders", flatten = true},
},
func = function(args, data)
validate_genders(args.g)
data.genders = args.g
local suffix_type = {}
for _, typ in ipairs(args[1]) do
insert(suffix_type, typ .. "-forming suffix")
end
insert(data.inflections, {label = "non-lemma form of " .. m_table.serialCommaJoin(suffix_type, {conj = "or"})})
end,
}
return export
12p9x3u55lfqlhqw4h32rd5yb2cdfpa
235462
235461
2026-06-02T10:51:43Z
Lee
19
[[:en:Module:fr-headword]] වෙතින් එක් සංශෝධනයක්
235461
Scribunto
text/plain
local export = {}
local pos_functions = {}
local force_cat = false -- for testing; if true, categories appear in non-mainspace pages
local check_missing = false -- whether to check for missing forms
local require_when_needed = require("Module:utilities/require when needed")
local m_table = require("Module:table")
local lang = require("Module:languages").getByCode("fr")
local langname = lang:getCanonicalName()
local en_utilities_module = "Module:en-utilities"
local headword_utilities_module = "Module:headword utilities"
local romut_module = "Module:romance utilities"
local m_en_utilities = require_when_needed(en_utilities_module)
local m_headword_utilities = require_when_needed(headword_utilities_module)
local glossary_link = require_when_needed(headword_utilities_module, "glossary_link")
local boolean_param = {type = "boolean"}
local list_param = {list = true, disallow_holes = true}
local concat = table.concat
local insert = table.insert
local remove = table.remove
local sort = table.sort
local u = mw.ustring.char
local nnbsp = u(0x202F) -- NNBSP = narrow non-breaking space, used before ? and ! in French
local prepositions = {
"à ",
"aux? ",
"d[eu] ",
"d['’]",
"des ",
"en ",
"sous ",
"sur ",
"avec ",
"pour ",
"par ",
"dans ",
"contre ",
"sans ",
"comme ",
"jusqu['’]",
-- We could list others but you get diminishing returns
}
local no_split_apostrophe_words = {
["c'est"] = true,
["quelqu'un"] = true,
["aujourd'hui"] = true,
}
local function track(page)
require("Module:debug").track("fr-headword/" .. page)
return true
end
-----------------------------------------------------------------------------------------
-- Utility functions --
-----------------------------------------------------------------------------------------
local function replace_hash_with_lemma(term, lemma)
-- If there is a % sign in the lemma, we have to replace it with %% so it doesn't get interpreted as a capture replace
-- expression.
lemma = lemma:gsub("%%", "%%%%")
-- Assign to a variable to discard second return value.
term = term:gsub("#", lemma)
return term
end
-- Parse and insert an inflection not requiring additional processing into `data.inflections`. The raw arguments come
-- from `args[field]`, which is parsed for inline modifiers. `label` is the label that the inflections are given;
-- `accel` is the accelerator form, or nil.
local function parse_and_insert_inflection(data, args, field, label, accel)
m_headword_utilities.parse_and_insert_inflection {
headdata = data,
forms = args[field],
paramname = field,
splitchar = ",",
label = label,
accel = accel and {form = accel} or nil,
}
end
local function make_plural(form, special)
local retval = require(romut_module).handle_multiword(form, special, make_plural, prepositions)
if retval then
if #retval > 1 then
error("Internal error: Got multiple plurals from handle_multiword(): " .. concat(retval))
end
return retval[1]
end
if form:match("[sxz]$") then
return form
elseif form:match("au$") then
return form .. "x"
elseif form:match("al$") then
return form:gsub("al$", "aux")
end
return form .. "s"
end
local function make_feminine(form, special)
local retval = require(romut_module).handle_multiword(form, special, make_feminine, prepositions)
if retval then
if #retval > 1 then
error("Internal error: Got multiple feminines from handle_multiword(): " .. concat(retval))
end
return retval[1]
end
if form:match("e$") then
return form
elseif form:match("en$") then
return form .. "ne"
elseif form:match("er$") then
return form:gsub("er$", "ère")
elseif form:match("el$") then
return form .. "le"
elseif form:match("et$") then
return form .. "te"
elseif form:match("on$") then
return form .. "ne"
elseif form:match("ieur$") then
return form .. "e"
elseif form:match("teur$") then
return form:gsub("teur$", "trice")
elseif form:match("eu[rx]$") then
return form:gsub("eu[rx]$", "euse")
elseif form:match("if$") then
return form:gsub("if$", "ive")
elseif form:match("c$") then
return form:gsub("c$", "que")
elseif form:match("eau$") then
return form:gsub("eau$", "elle")
else
return form .. "e"
end
end
-- For bot use
function export.make_feminine(frame)
local masc = frame.args[1] or error("Masculine in 1= is required.")
local special = frame.args[2]
return make_feminine(masc, special)
end
-- Handle generation of feminine or plural inflections when "+" is encountered. `list` is the existing base forms
-- (strings or form objects) that need to be inflected. `defobj` is the form object whose `term` field is "+"; any
-- qualifiers, labels and/or references from that form object will be combined with those of the base form. `inflfun`
-- is the function to do the inflection, which is passed two arguments, the base form value (a string) and the
-- `special` value specified for handling multiword expressions (or nil if no value specified). Returns the new list
-- of inflected form objects.
local function make_inflection(list, defobj, inflfun, special)
local newlist = {}
for _, form in ipairs(list) do
if type(form) == "string" then
form = {term = form}
end
local infl = inflfun(form.term, special)
local formobj = m_table.shallowCopy(form)
formobj.term = infl
m_headword_utilities.combine_termobj_qualifiers_labels(formobj, defobj)
insert(newlist, formobj)
end
return newlist
end
-----------------------------------------------------------------------------------------
-- Main entry point --
-----------------------------------------------------------------------------------------
-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
local poscat = frame.args[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.")
local params = {
["head"] = list_param,
["id"] = true,
["json"] = boolean_param,
["splithyph"] = boolean_param,
["nolink"] = boolean_param,
["nolinkhead"] = {type = "boolean", alias_of = "nolink"},
["abbr"] = list_param,
["pagename"] = true, -- for testing
}
if pos_functions[poscat] then
for key, val in pairs(pos_functions[poscat].params) do
params[key] = val
end
end
local parargs = frame:getParent().args
local args = require("Module:parameters").process(parargs, params)
local pagename = args.pagename or mw.loadData("Module:headword/data").pagename
local user_specified_heads = args.head
local heads = user_specified_heads
if args.nolink then
if not heads[1] then
heads = {pagename}
end
else
local romut = require(romut_module)
local auto_linked_head = romut.add_links_to_multiword_term(pagename, args.splithyph, no_split_apostrophe_words)
if not heads[1] then
heads = {auto_linked_head}
else
for i, head in ipairs(heads) do
if head:find("^~") then
head = romut.apply_link_modifiers(auto_linked_head, head:sub(2))
heads[i] = head
elseif head:find("^[!?]$") then
-- If explicit head= just consists of ! or ?, add it to the end of the default head after a
-- NNBSP (thin non-breaking space).
head = auto_linked_head .. nnbsp .. head
heads[i] = head
end
if head == auto_linked_head then
track("redundant-head")
end
end
end
end
local data = {
lang = lang,
pos_category = pos_functions[poscat] and pos_functions[poscat].pos_category or poscat,
categories = {},
heads = heads,
user_specified_heads = user_specified_heads,
no_redundant_head_cat = not user_specified_heads[1],
genders = {},
inflections = {},
pagename = pagename,
id = args.id,
checkredlinks = check_missing and (pos_functions[poscat] and pos_functions[poscat].redlink_pos or true) or false,
}
if pagename:find("^%-") and poscat ~= "suffix forms" then
data.is_suffix = true
data.pos_category = "suffixes"
data.checkredlinks = check_missing
local singular_poscat = require(en_utilities_module).singularize(poscat)
insert(data.categories, langname .. " " .. singular_poscat .. "-forming suffixes")
insert(data.inflections, {label = singular_poscat .. "-forming suffix"})
end
if pos_functions[poscat] then
pos_functions[poscat].func(args, data)
end
parse_and_insert_inflection(data, args, "abbr", "abbreviation")
if args.json then
return require("Module:JSON").toJSON(data)
end
return require("Module:headword").full_headword(data)
end
-----------------------------------------------------------------------------------------
-- Nouns --
-----------------------------------------------------------------------------------------
local allowed_genders = m_table.listToSet {
"m", "f", "mf", "mfbysense", "mfequiv", "gneut", "m-p", "f-p", "mf-p", "mfbysense-p", "mfequiv-p", "gneut-p",
"?", "?-p",
}
local additional_allowed_pronoun_genders = m_table.listToSet {
"m-s", "f-s", "mf-s",
"p", -- mf-p doesn't make sense for e.g. [[iels]]/[[ielles]]
"n", -- e.g. [[ceci]]/[[cela]]
}
local function validate_genders(genders, is_pronoun)
for _, g in ipairs(genders) do
if type(g) == "table" then
g = g.spec
end
if not allowed_genders[g] and (not is_pronoun or not additional_allowed_pronoun_genders[g]) then
error("Unrecognized gender: " .. g)
end
end
end
local function make_qual_replaced_by(replacement)
return {list = true, allow_holes = true, replaced_by = false,
instead = ("use an inline modifier on |%s= such as <q:...>, <qq:...>, <l:...> or <ll:...>"):format(replacement)
}
end
local function make_alias_replaced_by(replacement, reason)
return {list = true, disallow_holes = true, replaced_by = replacement, reason = reason or
"for consistency with the corresponding parameter in other Romance-language headword templates"
}
end
local function get_noun_params(is_proper)
return {
[1] = {list = "g", disallow_holes = true, required = not is_proper, default = "?", type = "genders",
flatten = true}, -- gender(s)
["g"] = {replaced_by = 1, reason = "for consistency"},
[2] = list_param, --plural override(s)
["pqual"] = make_qual_replaced_by("2"),
["f"] = list_param, --feminine form(s)
["fqual"] = make_qual_replaced_by("f"),
["m"] = list_param, --masculine form(s)
["fqual"] = make_qual_replaced_by("m"),
["dim"] = list_param, --diminutive(s)
["dimqual"] = make_qual_replaced_by("dim"),
["aug"] = list_param, --diminutive(s)
["pej"] = list_param, --pejorative(s)
["dem"] = list_param, --demonym(s)
["fdem"] = list_param, --female demonym(s)
}
end
local function do_noun(args, data, pos, is_proper)
local is_plurale_tantum = false
local has_singular = false
if pos == "cardinal noun" then
pos = "numeral"
insert(data.categories, 1, langname .. " cardinal numbers")
end
if data.is_suffix then
pos = "suffix"
end
local plpos = require(en_utilities_module).pluralize(pos)
validate_genders(args[1])
data.genders = args[1]
-- Check for specific genders and pluralia tantum.
for _, g in ipairs(args[1]) do
if type(g) == "table" then
g = g.spec
end
if g:find("-p$") then
is_plurale_tantum = true
else
has_singular = true
end
end
local lemma = data.pagename
-- Plural
local plurals = {}
local function insert_noun_inflection(terms, label, accel)
m_headword_utilities.insert_inflection {
headdata = data,
terms = terms,
label = label,
accel = accel and {form = accel} or nil,
}
end
if is_plurale_tantum and not has_singular then
if args[2][1] then
error("Can't specify plurals of plurale tantum " .. pos)
end
insert(data.inflections, {label = glossary_link("plural only")})
else
plurals = m_headword_utilities.parse_term_list_with_modifiers {
paramname = {2, "pl"},
forms = args[2],
splitchar = ",",
}
-- Check for special plural signals
local mode = nil
local pl1 = plurals[1]
if pl1 and #pl1.term == 1 then
mode = pl1.term
if mode == "?" or mode == "!" or mode == "-" or mode == "~" then
pl1.term = nil
if next(pl1) then
error(("Can't specify inline modifiers with plural code '%s'"):format(mode))
end
table.remove(plurals, 1) -- Remove the mode parameter
elseif mode ~= "+" and mode ~= "#" and not mode:find("[a-zA-Z]") then
error(("Unexpected plural code '%s'"):format(mode))
end
end
if is_plurale_tantum then
-- both singular and plural
insert(data.inflections, {label = "sometimes " .. glossary_link("plural only") .. ", in variation"})
end
if mode == "?" then
-- Plural is unknown
insert(data.categories, langname .. " " .. plpos .. " with unknown or uncertain plurals")
elseif mode == "!" then
-- Plural is not attested
insert(data.inflections, {label = "plural not attested"})
insert(data.categories, langname .. " " .. plpos .. " with unattested plurals")
if plurals[1] then
error("Can't specify any plurals along with unattested plural code '!'")
end
elseif mode == "-" then
-- Uncountable noun; may occasionally have a plural
insert(data.categories, langname .. " uncountable " .. plpos)
-- If plural forms were given explicitly, then show "usually"
if plurals[1] then
insert(data.inflections, {label = "usually " .. glossary_link("uncountable")})
insert(data.categories, langname .. " countable " .. plpos)
else
insert(data.inflections, {label = glossary_link("uncountable")})
end
else
-- Countable or mixed countable/uncountable
if not plurals[1] and not is_proper then
plurals[1] = {term = "+"}
end
if mode == "~" then
-- Mixed countable/uncountable noun, always has a plural
insert(data.inflections, {label = glossary_link("countable") .. " and " .. glossary_link("uncountable")})
insert(data.categories, langname .. " uncountable " .. plpos)
insert(data.categories, langname .. " countable " .. plpos)
elseif plurals[1] then
-- Countable nouns
insert(data.categories, langname .. " countable " .. plpos)
else
-- Uncountable nouns
insert(data.categories, langname .. " uncountable " .. plpos)
end
end
-- Gather plurals, handling requests for default plurals.
for _, pl in ipairs(plurals) do
if pl.term == "+" then
pl.term = make_plural(lemma)
elseif pl.term:find("^%+") then
pl.term = require(romut_module).get_special_indicator(pl.term)
pl.term = make_plural(lemma, pl.term)
elseif pl.term == "s" or pl.term == "x" then
-- FIXME, convert to #s or #x
pl.term = lemma .. pl.term
else
pl.term = replace_hash_with_lemma(pl.term, lemma)
end
end
local pl1 = plurals[1]
if pl1 and not plurals[2] and pl1.term == lemma then
insert(data.inflections, {label = glossary_link("invariable"),
q = pl1.q, qq = pl1.qq, l = pl1.l, ll = pl1.ll, refs = pl1.refs
})
insert(data.categories, langname .. " indeclinable " .. plpos)
else
insert_noun_inflection(plurals, "plural", "p")
end
if plurals[2] then
insert(data.categories, langname .. " " .. plpos .. " with multiple plurals")
end
end
-- Gather masculines/feminines. For each one, generate the corresponding plural. `field` is the name of the field
-- containing the masculine or feminine forms (normally "m" or "f"); and `inflect` is a function of one or two
-- arguments to generate the default masculine or feminine from the lemma (the arguments are the lemma and
-- optionally a "special" flag to indicate how to handle multiword lemmas, and the function is normally
-- make_feminine or make_masculine [which doesn't exist, FIXME]).
local function handle_mf(field, inflect, default_plurals)
local function call_inflect(special)
if inflect then
-- Generate default feminine.
return inflect(lemma, special)
else
-- FIXME
error("Can't generate default masculine currently")
end
end
local mfs = m_headword_utilities.parse_term_list_with_modifiers {
paramname = field,
forms = args[field],
splitchar = ",",
frob = function(term)
if term == "+" then
-- Generate default masculine/feminine.
term = call_inflect()
elseif term == "e" and field == "f" then
-- FIXME: remove this special case
term = lemma .. "e"
else
term = replace_hash_with_lemma(term, lemma)
end
local special = require(romut_module).get_special_indicator(term)
if special then
term = call_inflect(special)
end
return term
end
}
return mfs
end
local feminines = handle_mf("f", make_feminine)
local masculine_plurals = {}
local masculines = handle_mf("m", nil)
local function parse_and_insert_noun_inflection(field, label, accel)
parse_and_insert_inflection(data, args, field, label, accel)
end
insert_noun_inflection(feminines, "feminine", "f")
insert_noun_inflection(masculines, "masculine")
parse_and_insert_noun_inflection("dim", "diminutive")
parse_and_insert_noun_inflection("aug", "augmentative")
parse_and_insert_noun_inflection("pej", "pejorative")
parse_and_insert_noun_inflection("dem", "demonym")
parse_and_insert_noun_inflection("fdem", "female demonym")
end
pos_functions["nouns"] = {
params = get_noun_params(),
func = function(args, data)
do_noun(args, data, "noun")
end,
}
pos_functions["proper nouns"] = {
params = get_noun_params("is proper"),
func = function(args, data)
do_noun(args, data, "noun", "is proper")
end,
}
pos_functions["cardinal nouns"] = {
params = get_noun_params(),
func = function(args, data)
do_noun(args, data, "cardinal noun")
end,
pos_category = "numerals",
}
local function get_pronoun_pos(pos)
return {
params = {
[1] = {list = "g", disallow_holes = true, required = true, default = "?", type = "genders",
flatten = true}, -- gender(s)
["g"] = {replaced_by = 1, reason = "for consistency"},
["f"] = list_param,
["fqual"] = make_qual_replaced_by("f"),
["m"] = list_param,
["mqual"] = make_qual_replaced_by("m"),
["mv"] = list_param,
["mvqual"] = make_qual_replaced_by("mv"),
["fpl"] = list_param,
["fp"] = make_alias_replaced_by("fpl"),
["fpqual"] = make_qual_replaced_by("fpl"),
["mpl"] = list_param,
["mp"] = make_alias_replaced_by("mpl"),
["mpqual"] = make_qual_replaced_by("mpl"),
["pl"] = list_param,
["p"] = make_alias_replaced_by("pl"),
["pqual"] = make_qual_replaced_by("pl"),
["type"] = list_param,
},
func = function(args, data)
-- Validate and add genders.
validate_genders(args[1], "is pronoun")
data.genders = args[1]
local plpos = require(en_utilities_module).pluralize(pos)
local function parse_and_insert_pronoun_inflection(field, label, accel)
parse_and_insert_inflection(data, args, field, label, accel)
end
-- Parse and insert all inflections.
parse_and_insert_pronoun_inflection("m", "masculine")
parse_and_insert_pronoun_inflection("mv", "masculine singular before vowel")
parse_and_insert_pronoun_inflection("f", "feminine")
parse_and_insert_pronoun_inflection("mpl", "masculine plural")
parse_and_insert_pronoun_inflection("fpl", "feminine plural")
parse_and_insert_pronoun_inflection("pl", "plural")
-- Categorize by "type"
for _, ty in ipairs(args.type) do
local category
if ty == "indefinite" then
category = "indefinite"
elseif ty == "interrogative" then
category = "interrogative"
elseif ty == "personal" then
category = "personal"
elseif ty == "possessive" then
category = "possessive"
elseif ty == "reflexive" then
category = "reflexive"
elseif ty == "relative" then
category = "relative"
end
if category then
if type(category) == "table" then
for _, cat in ipairs(category) do
insert(data.categories, langname .. " " .. cat .. " pronouns")
end
else
insert(data.categories, langname .. " " .. category .. " pronouns")
end
end
end
end
}
end
pos_functions["pronouns"] = get_pronoun_pos("pronoun")
pos_functions["determiners"] = get_pronoun_pos("determiner")
local function get_misc_pos()
return {
params = {
[1] = {replaced_by = "head", reason = "for consistency with other French headword templates"},
},
func = function(args, data)
end
}
end
pos_functions["adverbs"] = get_misc_pos()
pos_functions["prepositions"] = get_misc_pos()
pos_functions["phrases"] = get_misc_pos()
pos_functions["prepositional phrases"] = get_misc_pos()
pos_functions["proverbs"] = get_misc_pos()
pos_functions["punctuation marks"] = get_misc_pos()
pos_functions["diacritical marks"] = get_misc_pos()
pos_functions["interjections"] = get_misc_pos()
pos_functions["prefixes"] = get_misc_pos()
pos_functions["abbreviations"] = get_misc_pos()
local function do_adjective(pos)
return {
params = {
[1] = true,
["inv"] = boolean_param,
["sp"] = true, -- special indicator: "first", "first-last", etc.
["onlyg"] = true,
["m"] = list_param,
["mqual"] = make_qual_replaced_by("m"),
["mv"] = list_param,
["mvqual"] = make_qual_replaced_by("mv"),
["f"] = list_param,
["fqual"] = make_qual_replaced_by("f"),
["mpl"] = list_param,
["mp"] = make_alias_replaced_by("mpl"),
["mpqual"] = make_qual_replaced_by("mpl"),
["fpl"] = list_param,
["fp"] = make_alias_replaced_by("fpl"),
["fpqual"] = make_qual_replaced_by("fpl"),
["pl"] = list_param,
["p"] = make_alias_replaced_by("pl"),
["pqual"] = make_qual_replaced_by("pl"),
["base"] = list_param,
["current"] = make_alias_replaced_by("base", "because the old name was obscure and did not clarify the purpose of the parameter"),
["comp"] = list_param,
["compqual"] = make_qual_replaced_by("comp"),
["sup"] = list_param,
["supqual"] = make_qual_replaced_by("sup"),
["intr"] = boolean_param,
},
pos_category = pos == "cardinal adjective" and "numerals" or nil,
redlink_pos = pos == "participle" and "participles" or nil,
func = function(args, data)
local is_numeral = false
if pos == "cardinal adjective" then
pos = "numeral"
is_numeral = true
insert(data.categories, 1, langname .. " cardinal numbers")
end
if data.is_suffix then
pos = "suffix"
end
local plpos = require(en_utilities_module).pluralize(pos)
if not is_numeral then
if args.onlyg == "p" or args.onlyg == "m-p" or args.onlyg == "f-p" then
insert(data.categories, langname .. " pluralia tantum")
end
if args.onlyg == "s" or args.onlyg == "f-s" or args.onlyg == "f-s" then
insert(data.categories, langname .. " singularia tantum")
end
if args.onlyg then
insert(data.categories, langname .. " defective " .. plpos)
end
end
local lemma = data.pagename
local function insert_inflection(terms, label, accel)
m_headword_utilities.insert_inflection {
headdata = data,
terms = terms,
label = label,
accel = accel and {form = accel} or nil,
}
end
local function process_inflection(label, arg, accel, get_default, explicit_default_only)
local orig_infls = m_headword_utilities.parse_term_list_with_modifiers {
paramname = arg,
forms = args[arg],
splitchar = ",",
}
if not orig_infls[1] then
if explicit_default_only or not get_default then
orig_infls = {}
else
orig_infls = {{term = "+"}}
end
end
local infls = {}
if orig_infls[1] then
for _, infl in ipairs(orig_infls) do
if infl.term == "+" then
local defs
if get_default then
defs = get_default(infl)
else
error("Can't use '+' with " .. arg .. "=; no default available")
end
for _, def in ipairs(defs) do
insert(infls, def)
end
elseif infl.term == "e" or infl.term == "s" or infl.term == "x" then
-- FIXME: delete this in favor of #e, #s, #x
infl.term = lemma .. infl.term
insert(infls, infl)
else
infl.term = replace_hash_with_lemma(infl.term, lemma)
insert(infls, infl)
end
end
insert_inflection(infls, label, accel)
end
return infls
end
if args.sp and not require(romut_module).allowed_special_indicators[args.sp] then
local indicators = {}
for indic, _ in pairs(require(romut_module).allowed_special_indicators) do
insert(indicators, "'" .. indic .. "'")
end
sort(indicators)
error("Special inflection indicator beginning can only be " ..
mw.text.listToText(indicators) .. ": " .. args.sp)
end
local function get_base()
return args.base[1] and args.base or {lemma}
end
if args.onlyg == "p" then
insert(data.inflections, {label = "plural only"})
if args[1] ~= "mf" then
-- Handle feminine plurals
process_inflection("feminine plural", "fpl", "f|p")
end
elseif args.onlyg == "s" then
insert(data.inflections, {label = "singular only"})
if not (args[1] == "mf" or not args.f[1] and lemma:match("e$")) then
-- Handle feminines
process_inflection("feminine singular", "f", "f", function(defobj)
return make_inflection(get_base(), defobj, make_feminine, args.sp)
end)
end
elseif args.onlyg == "m" then
insert(data.genders, "m")
insert(data.inflections, {label = "masculine only"})
-- Handle masculine plurals
process_inflection("masculine plural", "mpl", "m|p", function(defobj)
return make_inflection(get_base(), defobj, make_plural, args.sp)
end)
elseif args.onlyg == "f" then
insert(data.genders, "f")
insert(data.inflections, {label = "feminine only"})
-- Handle feminine plurals
process_inflection("feminine plural", "fpl", "f|p", function(defobj)
return make_inflection(get_base(), defobj, make_plural, args.sp)
end)
elseif args.onlyg then
insert(data.genders, args.onlyg)
insert(data.inflections, {label = "defective"})
else
-- Gather genders
local gender = args[1]
-- Default to mf if base form ends in -e and no feminine,
-- feminine plural or gender specified
if not gender and not args.f[1] and not args.fpl[1] and lemma:match("e$")
and not lemma:find(" ", nil, true) then
gender = "mf"
end
if args.intr then
insert(data.inflections, {label = glossary_link("intransitive")})
insert(data.inflections, {label = "hence " .. glossary_link("invariable")})
args.inv = true
elseif args.inv then
insert(data.inflections, {label = glossary_link("invariable")})
end
-- Handle plurals of mf adjectives
if not args.inv and gender == "mf" then
process_inflection("plural", "pl", "p", function(defobj)
return make_inflection(get_base(), defobj, make_plural, args.sp)
end)
end
if not args.inv and gender ~= "mf" then
-- Handle masculine form if not same as lemma; e.g. [[sûr de soi]] with m=+, m2=sûr de lui
process_inflection("masculine singular", "m", "m|s",
function(defobj)
defobj = m_table.shallowCopy(defobj)
defobj.term = lemma
return {defobj}
end, "explicit default only")
-- Handle case of special masculine singular before vowel
process_inflection("masculine singular before vowel", "mv", "m|s")
-- Handle feminines
local feminines = process_inflection("feminine", "f", "f|s", function(defobj)
return make_inflection(get_base(), defobj, make_feminine, args.sp)
end)
-- Handle masculine plurals
process_inflection("masculine plural", "mpl", "m|p", function(defobj)
return make_inflection(get_base(), defobj, make_plural, args.sp)
end)
-- Handle feminine plurals
process_inflection("feminine plural", "fpl", "f|p", function(defobj)
return make_inflection(feminines, defobj, make_plural, args.sp)
end)
end
end
-- Handle comparatives
process_inflection("comparative", "comp", "comparative")
-- Handle superlatives
process_inflection("superlative", "sup", "superlative")
end
}
end
pos_functions["adjectives"] = do_adjective("adjective")
pos_functions["past participles"] = do_adjective("participle")
pos_functions["cardinal adjectives"] = do_adjective("cardinal adjective")
pos_functions["verbs"] = {
params = {
["type"] = list_param,
},
func = function(args, data)
local pos = "verbs"
for _, ty in ipairs(args.type) do
local category, label
if ty == "auxiliary" then
category = "auxiliary"
elseif ty == "defective" then
category = "defective"
label = glossary_link("defective")
elseif ty == "impersonal" then
category = "impersonal"
label = glossary_link("impersonal")
elseif ty == "modal" then
category = "modal"
elseif ty == "reflexive" then
category = "reflexive"
elseif ty == "transitive" then
label = glossary_link("transitive")
category = "transitive"
elseif ty == "intransitive" then
label = glossary_link("intransitive")
category = "intransitive"
elseif ty == "ambitransitive" or ty == "ambi" then
category = {"transitive", "intransitive"}
label = glossary_link("transitive") .. " and " .. glossary_link("intransitive")
end
if category then
if type(category) == "table" then
for _, cat in ipairs(category) do
insert(data.categories, langname .. " " .. cat .. " " .. pos)
end
else
insert(data.categories, langname .. " " .. category .. " " .. pos)
end
end
if label then
insert(data.inflections, {label = label})
end
end
end
}
pos_functions["cardinal invariable"] = {
params = {},
func = function(args, data)
data.pos_category = "numerals"
insert(data.categories, langname .. " cardinal numbers")
insert(data.categories, langname .. " indeclinable numerals")
insert(data.inflections, {label = glossary_link("invariable")})
end
}
-----------------------------------------------------------------------------------------
-- Suffix forms --
-----------------------------------------------------------------------------------------
pos_functions["suffix forms"] = {
params = {
[1] = {required = true, list = true, disallow_holes = true},
["g"] = {list = true, disallow_holes = true, type = "genders", flatten = true},
},
func = function(args, data)
validate_genders(args.g)
data.genders = args.g
local suffix_type = {}
for _, typ in ipairs(args[1]) do
insert(suffix_type, typ .. "-forming suffix")
end
insert(data.inflections, {label = "non-lemma form of " .. m_table.serialCommaJoin(suffix_type, {conj = "or"})})
end,
}
return export
12p9x3u55lfqlhqw4h32rd5yb2cdfpa
Iceland
0
8789
235408
210347
2026-06-02T04:45:04Z
Lee
19
235408
wikitext
text/x-wiki
{{also|iceland}}
==ඉංග්රීසි==
{{wikipedia}}
===නිරුක්තිය===
From {{inh|en|enm|Iseland}}, {{m|enm|Island}}, {{m|enm|Islond}}, {{m|enm|Yslond}}, a {{calque|en|non|Ísland|nocap=1}}, equivalent to {{af|en|ice|land}}.
===උච්චාරණය===
* {{IPA|en|/ˈaɪs.lənd/|a=UK,US}}
* {{IPA|en|[ˈaɪs.ln̩ʔd̚]|a=Some speakers}}
* {{audio|en|en-us-Iceland.ogg|a=US}}
* {{hyphenation|en|Ice|land}}
===සංඥා නාමය===
{{en-proper noun}}
# [[අයිස්ලන්තය]]
==== සමාන පද ====
* {{l|en|Republic of Iceland}}
====ආශ්රිත පද====
* {{l|en|Icelandic}}
* {{l|en|Icelandish}}
* {{l|en|Icelander}}
==== අමතර අවධානයට ====
* {{list:countries of Europe/en}}{{topics|en|යුරෝපය තුළ රටවල්}}
* {{l|en|Reykjavík}}
* {{l|en|Iceland cyprine}}
* {{l|en|Icelander}}
* {{l|en|Iceland moss}}
* {{l|en|Iceland spar}}
[[Category:en:Exonyms]]
[[Category:en:Iceland]]
[[Category:en:දූපත්]]
----
==Scots==
=== සංඥා නාම පදය ===
{{head|sco|proper noun}}
# {{place|sco|country|cont/Europe|t=Iceland}}
----
8cmwf3jjcs2s4b4of6j1pfkkjlvdbaf
235409
235408
2026-06-02T04:45:37Z
Lee
19
235409
wikitext
text/x-wiki
{{also|iceland}}
==ඉංග්රීසි==
{{wikipedia|lang=en}}
===නිරුක්තිය===
From {{inh|en|enm|Iseland}}, {{m|enm|Island}}, {{m|enm|Islond}}, {{m|enm|Yslond}}, a {{calque|en|non|Ísland|nocap=1}}, equivalent to {{af|en|ice|land}}.
===උච්චාරණය===
* {{IPA|en|/ˈaɪs.lənd/|a=UK,US}}
* {{IPA|en|[ˈaɪs.ln̩ʔd̚]|a=Some speakers}}
* {{audio|en|en-us-Iceland.ogg|a=US}}
* {{hyphenation|en|Ice|land}}
===සංඥා නාමය===
{{en-proper noun}}
# [[අයිස්ලන්තය]]
==== සමාන පද ====
* {{l|en|Republic of Iceland}}
====ආශ්රිත පද====
* {{l|en|Icelandic}}
* {{l|en|Icelandish}}
* {{l|en|Icelander}}
==== අමතර අවධානයට ====
* {{list:countries of Europe/en}}{{topics|en|යුරෝපය තුළ රටවල්}}
* {{l|en|Reykjavík}}
* {{l|en|Iceland cyprine}}
* {{l|en|Icelander}}
* {{l|en|Iceland moss}}
* {{l|en|Iceland spar}}
[[Category:en:Exonyms]]
[[Category:en:Iceland]]
[[Category:en:දූපත්]]
==Scots==
=== සංඥා නාම පදය ===
{{head|sco|proper noun}}
# {{place|sco|country|cont/Europe|t=Iceland}}
cd75y29jext5nx5vpxxk51rnga7ds0z
linguistics
0
10430
235458
215166
2026-06-02T10:48:00Z
Lee
19
235458
wikitext
text/x-wiki
{{also|lingüístics}}
==ඉංග්රීසි==
===නිරුක්තිය===
From {{suffix|en|linguist|ics}}, a modification of earlier {{m|en|linguistic}}, {{coin|en|nocap=1|William Whewell|nat=English|occ=polymath|in=1837}} from {{der|en|de|Linguistik}}.
===උච්චාරණය===
* {{IPA|en|/lɪŋˈɡwɪstɪks/}}
* {{IPA|en|/liŋˈɡwɪstɪks/|a=US,pre-/ŋ/ tensing}}
* {{audio|en|En-us-linguistics.ogg|a=US}}
===නාම පදය===
{{wikipedia}}
{{en-noun|-}}
# [[වාග්වේදය]].
#:{{hypo|en|applied linguistics}}
==== සමාන පද ====
* {{l|en|glossology}}, {{l|en|glottology}}
* {{l|en|linguistry}}
* {{l|en|speechlore}}
* {{l|en|wordlore}}
====Meronyms====
* See also [[Thesaurus:linguistics]]
==== ව්යුත්පන්න යෙදුම් ====
{{col4|en
|algebraic linguistics
|applied linguistics
|archaeolinguistics
|biolinguistics
|clinical linguistics
|comparative linguistics
|computational linguistics
|contact linguistics
|diachronic linguistics
|ecolinguistics
|ethnolinguistics
|Eurolinguistics
|evolutionary linguistics
|historical linguistics
|interlinguistics
|metalinguistics
|microlinguistics
|neurolinguistics
|paleolinguistics
|pseudolinguistics
|psycholinguistics
|sociolinguistics
|theolinguistics
|xenolinguistics
}}
====ආශ්රිත පද====
* {{l|en|linguist}}
* {{l|en|linguistic}}
=== අමතර අවධානයට ===
* {{l|en|diction}}
* {{l|en|epigraphy}}
* {{l|en|grammar}}
* {{l|en|morphology}}
* {{l|en|philology}}
* {{l|en|phonetics}}
* {{l|en|phonology}}
* {{l|en|pragmatics}}
* {{l|en|semantics}}
* {{l|en|syntax}}
{{මාතෘකා|en|වාග්වේදය}}
2f0mbzke8e5c8rvczmc1h2c3e8ei5e3
වික්ෂනරි:REE
4
11433
235379
37162
2026-06-01T21:27:55Z
EmausBot
1976
Fixing double redirect from [[වික්ෂනරි:Requested entries (English)]] to [[වික්ෂනරි:Requested entries (ඉංග්රීසි)]]
235379
wikitext
text/x-wiki
#යළියොමුව [[වික්ෂනරි:Requested entries (ඉංග්රීසි)]]
fzli65cqprjje2el55z5ywuzz7j4gz0
වික්ෂනරි:Requested entries (ඉංග්රීසි)
4
11434
235335
83033
2026-06-01T14:29:41Z
Lee
19
Lee විසින් [[වික්ෂනරි:Requested entries (English)]] සිට [[වික්ෂනරි:Requested entries (ඉංග්රීසි)]] වෙත පිටුව ගෙන යන ලදී
83033
wikitext
text/x-wiki
{{shortcut|WT:RE:en|WT:REE}}
:''See also: '''[[WT:EDH|Missing entries]]''' (<180,000)
:''See also: '''[[w:Wikipedia:Typo Team/moss#For Wiktionary]]''''' (missing words encountered on English Wikipedia)
:''See also: the '''[[Wiktionary:Tea room|Tea room]]''', where you can post the definition of a word you’re trying to find, and hopefully someone will help you find it.''
:''See also: [[Wiktionary:Requested entries (English)/diacritics and ligatures]]
{{ඉංග්රීසි ව්යාපෘතියෙන් ආයාත කළ පිටුව}}
* Old requests:
** [[Wiktionary:Requested entries (English)/pre 2020]]
** [[Wiktionary:Requested entries (English)/2020]]
** [[Wiktionary:Requested entries (English)/2021]]
** [[Wiktionary:Requested entries (English)/2022]]
** [[Wiktionary:Requested entries (English)/2023]]
__NOTOC__
{{English requested entries nav}}
{{requested entries preamble|en|genders=no}}
==Non-letter==
* We have [[1-h TL FM]]. Along the same lines we could also have [[10-h TL FM]], [[100-h TL FM]], and [[1,000-h TL FM]] / [[1000-h TL FM]]. (Seemingly only attested with these numbers).
* {{REEHelp|5D chess}} - verb, after the game {{w|5D Chess with Multiverse Time Travel}}; past tense [[5D chessed]] or [[5D chess'd]]
* I am interested in seeing a fuller coverage of plate tectonics and submarine features like plates themselves ([[Philippine Sea Plate]], [[Scotia Plate]]), oil fields ([[Chengbei]], I have no list of these), trenches ([[Manila Trench]], [[Mariana Trench]]), ridges ([[Mid-Atlantic Ridge]], [[East Pacific Rise]]), and similar ([[James Shoal]], [[Darwin Mounds]]) etc. This kind of work will be mostly based in academic literature. I hope to see a more adequate system of categories developed. To show you how woefully inadequate Wiktionary is at this time (2022), I just today created [[Mid-Atlantic Ridge]] and dumped it into Category:Oceanography and Category:Places. See {{w|List of submarine topographical features}}, {{w|List of reefs}} --[[User:Geographyinitiative|Geographyinitiative]] ([[User talk:Geographyinitiative|talk]]) 21:35, 24 June 2022 (UTC)
:You're so dramatic, Joggy! There's a perfectly decent project for these... Wikipedia [[User:Demonicallt|Demonicallt]] ([[User talk:Demonicallt|talk]]) 00:48, 1 February 2024 (UTC)
::And Wiktionary. [[User:CitationsFreak|CitationsFreak]] ([[User talk:CitationsFreak|talk]]) 17:27, 1 February 2024 (UTC)
==A==
{{English requested entries nav}}
*{{REEHelp|argumentum ad illegalum}} - also argumentum ad penalum, ad scelestum, ad carcerum, and ad criminalum, a logical falacy that says that if something is illegal it means it is immoral and or anti-ethical no matter what.
*{{REEHelp|argumentum ad legalum}} - also argumentum ad codexum, ad constitutium, ad iutistium, and ad lexum a logical fallacy that says if something is legal it means it is moral and or ethical no matter what.
* {{REEHelp|Ardiaei}} (noun pl.) and {{REEHelp|Ardiaean}} (adj.) of an Illyrian tribe, {{m|grc|Ἀρδιαῖοι}}, [[w:Ardiaei]]
*{{l|en|akohekohe}} bird
*{{l|en|alauahio}} bird
*{{l|en|amaui}} birdie
*{{l|en|anianiau}} birdie
*{{l|en|apapane}} birdie
*{{l|en|avocetbill}} birdie
==B==
{{English requested entries nav}}
* [[balani]] (new sense) - sea urchins (see [https://www.biodiversitylibrary.org/partpdf/15878], [https://leocasinillo.blogspot.com/2018/], [https://en.wikisource.org/wiki/Page:Midland_naturalist_(IA_midlandnaturalis01lond).pdf/221]). <span class="vcard"><span class="fn">[[User:Pigsonthewing|Andy Mabbett]]</span> (<span class="nickname">Pigsonthewing</span>); [[User talk:Pigsonthewing|Talk to Andy]]; [[Special:Contributions/Pigsonthewing|Andy's edits]]</span> 19:49, 4 March 2024 (UTC)
:: I suspect that is barnacles (perhaps genus ''[[Balanus]]'' or family {{w|Balanidae}}) rather than sea urchins. OED includes a short quote at ''acorn'' from 1755: "Sea Acorns, ''Balani''." [[User:Cnilep|Cnilep]] ([[User talk:Cnilep|talk]]) 03:55, 6 March 2024 (UTC)
* {{REEHelp|beer stick}} (or [[stick of beer]] - may be an alt. for be either [[beer flight]] or [[beer paddle]]. <span class="vcard"><span class="fn">[[User:Pigsonthewing|Andy Mabbett]]</span> (<span class="nickname">Pigsonthewing</span>); [[User talk:Pigsonthewing|Talk to Andy]]; [[Special:Contributions/Pigsonthewing|Andy's edits]]</span> 21:30, 28 February 2024 (UTC)
*{{REEHelp|BFBVFS}} - abbreviation for "big fiery ball visible from space", an irreversibly corrupted game file or a crashed computer. Originated on ''The Sims 2'' fan community "More Awesome Than You" [[User:Estreyeria|Estreyeria]] ([[User talk:Estreyeria|talk]]) 18:33, 25 January 2024 (UTC)
*{{REEHelp|big fiery ball visible from space}} see BFBVFS above [[User:Estreyeria|Estreyeria]] ([[User talk:Estreyeria|talk]]) 18:33, 25 January 2024 (UTC)
*{{REEHelp|blueberrita}}
*{{REEHelp|Botni}} - some Scandinavian area. See [[Ostrobothnia]] et al [[User:Fond of sanddunes|Fond of sanddunes]] ([[User talk:Fond of sanddunes|talk]]) 22:48, 11 January 2024 (UTC)
*{{l|en|bamboowren}} bird
*{{l|en|bernieria}} bird
*{{l|en|brushrunner}} bird
*{{l|en|bushcrow}} bird
*{{l|en|buzzard-eagle}} bird
==C==
{{English requested entries nav}}
* {{REEHelp|cheat curl}}.
* {{REEHelp|chevvu}} - See [[Citations:chevvu]], [https://www.google.com/books/edition/Dictionary_of_Gems_and_Gemology/aUZ8CgAAQBAJ?hl=en&gbpv=0|Dictionary of Gems and Gemology] by Robert M. Shipley, and [https://www.google.com/books/edition/Journal_of_the_Ceylon_Branch_of_the_Roya/r5MoAAAAYAAJ?hl=en&gbpv=0|Journal of the Ceylon Branch of the Royal Asiatic Society: Volumes 1-11] page 53. [[User:Heyandwhoa|Heyandwhoa]] ([[User talk:Heyandwhoa|talk]]) 20:47, 2 March 2024 (UTC)
* {{REEHelp|copydump}} | Seems to be a command on some IBM system: I can't see use as actual English in GBooks. [[User:Equinox|Equinox]] [[User_talk:Equinox|◑]] 01:47, 18 February 2024 (UTC)
* {{REEHelp|coward's way out}} - refers to suicide
* {{REEHelp|cranberrita}} - [[Citations:cranberrita]]
* {{REEHelp|cranbrie}} - [[Citations:cranbrie]]
*{{l|en|canary-flycatcher}} bird
*{{l|en|chilia}} bird
*{{l|en|chlorospingus}} bird
*{{l|en|cocquette}} bird
*{{l|en|cordonbleu}} bird
*{{l|en|crab-plover}} bird
*{{l|en|cuckoo-finch}} bird
==D==
{{English requested entries nav}}
* {{REEHelp|defensive lineman}} - American football position
*{{REEHelp|dichlorofluorescin}} — chemical that is to ''[[dichlorofluorescein]]'' as ''[[fluorescin]]'' is to ''[[fluorescein]]''. —DIV
*{{REEHelp|dickinsoniomorph}}
*{{REEHelp|direct commission}}
*{{REEHelp|disc warming}} - [[flat earther|Flat Earth]] slang for [[global warming]]
*<s>{{REEHelp|dollarita}} - [[Citations:Dollarita]]</s> No, it previously failed RFV.
*{{l|en|dapple-throat}} bird
*{{l|en|darkeye}} bird
*{{l|en|drongo-cuckoo}} bird
==E==
{{English requested entries nav}}
* {{l|en|elachura}} bird
==F==
{{English requested entries nav}}
*{{REEHelp|first at-bat}} - literal and idiomatic senses
*{{REEHelp|fineapple}}
* {{l|en|fire-eye}} bird
* {{l|en|firewood-gatherer}} bird
* {{l|en|flycatcher-shrike}} bird
* {{l|en|foliage-gleaner}} bird
* {{REEHelp|fun in games}} - common eggcorn these days of [[fun and games]]
==G==
{{English requested entries nav}}
* {{REEHelp|geoplankton}} - [[Citations:geoplankton]]
* {{REEHelp|glammery}} - [[Citations:glammery]]
* {{l|en|geomalia}} bird
* {{l|en|graytail}} bird
* {{l|en|greytail}} bird
* {{l|en|grosbeak-canary}} bird
* {{l|en|groundhunter}} bird
==H==
{{English requested entries nav}}
* {{REEHelp|hawkfly}} — appears in the University of Wales Dictionary of the Welsh language as a translation of [https://welsh-dictionary.ac.uk/gpc/gpc.html?pryr_creyr pry'r crëyr] and according to [https://chestofbooks.com/gardening-horticulture/Commercial-Gardening-1/Hawkflies.html General Aspects Of Commercial Gardening (1913)], it refers to hoverflies of the genus {{taxlink|Scaeva|genus|nomul=1}}, but isn't clear on whether they are a specific species within the genus.
* {{REEHelp|HFY}} — acronym of "Humanity, Fuck Yeah!"; (Internet, Reddit, neologism) ''HFY is a story/series that takes a “human element” in either humanity or an “other” (race/species or object) that exists in a “setting” (future or other world/universe) with varying levels of culture, technology, society and history that help show in some shape or form the potential good or bad for humanity’s race/culture.''<ref>[https://www.reddit.com/r/hfy/wiki/ref/faq/#wiki_what_is_hfy.3F r/hfy] on Reddit</ref>.
* {{REEHelp|higher animal}}
* {{l|en|harrier-hawk}}
* {{l|en|heleia}}
* {{l|en|hemispingus}}
* {{l|en|hoopoe-lark}}
* {{l|en|huet-huet}}
* {{l|en|hylia}}
* {{l|en|hylocitrea}}
==I==
{{English requested entries nav}}
*{{REEHelp|interactive teller machine}} - Also check [[ITM]]. [[User:Heyandwhoa|Heyandwhoa]] ([[User talk:Heyandwhoa|talk]]) 01:19, 6 February 2024 (UTC) - [[Citations:interactive teller machine]]
==J==
{{English requested entries nav}}
* {{REEHelp|jack}} - another word for a [[jacket]], rather than specifically one for a padded jacket that forms part of a suit of armour. This appears in the etymology of the Yola word [[jock]] and in the copyrighted name of a brand of packable plastic raincoat/anorak/cagoule ('jack in a pack').
* {{REEHelp|jack socket}} - sounded redundant when I heard it but gets pretty decent hits and is in the OED
* {{l|en|jewel-babbler}} not just a bird
==K==
{{English requested entries nav}}
* {{REEHelp|kimberellomorph}}
* [[Koasek]]: some Native American tribe? see [[Cowasuck]], and {{w|Koasek Abenaki Tribe}} (which says they aren't the same, though some other sources might disagree?)
*{{REEHelp|Kripke structure}}
* {{REEHelp|kakamega}} (bird)
* {{REEHelp|kamao}} (bird)
==L==
{{English requested entries nav}}
*{{REEHelp|leaflute}} - [[Citations:leaflute]]
*{{REEHelp|legal absolutism}} - the idea that the laws are absolute and that the Executive, the Legislative and the Judicial are absolute and can do whatever they want. A good example are liberal democracy supporters who defend elected governments and the supposed "will of majority" at all costs. Like defending Javier Milei, Tarcisio de Freitas, Lula da Silva, Zelensky, Netanyahu, Trump, and Biden at the same time.
*{{REEHelp|legal relativism}} - also legal particularism or legal contigency theory, it states the law is relative and that everything depends regarding the law and the three powers. Mainly if it is about the three powers on liberal democracy.
* {{REEHelp|lights are green}} / {{REEHelp|the lights are green}} — something to do with smoking marijuana, AFAIK. Other possible sense: the go-ahead/approval is given<small>—DIV ([[Special:Contributions/1.145.19.119|1.145.19.119]] 10:42, 17 February 2024 (UTC))</small>
* {{REEHelp|living off the land}} - See [https://www.cisa.gov/resources-tools/resources/identifying-and-mitigating-living-land-techniques]. [[User:Heyandwhoa|Heyandwhoa]] ([[User talk:Heyandwhoa|talk]]) 23:06, 8 March 2024 (UTC)
* {{REEHelp|LOTL}} - See "living off the land" above. [[User:Heyandwhoa|Heyandwhoa]] ([[User talk:Heyandwhoa|talk]]) 23:06, 8 March 2024 (UTC)
* {{REEHelp|leafworker}} (bird)
* {{REEHelp|longbill}} (bird)
==M==
{{English requested entries nav}}
* {{REEHelp|man it out}} - to act maturely, stoic or gritty in a difficult situation
*{{REEHelp|MEDINT}}
*{{REEHelp|millillion}} See [[Citations:millillion]] - 10{{sup|3003}}.
*{{REEHelp|modal companion}}
*{{REEHelp|muroplast}}
*{{REEHelp|mutuel}}- deals with betting issues- "mutuel windows" etc. | Maybe related to [[pari-mutuel]]. [[User:Equinox|Equinox]] [[User_talk:Equinox|◑]] 00:18, 27 January 2024 (UTC)
* {{REEHelp|magpie-jay}} (bird)
* {{REEHelp|meliphaga}} (bird)
* {{REEHelp|mesia}} (bird)
* {{REEHelp|minla}} (bird)
* {{REEHelp|mohoau}} (bird)
* {{REEHelp|monal-partridge}} (bird)
* {{REEHelp|moorchat}} (bird)
* {{REEHelp|mouse-warbler}} (bird)
* {{REEHelp|myiagra}} (bird)
== N ==
{{English requested entries nav}}
* [[nose in the air]]: (with one's ~; have one's ~) being [[disdainful]], [[uppity]], [[stuck up]]
* {{REEHelp|notchplasty}}
* {{REEHelp|nimisin}}: Seems to mean "[[protologism]]" in [[Toki Pona]]; probably not an English word though.
* {{REEHelp|nightingale-thrush}} (bird)
* {{REEHelp|nightingale-wren}} (bird)
==O==
{{English requested entries nav}}
* {{REEHelp|offensive lineman}} - American football position
* {{REEHelp|orthoteny}}
* {{REEHelp|oxy-hydrogen microscope}} - "The oxy-hydrogen microscope, which projected microscopic subjects onto a screen using limelight, magnifying lenses, and a magic lantern, entertained audiences from 1825 through the first decades of cinema. ... The oxy-hydrogen microscope combined technologies of the microscope (magnification), oxy-hydrogen lamp (illumination), and magic lantern (projection). With its powerful light, it enabled large public screenings, outstripping any similar technology." ([https://www.jstor.org/stable/10.2979/victorianstudies.62.1.04]); [https://www.nature.com/articles/134786a0.pdf];[[:en:wikisource:Page:Midland naturalist (IA midlandnaturalis01lond).pdf/132|Midland Naturalist, 1:112]]. <span class="vcard"><span class="fn">[[User:Pigsonthewing|Andy Mabbett]]</span> (<span class="nickname">Pigsonthewing</span>); [[User talk:Pigsonthewing|Talk to Andy]]; [[Special:Contributions/Pigsonthewing|Andy's edits]]</span> 12:58, 5 February 2024 (UTC)
** Also [[oxy-hydrogen lamp]]. <span class="vcard"><span class="fn">[[User:Pigsonthewing|Andy Mabbett]]</span> (<span class="nickname">Pigsonthewing</span>); [[User talk:Pigsonthewing|Talk to Andy]]; [[Special:Contributions/Pigsonthewing|Andy's edits]]</span> 12:58, 5 February 2024 (UTC)
* {{REEHelp|odedi}} (bird)
* {{REEHelp|owlet-nightjar}} (bird)
* {{REEHelp|oxylabes}} (bird)
==P==
{{English requested entries nav}}
* {{REEHelp|phoenixity}} - See Merriam-Webster: [https://www.merriam-webster.com/dictionary/phoenixity]. [[User:Heyandwhoa|Heyandwhoa]] ([[User talk:Heyandwhoa|talk]]) 22:12, 1 March 2024 (UTC)
* {{REEHelp|plait fog}} - UK expression for a difficult/impossible task - exists in Urban Dictionary in mispelled entry. also {{REEHelp|knit fog}} and {{REEHelp|plait sawdust}}
* {{REEHelp|pluritative}} Term in Mongolic linguistics
* {{REEHelp|polyglycoprotein}} and/or ''poly-glycoprotein'' — presumably a polymerised form of ''[[glycoprotein]]''.
* {{REEHelp|paradise-crow}} (bird)
* {{REEHelp|parisoma}} (bird)
* {{REEHelp|petronia}} (bird)
* {{REEHelp|peucedramus}} (bird)
* {{REEHelp|phainoptila}} (bird)
* {{REEHelp|picathartes}} (bird)
* {{REEHelp|ploughbill}} (bird)
* {{REEHelp|poo-uli}} (bird)
* {{REEHelp|prickletail}} (bird)
==Q==
{{English requested entries nav}}
* {{l|en|quail-thrush}} bird
==R==
{{English requested entries nav}}
* {{REEHelp|rejection therapy}} -SOP? [[User:Demonicallt|Demonicallt]] ([[User talk:Demonicallt|talk]]) 00:15, 14 January 2024 (UTC)
* {{REEHelp|Renner complex}} genetics term
* {{REEHelp|roofplasty}}
* {{REEHelp|rail-babbler}} (bird)
* {{REEHelp|rockchat}} (bird)
* {{REEHelp|rukia}} (bird)
* {{REEHelp|rushbird}} (bird)
==S==
{{English requested entries nav}}
* {{REEHelp|S/T}} abbreviation of [[self-titled]]; sometimes used in place of the name of a self-titled album --[[Special:Contributions/96.230.234.108|96.230.234.108]] 04:29, 1 March 2024 (UTC)
* {{REEHelp|salpornis}} (bird)
* {{REEHelp|sapphirewing}} (bird)
* {{REEHelp|sawwing}} (bird)
* {{REEHelp|saw-wing}} (bird)
* {{REEHelp|sericornis}} (bird)
* {{REEHelp|shieldbill}} (bird)
* {{REEHelp|shorttail}} (bird)
* {{REEHelp|shrike-babbler}} (bird)
* {{REEHelp|shrike-flycatcher}} (bird)
* {{REEHelp|shrike-tyrant}} (bird)
* {{REEHelp|shrike-vireo}} (bird)
* {{REEHelp|silky-flycatcher}} (bird)
* {{REEHelp|siva}} (bird)
* {{REEHelp|sparrow-weaver}} (bird)
* {{REEHelp|spot-throat}} (bird)
* {{REEHelp|steamerduck}} (bird)
* {{REEHelp|streamcreeper}} (bird)
* {{REEHelp|sunbird-asity}} (bird)
* {{REEHelp|sungem}} (bird)
* {{REEHelp|serviceware}} [https://english.stackexchange.com/questions/413445/what-is-the-definition-of-serviceware Thread on StackExchage]; used for example on [https://www.stopwaste.org/sites/default/files/WEB_CA_ReTh_Foodware_04.29.15_web.pdf][https://ecocycle.org/our-programs/zero-waste-colorado/plastic-pollution-reduction-act-overview/sustainable-serviceware/][https://ecology.wa.gov/waste-toxics/reducing-recycling-waste/plastics/2021-plastic-pollution-laws/food-serviceware][https://old.compostingcouncil.org/wp-content/uploads/2014/11/Compostable-Food-Serviceware-Quick-Guide.pdf][https://www.newtonma.gov/government/health-human-services/sustainable-food-beverage-serviceware-packaging-single-use-items-ordinance][https://www.portland.gov/code/17/103/310], see [[service]] + [[-ware]], as in [[tableware]]. Can also refer to service [[software]]: [https://ieeexplore.ieee.org/document/1452837]
* {{REEHelp|shotgun statement}}
* {{REEHelp|soundshell}} and/or {{REEHelp|sound shell}} - similar to [[bandshell]] - possibly predominantly Australia and New Zealand usage
* {{REEHelp|spandy}} - {{R:Merriam-Webster Online|spandy}} And mentioned in {{R:Etymonline|spandy}}
* {{REEHelp|squart}}
* {{REEHelp|sulfacarbamide}} — a chemical. <small>—DIV</small>
* {{REEHelp|superword}} - It's a thing that relates to computing I'm pretty sure. | I can't work it out, but it's complementary to {{m|en|subword}} in a sense that we may lack: seems to relate to the encoding of (human language) words into numbers that are manipulated with [[finite-state machine]]s. [[User:Equinox|Equinox]] [[User_talk:Equinox|◑]] 14:19, 29 February 2024 (UTC) | see [[Citations:superword]]
* {{REEHelp|Szlonzok}}, {{REEHelp|Szlonzokian}} See Tomasz Kamusella. 2004. ''The Szlonzokian Ethnolect in the Context of German and Polish Nationalisms'' (pp. 19–39). ''Studies in Ethnicity and Nationalism. No 1''. London: Association for the Study of Ethnicity and Nationalism. {{doi|10.1111/j.1754-9469.2004.tb00056.x}} [https://cadmus.eui.eu/bitstream/handle/1814/1351/HEC03-01.pdf The Szlonzoks and their Language: Between Germany, Poland and Szlonzokian Nationalism] -- '''Comment''': The historian Tomasz Kamusella has used the words [[Szlonzok]] = Upper Silesian, [[Slunzak]] = Teschen Silesian. They don't seem to have caught on beyond his own usage. [[User:Equinox|Equinox]] [[User_talk:Equinox|◑]] 18:27, 4 March 2024 (UTC)
* {{REEHelp|shits in giggles}} - reasonably common eggcorn these days of [[shits and giggles]]
==T==
{{English requested entries nav}}
*{{REEHelp|Tewahedo}} - Used in the names of the Oriental Orthodox Churches in Ethiopia and Eritrea. From Ge'ez {{m|gez|ተዋሕዶ|tr= täwaḥədo}}, meaning "united as one".
*{{REEHelp|trajectoid}} - Wikipedia has an article: [[w:trajectoid]]. - [[Citations:trajectoid]]
*{{REEHelp|Typen-Platten}} (or "Typen Platten") - a kind of microscope slide with diatoms mounted in a grid ([https://pixl8-cloud-rms.s3.eu-west-2.amazonaws.com/prod/public/021d78ea-fdf0-4663-b2fbe04a5424c0e8/Natures-smallest-glasshouses-visible-from-space.pdf], [https://zenodo.org/records/7778348], [https://hwpi.harvard.edu/diatoms/terry-overview]. [[:en:Wikisource:Page:Midland naturalist (IA midlandnaturalis01lond).pdf/220|Midland Naturalist, 1 p182]]) Originally German; marketed as "Möller's Typen-platten", after its inventor. <span class="vcard"><span class="fn">[[User:Pigsonthewing|Andy Mabbett]]</span> (<span class="nickname">Pigsonthewing</span>); [[User talk:Pigsonthewing|Talk to Andy]]; [[Special:Contributions/Pigsonthewing|Andy's edits]]</span> 15:31, 20 February 2024 (UTC)
*{{REEHelp|terlet}} non-standard pronunciation of "toilet" [https://boards.straightdope.com/t/warsh-yer-hands-after-you-use-the-terlet-what-accent/533247/11] [https://forum.wordreference.com/threads/terlet.2526618/]
* {{REEHelp|teretistris}} (bird)
* {{REEHelp|thirst bait}} - probably a synonym of {{m|en|thirst trap}}
* {{REEHelp|thrush-tanager}} (bird)
* {{REEHelp|tody-flycatcher}} (bird)
* {{REEHelp|tody-tyrant}} (bird)
* {{REEHelp|torrent-lark}} (bird)
* {{REEHelp|tyrant-manakin}} (bird)
* {{REEHelp|tent-trailer}}
* {{REEHelp|tonic-clonic}} - [[clonicotonic]]
* {{REEHelp|trailer tent}}
==U==
{{English requested entries nav}}
*{{REEHelp|underture}} — This neologism (a back-formed antonym to “overture”) has been used by Blood, Sweet and Tears on a 1968 album [[w:Child Is Father to the Man]] and a year later by the Who on [[w:Tommy (The Who album)|Tommy]].
* {{l|en|ula-ai-hawane}} bird
==V==
{{English requested entries nav}}
*{{REEHelp|vi coactus}}<br>"constrained by force", "having been forced", the [[signer]] was under [[duress]] (placed before [[signature]]), abbr: [[VC]], [[V.C.]] {{pedia|vi coactus}} Also see [[coercion]] (''law'').
*{{REEHelp|vividness effect}}
== W ==
{{English requested entries nav}}
* {{l|en|wagtail-tyrant}} bird
* {{l|en|warbler-finch}} bird
* {{l|en|wiretail}} bird
* {{l|en|woodhaunter}} bird
* {{l|en|woollyneck}} bird
* {{l|en|wren-babbler}} bird
* {{l|en|wren-spinetail}} bird
* {{l|en|wren-warbler}} bird
==X==
{{English requested entries nav}}
==Y==
{{English requested entries nav}}
* {{l|en|yellowbrow}} bird
* {{l|en|yellownape}} bird
==Z==
{{English requested entries nav}}
==Specialized jargon or slang==
===Military===
There are dictionaries of military slang which can confirm these, but at least one genuine use should be identified before a term is created.
<!--* [[airships]], Their (n.) - RAF speak — officers of [[Air Commodore]] rank and above. Float serenely at high altitude, buffeted by assorted winds and oblivious to the implications of, and confusion caused by, the edicts following their astral deliberations. Presumably in imitation of ''their [[worship]]s''. If citable the lemma would be at [[airship]]. 2 cites so far. [[User:DCDuring|DCDuring]] ([[User talk:DCDuring|talk]]) 02:08, 31 August 2020 (UTC)-->
* [[bennied]] - RAF speak - used during tour of Falkland Islands. To have to remain in FI after date due to leave, usually due to replacement unavailability. (Cf. [[Benny]] sense of Falkland Islander.)
* [[gardening]] - RAF speak- sowing mines in water from a low height
* [[garnish]]; the military sense, related to camouflaging, see ''e.g.'' [[commons:Page:"Garnish Nets Correctly" - NARA - 514018.tif]]
* [[hang up]] or [[hang-up]] or [[hangup]] - RAF speak - Bomb failed to release.
* [[Trident Board]] (USN SEAL examination panel)
* [[vegetable]] - RAF speak acoustic or magnetic mines
===Textiles===
These were originally added under the appropriate letters, but require similar specialized knowledge or research.
* [[bull denim]] - a 3x1 twill weave piece dyed fabric, made from coarse yarns. Weights can vary from 9 ozs/sq yard up to the standard 14 ozs/sq yard. Bull Denim is essentially a denim without indigo
* [[CC]] - Comments Client
* [[Classic CO]]- Dutch: ontwerp van een doorlopend dessin
* [[Ea]] - Elasthane
** [[elastane]]? —DIV ([[Special:Contributions/1.145.80.173|1.145.80.173]] 12:01, 25 July 2022 (UTC))
* [[loop tag]] - a bartack which is 'loose' in the middle
* [[moustache]] - abrasion of lines to imitate pre-worn garment (a.k.a Whiskers)
* [[open end spinning]] - a technology for creating yarn without using a spindle. This system is much less labour intensive and faster than [[ring spinning]]
* [[pro forma|P.I.]] or [[P:I:]] - Proforma Invoice
* [[proto]] - sample before SMS to see the effect and reaction to fabrics artworks and treatments
* [[R.E.]] or [[RE]] - Raw Essentials
* [[Single Jersey]] or [[single jersey]] - Single knit fabrics and jersey knits are light to medium weight fabrics with flat vertical ribs on the right side and dominant horizontal lines on the wrong side. Fabric stretches from 20 to 25% across the grain.
* [[SW]]- Sweat
* [[whiskers]]- abrasion of lines to imitate pre-worn garment (a.k.a Moustache)
===Abbreviations listed in the 1911 Encyclopedia Britannica===
====Abbreviated titles and designations====
[[A.R.I.B.A.]] Associate of the Royal Institute of British Architects.
[[B.LL.]] Bachelor of Laws.
[[C.I.E.]] Companion of the Order of the Indian Empire.
[[C.M.]] ''Chirurgiae Magister'', Master in Surgery.
[[C.M.G.]] Companion of St Michael and St George.
[[C.S.I.]] Companion of the Star of India.
[[D.Lit.]], [[Litt. D.]] Doctor of Literature.
[[D.S.W.]] Doctor of Social Work.
[[Ebor.]] ''Eboracensis'' of York.2
[[F.F.P.S.]] Fellow of the Faculty of Physicians and Surgeons (Glasgow)
[[F.G.S.]] Fellow of the Geological Society.
[[F.K.Q.C.P.I.]] Fellow of King and Queen's College of Physicians in Ireland.
[[F.L.S.]] Fellow of the Linnaean Society.
[[F.P.S.]] Fellow of the Philological Society.
[[F.R.A.S.]] Fellow of the Royal Astronomical Society.
[[F.R C.P.]] Fellow of the Royal College of Physicians.
[[F.R.C.P.E.]] Fellow of the Royal College of Physicians of Edinburgh.
[[F.R.C.S.]] Fellow of the Royal College of Surgeons.
[[F.R.G.S.]] Fellow of the Royal Geographical Society
[[F.R.H.S.]] Fellow of the Royal Horticultural Society
[[F.R.Hist.Soc.]] Fellow of the Royal Historical Society
[[F.R.I.B.A.]] Fellow of the Royal Institute of British Architects
[[F.R.S.]] Fellow of the [[w:Royal Society]]
[[F.R.S.A.]] Fellow of the Royal Society for the encouragement of Arts, Manufactures & Commerce
[[F.R.S.E.]] Fellow of the Royal Society of Edinburgh
[[F.R.S.L.]] Fellow of the [[w:Royal Society of Literature]]
[[F.S.A.]] Fellow of the [[w:Society of Antiquaries of London|Society of Antiquaries]]
[[F.S.S.]] Fellow of the Statistical Society
[[F.Z.S.]] Fellow of the Zoological Society
[[G.C.B.]] Knight Grand Cross of the Bath
[[G.C.H.]] Knight Grand Cross of Hanover
[[G.C.I.E.]] Knight Grand Commander of the Order of the Indian Empire
[[G.C.M.G.]] Knight Grand Cross of St Michael and St George
[[G.C.S.I.]] Knight Grand Commander of the Star of India
[[G.C.V.O.]] Knight Grand Commander of the Victorian Order
[[J.U.D.]] ''[[w:Juris utriusque Doctor]]'', Doctor of Civil and Canon Law
[[K.C.M.G.]] Knight Commander of St Michael and St George
[[K.C.S.I.]] Knight Commander of the Star of India
[[K.C.V.O.]] Knight Commander of the Victorian Order
[[L.A.H.]] Licentiate of the Apothecaries' Hall
[[L.C.C.]] London County Council, or Councillor
[[L.C.J.]] Lord Chief Justice
[[L.L.A.]] [[w:Lady Literate in Arts]]
[[LL.B.]] ''Legum Baccalaureus'', Bachelor of Laws
[[LL.D.]] ''Legum Doctor'', Doctor of Laws
[[L.R.C.P.]] Licentiate of the Royal College of Physicians
[[L.R.C.S.]] Licentiate of the Royal College of Surgeons
[[L.S.A.]] Licentiate of the Apothecaries' Society
[[M.Inst.C.E.]] Member of the Institute of Civil Engineers
[[M.R.C.P.]] Member of the Royal College of Physicians
[[M.R.C.S.]] Member of the Royal College of Surgeons
[[M.R.I.A.]] Member of the Royal Irish Academy
[[Mus.B.]] Bachelor of Music
[[Mus.D.]] Doctor of Music
[[M.V.O.]] Member of the Victorian Order
[[R. & I.]] ''Rex et Imperator''
[[Reg. Prof.]] Regius Professor
[[R.M.]] Royal Marines, Resident Magistrate
[[S.S.C.]] Solicitor before the Supreme Courts of Scotland
[[S.T.L.]] ''Sacrae Theologiae Licentiatus'', Licentiate of Sacred Theology
[[S.T.P.]] ''Sacrosanctae Theologiae Professor'', Professor of Sacred Theology
[[V.G.]] Vicar-General
[[V.S.]] Veterinary Surgeon
[[W.S.]] Writer to the Signet [in Scotland] Equivalent to Attorney
====Abbreviations denoting moneys, weights, and measures====
[[bar.]] barrel.
[[bus.]] bushel.
c. (or cub.) ft. &c. cubic foot,&c.
[[dr.]] drachm or dram.
[[na.]] nail.
[[po.]] pole.
[[q.]] ''quadrans'', farthing.
[[ro.]] rood.
====Miscellaneous abbreviations====
[[A.E.I.O.U.]] ''Austriae est imperare orbi universo'',<sup>5</sup>
or ''Alles Erdreich Ist Oesterreich Unterthan''.
[[A.H.]] ''Anno Hegirae'', In the year of the Hegira (the Islamic era).
[[C.]] or [[Cap.]] (''Caput''), Chapter.
[[Cr.]] Creditor.
[[curt.]] Current, the present month.
[[D.G.]] ''Dei gratia'', By the grace of God.
[[Dr.]] Debtor.
[[fec.]] ''Fecit'', He made (or did) it.
[[Fo.]] or [[Fol.]] Folio.
[[Inf.]] ''Infra'', Below.
[[k.t.l.]] Greek ''kai ta loipa'', Et caetera, and the rest.
[[L.]] or [[Lib.]] ''Liber'', Book.
[[Lon.]] or [[Long.]] Longitude.
[[Mem.]] ''Memento'', Remember, Memorandum.
[[O.S.B.]] ''Ordo Sancti Benedicti'' (Benedictines).
[[P.R.]] Prize-ring.
[[Q.]], [[Qu.]], or [[Qy.]] Query; Question.
[[q.d.]] ''Quasi dicat'', As if he should say: as much as to say.
[[q.s.]] or [[quant. suff.]] ''Quantum sufficit'', As much as is sufficient.
[[R.]] or [[@.]] ''Recipe'', Take.
[[S.D.U.K.]] Society for the Diffusion of Useful Knowledge.
[[sp.]] ''[[Sine prole]]'', Without offspring.
===Pet bird abbreviations===
Should be citable from Usenet.
See [https://web.archive.org/web/20060902035848/http://www.exoticbird.com/abbrev.html] for the list. (Was going to copy it here verbatim with links, but decided not to, since that might be a copyright violation.)
==References and notes==
''This section is meant to assist in the production of definitions by providing supporting citations. Wherever possible, please keep supporting evidence with the entries it is meant to be supporting.''
<references/>
gxvskl1fua0skoolqodvk0g78cwn3bk
වික්ෂනරි:RE:en
4
11438
235378
37174
2026-06-01T21:27:45Z
EmausBot
1976
Fixing double redirect from [[වික්ෂනරි:Requested entries (English)]] to [[වික්ෂනරි:Requested entries (ඉංග්රීසි)]]
235378
wikitext
text/x-wiki
#යළියොමුව [[වික්ෂනරි:Requested entries (ඉංග්රීසි)]]
fzli65cqprjje2el55z5ywuzz7j4gz0
Module talk:number list/data/yrk-tun
829
13076
235444
40636
2026-06-02T10:33:12Z
Lee
19
Lee විසින් [[Module talk:number list/data/yrk]] සිට [[Module talk:number list/data/yrk-tun]] වෙත පිටුව ගෙන යන ලදී
40636
wikitext
text/x-wiki
{| class="wikitable"
! oldid || date/time || username || edit summary
|----
| 73157807 || 2023-05-24T10:06:59Z || Thadh || <nowiki></nowiki>
|----
| 73157772 || 2023-05-24T09:57:20Z || Thadh || <nowiki>Created page with "local export = {numbers = {}} local numbers = {} export.numbers = numbers numbers[1] = { cardinal = "ӈобˮ", ordinal = "нюртей", } numbers[2] = { cardinal = "сидя", ordinal = "нябимдей", fractional = "пеля", } numbers[3] = { cardinal = "няхӑрˮ", ordinal = "няхӑрамдэй", fractional = "няхӑрамдоˮма" } numbers[4] = { cardinal = "тет", ordinal = "тетимдей", fractional = "тетимдоˮма", }..."</nowiki>
|}
glqzh8cfinc3lfpdi9t4rg1jjoxy5dp
සැකිල්ල:archaic form of
10
14010
235398
205896
2026-06-02T04:31:47Z
Lee
19
235398
wikitext
text/x-wiki
{{ {{#if:{{{lang|}}}|check deprecated lang param usage|no deprecated lang param usage}}|lang={{{lang|}}}|<!--
-->{{#invoke:form of/templates|form_of_t| යන යෙදුමේ පෞරාණික රූපාකාරයකි|cat=archaic forms|withcap=1|withdot=1}}<!--
-->}}<!--
--><noinclude>{{documentation}}[[ප්රවර්ගය:රූපාකාර සැකිලි]]</noinclude>
mcrk0w6g2gv3nrjhsbcttrcm7baeu6t
235399
235398
2026-06-02T04:32:57Z
Lee
19
[[paradigma]], [[:ප්රවර්ගය:ඉංග්රීසි archaic forms]] සිට [[:ප්රවර්ගය:ඉංග්රීසි පෞරාණික රූපාකාර]] වෙතට යොමු කිරීම
235399
wikitext
text/x-wiki
{{ {{#if:{{{lang|}}}|check deprecated lang param usage|no deprecated lang param usage}}|lang={{{lang|}}}|<!--
-->{{#invoke:form of/templates|form_of_t| යන යෙදුමේ පෞරාණික රූපාකාරයකි|cat=පෞරාණික රූපාකාර|withcap=1|withdot=1}}<!--
-->}}<!--
--><noinclude>{{documentation}}[[ප්රවර්ගය:රූපාකාර සැකිලි]]</noinclude>
cpl9l9b48rfvh4ozpyufjmdfbiyjgud
ප්රවර්ගය:භාෂාව අනුව අභාවයට ගිය රූපාකාර
14
14019
235328
199991
2026-06-01T14:21:43Z
Lee
19
Lee විසින් [[ප්රවර්ගය:භාෂාව අනුව Obsolete forms]] සිට [[ප්රවර්ගය:භාෂාව අනුව Obsolete රූපාකාර]] වෙත පිටුව ගෙන යන ලදී
42934
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235331
235328
2026-06-01T14:27:05Z
Lee
19
Lee විසින් [[ප්රවර්ගය:භාෂාව අනුව Obsolete රූපාකාර]] සිට [[ප්රවර්ගය:භාෂාව අනුව අභාවයට ගිය රූපාකාර]] වෙත පිටුව ගෙන යන ලදී
42934
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Module:etymon
828
112710
235416
229703
2026-05-29T21:44:55Z
en>Fenakhay
0
235416
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
]=]
local export = {}
local etymon_data_module = "Module:etymon/data"
local etymon_text_module = "Module:etymon/text"
local etymon_tree_module = "Module:etymon/tree"
local etymon_categories_module = "Module:etymon/categories"
local etymon_descendants_module = "Module:etymon/descendants"
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,
max_depth_reached = 0,
total_nodes = 0,
language_count = {},
toplevel_keyword_stats = {},
warnings = {},
}
local loader = require("Module:module loader")
local M = loader.init({
require = {
data = etymon_data_module,
tree = etymon_tree_module,
text = etymon_text_module,
categories = etymon_categories_module,
descendants = etymon_descendants_module,
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",
track = "Module:debug/track",
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
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
-- 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
-- Centralized term formatting: handles suppress_term, unknown_term, 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
-- 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 = { keywords = { "affix", "surf", "univerbation" } } },
conj = {}, -- conjunction for alternatives: "and", "or", "and/or", etc.
g = { restrict = { keywords = { "nominalization" } } },
}
-- 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 = { keywords = { "affix", "surf", "afeq" } } },
postype = {},
bor = { type = "boolean", restrict = { keywords = { "affix", "surf" } } },
slbor = { type = "boolean", restrict = { keywords = { "affix", "surf" } } },
lbor = { type = "boolean", restrict = { keywords = { "affix", "surf" } } },
}
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 and 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
-- 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,
}
-- Validate modifiers against restrictions
EtymonParser.check_modifier_restrictions(modifiers, canonical_keyword, EtymonParser.keyword_param_mods)
return canonical_keyword, modifiers
end
function EtymonParser.parse_balanced_segments(str)
local segments = {}
local current = ""
local depth = 0
local i = 1
while i <= #str do
local char = str:sub(i, i)
if char == "<" then
if depth == 0 and current ~= "" then
table.insert(segments, current)
current = ""
end
depth = depth + 1
current = current .. char
elseif char == ">" then
current = current .. char
depth = depth - 1
if depth == 0 then
table.insert(segments, current)
current = ""
elseif depth < 0 then
error("Unbalanced brackets in etymon: unexpected '>'")
end
else
current = current .. char
end
i = i + 1
end
if depth ~= 0 then
error("Unbalanced brackets in etymon: missing '>'")
end
if current ~= "" then
table.insert(segments, current)
end
return segments
end
function EtymonParser.parse_inline_ety(ety_string, context_lang)
local segments = EtymonParser.parse_balanced_segments(ety_string)
if #segments == 0 then
error("Empty inline etymology")
end
local keyword = M.string_utilities.trim(segments[1])
if not is_keyword(keyword, true) then
error("Invalid keyword '" .. keyword .. "' in inline etymology <ety:" .. keyword .. "...>")
end
local args = { context_lang:getCode(), normalize_keyword(get_canonical_keyword(keyword)) }
for i = 2, #segments do
local segment = segments[i]
if segment:sub(1, 1) == "<" and segment:sub(-1) == ">" then
local inner = segment:sub(2, -2)
if inner ~= "" then
table.insert(args, inner)
end
elseif is_keyword(segment, true) then
-- Handle keywords that appear between bracketed segments
table.insert(args, normalize_keyword(get_canonical_keyword(get_keyword(segment, true))))
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
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
if 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 == "")
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 etymons_in_group = {}
local keywords = M.data.keywords
local function checkGroup()
if keywords[current_keyword] and keywords[current_keyword].is_group and current_keyword ~= "affix" and current_keyword ~= "surf" and current_keyword ~= "afeq" and current_keyword ~= "univerbation" and #etymons_in_group <= 1 then
error("Detected `:" .. current_keyword .. "` group with fewer than two etymons.")
end
etymons_in_group = {}
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
error("Invalid keyword '" .. param .. "'. Did you mean a valid keyword like ':bor', ':inh', etc.?")
elseif is_keyword(param) then
checkGroup()
current_keyword = get_canonical_keyword(get_keyword(param))
else
local etymon_data = EtymonParser.parse_etymon(param, lang)
if etymon_data then
table.insert(etymons_in_group, param)
local param_lang = etymon_data.lang
if etymon_data.is_family and current_keyword == "inherited" then
error("`:inh` does not support family codes; use a specific language.")
end
if etymon_data.is_family and not etymon_data.suppress_term then
error("Family codes require suppressed term (use family:-).")
end
if current_keyword == "from" and param_lang:getFullCode() ~= lang:getFullCode() then
error("`:from` is for same-language derivation, but language does not match. " ..
"Expected '" .. lang:getFullCode() .. "', got '" .. param_lang:getFullCode() .. "'.")
elseif current_keyword == "inherited" then
M.etymology.check_ancestor(lang, param_lang)
end
-- 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(etymons_in_group, param)
end
end
end
checkGroup()
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 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
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
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
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
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
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
-- 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)
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
warn_mismatched_explicit_id(page, norm_lang, base_key, etymon_data.id)
end
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
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
return __state.cached_etymon_args[matched_key], __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 "*"
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
return __state.single_etymons[base_key], __state.cached_etymon_pages[base_key .. ":" .. only_id], nil, descendants_check
elseif count > 1 then
warn_ambiguous_etymon_link(page, norm_lang, ids, is_toplevel)
return M.data.STATUS.AMBIGUOUS, nil, nil, nil
else
return M.data.STATUS.MISSING, nil, nil, nil
end
end
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
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
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
-- It's a keyword, check if visible in tree (invisible "all" or "tree" = hidden in tree)
local keyword_info = keywords[keyword_base]
local inv = keyword_info.invisible
if not (inv == "all" or inv == true or inv == "tree") 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
-- Helper to track keyword usage at top level
local function track_keyword_usage(keyword, target_lang, source_lang)
if not is_toplevel then return end
if not __state.toplevel_keyword_stats[keyword] then
__state.toplevel_keyword_stats[keyword] = {
count = 0,
target_langs = {},
source_langs = {},
}
end
local keyword_data = __state.toplevel_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
local function ensure_container()
if not current_container or current_container.keyword ~= current_keyword then
current_container = {
keyword = current_keyword,
keyword_info = M.data.keywords[current_keyword],
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 = {}
for k, v in pairs(M.data.keywords[current_keyword]) do current_container.keyword_info[k] = v end
current_container.keyword_info.text = labels.text
current_container.keyword_info.phrase = labels.phrase
end
end
end
for i = 2, #args do
local param = args[i]
if is_keyword(param) then
local keyword, modifiers = EtymonParser.parse_keyword_modifiers(param)
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
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, lang)
if etymon_data then
-- Track keyword usage at top level
track_keyword_usage(current_keyword, lang, etymon_data.lang)
local term_node = {}
-- Handle suppress_term (-) and unknown_term (empty) directly
if etymon_data.suppress_term or etymon_data.unknown_term then
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
term_node.suppress_term = etymon_data.suppress_term
term_node.unknown_term = etymon_data.unknown_term
term_node.is_family = etymon_data.is_family
term_node.is_uncertain = etymon_data.unc
term_node.ref = etymon_data.ref
term_node.t = etymon_data.t
term_node.tr = etymon_data.tr
term_node.ts = etymon_data.ts
term_node.alt = etymon_data.alt
term_node.g = etymon_data.g
term_node.pos = etymon_data.pos
term_node.ng = etymon_data.ng
term_node.lit = etymon_data.lit
term_node.q = etymon_data.q
term_node.qq = etymon_data.qq
term_node.l = etymon_data.l
term_node.ll = etymon_data.ll
else
-- Regular term: fetch arguments from page
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
track_keyword_usage(inline_keyword, etymon_data.lang, inline_etymon.lang)
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
ensure_container()
-- Check if current keyword has no_child_categories - if so, stop recursion
local keyword_info = current_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.id = etymon_data.id
term_node.etymon_id = resolved_etymon_id -- The actual etymon id when resolved via senseid
term_node.t = etymon_data.t
term_node.tr = etymon_data.tr
term_node.ts = etymon_data.ts
term_node.pos = etymon_data.pos
term_node.alt = etymon_data.alt
term_node.g = etymon_data.g
term_node.ng = etymon_data.ng
term_node.ref = etymon_data.ref
term_node.is_uncertain = etymon_data.unc
term_node.override = etymon_data.override
term_node.page_of = page_of
term_node.aftype = etymon_data.aftype
term_node.postype = etymon_data.postype
term_node.bor = etymon_data.bor
term_node.lbor = etymon_data.lbor
term_node.slbor = etymon_data.slbor
term_node.lit = etymon_data.lit
term_node.is_family = etymon_data.is_family
term_node.q = etymon_data.q
term_node.qq = etymon_data.qq
term_node.l = etymon_data.l
term_node.ll = etymon_data.ll
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(current_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
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
local function track_title_pagename_mismatch_after_strip(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
-- 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()
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)
-- 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
track_title_pagename_mismatch_after_strip(lang)
end
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 rfe = args.rfe
local page_data = Util.get_page_data()
if not title then
title = page_data.pagename
if page_data.namespace == "Reconstruction" then title = "*" .. title end
end
local entry_pagename = page_data.pagename
if page_data.namespace == "Reconstruction" then
entry_pagename = "*" .. entry_pagename
end
if lang:stripDiacritics(M.links.remove_links(title)) ~= lang:stripDiacritics(M.links.remove_links(entry_pagename)) then
track_title_pagename_mismatch_after_strip(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:getCanonicalName()
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
local ety_data_tree = export.get_tree(lang, title, etymon_args, {
validate = true,
pos = args.pos,
id = id,
json = args.json,
})
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.etydate = M.etydate.format_etydate(etydate_args, { omit_refs = true })
if parsed_etydate.ref and #parsed_etydate.ref > 0 then
ety_data_tree.etydate_refs = parsed_etydate.ref
end
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
-- Check if there are any visible children in tree (invisible "all" or "tree" = hidden in tree)
local has_visible_children = false
for _, child in ipairs(ety_data_tree.children or {}) do
local child_keyword_info = child.keyword_info
local inv = child_keyword_info and child_keyword_info.invisible
if not (inv == "all" or inv == true or inv == "tree") then
has_visible_children = true
break
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)
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
table.insert(output, M.text.render({
data_tree = ety_data_tree,
format_term_func = Util.format_term,
max_depth = max_depth,
stop_at_blue_link = stop_at_blue_link,
curr_page = page_data.pagename,
nodot = args.nodot,
stop_at_lang = stop_at_lang,
stop_at_lang_or_bluelink = stop_at_lang_or_bluelink,
}))
end
if rfe then
local rfe_param_mods = {
nocat = { type = "boolean" },
sort = {},
y = {},
m = {},
fragment = {},
section = {},
box = { type = "boolean" },
noes = { type = "boolean" },
}
local function generate_rfe_obj(rfe_text)
-- Check if it's a boolean true value
if M.yesno(rfe_text, false) then
return { is_boolean = true }
else
return { text = rfe_text }
end
end
local rfe_with_defaults = Util.add_boolean_defaults(rfe, rfe_param_mods)
local parsed_rfe = M.parse_utilities.parse_inline_modifiers(rfe_with_defaults, {
param_mods = rfe_param_mods,
generate_obj = generate_rfe_obj
})
local rfe_args = {
[1] = lang:getCode(),
nocat = parsed_rfe.nocat,
sort = parsed_rfe.sort,
y = parsed_rfe.y,
m = parsed_rfe.m,
fragment = parsed_rfe.fragment,
section = parsed_rfe.section,
box = parsed_rfe.box,
noes = parsed_rfe.noes,
}
if not parsed_rfe.is_boolean then
rfe_args[2] = parsed_rfe.text
end
table.insert(output, frame:expandTemplate({
title = "rfe",
args = rfe_args
}))
end
if Util.is_content_page() and __state.max_depth_reached > 0 then
local lang_code = lang:getCode()
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" }
}
track_ranges("depth", __state.max_depth_reached, depth_ranges, lang_code)
track_ranges("nodes", __state.total_nodes, node_ranges, lang_code)
local unique_languages = 0
for _ in pairs(__state.language_count) do
unique_languages = unique_languages + 1
end
track_ranges("unique-languages", unique_languages, language_ranges, lang_code)
if __state.total_nodes == __state.max_depth_reached + 1 then
track_ranges("linear-depth", __state.max_depth_reached, depth_ranges, lang_code)
end
end
local categories = {}
if Util.is_content_page() then
local should_suppress_categories = lang_exc and lang_exc.suppress_categories
if not should_suppress_categories and not args.nocat then
categories = M.categories.render({
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,
})
end
local target_lang_code = lang:getCode()
for keyword, keyword_data in pairs(__state.toplevel_keyword_stats) do
-- Track keyword globally
M.track("etymon/keyword/" .. keyword)
-- Track keyword per target language
M.track("etymon/keyword/" .. keyword .. "/target/" .. target_lang_code)
-- Track keyword per source language
for source_code, count in pairs(keyword_data.source_langs) do
M.track("etymon/keyword/" .. keyword .. "/source/" .. source_code)
-- Track keyword per target+source combination
M.track("etymon/keyword/" .. keyword .. "/target/" .. target_lang_code .. "/source/" .. source_code)
end
end
if tree then
table.insert(categories, "Pages with etymology trees")
table.insert(categories, lang:getCanonicalName() .. " entries with etymology trees")
end
if text then table.insert(categories, lang:getCanonicalName() .. " entries with etymology texts") end
if args.exnihilo then table.insert(categories, lang:getCanonicalName() .. " terms coined ex nihilo") end
if __state.toplevel_has_inline_etymology then
table.insert(categories, "Pages with inline etymon for redlinks")
end
if __state.toplevel_redundant_etymology then
table.insert(categories, "Pages with redundant inline etymon")
end
if __state.toplevel_idless_etymon then
table.insert(categories, "Pages using etymon with no ID")
end
if __state.has_mismatched_id then
table.insert(categories, lang:getCanonicalName() .. " entries referencing etymons with mismatched IDs")
end
if __state.linked_page_multiple_etymons_idless then
table.insert(categories,
lang:getCanonicalName() .. " entries referencing pages with multiple etymons missing IDs")
end
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
eo91z4122alt9viwz3w414rij793ha8
235417
235416
2026-06-02T04:50:46Z
Lee
19
[[:en:Module:etymon]] වෙතින් එක් සංශෝධනයක්
235416
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
]=]
local export = {}
local etymon_data_module = "Module:etymon/data"
local etymon_text_module = "Module:etymon/text"
local etymon_tree_module = "Module:etymon/tree"
local etymon_categories_module = "Module:etymon/categories"
local etymon_descendants_module = "Module:etymon/descendants"
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,
max_depth_reached = 0,
total_nodes = 0,
language_count = {},
toplevel_keyword_stats = {},
warnings = {},
}
local loader = require("Module:module loader")
local M = loader.init({
require = {
data = etymon_data_module,
tree = etymon_tree_module,
text = etymon_text_module,
categories = etymon_categories_module,
descendants = etymon_descendants_module,
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",
track = "Module:debug/track",
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
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
-- 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
-- Centralized term formatting: handles suppress_term, unknown_term, 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
-- 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 = { keywords = { "affix", "surf", "univerbation" } } },
conj = {}, -- conjunction for alternatives: "and", "or", "and/or", etc.
g = { restrict = { keywords = { "nominalization" } } },
}
-- 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 = { keywords = { "affix", "surf", "afeq" } } },
postype = {},
bor = { type = "boolean", restrict = { keywords = { "affix", "surf" } } },
slbor = { type = "boolean", restrict = { keywords = { "affix", "surf" } } },
lbor = { type = "boolean", restrict = { keywords = { "affix", "surf" } } },
}
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 and 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
-- 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,
}
-- Validate modifiers against restrictions
EtymonParser.check_modifier_restrictions(modifiers, canonical_keyword, EtymonParser.keyword_param_mods)
return canonical_keyword, modifiers
end
function EtymonParser.parse_balanced_segments(str)
local segments = {}
local current = ""
local depth = 0
local i = 1
while i <= #str do
local char = str:sub(i, i)
if char == "<" then
if depth == 0 and current ~= "" then
table.insert(segments, current)
current = ""
end
depth = depth + 1
current = current .. char
elseif char == ">" then
current = current .. char
depth = depth - 1
if depth == 0 then
table.insert(segments, current)
current = ""
elseif depth < 0 then
error("Unbalanced brackets in etymon: unexpected '>'")
end
else
current = current .. char
end
i = i + 1
end
if depth ~= 0 then
error("Unbalanced brackets in etymon: missing '>'")
end
if current ~= "" then
table.insert(segments, current)
end
return segments
end
function EtymonParser.parse_inline_ety(ety_string, context_lang)
local segments = EtymonParser.parse_balanced_segments(ety_string)
if #segments == 0 then
error("Empty inline etymology")
end
local keyword = M.string_utilities.trim(segments[1])
if not is_keyword(keyword, true) then
error("Invalid keyword '" .. keyword .. "' in inline etymology <ety:" .. keyword .. "...>")
end
local args = { context_lang:getCode(), normalize_keyword(get_canonical_keyword(keyword)) }
for i = 2, #segments do
local segment = segments[i]
if segment:sub(1, 1) == "<" and segment:sub(-1) == ">" then
local inner = segment:sub(2, -2)
if inner ~= "" then
table.insert(args, inner)
end
elseif is_keyword(segment, true) then
-- Handle keywords that appear between bracketed segments
table.insert(args, normalize_keyword(get_canonical_keyword(get_keyword(segment, true))))
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
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
if 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 == "")
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 etymons_in_group = {}
local keywords = M.data.keywords
local function checkGroup()
if keywords[current_keyword] and keywords[current_keyword].is_group and current_keyword ~= "affix" and current_keyword ~= "surf" and current_keyword ~= "afeq" and current_keyword ~= "univerbation" and #etymons_in_group <= 1 then
error("Detected `:" .. current_keyword .. "` group with fewer than two etymons.")
end
etymons_in_group = {}
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
error("Invalid keyword '" .. param .. "'. Did you mean a valid keyword like ':bor', ':inh', etc.?")
elseif is_keyword(param) then
checkGroup()
current_keyword = get_canonical_keyword(get_keyword(param))
else
local etymon_data = EtymonParser.parse_etymon(param, lang)
if etymon_data then
table.insert(etymons_in_group, param)
local param_lang = etymon_data.lang
if etymon_data.is_family and current_keyword == "inherited" then
error("`:inh` does not support family codes; use a specific language.")
end
if etymon_data.is_family and not etymon_data.suppress_term then
error("Family codes require suppressed term (use family:-).")
end
if current_keyword == "from" and param_lang:getFullCode() ~= lang:getFullCode() then
error("`:from` is for same-language derivation, but language does not match. " ..
"Expected '" .. lang:getFullCode() .. "', got '" .. param_lang:getFullCode() .. "'.")
elseif current_keyword == "inherited" then
M.etymology.check_ancestor(lang, param_lang)
end
-- 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(etymons_in_group, param)
end
end
end
checkGroup()
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 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
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
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
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
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
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
-- 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)
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
warn_mismatched_explicit_id(page, norm_lang, base_key, etymon_data.id)
end
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
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
return __state.cached_etymon_args[matched_key], __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 "*"
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
return __state.single_etymons[base_key], __state.cached_etymon_pages[base_key .. ":" .. only_id], nil, descendants_check
elseif count > 1 then
warn_ambiguous_etymon_link(page, norm_lang, ids, is_toplevel)
return M.data.STATUS.AMBIGUOUS, nil, nil, nil
else
return M.data.STATUS.MISSING, nil, nil, nil
end
end
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
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
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
-- It's a keyword, check if visible in tree (invisible "all" or "tree" = hidden in tree)
local keyword_info = keywords[keyword_base]
local inv = keyword_info.invisible
if not (inv == "all" or inv == true or inv == "tree") 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
-- Helper to track keyword usage at top level
local function track_keyword_usage(keyword, target_lang, source_lang)
if not is_toplevel then return end
if not __state.toplevel_keyword_stats[keyword] then
__state.toplevel_keyword_stats[keyword] = {
count = 0,
target_langs = {},
source_langs = {},
}
end
local keyword_data = __state.toplevel_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
local function ensure_container()
if not current_container or current_container.keyword ~= current_keyword then
current_container = {
keyword = current_keyword,
keyword_info = M.data.keywords[current_keyword],
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 = {}
for k, v in pairs(M.data.keywords[current_keyword]) do current_container.keyword_info[k] = v end
current_container.keyword_info.text = labels.text
current_container.keyword_info.phrase = labels.phrase
end
end
end
for i = 2, #args do
local param = args[i]
if is_keyword(param) then
local keyword, modifiers = EtymonParser.parse_keyword_modifiers(param)
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
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, lang)
if etymon_data then
-- Track keyword usage at top level
track_keyword_usage(current_keyword, lang, etymon_data.lang)
local term_node = {}
-- Handle suppress_term (-) and unknown_term (empty) directly
if etymon_data.suppress_term or etymon_data.unknown_term then
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
term_node.suppress_term = etymon_data.suppress_term
term_node.unknown_term = etymon_data.unknown_term
term_node.is_family = etymon_data.is_family
term_node.is_uncertain = etymon_data.unc
term_node.ref = etymon_data.ref
term_node.t = etymon_data.t
term_node.tr = etymon_data.tr
term_node.ts = etymon_data.ts
term_node.alt = etymon_data.alt
term_node.g = etymon_data.g
term_node.pos = etymon_data.pos
term_node.ng = etymon_data.ng
term_node.lit = etymon_data.lit
term_node.q = etymon_data.q
term_node.qq = etymon_data.qq
term_node.l = etymon_data.l
term_node.ll = etymon_data.ll
else
-- Regular term: fetch arguments from page
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
track_keyword_usage(inline_keyword, etymon_data.lang, inline_etymon.lang)
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
ensure_container()
-- Check if current keyword has no_child_categories - if so, stop recursion
local keyword_info = current_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.id = etymon_data.id
term_node.etymon_id = resolved_etymon_id -- The actual etymon id when resolved via senseid
term_node.t = etymon_data.t
term_node.tr = etymon_data.tr
term_node.ts = etymon_data.ts
term_node.pos = etymon_data.pos
term_node.alt = etymon_data.alt
term_node.g = etymon_data.g
term_node.ng = etymon_data.ng
term_node.ref = etymon_data.ref
term_node.is_uncertain = etymon_data.unc
term_node.override = etymon_data.override
term_node.page_of = page_of
term_node.aftype = etymon_data.aftype
term_node.postype = etymon_data.postype
term_node.bor = etymon_data.bor
term_node.lbor = etymon_data.lbor
term_node.slbor = etymon_data.slbor
term_node.lit = etymon_data.lit
term_node.is_family = etymon_data.is_family
term_node.q = etymon_data.q
term_node.qq = etymon_data.qq
term_node.l = etymon_data.l
term_node.ll = etymon_data.ll
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(current_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
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
local function track_title_pagename_mismatch_after_strip(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
-- 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()
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)
-- 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
track_title_pagename_mismatch_after_strip(lang)
end
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 rfe = args.rfe
local page_data = Util.get_page_data()
if not title then
title = page_data.pagename
if page_data.namespace == "Reconstruction" then title = "*" .. title end
end
local entry_pagename = page_data.pagename
if page_data.namespace == "Reconstruction" then
entry_pagename = "*" .. entry_pagename
end
if lang:stripDiacritics(M.links.remove_links(title)) ~= lang:stripDiacritics(M.links.remove_links(entry_pagename)) then
track_title_pagename_mismatch_after_strip(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:getCanonicalName()
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
local ety_data_tree = export.get_tree(lang, title, etymon_args, {
validate = true,
pos = args.pos,
id = id,
json = args.json,
})
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.etydate = M.etydate.format_etydate(etydate_args, { omit_refs = true })
if parsed_etydate.ref and #parsed_etydate.ref > 0 then
ety_data_tree.etydate_refs = parsed_etydate.ref
end
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
-- Check if there are any visible children in tree (invisible "all" or "tree" = hidden in tree)
local has_visible_children = false
for _, child in ipairs(ety_data_tree.children or {}) do
local child_keyword_info = child.keyword_info
local inv = child_keyword_info and child_keyword_info.invisible
if not (inv == "all" or inv == true or inv == "tree") then
has_visible_children = true
break
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)
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
table.insert(output, M.text.render({
data_tree = ety_data_tree,
format_term_func = Util.format_term,
max_depth = max_depth,
stop_at_blue_link = stop_at_blue_link,
curr_page = page_data.pagename,
nodot = args.nodot,
stop_at_lang = stop_at_lang,
stop_at_lang_or_bluelink = stop_at_lang_or_bluelink,
}))
end
if rfe then
local rfe_param_mods = {
nocat = { type = "boolean" },
sort = {},
y = {},
m = {},
fragment = {},
section = {},
box = { type = "boolean" },
noes = { type = "boolean" },
}
local function generate_rfe_obj(rfe_text)
-- Check if it's a boolean true value
if M.yesno(rfe_text, false) then
return { is_boolean = true }
else
return { text = rfe_text }
end
end
local rfe_with_defaults = Util.add_boolean_defaults(rfe, rfe_param_mods)
local parsed_rfe = M.parse_utilities.parse_inline_modifiers(rfe_with_defaults, {
param_mods = rfe_param_mods,
generate_obj = generate_rfe_obj
})
local rfe_args = {
[1] = lang:getCode(),
nocat = parsed_rfe.nocat,
sort = parsed_rfe.sort,
y = parsed_rfe.y,
m = parsed_rfe.m,
fragment = parsed_rfe.fragment,
section = parsed_rfe.section,
box = parsed_rfe.box,
noes = parsed_rfe.noes,
}
if not parsed_rfe.is_boolean then
rfe_args[2] = parsed_rfe.text
end
table.insert(output, frame:expandTemplate({
title = "rfe",
args = rfe_args
}))
end
if Util.is_content_page() and __state.max_depth_reached > 0 then
local lang_code = lang:getCode()
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" }
}
track_ranges("depth", __state.max_depth_reached, depth_ranges, lang_code)
track_ranges("nodes", __state.total_nodes, node_ranges, lang_code)
local unique_languages = 0
for _ in pairs(__state.language_count) do
unique_languages = unique_languages + 1
end
track_ranges("unique-languages", unique_languages, language_ranges, lang_code)
if __state.total_nodes == __state.max_depth_reached + 1 then
track_ranges("linear-depth", __state.max_depth_reached, depth_ranges, lang_code)
end
end
local categories = {}
if Util.is_content_page() then
local should_suppress_categories = lang_exc and lang_exc.suppress_categories
if not should_suppress_categories and not args.nocat then
categories = M.categories.render({
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,
})
end
local target_lang_code = lang:getCode()
for keyword, keyword_data in pairs(__state.toplevel_keyword_stats) do
-- Track keyword globally
M.track("etymon/keyword/" .. keyword)
-- Track keyword per target language
M.track("etymon/keyword/" .. keyword .. "/target/" .. target_lang_code)
-- Track keyword per source language
for source_code, count in pairs(keyword_data.source_langs) do
M.track("etymon/keyword/" .. keyword .. "/source/" .. source_code)
-- Track keyword per target+source combination
M.track("etymon/keyword/" .. keyword .. "/target/" .. target_lang_code .. "/source/" .. source_code)
end
end
if tree then
table.insert(categories, "Pages with etymology trees")
table.insert(categories, lang:getCanonicalName() .. " entries with etymology trees")
end
if text then table.insert(categories, lang:getCanonicalName() .. " entries with etymology texts") end
if args.exnihilo then table.insert(categories, lang:getCanonicalName() .. " terms coined ex nihilo") end
if __state.toplevel_has_inline_etymology then
table.insert(categories, "Pages with inline etymon for redlinks")
end
if __state.toplevel_redundant_etymology then
table.insert(categories, "Pages with redundant inline etymon")
end
if __state.toplevel_idless_etymon then
table.insert(categories, "Pages using etymon with no ID")
end
if __state.has_mismatched_id then
table.insert(categories, lang:getCanonicalName() .. " entries referencing etymons with mismatched IDs")
end
if __state.linked_page_multiple_etymons_idless then
table.insert(categories,
lang:getCanonicalName() .. " entries referencing pages with multiple etymons missing IDs")
end
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
eo91z4122alt9viwz3w414rij793ha8
235418
235417
2026-06-02T04:51:57Z
Lee
19
පැරණි සංස්කරණයකින් ගත් කොටස්...
235418
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
]=]
local export = {}
local etymon_data_module = "Module:etymon/data"
local etymon_text_module = "Module:etymon/text"
local etymon_tree_module = "Module:etymon/tree"
local etymon_categories_module = "Module:etymon/categories"
local etymon_descendants_module = "Module:etymon/descendants"
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,
max_depth_reached = 0,
total_nodes = 0,
language_count = {},
toplevel_keyword_stats = {},
warnings = {},
}
local loader = require("Module:module loader")
local M = loader.init({
require = {
data = etymon_data_module,
tree = etymon_tree_module,
text = etymon_text_module,
categories = etymon_categories_module,
descendants = etymon_descendants_module,
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",
track = "Module:debug/track",
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
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
-- 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
-- Centralized term formatting: handles suppress_term, unknown_term, 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
-- 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 = { keywords = { "affix", "surf", "univerbation" } } },
conj = {}, -- conjunction for alternatives: "and", "or", "and/or", etc.
g = { restrict = { keywords = { "nominalization" } } },
}
-- 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 = { keywords = { "affix", "surf", "afeq" } } },
postype = {},
bor = { type = "boolean", restrict = { keywords = { "affix", "surf" } } },
slbor = { type = "boolean", restrict = { keywords = { "affix", "surf" } } },
lbor = { type = "boolean", restrict = { keywords = { "affix", "surf" } } },
}
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 and 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
-- 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,
}
-- Validate modifiers against restrictions
EtymonParser.check_modifier_restrictions(modifiers, canonical_keyword, EtymonParser.keyword_param_mods)
return canonical_keyword, modifiers
end
function EtymonParser.parse_balanced_segments(str)
local segments = {}
local current = ""
local depth = 0
local i = 1
while i <= #str do
local char = str:sub(i, i)
if char == "<" then
if depth == 0 and current ~= "" then
table.insert(segments, current)
current = ""
end
depth = depth + 1
current = current .. char
elseif char == ">" then
current = current .. char
depth = depth - 1
if depth == 0 then
table.insert(segments, current)
current = ""
elseif depth < 0 then
error("Unbalanced brackets in etymon: unexpected '>'")
end
else
current = current .. char
end
i = i + 1
end
if depth ~= 0 then
error("Unbalanced brackets in etymon: missing '>'")
end
if current ~= "" then
table.insert(segments, current)
end
return segments
end
function EtymonParser.parse_inline_ety(ety_string, context_lang)
local segments = EtymonParser.parse_balanced_segments(ety_string)
if #segments == 0 then
error("Empty inline etymology")
end
local keyword = M.string_utilities.trim(segments[1])
if not is_keyword(keyword, true) then
error("Invalid keyword '" .. keyword .. "' in inline etymology <ety:" .. keyword .. "...>")
end
local args = { context_lang:getCode(), normalize_keyword(get_canonical_keyword(keyword)) }
for i = 2, #segments do
local segment = segments[i]
if segment:sub(1, 1) == "<" and segment:sub(-1) == ">" then
local inner = segment:sub(2, -2)
if inner ~= "" then
table.insert(args, inner)
end
elseif is_keyword(segment, true) then
-- Handle keywords that appear between bracketed segments
table.insert(args, normalize_keyword(get_canonical_keyword(get_keyword(segment, true))))
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
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
if 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 == "")
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 etymons_in_group = {}
local keywords = M.data.keywords
local function checkGroup()
if keywords[current_keyword] and keywords[current_keyword].is_group and current_keyword ~= "affix" and current_keyword ~= "surf" and current_keyword ~= "afeq" and current_keyword ~= "univerbation" and #etymons_in_group <= 1 then
error("Detected `:" .. current_keyword .. "` group with fewer than two etymons.")
end
etymons_in_group = {}
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
error("Invalid keyword '" .. param .. "'. Did you mean a valid keyword like ':bor', ':inh', etc.?")
elseif is_keyword(param) then
checkGroup()
current_keyword = get_canonical_keyword(get_keyword(param))
else
local etymon_data = EtymonParser.parse_etymon(param, lang)
if etymon_data then
table.insert(etymons_in_group, param)
local param_lang = etymon_data.lang
if etymon_data.is_family and current_keyword == "inherited" then
error("`:inh` does not support family codes; use a specific language.")
end
if etymon_data.is_family and not etymon_data.suppress_term then
error("Family codes require suppressed term (use family:-).")
end
if current_keyword == "from" and param_lang:getFullCode() ~= lang:getFullCode() then
error("`:from` is for same-language derivation, but language does not match. " ..
"Expected '" .. lang:getFullCode() .. "', got '" .. param_lang:getFullCode() .. "'.")
elseif current_keyword == "inherited" then
M.etymology.check_ancestor(lang, param_lang)
end
-- 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(etymons_in_group, param)
end
end
end
checkGroup()
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 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
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
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
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
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
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
-- 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)
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
warn_mismatched_explicit_id(page, norm_lang, base_key, etymon_data.id)
end
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
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
return __state.cached_etymon_args[matched_key], __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 "*"
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
return __state.single_etymons[base_key], __state.cached_etymon_pages[base_key .. ":" .. only_id], nil, descendants_check
elseif count > 1 then
warn_ambiguous_etymon_link(page, norm_lang, ids, is_toplevel)
return M.data.STATUS.AMBIGUOUS, nil, nil, nil
else
return M.data.STATUS.MISSING, nil, nil, nil
end
end
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
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
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
-- It's a keyword, check if visible in tree (invisible "all" or "tree" = hidden in tree)
local keyword_info = keywords[keyword_base]
local inv = keyword_info.invisible
if not (inv == "all" or inv == true or inv == "tree") 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
-- Helper to track keyword usage at top level
local function track_keyword_usage(keyword, target_lang, source_lang)
if not is_toplevel then return end
if not __state.toplevel_keyword_stats[keyword] then
__state.toplevel_keyword_stats[keyword] = {
count = 0,
target_langs = {},
source_langs = {},
}
end
local keyword_data = __state.toplevel_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
local function ensure_container()
if not current_container or current_container.keyword ~= current_keyword then
current_container = {
keyword = current_keyword,
keyword_info = M.data.keywords[current_keyword],
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 = {}
for k, v in pairs(M.data.keywords[current_keyword]) do current_container.keyword_info[k] = v end
current_container.keyword_info.text = labels.text
current_container.keyword_info.phrase = labels.phrase
end
end
end
for i = 2, #args do
local param = args[i]
if is_keyword(param) then
local keyword, modifiers = EtymonParser.parse_keyword_modifiers(param)
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
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, lang)
if etymon_data then
-- Track keyword usage at top level
track_keyword_usage(current_keyword, lang, etymon_data.lang)
local term_node = {}
-- Handle suppress_term (-) and unknown_term (empty) directly
if etymon_data.suppress_term or etymon_data.unknown_term then
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
term_node.suppress_term = etymon_data.suppress_term
term_node.unknown_term = etymon_data.unknown_term
term_node.is_family = etymon_data.is_family
term_node.is_uncertain = etymon_data.unc
term_node.ref = etymon_data.ref
term_node.t = etymon_data.t
term_node.tr = etymon_data.tr
term_node.ts = etymon_data.ts
term_node.alt = etymon_data.alt
term_node.g = etymon_data.g
term_node.pos = etymon_data.pos
term_node.ng = etymon_data.ng
term_node.lit = etymon_data.lit
term_node.q = etymon_data.q
term_node.qq = etymon_data.qq
term_node.l = etymon_data.l
term_node.ll = etymon_data.ll
else
-- Regular term: fetch arguments from page
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
track_keyword_usage(inline_keyword, etymon_data.lang, inline_etymon.lang)
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
ensure_container()
-- Check if current keyword has no_child_categories - if so, stop recursion
local keyword_info = current_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.id = etymon_data.id
term_node.etymon_id = resolved_etymon_id -- The actual etymon id when resolved via senseid
term_node.t = etymon_data.t
term_node.tr = etymon_data.tr
term_node.ts = etymon_data.ts
term_node.pos = etymon_data.pos
term_node.alt = etymon_data.alt
term_node.g = etymon_data.g
term_node.ng = etymon_data.ng
term_node.ref = etymon_data.ref
term_node.is_uncertain = etymon_data.unc
term_node.override = etymon_data.override
term_node.page_of = page_of
term_node.aftype = etymon_data.aftype
term_node.postype = etymon_data.postype
term_node.bor = etymon_data.bor
term_node.lbor = etymon_data.lbor
term_node.slbor = etymon_data.slbor
term_node.lit = etymon_data.lit
term_node.is_family = etymon_data.is_family
term_node.q = etymon_data.q
term_node.qq = etymon_data.qq
term_node.l = etymon_data.l
term_node.ll = etymon_data.ll
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(current_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
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
local function track_title_pagename_mismatch_after_strip(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
-- 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()
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)
-- 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
track_title_pagename_mismatch_after_strip(lang)
end
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 rfe = args.rfe
local page_data = Util.get_page_data()
if not title then
title = page_data.pagename
if page_data.namespace == "Reconstruction" then title = "*" .. title end
end
local entry_pagename = page_data.pagename
if page_data.namespace == "Reconstruction" then
entry_pagename = "*" .. entry_pagename
end
if lang:stripDiacritics(M.links.remove_links(title)) ~= lang:stripDiacritics(M.links.remove_links(entry_pagename)) then
track_title_pagename_mismatch_after_strip(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:getCanonicalName()
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
local ety_data_tree = export.get_tree(lang, title, etymon_args, {
validate = true,
pos = args.pos,
id = id,
json = args.json,
})
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.etydate = M.etydate.format_etydate(etydate_args, { omit_refs = true })
if parsed_etydate.ref and #parsed_etydate.ref > 0 then
ety_data_tree.etydate_refs = parsed_etydate.ref
end
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
-- Check if there are any visible children in tree (invisible "all" or "tree" = hidden in tree)
local has_visible_children = false
for _, child in ipairs(ety_data_tree.children or {}) do
local child_keyword_info = child.keyword_info
local inv = child_keyword_info and child_keyword_info.invisible
if not (inv == "all" or inv == true or inv == "tree") then
has_visible_children = true
break
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)
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
table.insert(output, M.text.render({
data_tree = ety_data_tree,
format_term_func = Util.format_term,
max_depth = max_depth,
stop_at_blue_link = stop_at_blue_link,
curr_page = page_data.pagename,
nodot = args.nodot,
stop_at_lang = stop_at_lang,
stop_at_lang_or_bluelink = stop_at_lang_or_bluelink,
}))
end
if rfe then
local rfe_param_mods = {
nocat = { type = "boolean" },
sort = {},
y = {},
m = {},
fragment = {},
section = {},
box = { type = "boolean" },
noes = { type = "boolean" },
}
local function generate_rfe_obj(rfe_text)
-- Check if it's a boolean true value
if M.yesno(rfe_text, false) then
return { is_boolean = true }
else
return { text = rfe_text }
end
end
local rfe_with_defaults = Util.add_boolean_defaults(rfe, rfe_param_mods)
local parsed_rfe = M.parse_utilities.parse_inline_modifiers(rfe_with_defaults, {
param_mods = rfe_param_mods,
generate_obj = generate_rfe_obj
})
local rfe_args = {
[1] = lang:getCode(),
nocat = parsed_rfe.nocat,
sort = parsed_rfe.sort,
y = parsed_rfe.y,
m = parsed_rfe.m,
fragment = parsed_rfe.fragment,
section = parsed_rfe.section,
box = parsed_rfe.box,
noes = parsed_rfe.noes,
}
if not parsed_rfe.is_boolean then
rfe_args[2] = parsed_rfe.text
end
table.insert(output, frame:expandTemplate({
title = "rfe",
args = rfe_args
}))
end
if Util.is_content_page() and __state.max_depth_reached > 0 then
local lang_code = lang:getCode()
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" }
}
track_ranges("depth", __state.max_depth_reached, depth_ranges, lang_code)
track_ranges("nodes", __state.total_nodes, node_ranges, lang_code)
local unique_languages = 0
for _ in pairs(__state.language_count) do
unique_languages = unique_languages + 1
end
track_ranges("unique-languages", unique_languages, language_ranges, lang_code)
if __state.total_nodes == __state.max_depth_reached + 1 then
track_ranges("linear-depth", __state.max_depth_reached, depth_ranges, lang_code)
end
end
local categories = {}
if Util.is_content_page() then
local should_suppress_categories = lang_exc and lang_exc.suppress_categories
if not should_suppress_categories and not args.nocat then
categories = M.categories.render({
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,
})
end
local target_lang_code = lang:getCode()
for keyword, keyword_data in pairs(__state.toplevel_keyword_stats) do
-- Track keyword globally
M.track("etymon/keyword/" .. keyword)
-- Track keyword per target language
M.track("etymon/keyword/" .. keyword .. "/target/" .. target_lang_code)
-- Track keyword per source language
for source_code, count in pairs(keyword_data.source_langs) do
M.track("etymon/keyword/" .. keyword .. "/source/" .. source_code)
-- Track keyword per target+source combination
M.track("etymon/keyword/" .. keyword .. "/target/" .. target_lang_code .. "/source/" .. source_code)
end
end
if tree then
table.insert(categories, "Pages with etymology trees")
table.insert(categories, lang:getCanonicalName() .. " ප්රවේශ, නිරුක්ති ශාඛා සහිත")
end
if text then table.insert(categories, lang:getCanonicalName() .. " entries with etymology texts") end
if args.exnihilo then table.insert(categories, lang:getCanonicalName() .. " terms coined ex nihilo") end
if __state.toplevel_has_inline_etymology then
table.insert(categories, "Pages with inline etymon for redlinks")
end
if __state.toplevel_redundant_etymology then
table.insert(categories, "Pages with redundant inline etymon")
end
if __state.toplevel_idless_etymon then
table.insert(categories, "Pages using etymon with no ID")
end
if __state.has_mismatched_id then
table.insert(categories, lang:getCanonicalName() .. " entries referencing etymons with mismatched IDs")
end
if __state.linked_page_multiple_etymons_idless then
table.insert(categories,
lang:getCanonicalName() .. " entries referencing pages with multiple etymons missing IDs")
end
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
f65eehlenqf8bbtycql2zwv1rypc5a2
radio
0
114072
235465
223615
2026-06-02T10:56:59Z
Lee
19
/* ක්රියා පද */
235465
wikitext
text/x-wiki
==ඉංග්රීසි==
=== උච්චාරණය ===
* {{IPA|en|/ˈɹeɪdiˌəʊ/|a=RP}}
* {{IPA|en|/ˈɹeɪdiˌoʊ/|a=GA}}
* {{audio|en|en-us-radio.ogg|a=US}}
* {{hyph|en|ra|dio}}
===නාම පදය===
{{en-noun}}
# {{l|si|රෙදෙව්ව}}
===ක්රියා පද===
{{en-verb|+,~es}}
# {{{1|{{rfdef|en}}}}} #: ''{{{2|<!-- example sentence -->}}}''
{| class="wikitable"
|+
|-
! !!අන්ය පුරුෂ<br>ඒකවචන!!අන්ය පුරුෂ<br>බහුවචන!!උත්තම පුරුෂ<br>ඒකවචන!!උත්තම පුරුෂ<br>බහුවචන
|-
|අනතීත-සකර්මක<br>(ව්යවහාරයේ නැති විය හැකියි. )||[[රෙදෙවයි]]||[[රෙදෙවති]]||[[රෙදෙවමි]]||[[රෙදෙවමු]]
|-
|}
{{topics|en|Radio}}
52mo6g8qujabrywtur97bcsxanut58p
සැකිල්ල:R:Dictionary.com
10
114216
235464
168304
2026-06-02T10:56:01Z
Lee
19
235464
wikitext
text/x-wiki
{{#switch:{{ucfirst:{{{source|}}}}}
| FOLDOC = {{R:FOLDOC|entry={{{entry|{{{1|{{PAGENAME}}}}}}}}|accessdate={{{accessdate|{{{3|}}}}}}|passage={{{passage|{{{4|}}}}}}}}
| #default = {{cite-book
|entry = {{#if:{{{alt|}}}
| {{{alt}}}
| {{{entry|{{{1|{{PAGENAME}}}}}}}}
}}{{#if:{{{part of speech|}}}{{{pos|}}}
|, {{#if:{{{noformat|}}}
| {{{part of speech|{{{pos|}}}}}}
| ''{{{part of speech|{{{pos|}}}}}}{{#ifeq:{{{part of speech|}}}{{{pos|}}}{{{2|}}}|phrase||.}}''
}}
}}
|entryurl = {{#if:{{{url|}}}{{{2|}}}
| {{#ifeq:{{padleft:|4|{{{url|{{{2|}}}}}}}}|http
| {{{url|{{{2|}}}}}}
| https://www.dictionary.com/browse/{{urlencode:{{{url|{{{2|}}}}}}|PATH}}
}}
| https://www.dictionary.com/browse/{{#if:{{{entry|{{{1|}}}}}}|{{urlencode:{{{entry|{{{1|}}}}}}|PATH}}|{{#invoke:string|replace|source={{PAGENAMEE}}|pattern=_|replace=%20}}}}
}}
|title = Dictionary.com Unabridged
|publisher = [[w:Dictionary.com|Dictionary.com, LLC]]
|year = 1995–වත්මන
|accessdate = {{{accessdate|{{{3|}}}}}}
|section = {{#switch:{{ucfirst:{{{source|}}}}}
| Chambers = reproduced from Thomas Davidson, editor, ''[[w:Chambers Dictionary|Chambers’s Twentieth Century Dictionary of the English Language]]'', London; Edinburgh: [[w:Chambers Harrap|W. & R. Chambers]], 1908, <small>{{OCLC|635036082}}</small>
| Collins = reproduced from ''[[w:Collins English Dictionary|Collins English Dictionary]]'', 10th edition, London: [[w:HarperCollins|Collins]], 2010, <small>{{ISBN|978-0-00-738233-0}}</small>
| Cultural Literacy = reproduced from E. D. Hirsch Jr.; Joseph F. Kett; James Trefil, ''The New Dictionary of Cultural Literacy'', 3rd edition, Boston, Mass.: [[w:Houghton Mifflin Harcourt|Houghton Mifflin]], 2002, <small>{{ISBN|978-1-84972-072-4}}</small>
| Etymology|Online Etymology Dictionary = reproduced from Douglas R. Harper, ''[[w:Online Etymology Dictionary|Online Etymology Dictionary]]'', Lancaster, Pa.: D. Harper, 2000–, <small>{{OCLC|51773921}}</small>
| Idioms = reproduced from Christine Ammer, ''The American Heritage Dictionary of Idioms'', Boston, Mass.: [[w:Houghton Mifflin Harcourt|Houghton Mifflin]], 2003, <small>{{ISBN|978-0-618-24953-4}}</small>
| Random House = reproduced from [[w:Stuart Berg Flexner|Stuart Berg Flexner]], editor in chief, ''[[w:Random House Webster's Unabridged Dictionary|Random House Unabridged Dictionary]]'', 2nd edition, New York, N.Y.: [[w:Random House|Random House]], 1993, <small>{{ISBN|978-0-679-42441-3}}</small>
| Slang = reproduced from [[w:Barbara Ann Kipfer|Barbara Ann Kipfer]] and [[w:Robert L. Chapman|Robert L[undquist] Chapman]], editors, ''Dictionary of American Slang'', 4th edition, New York, N.Y.: [[w:HarperCollins|Collins]], 2007, <small>{{ISBN|978-0-06-117646-3}}</small>
}}
|passage = {{{passage|{{{text|{{{4|}}}}}}}}}
|usenodot = 1
|nodot = {{{nodot|}}}
}}}}<noinclude>{{documentation}}</noinclude>
t4gnqzv30mh8np68selw4p93dl8swl4
සැකිල්ල:R:Dictionary.com/documentation
10
114217
235463
197035
2026-06-02T10:55:26Z
Lee
19
235463
wikitext
text/x-wiki
{{documentation subpage}}
===Usage===
This template may be used in "References" and "Further reading" sections, and on talk pages, to cite the ''[http://dictionary.reference.com Dictionary.com]'' website.
===Parameters===
* {{para|1}} or {{para|entry}} – the entry on ''Dictionary.com''. If this is not specified, the name of the Wiktionary entry is used.
* {{para|alt}} – an alternative form of the entry, with wikitext markup if required.
* {{para|pos}} or {{para|part of speech}} – the [[part of speech]] of the entry. By default, the template italicizes the value assigned to the parameter and adds a [[full stop]] ([[period]]) to the end. To turn off the default formatting for the purpose of specifying a different formatting using wikitext markup and templates, specify {{para|noformat|1}} or {{para|noformat|yes}}.
* {{para|2}} or {{para|url}} – the template can usually automatically create a link to ''Dictionary.com''. However, if the entry contains a character other than a letter of the alphabet or a [[hyphen]], for the [[hyperlink]] to work it is necessary to use this parameter to manually specify the [[URL]] of the ''Dictionary.com'' webpage or the portion of the URL after “<kbd>.../browse/</kbd>” (see the example below).
* {{para|3}} or {{para|access-date}} – the date when ''Dictionary.com'' was accessed.
* {{para|source}} – the source used by ''Dictionary.com'':
** <kbd>Chambers</kbd> – ''[[w:Chambers Dictionary|Chambers’s Twentieth Century Dictionary of the English Language]]'' (1908).
** <kbd>Collins</kbd> – ''[[w:Collins English Dictionary|Collins English Dictionary]]'' (10th edition, 2010).
** <kbd>Cultural Literacy</kbd> – ''The New Dictionary of Cultural Literacy'' (3rd edition, 2002).
** <kbd>Etymology</kbd> ''or'' <kbd>Online Etymology Dictionary</kbd> – ''[[w:Online Etymology Dictionary|Online Etymology Dictionary]]'' (2000–).
** <kbd>FOLDOC</kbd> – ''[[w:Free On-line Dictionary of Computing|Free On-line Dictionary of Computing]]'' (1985–). ''Now deprecated'' – providing the source as "<code>FOLDOC</code>" acts as a redirect to {{temp|R:FOLDOC}}. For simplicity, use {{temp|R:FOLDOC}} instead.
** <kbd>Idioms</kbd> - ''The American Heritage Dictionary of Idioms'' (2003), see also {{tl|R:AHD Idioms}}.
** <kbd>Random House</kbd> – ''[[w:Random House Webster's Unabridged Dictionary|Random House Unabridged Dictionary]]'' (2nd edition, 1993).
** <kbd>Slang</kbd> – ''Dictionary of American Slang'' (4th edition, 2007).
: For help with adding additional sources to this template, please leave a message on the [[Template talk:R:Dictionary.com|talk page]].
* {{para|4}}, {{para|text}}, or {{para|passage}} – a passage quoted from the webpage.
* {{para|nodot}} – by default, the template adds a full stop (period) at the end of the citation. To suppress this punctuation, use {{para|nodot|1}} or {{para|nodot|yes}}.
===Examples===
Unless otherwise specified, the following examples assume that the template is being used on the Wiktionary entry page “{{m|en|example}}”.
* '''Wikitext''':
** {{temp|R:Dictionary.com|pos=n}}; or
** {{temp|R:Dictionary.com|entry=example|pos=n}}
* '''Result''': {{R:Dictionary.com|entry=example|pos=n}}
* '''Wikitext''':
** {{temp|R:Dictionary.com|pos=n|access-date=1 January 2017}}; or
** {{temp|R:Dictionary.com|entry=example|pos=n|access-date=1 January 2017}}
* '''Result''': {{R:Dictionary.com|entry=example|pos=n|access-date=1 January 2017}}
* '''Wikitext''': {{temp|R:Dictionary.com|pos=n|source=Random House|access-date=1 January 2017}}
* '''Result''': {{R:Dictionary.com|entry=example|pos=n|source=Random House|access-date=1 January 2017}}
* '''Wikitext''':
** {{temp|R:Dictionary.com|2=entry=all the world’s a stage|3=url=all-the-world-s-a-stage|4=source=Cultural Literacy|5=passage=The beginning of a speech in the play ''As You Like It'', by William Shakespeare.|6=nodot=1}}; or
** {{temp|R:Dictionary.com|2=entry=all the world’s a stage|3=url=<nowiki>https://www.dictionary.com/browse/all-the-world-s-a-stage</nowiki>|4=source=Cultural Literacy|5=passage=The beginning of a speech in the play ''As You Like It'', by William Shakespeare.|6=nodot=1}}
* '''Result''': {{R:Dictionary.com|entry=all the world’s a stage|url=https://www.dictionary.com/browse/all-the-world-s-a-stage|source=Cultural Literacy|passage=The beginning of a speech in the play ''As You Like It'', by William Shakespeare.|nodot=1}}
<includeonly>
[[ප්රවර්ගය:ඉංග්රීසි මූලාශ්ර සැකිලි|Dictionary.com]]
</includeonly>
3mwnp1q5txi54hxcxrt3m1epldlb2ek
drink
0
114435
235352
223199
2026-06-01T15:09:02Z
Lee
19
235352
wikitext
text/x-wiki
{{also|Drink}}
==ඉංග්රීසි==
=== උච්චාරණය ===
* {{enPR|drĭngk|a=RP,GA}}, {{IPA|en|/dɹɪŋk/|[d̠ɹ̠˔ʷɪŋk]}}
* {{audio|en|En-us-drink.ogg|a=GA}}
* {{rhymes|en|ɪŋk|s=1}}
==== ක්රියා පදය ====
{{en-verb|~s|~ing|drank,drunk<l:Southern US>,~ed<l:nonstandard>|drunk,drunken<l:chiefly,archaic>,drank<l:dialectal>,~ed<l:all,nonstandard,archaic,or,obsolete>,~en,dranken}}
# {{l|si|බොනවා}}
{| class="wikitable"
|+
|-
! !!අන්ය පුරුෂ<br>ඒකවචන!!අන්ය පුරුෂ<br>බහුවචන!!උත්තම පුරුෂ<br>ඒකවචන!!උත්තම පුරුෂ<br>බහුවචන
|-
|අනතීත-සකර්මක||[[බොයි]]||[[බොති]]||[[බොමි]]||[[බොමු]]
|-
|}
===නාම පදය===
{{en-noun|~}}
# {{l|si|පානය}}
{{cln|en|irregular verbs}}
[[Category:English class 3 strong verbs]]
[[Category:en:Food and drink]]
[[Category:en:Liquids]]
[[Category:en:Units of measure]]
[[Category:English autohyponyms]]<!-- drink any liquid vs. drink alcohol -->
539py88tlitipy3bchqds8o38txq1yd
ප්රවර්ගය:ඉංග්රීසි යෙදුම්, පෞරාණික අරුත් සහිත
14
120956
235290
215548
2026-06-01T14:00:14Z
Lee
19
Lee විසින් [[ප්රවර්ගය:ඉංග්රීසි යෙදුම්, archaic අරුත් සහිත]] සිට [[ප්රවර්ගය:ඉංග්රීසි යෙදුම්, පෞරාණික අරුත් සහිත]] වෙත පිටුව ගෙන යන ලදී
215548
wikitext
text/x-wiki
{{auto cat}}
[[en:Category:English terms with archaic senses]]
tq8ptryvvsi5lyyt8p7a7z9bccvyhs0
pencil
0
129859
235467
204318
2026-06-02T10:58:16Z
Lee
19
/* ක්රියා පදය */
235467
wikitext
text/x-wiki
== ඉංග්රීසි ==
[[File:Caran d'Ache Farbstifte.JPG|thumb|Selection of colored pencils.]]
=== වෙනත් ආකාර ===
* {{alter|en|pensill||obsolete}}
=== නිරුක්තිය ===
From {{der|en|xno|-}} and {{der|en|fro|pincil}} (see the variant {{m|fro|pincel}}, which gave rise to Modern French {{m|fr|pinceau||paintbrush}}), from {{der|en|la|pēnicillum}}, diminutive of {{m|la|pēniculus|gloss=brush}}, itself a diminutive of {{m|la|pēnis|gloss=tail; penis}}. Not related to ''[[pen]]''.
=== උච්චාරණය ===
* {{IPA|en|/ˈpɛnsəl/|/ˈpɛntsəl/}}
** {{IPA|en|/ˈpɛnsɪl/|a=RP,also}}
* {{audio|en|en-us-pencil.ogg|a=US}}
* {{rhymes|en|ɛnsəl|s=2}}
* {{hyphenation|en|pen|cil}}
=== නාම පදය ===
{{en-noun}}
# [[පැන්සල]]
=== ක්රියා පදය ===
{{en-verb|+l}}
# {{lb|en|transitive}} [[පැන්සල]] භාවිතයෙන් යමක් [[ලිවීම]].
#: {{ux|en|I '''penciled''' (''BrE:'' '''pencilled''') a brief reminder in my notebook.}}
#* {{quote-book|en|year=1888|author=w:Thomas Hardy|title=w:Wessex Tales| chapter=An Imaginative Woman|passage=She had hardly got back when she encountered a piece by Robert Trewe in the new number of her favourite magazine, which must have been written almost immediately before her visit to Solentsea, for it contained the very couplet she had seen '''pencilled''' on the wallpaper by the bed, and Mrs. Hooper had declared to be recent.}}
{{C|en|Writing instruments}}
l1p97s3av3ei9uc7obujclwpnd8zro9
සැකිල්ල:obsolete spelling of
10
130385
235339
205596
2026-06-01T14:39:03Z
Lee
19
235339
wikitext
text/x-wiki
{{ {{#if:{{{lang|}}}|check deprecated lang param usage|no deprecated lang param usage}}|lang={{{lang|}}}|<!--
-->{{#invoke:form of/templates|form_of_t| යන යෙදුමේ [[Appendix:Glossary#obsolete|අභාවයට ගිය]] අක්ෂර වින්යාසයක්|withcap=1|withdot=1|cat=obsolete forms}}<!--
-->}}<!--
--><noinclude>{{documentation}}</noinclude>
a70y0k6xd7qdwqvvluvmeq49fqwa0xs
235340
235339
2026-06-01T14:40:05Z
Lee
19
235340
wikitext
text/x-wiki
{{ {{#if:{{{lang|}}}|check deprecated lang param usage|no deprecated lang param usage}}|lang={{{lang|}}}|<!--
-->{{#invoke:form of/templates|form_of_t| යන යෙදුමේ [[Appendix:Glossary#obsolete|අභාවයට ගිය]] අක්ෂර වින්යාසයක්|withcap=1|withdot=1|cat=අභාවයට ගිය රූපාකාර}}<!--
-->}}<!--
--><noinclude>{{documentation}}</noinclude>
84kwxbhhyf2oymy911eloipaxmfdydy
සැකිල්ල:archaic spelling of
10
130387
235381
205898
2026-06-02T03:38:51Z
Lee
19
235381
wikitext
text/x-wiki
{{ {{#if:{{{lang|}}}|check deprecated lang param usage|no deprecated lang param usage}}|lang={{{lang|}}}|<!--
-->{{#invoke:form of/templates|form_of_t| යන යෙදුමේ [[Appendix:Glossary#archaic|පෞරාණික]] අක්ෂර වින්යාසයක්|cat=archaic forms|withcap=1|withdot=1}}<!--
-->}}<!--
--><noinclude>{{documentation}}[[ප්රවර්ගය:රූපාකාර සැකිලි]]</noinclude>
fuagw2b17vu1zjgy0i1ykauihd9zifm
235382
235381
2026-06-02T03:40:00Z
Lee
19
පෞරාණික රූපාකාර
235382
wikitext
text/x-wiki
{{ {{#if:{{{lang|}}}|check deprecated lang param usage|no deprecated lang param usage}}|lang={{{lang|}}}|<!--
-->{{#invoke:form of/templates|form_of_t| යන යෙදුමේ [[Appendix:Glossary#archaic|පෞරාණික]] අක්ෂර වින්යාසයක්|cat=පෞරාණික රූපාකාර|withcap=1|withdot=1}}<!--
-->}}<!--
--><noinclude>{{documentation}}[[ප්රවර්ගය:රූපාකාර සැකිලි]]</noinclude>
q015379ehhuxn8y2tru25ihxkr3amlv
වදී
0
130476
235473
233024
2026-06-02T11:03:06Z
WrdSrchSi
3305
/* ක්රියා පද */ + quote#3 with link
235473
wikitext
text/x-wiki
==සිංහල==
=== නිරුක්තිය ===
{{etymon|si|id=වද ඊ|af|si>වද#ධාතු ප්රකෘතිය>ප්රකෘතිය|si>-ඊ>ප්රත්ය|tree=1}}
''[[වද#ධාතු ප්රකෘතිය|වද]] (ප්රකෘතිය) + [[-ඊ]] (ප්රත්ය) >'' [[වදී]]
===උච්චාරණය===
* {{IPA|si|/ˈʋadiː/}}
===ක්රියා පද===
{{head|si|verb
|අතීත-අකර්මක අන්ය පුරුෂ ඒකවචන|වනි
|අනතීත-අකර්මක අන්ය පුරුෂ බහුවචන|වදිති
|අනතීත-අකර්මක උත්තම ඒකවචන|වදිමි
|අනතීත-අකර්මක උත්තම බහුවචන|වදිමු
|අනතීත-ප්රයුක්ත|වද්දයි
|අනතීත-භාව නාම|වදිනවා
|අනතීත-කාරක නාම|වදින්නේ
|වර්තමාන-නිපාත|වදිමින්
}}
# {{lb|si|අකර්මක}} ප්රවේශ වෙයි, ඇතුළු වෙයි; [[enter]] වෙයි.
#:* අජිත්, ''[https://www.ahubudu.lk/assets/pdf/EDIYA_Veluma5_Kalaba1.pdf එකට එක]'', 2507 බක් 1964 අප්රේල්
#:*: ''ඇරැක්මේ දුබල කමට පින් දුන් හෙතෙම පෙනෙන තෙක් මානේ කිසිවකු නුදුටුයේ 'කාටත් නොපෙනෙන්නට මැ' අබරණ කිළිය තුළට '''වනි'''.''
#:* අරීසෙන් අහුබුදු, ''[https://www.scribd.com/document/368826953/HelaDeranaWaga-pdf හෙළ දෙරණ වග]'', 07 පිටුව, 2005
#:*: ''ඇතැම් හෙළ වදන් ද මැඩගස්කාර බසෙහි '''වැදැ''' සිටී.''
#:* මොහොට්ටි දොණු දේවිදු, ''[https://www.ahubudu.lk/assets/pdf/EDIYA_Veluma6,Kalaba6.pdf මගේ බළපිටි සමය]'', 2510 පොසොන්-වප් 1966 ජුනි-ඔක්.
#:*: ''1930 ජනවාරියේ මුල් සතියේ එක් දිනෙකැ පස්වරුයේ අපි පෙරළා ඇබෑසි විදුහල් '''වනුමු'''.''
# {{{1|{{rfdef|si}}}}} #: ''{{{2|<!-- example sentence -->}}}''
==== පරිවර්තන ====
''පරිවර්තන සඳහා අනාගත කාලය සලකා නැත.''
{{trans-top|වදී}}
* ඉංග්රීසි: {{t|en|enters}}
{{trans-bottom}}
=== මූලාශ්ර ===
<references/>
* "වද [https://tipitaka.lk/library/963]", කුමාරණතුංග මුනිදාස, "ක්රියා විවරණය", — 190 පිටුව
* "වද (ධා) [https://tipitaka.lk/library/955]", වැලිවිටියේ සෝරත හිමි, '''''ශ්රී සුමංගල සිංහල ශබ්දකෝෂය 2 ප-ළ 1956''''', — 894 පිටුව
* "වදා [https://www.ahubudu.lk/assets/pdf/EDIYA_Veluma6,Kalaba3.pdf]", Munidasa Cumaratunga, ''Sinhalese Through English'', — එඩිය, 6 වෙළුම, 3 කලබ, 68 පිටුව
[[ප්රවර්ගය: සිංහල ආඛ්යාත ක්රියා පද]]
rp51ugekbr3pp8wyh11hs7ym0pzcdvc
land
0
134315
235459
214787
2026-06-02T10:50:16Z
Lee
19
/* නාම පදය */
235459
wikitext
text/x-wiki
{{also|Land|länd|lǟnd|-land}}
{{minitoc}}
== ඉංග්රීසි ==
{{wikipedia}}
=== උච්චාරණය ===
* {{enPR|lănd}}, {{IPA|en|/lænd/}}
** {{IPA|en|[ɫeə̯nd]|[ɫɛə̯nd]|a=US}}
*** {{audio|en|en-us-land.ogg|a=US}}
** {{IPA|en|[ɫɛə̯nd]|[læ(ː)nd]|a=CA}}
** {{IPA|en|[lænd]|a=RP}}
** {{IPA|en|[leːnd]|[lænd]|a=AU}}
** {{IPA|en|[land]|a=SSBE}}
* {{rhymes|en|ænd|s=1}}
=== නිරුක්තිය 1 ===
{{etymon|en|inh|enm>lond>nation|id=area of ground|tree=1}}
From {{inh|en|enm|lond}}, {{m|enm|land}}, from {{inh|en|ang|land}}, from {{inh|en|gmw-pro|*land}}, from {{inh|en|gem-pro|*landą||land}}, from {{der|en|ine-pro|*lendʰ-||land, heath|id=land}}.
Cognate with {{cog|sco|laund||land}}, {{cog|fy|lân||land}}, {{cog|nl|land||land, country}}, {{cog|de|Land||land, country, state}}, {{cog|no|-}} and {{cog|sv|land||land, country, shore, territory}}, {{cog|is|land||land}}. Non-Germanic cognates include {{cog|sga|lann||heath}}, {{cog|cy|llan||enclosure}}, {{cog|br|lann||heath}}, {{cog|cu|лѧдо}}, from {{cog|sla-pro|*lędo||heath, wasteland}}, {{cog|fr|lande||heath}} and {{cog|sq|lëndinë||heath, grassland}}.
==== නාම පදය ====
{{en-noun|~}}
# The [[part]] of [[Earth]] which is not covered by [[ocean]]s or other bodies of [[water]].
#: {{ux|en|Most insects live on '''land'''.}}
# [[real estate|Real estate]] or [[landed]] [[property]]; a partitioned and measurable area which is owned and acquired and on which [[buildings]] and [[structures]] can be [[build|built]] and [[erected]].
#: {{ux|en|There are 50 acres of '''land''' in this estate.}}
# A [[country]] or [[region]].
#: {{ux|en|They [[come]] from a faraway '''land'''.}}
# A person's country of origin and/or [[homeplace]]; [[homeland]].
# The [[soil]], in respect to its nature or quality for [[farming]].
#: {{ux|en|wet '''land'''    good or bad '''land''' for growing potatoes}}
# {{lb|en|often|in combination}} [[realm]], [[domain]].
#: {{ux|en|I'm going to Disney'''land'''.}}
#: {{ux|en|Maybe that's how it works in TV-'''land''', but not in the real world.}}
# {{senseid|en|unplowed ground between furrows}} {{lb|en|agriculture}} The [[ground#Noun|ground]] [[leave#Verb|left]] [[unploughed]] between [[furrow#Noun|furrows]].
#: {{syn|en|furlong<id:unplowed ground between furrows>}}
# {{senseid|en|portions of a field for ploughing}} {{lb|en|agriculture}} Any of [[several]] [[portion#Noun|portions]] into which a [[field#Noun|field]] is [[divide#Verb|divided]] for [[plough#Verb|ploughing]].
#: {{syn|en|furlong<id:portions of a field for ploughing>}}
#: {{cot|en|headland<id:unplowed boundary of a field>|furlong<id:unplowed boundary of a field>}}
# {{lb|en|Ireland|colloquial}} A shock or fright.
#: {{ux|en|He got an awful '''land''' when the police arrived.}}
# {{lb|en|electronics}} A [[conducting]] area on a [[board]] or [[chip]] which can be used for [[connect]]ing [[wire]]s.
# On a [[compact disc]] or similar [[recording]] [[medium]], an area of the medium which does not have [[pit]]s.
#* {{quote-text|en|year=1935|author=H. Courtney Bryson|title=The Gramophone Record|page=72
|passage=Now, assume that the recording is being done with 100 grooves per inch, and that the record groove is .006 inch wide. This means that the '''land''' on either side on any given groove in the absence of sound waves is .004 inch.}}
# {{lb|en|travel}} The non-airline portion of an itinerary. Hotel, tours, cruises, etc.
#: {{ux|en|Our city offices sell a lot more '''land''' than our suburban offices.}}
# {{lb|en|obsolete}} The ground or [[floor]].
#* {{RQ:Spenser Faerie Queene|book=V|canto=VII|stanza=7|passage=her selfe vppon the '''land''' / She did prostrate}}
# {{lb|en|nautical}} The [[lap]] of the [[strake]]s in a [[clinker-built]] [[boat]]; the lap of [[plate]]s in an [[iron]] [[vessel]]; called also [[landing]].<ref>{{R:Knight AMD}}</ref>
# In any surface prepared with [[indentation]]s, [[perforation]]s, or [[groove]]s, that part of the surface which is not so treated, such as the level part of a [[millstone]] between the furrows.
## {{lb|en|ballistics}} The space between the rifling grooves in a gun.
##* {{quote-book|en| date=2008-08-01| chapter=Ballistics| author=Lisa Steele| title=Science for Lawyers| editor=Eric York Drogin| publisher=American Bar Association| page=16| pageurl=http://books.google.com/books?id=H4zTATcB70wC&pg=PA16&dq=lands| passage=The FBI maintains a database, the General Rifling Characteristics (GRC) file, which is organized by caliber, number of '''lands''' and grooves, direction of twist, and width of '''lands''' and grooves, to help an examiner figure out the origin of a recovered bullet.}}
##* {{quote-av|en|date=2012-11-15|episode=One Way to Get Off| title=[[w:Elementary (TV series)|Elementary]]| season=1| number=7|actor=Jonny Lee Miller| role=Sherlock Holmes| passage=The human eye is a precision instrument. It can detect grooves and '''lands''' on a slug more efficiently than any computer.}}
# {{lb|en|Scotland|historical}} A group of [[dwelling]]s or [[tenement]]s under one [[roof]] and having a common [[entry]].
=====Hyponyms=====
{{col4|en|bookland
|borderland
|brushland
|bushland
|cloud cuckoo-land
|Crown land
|Disneyland
|downland
|dreamland
|dry land
|[[fantasy land]] ([[fantasyland]])
|farmland
|Fiordland
|flatland
|grassland
|herbland
|highland
|homeland
|Hurdland
|inland
|Lalaland
|Levelland
|lowland
|mainland
|midland
|moorland
|Newfoundland
|no man's land
|No Man's Land
|Northland,northland
|outland
|overland
|pastureland
|pineland
|playland
|plowland,ploughland
|Queensland
|revenue land
|Southland,southland
|tableland
|TV land
|upland
|Westland
|wildland
|wonderland
|woodland
}}
===== ව්යුත්පන්න යෙදුම් =====
{{col|en|Dayak land|land surface|land-surface|adland
|airland
|aland
|aridland
|autoland
|backland
|benchland
|Bergisches Land
|birthland
|blackland
|blogland
|bogland
|bottomland
|bowerland
|buckshot land
|byland
|caneland
|canyonland
|chalkland
|Chicagoland
|Chink land
|chink land
|chopstick land
|Cleveland
|cloud cuckoo land
|cloud-cuckoo-land
|cloudland
|clubland
|coastland
|common land
|copland
|cornland
|cotland
|counterland
|cradleland
|crash land
|croftland
|cropland
|crown land
|cubeland
|Curtisland
|dairyland
|Damaraland
|deadland
|desertland
|do a land-office business
|dockland
|domed land snail
|driftland
|dryland
|duneland
|eastland
|edgeland
|Egyptland
|Elfland
|Ellsworth Land
|escapeland
|estate in land
|fairyland
|farm land
|fatherland
|fat of the land
|fernland
|filmland
|Fingoland
|fireland
|flogging the land
|floodland
|folkland
|foras land
|forbyland
|Fordlandia
|foreland
|forestland
|Frankland
|Freelander
|freeman on the land
|gameland
|gangland
|gangsterland
|geländeläufer
|genderland
|ghostland
|glebe-land
|glory-land
|gorseland
|Graham Land
|grainland
|grazeland
|Greenland
|Groveland
|gumland
|hayland
|headland
|heartland
|heathland
|heteroland
|Highland
|hipsterland
|Hungarland
|Iceland
|interest in land
|island
|Jockland
|Kirkland
|kirkland
|Kiwiland
|lackland
|lakeland
|La-La Land
|Lala land
|la-la land
|la-la-land
|landability
|landable
|land acknowledgement
|land acknowledgment
|land agent
|land ahoy
|land art
|land artist
|landbank
|landbanking
|landbase
|landbased
|land battleship
|land-beaver
|land before time
|landbirding
|landblink
|landboc
|landbook
|landbound
|land breeze
|land bridge
|land bubble
|landcare
|land clearer
|landcover
|land crab
|land cress
|land cruiser
|land degradation
|land-diving
|land diving
|land down under
|lander
|landfall
|land-farer
|landfarming
|landfill
|landflood
|land force
|landform
|landfowl
|landful
|landfyrd
|land girl
|landgrab
|landgrabber
|land-grant
|land grant
|land guard
|landguard
|land gull
|land-held
|land ho
|landhold
|landholder
|landholding
|landhopper
|land ironclad
|landish
|land-jobber
|land-jobbing
|landlady
|landleaper
|land-leech
|land legs
|landless
|landlike
|[[land line]], [[landline]]
|landliving
|landlock
|landlocked
|land-locked salmon
|landlord
|landlouper
|land-lover
|landlubber
|landly
|landman
|land mark
|landmark
|[[land mass]], [[landmass]]
|land mile
|[[land mine]], [[landmine]]
|landmonger
|landocracy
|landocrat
|land of a thousand hills
|land of fruits and nuts
|land of milk and honey
|land of Nod
|land of opportunity
|land of plenty
|land of steady habits
|Land of the Ascendant Sun
|land of the free
|land of the living
|Land of the Long White Cloud
|land o' Goshen
|land on one's feet
|Land o' the Leal
|landowner
|landowning
|Land Park
|land patent
|landphoon
|land pirate
|landplane
|land poor
|land-poor
|land quillwort
|landrace
|landrail
|landreeve
|land register
|land rights
|land rights for gay whales
|land run
|landrush
|land rush
|land sailing
|land sake
|land sake alive
|land sakes
|land sakes alive
|land-salamander
|landscape
|landscraper
|landscrip
|Land's End
|land shark
|landshark
|land-shark
|land-sharking
|land shrimp
|landsick
|land sickness
|landside
|landslide
|landsliding
|landslip
|land slug
|land snail
|landspout
|landspreading
|land spring
|land surveyor
|land take
|land-take
|land tax
|land the plane
|land torpedo
|land train
|land under
|land up over
|land-use
|[[land use]] (see also [[w:Land_use|land use]])
|landwaiter
|landward
|landwards
|landwhale
|land whale
|land wind
|land with one's bum in the butter
|landworker
|land yacht
|land-yacht
|land yachting
|law of the land
|layland
|lay of the land
|Levelland
|lie of the land
|linksland
|live off the land
|loessland
|lotus land
|Lotusland
|lubberland
|magazineland
|make land
|marchland
|markland
|Markland
|marshland
|Mashonaland
|Matabeleland
|meadowland
|mealie land
|merland
|Midland
|mireland
|misland
|morning-land
|morning land
|mossland
|motherland
|muckland
|mudland
|multiland
|my land
|Namaqualand
|native land
|neckland
|Netherland
|netherlands
|Netherlands
|never fight a land war in Asia
|neverland
|never-never land
|never start a land war in Asia
|noman's land
|no-man's land
|no-man's-land
|nonland
|Northumberland
|Oakland
|O'Higgins Land
|Oklahoma land rush
|on land
|otherlandish
|ounceland
|oxland
|paddyland
|parentland
|parkland
|peatland
|pennyland
|Pictland
|plainland
|plotland
|Poland
|Portland
|portland
|power in the land
|prairieland
|promised land
|pure land
|quangoland
|quarterland
|rainland
|ranchland
|rangeland
|restaurantland
|riceland
|Richland
|Richlands
|rimland
|rockland
|sabbath of the land
|sageland
|scabland
|scarpland
|Schengenland
|scrubland
|sedgeland
|see how the land lies
|Seriland
|set foot on land
|set the land
|shackland
|shadowland
|shareland
|shoreland
|shrubland
|sire-land
|skyland
|slobland
|soapland
|soft-land
|soft land
|spit of land
|splash-land
|stumpland
|Sundaland
|swampland
|Swaziland
|thaneland
|theatreland
|thirstland
|tideland
|townland
|tract of land
|tussockland
|userland
|valley-land
|valleyland
|valley land
|vineland
|washland
|wasteland
|waste land
|waterland
|Welshland
|westland
|wetland
|wharfland
|wheatland
|white land
|Wilkes Land
|wineland
|Wituland
|Wolfe-land
|Wolfland
|womyn's land
|Yankee land
|yard of land
|Zoom-land
|Zoom land
|Zululand
}}
===== පරිවර්තන =====
{{trans-top|part of Earth that is not covered by oceans or other bodies of water}}
{{multitrans|data=
* Abenaki: {{tt|abe|aki}}
* Aché: {{tt|guq|waxu}}
* Afrikaans: {{tt+|af|land}}
* Albanian: {{tt+|sq|vend|m}}
* Arabic: {{tt|ar|بَرّ|f}}, {{tt+|ar|أَرْض|f}}, {{tt|ar|يابِسة|f}}
*: Egyptian Arabic: {{tt|arz|أرض|f|tr=ʔarḍ}}
* Aramaic: {{tt+|syc|ܐܪܥܐ|f|tr=ʔarʕā}}
* Armenian: {{tt+|hy|ցամաք}}
* Asturian: {{tt+|ast|tierra|f}}
* Bashkir: {{tt|ba|ер|sc=Cyrl}}, {{tt|ba|ҡоро ер|sc=Cyrl}}
* Basque: {{tt|eu|lur}}
* Belarusian: {{tt|be|зямля́|f}}, {{tt|be|су́ша|f}}
* Bengali: {{tt+|bn|ভূমি}}, {{tt+|bn|জমি}}, {{tt+|bn|জমিন}}
* Bhojpuri: {{t|bho|जमीन}}
* Bikol Central: {{tt+|bcl|daga}}
* Blackfoot: {{tt|bla|ksaahko}}
* Brunei Malay: {{tt|kxd|darat}}
* Bulgarian: {{tt+|bg|земя́|f}}, {{tt+|bg|су́ша|f}}
* Burmese: {{tt+|my|ကုန်း}}
* Catalan: {{tt+|ca|terra|f}}
* Central Atlas Tamazight: {{tt|tzm|ⴰⴽⴰⵍ|m}}
* Chamicuro: {{tt|ccc|c̈hijta}}
* Cherokee: {{tt|chr|ᎦᏙᎯ}}
* Cheyenne: {{tt|chy|ho'e}}
* Chinese:
*: Mandarin: {{tt+|cmn|土地|tr=tǔdì}}, {{tt+|cmn|陸地|tr=lùdì}}
* Cree: {{tt|cr|ᐊᐢᑭᕀ}}
* Czech: {{tt+|cs|země|f}}
* Danish: {{tt+|da|land|n}}
* Dutch: {{tt+|nl|land|n}}
* Eastern Bontoc: {{tt|ebk|lota}}
* Egyptian: {{t-egy|tꜣ|h=tA:N23*Z1}}
* Esperanto: {{tt+|eo|tero}}
* Estonian: {{tt+|et|maa}}
* Farefare: {{tt|gur|tɩŋa}}, {{tt|gur|tẽŋa}}
* Faroese: {{tt|fo|land|n}}
* Fijian: {{tt|fj|vanua}}
* Finnish: {{tt+|fi|maa}}
* French: {{tt+|fr|terre|f}}
* Galician: {{tt+|gl|terra|f}}
* Georgian: {{tt|ka|მიწა}}, {{tt|ka|ხმელეთი}}
* German: {{tt+|de|Land|n}}, {{tt+|de|Land|p|alt=Länder}}
*: Rhine Franconian: {{tt|gmw-rfr|Lond}} {{qualifier|Palatine}}
* Greek: {{tt+|el|ξηρά|f}}, {{tt+|el|γη|f}}
* Guaraní: {{tt+|gn|yvy}}
* Gujarati: {{tt+|gu|જમીન|f|tr=jamīn}}
* Hawaiian: {{tt|haw|honua}}
* Hebrew: {{tt+|he|אֶרֶץ|f|tr=érets}}, {{tt+|he|אֲדָמָה|f|tr=adamá}}, {{t+|he|יַבָּשָׁה|f|tr=yabashá}}
* Higaonon: {{tt|mba|bugta}}
* Hindi: {{tt+|hi|भूमि|f}}, {{tt+|hi|ज़मीन|f}}
* Hungarian: {{tt+|hu|föld}}, {{tt+|hu|szárazföld}}
* Icelandic: {{tt+|is|land}}
* Ido: {{tt+|io|lando}}
* Igbo: {{tt|ig|ala}}
* Ilocano: {{tt|ilo|daga}}
* Indonesian: {{tt+|id|tanah}}, {{tt+|id|bumi}}, {{tt+|id|darat}}
* Ingrian: {{t|izh|maa}}
* Istriot: {{tt|ist|tiera|f}}
* Italian: {{tt+|it|terra|f}}
* Japanese: {{tt+|ja|土|tr=つち, tsuchi}}, {{tt+|ja|土地|tr=とち, tochi}}, {{tt+|ja|陸地|tr=りくち, rikuchi}}
* Khmer: {{tt+|km|ដី}}
* Korean: {{tt+|ko|땅}}, {{tt+|ko|뭍}}, {{tt+|ko|토지(土地)}}, {{tt+|ko|육지}}, {{tt+|ko|륙지}} {{qualifier|North Korea}}
* Kurdish:
*: Central Kurdish: {{tt+|ckb|خاک}}
* Ladin: {{tt|lld|tera|f}}
* Lakota: {{tt|lkt|makȟóčhe}}
* Lao: {{tt+|lo|ດິນ}}, {{tt+|lo|ພູ}}
* Latin: {{tt+|la|terra|f}}
* Latvian: {{tt+|lv|zeme|f}}, {{tt+|lv|sauszeme|f}}, {{tt|lv|cietzeme|f}}
* Lithuanian: {{tt|lt|sausuma|f}}, {{tt+|lt|žemė|f}}
* Lü: {{tt|khb|ᦡᦲᧃ}}
* Macedonian: {{tt+|mk|земја|f}}
* Malay: {{tt+|ms|tanah}}, {{tt+|ms|darat}}, {{tt+|ms|bumi}}
* Maltese: {{tt|mt|art}}
* Manchu: {{tt|mnc|ᠨᠠ}}
* Maori: {{tt+|mi|whenua}}
* Marathi: {{tt|mr|जमीन|f|tr=j̈amīn}}
* Mazanderani: {{tt|mzn|زمین|tr=zemin}}
* Minangkabau: {{t+|min|tanah}}
* Mongolian:
*: Cyrillic: {{tt+|mn|газар}}, {{tt+|mn|шороо}}, {{tt+|mn|хөрс}}
* Nahuatl:
*: Classical: {{tt|nci|tlalli}}
* Navajo: {{tt|nv|kéyah}}
* Nepali: {{tt|ne|जमिन|tr=jamin}}
* Nheengatu: {{tt|yrl|retama}}
* North Frisian: {{qualifier|Mooring}} {{tt|frr|lönj|n}}; {{qualifier|Föhr-Amrum}} {{tt|frr|lun|n}}; {{qualifier|Helgoland}} {{tt|frr|Lun|n}}, {{tt|frr|Lön}} {{qualifier|Sylt}}
* Northern Thai: {{t-needed|nod}}
* Norwegian:
*: Bokmål: {{tt+|nb|land|n}}
* Occitan: {{tt+|oc|tèrra}}
* Ojibwe: {{tt|oj|aki}}, {{tt|oj|ᐊᑭ}}
* Old Church Slavonic: {{tt|cu|землꙗ|f}}
* Old East Slavic: {{tt|orv|землꙗ|f}}
* Old English: {{tt+|ang|land|n}}
* Old Javanese: {{tt|kaw|rat}}
* Old Saxon: {{tt|osx|land|n}}
* Oromo: {{tt|om|lafa}}
* Ottawa: {{tt|otw|ki}}
* Persian:
*: Iranian Persian: {{tt|fa-ira|سَرْزَمین}}
* Plautdietsch: {{tt+|pdt|Launt|n}}
* Polish: {{tt+|pl|ziemia|f}}, {{tt+|pl|ląd|m}}
* Portuguese: {{tt+|pt|terra|f}}
* Punjabi: {{tt|pa|ਜ਼ਮੀਨ|tr=zamīn}}
* Romanian: {{tt+|ro|uscat|n}}, {{tt+|ro|pământ|n}}
* Romansch: {{tt|rm|terra|f}}, {{tt|rm|tiara|f}}
* Russian: {{tt+|ru|земля́|f}}, {{tt+|ru|зе́мли|p}}, {{qualifier|as apposed to oceans}} {{tt+|ru|су́ша|f}}
* Sanskrit: {{tt+|sa|भूमि|f}}
* Sardinian: {{tt|sc|terra|f}}
* Scots: {{tt|sco|laund}}
* Scottish Gaelic: {{tt|gd|talamh|m}}, {{tt|gd|tìr|f}}
* Serbo-Croatian:
*: Cyrillic: {{tt|sh|зѐмља|f}}, {{tt|sh|ко̏пно|n}}
*: Roman: {{tt+|sh|zèmlja|f}}, {{tt+|sh|kȍpno|n}}
* Shan: {{t-needed|shn}}
* Sicilian: {{tt+|scn|terra|f}}
* Slovak: {{tt+|sk|zem|f}}
* Slovene: {{tt+|sl|kopno|n}}, {{tt+|sl|zemlja|f}}
* Southern Altai: {{t|alt|јер}}
* Spanish: {{tt+|es|tierra|f}}
* Sundanese: {{tt+|su|lemah}}
* Swahili: {{tt+|sw|ardhi|c9}}
* Swedish: {{tt+|sv|land|n}}
* Tagalog: {{tt+|tl|lupa}}
* Telugu: {{tt+|te|భూమి}}
* Thai: {{tt+|th|ดิน}}, {{tt+|th|ภู}}
* Tocharian A: {{tt|xto|ype}}
* Tocharian B: {{tt|txb|yapoy}}
* Tongan: {{tt|to|fonua}}
* Turkish: {{tt+|tr|kara}}
* Ugaritic: {{tt|uga|𐎀𐎗𐎕}}
* Ukrainian: {{tt+|uk|земля́|f}}, {{tt|uk|су́ша|f}}
* Urdu: {{tt+|ur|زَمِین|f}}
* Venetan: {{tt|vec|tera|f}}
* Vietnamese: {{tt+|vi|đất}}
* Vilamovian: {{tt|wym|łaond|n}}
* Welsh: {{tt+|cy|tir|m}}
* West Frisian: {{tt+|fy|lân}}
* Western Apache: {{tt|apw|kiiya}}, {{tt|apw|bíniʼ}}
* Yankunytjatjara: {{t|kdd|manta}}
* Yiddish: {{tt|yi|ארץ|f|tr=erets}}, {{tt|yi|לאַנד|n}}, {{tt|yi|יבשה|f|tr=yaboshe}}
* Yup'ik: {{tt|esu|nuna}}
* Zhuang: {{tt|za|dieg}}
{{trans-bottom}}
{{trans-top|real estate or landed property}}
* Albanian: {{tt+|sq|truall|m}}, {{tt+|sq|tokë|f}}
* Apache:
*: Western Apache: {{tt|apw|bíniʼ}}
* Asturian: {{t|ast|campa|f}}, {{t+|ast|terrén|n}}, {{t+|ast|finca|f}}, {{t|ast|posesión|f}}, {{t|ast|propiedá|f}}, {{t|ast|facienda|f}}, {{t|ast|fundu|m}}
* Bashkir: {{tt|ba|ер|sc=Cyrl}}
* Bengali: {{tt+|bn|জমি}}, {{tt+|bn|জমিন}}
* Bikol Central: {{tt+|bcl|daga}}
* Brunei Malay: {{tt|kxd|tanah}}
* Bulgarian: {{tt|bg|позе́млена со́бственост|f}}, {{tt+|bg|земя́|f}}
* Catalan: {{tt+|ca|terra}}, {{tt+|ca|terreny}}
* Cheyenne: {{tt|chy|ho'e}}
* Dutch: {{tt+|nl|land|n}}, {{tt+|nl|grond|m}}, {{tt+|nl|land|n}}
* Estonian: {{tt+|et|maa}}
* Finnish: {{tt+|fi|maa}}
* French: {{tt+|fr|terre|f}}, {{tt+|fr|terrain|m}}
* Georgian: {{tt|ka|მიწა}}
* German: {{tt+|de|Land|n}}, {{tt+|de|Land|p|alt=Länder}}
*: Rhine Franconian: {{tt|gmw-rfr|Lond}} {{qualifier|Palatine}}
* Greek: {{tt+|el|γαίες|f-p}}, {{tt+|el|εκτάσεις|f-p}}, {{tt+|el|κτήματα|n-p}}
* Hawaiian: {{tt|haw|ʻāina}}
* Ingrian: {{t|izh|maa}}, {{t|izh|mantu}}
* Japanese: {{tt+|ja|不動産|tr=ふどうさん, fudōsan}}, {{tt+|ja|土地|tr=とち, tochi}}
* Javanese: {{tt+|jv|lemah}} {{qualifier|ngoko}}, {{tt|jv|siti}} {{qualifier|krama}}
* Kabuverdianu: {{tt|kea|txon}}
* Khmer: {{tt+|km|ដី}}
* Korean: {{tt+|ko|땅}}, {{tt+|ko|토지(土地)}}, {{tt+|ko|부동산(不動産)}}
* Lao: {{t-needed|lo}}
* Lithuanian: {{tt+|lt|žemė|f}}
* Malay: {{tt+|ms|tanah}}
* Marathi: {{t|mr|जमीन|f}}
* Nahuatl: {{tt+|nah|tlālli}}, {{tt+|nah|tlali}}
* Ottoman Turkish: {{t|ota|طوپراق|tr=toprak}}
* Portuguese: {{tt+|pt|terra|f}}, {{tt+|pt|propriedade|f}}, {{tt+|pt|terreno|m}}
* Romanian: {{tt+|ro|teren|n}}, {{tt+|ro|pământ|n}}
* Russian: {{tt+|ru|земля́|f}}, {{tt+|ru|недви́жимость|f}}, {{tt|ru|[[земельный|земе́льная]] [[со́бственность]]|f}}
* Serbo-Croatian:
*: Cyrillic: {{tt|sh|по́сед|m}}, {{tt|sh|по́сјед|m}}
*: Roman: {{tt+|sh|pósed|m}}, {{tt+|sh|pósjed|m}}
* Spanish: {{t+|es|propiedad|f}}, {{t+|es|terreno|m}}, {{t+|es|posesión|f}}, {{t+|es|hacienda|f}}, {{t+|es|fundo|m}}, {{t+|es|terruño|m}}, {{t+|es|baldío|m}}, {{t+|es|predio|m}}, {{t+|es|finca|f}}, {{t+|es|conuco|m}}
* Swedish: {{tt+|sv|mark|c}}
* Tagalog: {{tt|tl|lupain}}
* Thai: {{t-needed|th}}
{{trans-bottom}}
{{trans-top|country or region}}
* Afrikaans: {{tt+|af|land}}
* Albanian: {{tt+|sq|tokë|f}}
* Arabic: {{tt|ar|بِلَاد|p}}, {{tt+|ar|أَرْض|f}}, {{tt+|ar|بَلَد|m}}
* Armenian: {{tt+|hy|երկիր}}
* Asturian: {{t+|ast|país|m}}, {{t+|ast|tierra|f}}
* Belarusian: {{tt+|be|краі́на|f}}, {{tt|be|зямля́|f}}
* Bengali: {{tt+|bn|দেশ}}
* Bulgarian: {{tt+|bg|страна́|f}}, {{tt+|bg|земя́|f}}
* Burmese: {{tt+|my|နိုင်ငံ}}
* Catalan: {{tt+|ca|terra}}
* Cherokee: {{tt|chr|ᎦᏙᎯ}}
* Chinese:
*: Cantonese: {{tt|yue|國家|tr=gwok3 gaa1}}
*: Dungan: {{tt|dng|гоцзя}}
*: Mandarin: {{tt+|cmn|國家|tr=guójiā}}
* Corsican: {{tt|co|paesu|m}}
* Czech: {{tt+|cs|země|f}}
* Danish: {{tt+|da|land|c}}
* Dolgan: {{tt|dlg|һир}}
* Dutch: {{tt+|nl|land|n}}
* Erzya: {{tt|myv|мастор}}, {{tt|myv|мода}}
* Esperanto: {{tt+|eo|lando}}
* Estonian: {{tt+|et|maa}}, {{tt+|et|riik}}
* Farefare: {{tt|gur|tɩŋa}}, {{tt|gur|tẽŋa}}
* Faroese: {{tt|fo|land|n}}
* Finnish: {{tt+|fi|maa}}
* French: {{tt+|fr|contrée|f}}, {{tt+|fr|pays|m}}
* Galician: {{tt+|gl|terra|f}}, {{tt+|gl|país|m}}
* German: {{tt+|de|Land|n}}, {{tt+|de|Land|p|alt=Länder}}
*: Rhine Franconian: {{tt|gmw-rfr|Lond}} {{qualifier|Palatine}}
* Gothic: {{tt|got|𐌻𐌰𐌽𐌳|n}}
* Greek: {{tt+|el|χώρα|f}}
*: Ancient: {{tt|grc|χώρα|f}}
* Hawaiian: {{tt|haw|ʻāina}}
* Hindi: {{tt+|hi|देश|m}}, {{tt+|hi|मुल्क|m}}
* Icelandic: {{tt+|is|land|n}}
* Indonesian: {{tt+|id|negara}}, {{tt+|id|negeri}}
* Ingrian: {{t|izh|maa}}, {{t|izh|riikki}}
* Italian: {{tt+|it|terra|f}}
* Japanese: {{tt+|ja|領土|tr=りょうど, ryōdo}}, {{tt+|ja|国土|tr=こくど, kokudo}}, {{tt+|ja|国家|tr=こっか, kokka}}, {{tt+|ja|国|tr=くに, kuni}}
* Kashmiri: {{tt|ks|مُلک}}
* Khmer: {{tt+|km|ប្រទេស}}, {{tt+|km|បទេស}}, {{tt+|km|រដ្ឋ}}
* Korean: {{tt+|ko|땅}}, {{tt+|ko|나라}}, {{tt+|ko|국가(國家)}}
* Kurdish:
*: Central Kurdish: {{tt+|ckb|وڵات}}
*: Northern Kurdish: {{tt+|kmr|welat|m}}
* Lakota: {{tt|lkt|makȟóčhe}}
* Lao: {{tt|lo|ປະເທດ}}, {{tt+|lo|ເມືອງ}}
* Latvian: {{tt+|lv|zeme|f}}
* Lithuanian: {{tt+|lt|kraštas|m}}, {{tt+|lt|šalis|f}}
* Lutuv: {{t|clt|ruo}}
* Luxembourgish: {{tt+|lb|Land|n}}
* Macedonian: {{tt+|mk|земја|f}}
* Malagasy: {{tt+|mg|tany}}
* Malay: {{tt+|ms|negara}}, {{tt+|ms|nasional}}
* Marathi: {{t+|mr|देश|m}}, {{t|mr|भूमी|f}}
* Mazanderani: {{tt|mzn|سامون|tr=samun}}
* Mongolian:
*: Cyrillic: {{tt+|mn|газар}}, {{tt+|mn|орон}}
* Moore: {{tt|mos|tenga}}, {{tt|mos|tẽnga}}
* Navajo: {{tt|nv|kéyah}}
* Ngarrindjeri: {{tt|nay|ruwe}}
* Nhengatu: {{tt|yrl|retama}}
* North Frisian: {{tt|frr|lönj|n}} {{qualifier|Mooring}}, {{tt|frr|Lun|n}} {{qualifier|Heligolandic}}
* Norwegian:
*: Bokmål: {{tt+|nb|land|n}}
* Ojibwe: {{tt|oj|aki}}
* Old Church Slavonic:
*: Cyrillic: {{tt|cu|землꙗ|f}}, {{tt|cu|страна|f}}
* Old East Slavic: {{tt|orv|землꙗ|f}}, {{tt|orv|краина|f}}
* Old English: {{tt+|ang|land|n}}
* Ottoman Turkish: {{t|ota|ایل|tr=il}}, {{t|ota|طوپراق|tr=toprak}}, {{t|ota|ارض|tr=arz}}, {{t|ota|تراب|tr=türâb}}, {{t|ota|ناحیه|tr=nâhiye}}
* Pannonian Rusyn: {{t|rsk|жем|f}}
* Persian:
*: Iranian Persian: {{tt|fa-ira|سَرْزَمین}}, {{tt|fa-ira|کِشْوَر}}, {{tt+|fa-ira|بوم}}, {{tt+|fa-ira|سامان}}
* Polish: {{tt+|pl|kraj|m}}, {{tt+|pl|kraina|f}}, {{tt+|pl|ziemia|f}}
* Portuguese: {{tt+|pt|terra|f}}
* Quechua: {{tt|qu|hallpa}}, {{tt|qu|marka}}
* Romanian: {{tt+|ro|țară|f}}
* Russian: {{tt+|ru|страна́|f}}, {{tt+|ru|земля́|f}}, {{tt+|ru|край|m}}
* Saterland Frisian: {{tt|stq|Lound|n}}
* Scottish Gaelic: {{tt|gd|talamh|m|f}}, {{tt|gd|tìr|f}}
* Serbo-Croatian:
*: Cyrillic: {{tt|sh|зѐмља|f}}
*: Roman: {{tt+|sh|zèmlja|f}}
* Sindhi: {{tt|sd|ملڪ}}
* Sinhalese: {{tt+|si|රට}}
* Slovak: {{tt+|sk|krajina|f}}, {{tt+|sk|zem|f}}
* Slovene: {{tt+|sl|dežela|f}}, {{tt+|sl|zemlja|f}}
* Southern Altai: {{t|alt|јер}}
* Spanish: {{tt+|es|patria|f}}, {{tt+|es|país|m}}
* Swahili: {{tt+|sw|nchi}}
* Swedish: {{tt+|sv|land|n}}
* Tamil: {{tt+|ta|நாடு}}, {{tt+|ta|தேசம்}}
* Taos: {{tt|twf|pǫ̏ʼóna}}
* Thai: {{tt+|th|ประเทศ}}, {{tt+|th|เมือง}}
* Turkish: {{t+|tr|ülke}}
* Ugaritic: {{tt|uga|𐎈𐎆𐎚}}, {{tt|uga|𐎀𐎗𐎕}}
* Ukrainian: {{tt+|uk|краї́на|f}}, {{tt+|uk|земля́|f}}
* Urdu: {{tt|ur|دیش|m}}, {{tt|ur|مُلْک|m}}
* Vietnamese: {{tt+|vi|quốc gia}}
* Welsh: {{tt+|cy|tir|m}}, {{tt+|cy|gwlad|f}}, {{tt+|cy|tiriogaeth|f}}
* West Frisian: {{tt+|fy|lân|n}}
* Yakut: {{tt|sah|сир}}
* Yiddish: {{tt|yi|לאַנד|n}}
* Yup'ik: {{tt|esu|nuna}}
{{trans-bottom}}
{{trans-top|someone's homeplace}}
* Albanian: {{tt+|sq|vend|m}}
* Asturian: {{t|ast|patria|f}}, {{t+|ast|tierra|f}}
* Bikol Central: {{tt|bcl|dagang tinubuan}}
* Chinese:
*: Cantonese: {{tt|yue|祖國|tr=zou2 gwok3}}
*: Mandarin: {{tt+|cmn|祖國|tr=zǔguó}}
* Czech: {{tt+|cs|vlast|f}}
* Dutch: {{tt+|nl|land|n}}, {{tt+|nl|vaderland|n}}
* Estonian: {{tt+|et|kodumaa}}
* Finnish: {{tt+|fi|kotimaa}}, {{tt+|fi|kotiseutu}}
* French: {{tt+|fr|pays|m}}, {{tt+|fr|patrie|f}}
* German: {{tt+|de|Vaterland|n}}
* Japanese: {{tt+|ja|祖国|tr=そこく, sokoku}}
* Korean: {{tt+|ko|조국}}
* Latin: {{tt+|la|patria}}
* Malagasy: {{tt+|mg|tanindrazana}}
* Portuguese: {{tt+|pt|terra|f}}
* Slovak: {{tt|sk|vlasť|f}}
* Spanish: {{t+|es|patria|f}}, {{t+|es|tierra|f}}
* Swedish: {{tt+|sv|fosterland}}
* Vietnamese: {{tt+|vi|tổ quốc}}
{{trans-bottom}}
{{trans-top|ground that is suitable for farming}}
* Albanian: {{tt+|sq|arë}}
* Asturian: {{t|ast|barrial|m}}, {{t|ast|suqueru|m}}, {{t|ast|vega|f}}
* Bengali: {{tt+|bn|জমি}}, {{tt+|bn|জমিন}}
* Bikol Central: {{tt+|bcl|daga}}
* Bulgarian: {{tt+|bg|земя|f}}
* Burmese: {{tt+|my|မြေ}}
* Buryat: {{tt|bua|хүдөө}}
* Cherokee: {{tt|chr|ᎦᏙᎯ}}
* Chinese:
*: Mandarin: {{tt+|cmn|土地|tr=tǔdì}}, {{tt+|cmn|農地|tr=nóngdì}}
* Dutch: {{tt+|nl|grond|f}}
* Estonian: {{tt+|et|maa}}
* Faroese: {{tt+|fo|jørð|f}}
* Finnish: {{tt+|fi|maa}}
* French: {{tt+|fr|terre|f}}
* Galician: {{tt+|gl|terra|f}}
* German: {{tt+|de|Land|n}}, {{tt+|de|Land|p|alt=Länder}}
* Icelandic: {{tt+|is|jörð|f}}
* Ingrian: {{t|izh|maa}}
* Italian: {{tt+|it|terreno|m}}, {{tt+|it|distesa|f}}, {{tt+|it|appezzamento|m}}
* Japanese: {{tt+|ja|土地|tr=とち, tochí}}, {{tt+|ja|農地|tr=のうち, nōchi}}
* Javanese: {{tt+|jv|lemah}} {{qualifier|ngoko}}, {{tt|jv|siti}} {{qualifier|krama}}
* Khmer: {{tt+|km|ដី|tr=dəy}}
* Korean: {{tt+|ko|땅}}, {{tt+|ko|토지(土地)}}
* Mongolian: {{tt+|mn|хөдөө}}
* Portuguese: {{tt+|pt|terra|f}}
* Quechua: {{tt+|qu|allpa}}
* Romanian: {{tt+|ro|pământ|n}} {{qualifier|arabil}}, {{tt+|ro|teren|n}} {{qualifier|cultivabil}}
* Russian: {{tt+|ru|земля́|f}}
* Serbo-Croatian: {{tt+|sh|zèmlja|f}}
* Spanish: {{t+|es|vega|f}}
* Swedish: {{tt+|sv|land|n}}
{{trans-bottom}}
{{trans-see|fright}}
{{trans-top|electronics: conducting area on a board or chip}}
* Finnish: {{tt|fi|johdinkuvio}}
{{trans-bottom}}
{{trans-top|in a compact disc, area which does not have pits}}
* Finnish: {{tt+|fi|tasanko}}
{{trans-bottom}}
{{trans-top|travel: non-airline portion of an itinerary}}
{{trans-bottom}}
{{trans-top|space between the rifling grooves in a gun}}
* Dutch: {{tt+|nl|trek|m}}
* Finnish: {{tt+|fi|harja}}
* Russian: {{tt|ru|[[по́ле]] [[нарез|наре́за]]|n}}
}}<!-- close {{multitrans}} -->
{{trans-bottom}}
==== ක්රියා පදය ====
{{en-verb}}
# {{lb|en|intransitive}} To descend to a [[surface]], especially from the air.
#: ''The plane is about to '''land'''''.
# {{lb|en|dated}} To [[alight]], to descend from a vehicle.
#* '''1859''', “Rules adopted by the Sixth Avenue Railway, N. Y.”, quoted in Alexander Easton, ''A Practical Treatise on Street or Horse-Power Railways'', page 108:
#*: 10. You will be civil and attentive to passengers, giving proper assistance to ladies and children getting in or out, and never start the car before passengers are fairly received or '''landed'''.
# {{lb|en|intransitive}} To come into rest.
# {{lb|en|intransitive}} To arrive on land, especially a [[shore]] or [[dock]], from a body of water.
#* {{quote-book|en|url=https://archive.org/details/pictorialhistory02taip/|title=A Pictorial History of the Republic of China: Its Founding and Development|volume=II|year=1981|location=Taipei|publisher=Modern China Press|OCLC=8883106
|page=303|pageurl=https://archive.org/details/pictorialhistory02taip/page/303/|column=1|text=Tatan and Erhtan are two small islands in the sea southwest of Kinmen.{{...}}A contingent of some 30 Communist troops tried to '''land''' at Erhtan, but were disarmed by Government defenders.}}
# {{lb|en|transitive}} To bring to land.
#: ''It can be tricky to '''land''' a helicopter''.
#: ''Use the net to '''land''' the fish.''
#* {{RQ:Shakespeare Henry 6-3|III|iii|passage=I'll undertake to '''land''' them on our coast.}}
# {{lb|en|transitive|informal}} To capture or arrest.
#* {{quote-journal|1=en|date=June 1920|journal=w:The Electrical Experimenter|location=New York| page=151|column=3|passage=`He told me that he was certain that Coates shot at him. We threw out a drag and '''landed''' Coates within an hour.'}}
# {{lb|en|transitive}} To [[acquire]]; to [[secure]].
#: {{ux|en|She '''landed''' a job at the company.}}
#* {{quote-journal|en|date=May 5, 2012| author=Phil McNulty| title=Chelsea 2-1 Liverpool| work=BBC Sport| url=http://www.bbc.co.uk/sport/0/football/17878435| passage=As Di Matteo celebrated and captain John Terry raised the trophy for the fourth time, the Italian increased his claims to become the permanent successor to Andre Villas-Boas by '''landing''' a trophy.}}
#* {{quote-journal|en|date=2024 May 1|title=Network News: Danes plan fully automated trains|journal=RAIL|issue=1008|page=18|text=Siemens has '''landed''' a contract to upgrade signalling on the entire 170km (105-mile) S-Bane suburban network in Copenhagen to pave the way for fully automated trains.}}
# {{lb|en|slang|transitive}} To succeed in having sexual relations with; to [[score]]
#: {{ux|en|Too ugly to ever '''land''' a chick}}
# {{lb|en|transitive}} (''of a blow'') To [[deliver]].
#: ''If you '''land''' a knockout blow, you’ll win the match''
# {{lb|en|intransitive}} (''of a punch'') To [[connect]]
#: {{ux|en|If the punches '''land''', you might lose a few teeth!}}
# {{lb|en|intransitive}} To go down well with an audience.
#: {{ux|en|Some of the comedian's jokes failed to '''land'''.}}
#* {{quote-av
|en
|date=January 13, 2023
|author=Anonymous ("Jackal Comment")
|time=11:08
|title=CORRECTIONS Episode 68: Week of Monday, January 9
|series=w:Late Night with Seth Meyers
|publisher=w:YouTube
|url=https://www.youtube.com/watch?v=ayvrCwR5nrg
|text=We told an Amelia Earhart joke yesterday- did not go great with the audience. Someone wrote: "You can't be surprised when an Amelia Earhart joke doesn't '''land'''."}}
===== ව්යුත්පන්න යෙදුම් =====
{{col4|en|title=terms derived from the verb ''land''
|black land
|crash-land|land down
|hard-land
|hard land
|soft-land
|soft land
|land on one's bridge
|land up
|land in someone's lap
|reland|land on|land upon|land with
}}
===== පරිවර්තන =====
{{trans-top|to descend to a surface, especially from the air}}{{multitrans|data=
* Albanian: {{t-needed|sq}}
* Arabic: {{tt|ar|هَبَطَ}}
* Armenian: {{t-needed|hy}}
* Asturian: {{t+|ast|aterrizar}}, {{t+|ast|posar}}
* Azerbaijani: {{tt+|az|enmək}}
* Basque: {{t|eu|lurreratu}}
* Belarusian: {{tt|be|прызямля́цца|impf}}, {{tt|be|прызямлі́цца|pf}}
* Breton: {{tt+|br|douarañ}}
* Bulgarian: {{tt|bg|приземявам|impf|alt=приземя́вам се}}, {{tt|bg|приземя|pf|alt=приземя́ се}}
* Catalan: {{tt+|ca|aterrar}}, {{t|ca|aterrar-se}}
* Chinese:
*: Mandarin: {{tt+|cmn|著地}}, {{tt|cmn|着地|tr=zhuódì}}, {{tt+|cmn|著陸}}, {{tt+|cmn|着陆|tr=zhuólù}}
* Czech: {{tt|cs|přistávat|impf}}, {{tt+|cs|přistát|pf}}
* Danish: {{tt+|da|lande}}
* Dutch: {{tt+|nl|landen}}
* Esperanto: {{tt|eo|surteriĝi}}, {{tt|eo|alteriĝi}}
* Estonian: {{tt|et|maanduma}}
* Ewe: {{tt|ee|dze}}
* Finnish: {{tt+|fi|laskeutua}}
* French: {{tt+|fr|poser|alt=se poser}}, {{tt+|fr|atterrir}}
* Galician: {{tt+|gl|pousar}}, {{tt+|gl|aterrar}}
* Georgian: {{t-needed|ka}}
* German: {{tt+|de|landen}}
* Greek: {{tt+|el|προσγειώνομαι}}
* Hebrew: {{tt+|he|נָחַת|tr=nakhát}}
* Hindi: {{tt|hi|अवतरण करना}}, {{tt+|hi|उतरना}}
* Hungarian: {{tt+|hu|leszáll}}, {{tt+|hu|landol}}
* Icelandic: {{tt|is|lenda}}
* Irish: {{t|ga|tuirling}}
* Italian: {{t+|it|atterrare}}
* Japanese: {{tt+|ja|着陸|alt=着陸する|tr=ちゃくりくする, chakurikú suru}}, {{tt+|ja|上陸|alt=上陸する|tr=じょうりくする, jōriku suru}}
* Kabuverdianu: {{tt|kea|atera}}, {{tt|kea|aterrá}}
* Khmer: {{tt+|km|ចត}}, {{tt+|km|ចុះ}}, {{tt|km|ចុះចត|tr=coh cɑɑt}}
* Korean: {{tt+|ko|내리다}}, {{tt+|ko|착륙하다}}
* Lao: {{tt|lo|ລົງ}}
* Latvian: {{tt|lv|nolaisties}}
* Lithuanian: {{tt|lt|nusileisti}}, {{tt|lt|nutūpti}}
* Malay: {{tt+|ms|darat}}, {{tt|ms|mendarat}}
* Maori: {{tt+|mi|tau}}
* Norwegian:
*: Bokmål: {{tt+|nb|lande}}
* Ojibwe: {{tt|oj|boonii}}
* Polish: {{tt+|pl|lądować|impf}}, {{tt+|pl|wylądować|pf}}
* Portuguese: {{tt+|pt|aterrar}}, {{tt+|pt|pousar}}, {{tt+|pt|aterrissar}}
* Romanian: {{tt+|ro|ateriza}}
* Russian: {{tt+|ru|приземля́ться|impf}}, {{tt+|ru|приземли́ться|pf}}
* Slovene: {{tt+|sl|pristati|pf}}
* Spanish: {{tt+|es|aterrizar}}, {{q|on Mars}} {{tt+|es|amartizar}}, {{q|on the Moon}} {{tt+|es|alunizar}}
* Swedish: {{tt+|sv|landa}}
* Telugu: {{tt|te|వాలిపో}}
* Thai: {{tt+|th|ลง}}
* Tibetan: {{tt|bo|འབབ་པ}}
* Turkish: {{tt+|tr|inmek}}
* Ukrainian: {{tt|uk|приземля́тися|impf}}, {{tt|uk|приземли́тися|pf}}
* Vietnamese: {{tt+|vi|hạ cánh}}
* Walloon: {{t+|wa|ateri}}, {{t|wa|si rabate}} {{qualifier|birds}}
* Welsh: {{tt+|cy|glanio}}
* Yiddish: {{tt|yi|לאַנדן}}
{{trans-bottom}}
{{trans-top|to come into rest}}
* Finnish: {{tt+|fi|asettua}}
{{trans-bottom}}
{{trans-top|to arrive at land, especially a shore, or a dock, from a body of water}}
* Asturian: {{t|ast|terrar}}, {{t|ast|atracar}}
* Bulgarian: {{tt+|bg|дебарки́рам|impf|pf}}
* Catalan: {{tt+|ca|atracar}}
* Chinese:
*: Mandarin: {{tt+|cmn|登陸|tr=dēnglù}}, {{tt+|cmn|上陸|tr=shànglù}}
* Czech: {{tt+|cs|přistát}}
* Esperanto: {{tt|eo|alteriĝi}}, {{tt|eo|albordiĝi}}
* Finnish: {{tt|fi|nousta maihin}}
* French: {{tt+|fr|aborder}}
* Georgian: {{t-needed|ka}}
* Japanese: {{tt+|ja|上陸|tr=じょうりくする, jōriku suru|alt=上陸する}}
* Korean: {{tt+|ko|닿다}}, {{tt|ko|상륙하다}}
* Latin: {{tt|la|egredior}}
* Malay: {{tt+|ms|darat}}, {{tt|ms|mendarat}}
* Maori: {{tt|mi|mahuta}}, {{tt|mi|eke}}, {{tt|mi|ū}}
* Middle English: {{tt|enm|londen}}, {{tt|enm|lenden}}
* Norman: {{tt|nrf|aborder}}
* Polish: {{tt|pl|dobić do brzegu}}
* Portuguese: {{tt+|pt|desembarcar}}
* Russian: {{tt+|ru|выса́живаться|impf}}, {{tt+|ru|вы́садиться|pf}}, {{tt+|ru|прича́ливать|impf}}, {{tt+|ru|прича́лить|pf}}
* Slovene: {{tt+|sl|pristati}}
* Spanish: {{tt+|es|aterrar}}, {{t+|es|atracar}}
* Swedish: {{tt+|sv|landa}}, {{tt+|sv|lägga till}}
* Turkish: {{tt+|tr|inmek}}
* Yiddish: {{tt|yi|לאַנדן}}
{{trans-bottom}}
{{trans-top|to bring to land}}
* Asturian: {{t+|ast|aterrizar}}
* Danish: {{tt+|da|lande}}
* Dutch: {{t+check|nl|landen|alt=doen landen}} <!-- was "doen [[landen]]" - assumed inflected form or vocalised spelling; please verify if linking is acceptable. see [[User:Kephir/gadgets/xte#Translation_fixing]] -->, {{t-check|nl|[[aan]] [[de]] [[grond]] [[zetten]]}} <!-- was "aan de grond zetten" - assumed sum-of-parts; if an idiom, remove the wikilinks to the individual words. see [[User:Kephir/gadgets/xte#Translation_fixing]] -->
* Esperanto: {{tt|eo|albordigi}}, {{tt|eo|alterigi}}
* Estonian: {{tt|et|maandama}}
* Finnish: {{tt|fi|[[tuoda]] [[maihin]]}}; {{tt+|fi|laskeutua}} {{qualifier|of aircraft}}
* French: {{tt+|fr|poser}}
* Georgian: {{t-needed|ka}}
* German: {{tt+|de|landen}}
* Greek: {{tt+|el|προσγειώνω}}
* Hebrew: {{tt|he|הנחית|tr=hinkhít}}
* Japanese: {{t+check|ja|着陸|alt=着陸する|tr=[[ちゃくりく]][[する]], chakuriku suru}}, {{t-check|ja|[[上陸]][[させる]]|tr=[[じょうりく]][[させる]], jōriku saseru}}
* Korean: {{tt+|ko|내리다}}, {{qualifier|for cargo}} {{tt+|ko|부리다}}
* Maori: {{tt|mi|whakaū}}
* Middle English: {{tt|enm|londen}}
* Norwegian: {{tt+|no|lande}}
* Portuguese: {{tt+|pt|aterrissar}}, {{tt+|pt|aterrar}}
* Russian: {{tt+|ru|выса́живать|impf}}, {{tt+|ru|вы́садить|pf}} {{qualifier|usually of people}}, {{tt+|ru|выгружа́ть|impf}}, {{tt+|ru|вы́грузить|pf}}, {{tt+|ru|приземля́ть|impf}}, {{tt+|ru|приземли́ть|pf}} {{qualifier|aircraft}}
* Spanish: {{tt+|es|aterrizar}}
* Swedish: {{tt+|sv|landa}}, {{tt+|sv|föra}} {{tt+|sv|i}} {{tt+|sv|land}}
* Thai: {{tt|th|เครื่องบินลงสู่พื้น|tr=krêuang bin long sòo péun}}
* Turkish: {{tt+|tr|indirmek}}
* Yiddish: {{tt|yi|לאַנדן}}
{{trans-bottom}}
{{trans-top|to acquire; to secure}}
* Catalan: {{t+|ca|pescar}}
* Finnish: {{t|fi|[[hankkia]] [[itselleen]]}}
* German: {{t|de|an Land ziehen}}
* Irish: {{t+|ga|faigh}}
}}<!-- close {{multitrans}} -->
{{trans-bottom}}
{{trans-see|to deliver|deliver}}
=== නිරුක්තිය 2 ===
From {{inh|en|enm|*land}}, from {{inh|en|ang|hland}}. More at {{m|en|lant}}.
==== නාම පදය ====
{{en-noun|-}}
# [[lant]]; [[urine]]
=== මූලාශ්ර ===
<references/>
* {{R:Webster 1913}}
{{catlangname|en|ergative verbs}}
{{C|en|Landforms}}
==Afrikaans==
=== නිරුක්තිය ===
{{root|af|ine-pro|*lendʰ-|id=land}}
From {{inh|af|nl|land}}, from {{inh|af|odt|lant}}, from {{inh|af|gem-pro|*landą}}, from {{inh|af|ine-pro|*lendʰ-||land, heath|id=land}}.
=== උච්චාරණය ===
* {{IPA|af|/lant/|[länt]|[lant]}}
* {{audio|af|LL-Q14196 (afr)-Oesjaar-land.wav}}
=== නාම පදය ===
{{af-noun|lande}}
# [[country]]; [[nation]]
== ඩෙන්මාර්ක ==
=== උච්චාරණය ===
* {{IPA|da|/lanˀ/|[lanˀ]}}
* {{rhymes|da|and|s=1}}
=== නිරුක්තිය 1 ===
{{root|da|ine-pro|*lendʰ-|id=land}}
From {{inh|da|gmq-oda|land}}, from {{inh|da|non|land}}, from {{inh|da|gem-pro|*landą}}, cognate with {{cog|en|land}}, {{cog|de|Land}}.
==== නාම පදය ====
{{da-noun|et|e}}
# [[country]] {{q|a geographical area that is politically independent}}
#: {{synonyms|da|stat|nation}}
# {{lb|da|uncountable|chiefly|definite singular}} [[country]], [[countryside]] {{q|rural areas outside the cities with agricultural production}}
# {{l|en|land}} {{q|part of Earth that is not covered in water}}
# {{lb|da|as the last part of compounds}} {{non-gloss|a large area or facility dedicated to a certain type of activity or merchandise}}
===== භාවිත සටහන් =====
In compounds: land-, lande-, lands-.
===== වරනැඟීම =====
{{da-decl|et|e}}
===== ව්යුත්පන්න යෙදුම් =====
{{col-top|2|Terms derived from {{l|da|land||country, nation}}}}
* {{l|da|eventyrland}}
* {{l|da|fædreland}}
* {{l|da|landeplage}}
* {{l|da|landsmand}}
* {{l|da|landsdækkende}}
* {{l|da|naboland}}
* {{l|da|olieland}}
{{col-bottom}}
{{col-top|2|Terms derived from {{l|da|land||countryside}}}}
* {{l|da|agerland}}
* {{l|da|landbrug}}
* {{l|da|landluft}}
* {{l|da|landmand}}
* {{l|da|landmiljø}}
{{col-bottom}}
{{col-top|2|Terms derived from {{l|da|land||(dry) land}}}}
* {{l|da|fastland}}
* {{l|da|lande}}
* {{l|da|landfast}}
{{col-bottom}}
{{col-top|2|Terms derived from {{l|da|land||amusement park}}}}
* {{l|da|badeland}}
* {{l|da|legeland}}
* {{l|en|Legoland}}
* {{l|da|sommerland}}
* {{l|da|vandland}}
{{col-bottom}}
=== නිරුක්තිය 2 ===
{{nonlemma}}
==== ක්රියා පදය ====
{{head|da|verb form}}
# {{inflection of|da|lande||imp|nocat=1}}
== ඕලන්ද ==
=== උච්චාරණය ===
* {{IPA|nl|/lɑnt/}}
* {{audio|nl|Nl-land.ogg}}
* {{hyphenation|nl|land}}
* {{rhyme|nl|ɑnt|s=1}}
=== නිරුක්තිය 1 ===
{{root|nl|ine-pro|*lendʰ-|id=land}}
From {{inh|nl|dum|lant}}, from {{inh|nl|odt|lant}}, from {{inh|nl|gmw-pro|*land}}, from {{inh|nl|gem-pro|*landą}}, from {{der|nl|ine-pro|*lendʰ-||land, heath|id=land}}.
==== නාම පදය ====
{{nl-noun|n|-en|+}}
# {{l|en|land}}, [[country]], [[realm]], [[territory]]
#* '''1967''', E. Rijpma & F. G. Schuringa, edited by Jan van Bakel, ''Nederlandse spraakkunst'', 21st ed., p. 24, § 8 (also [https://www.dbnl.org/tekst/rijp001nede01_01/ online at dbnl.org]):
#*: {{quote|nl|In ons '''land''' werd door de Westgermaanse volksstammen het Nederduits (Nederfrankisch en Saksisch) en het Fries gesproken.<br/>Het Nederfrankisch wordt wel verdeeld in: (1) het Hollands-Frankisch (Hollands, Utrechts, Westveluws, Zeeuws, Westvlaams); (2) het Brabants-Frankisch (Westbetuws, Westbrabants, Antwerps, Kempens, Leuvens, Aalsters, Oostvlaams); (3) het Limburgs-Frankisch (Gelders-Limburgs, Limburgs, Oostbrabants).<br/>Het Saksisch (Gelders-Overijssels, Oostveluws, Drents, Gronings) wordt gesproken in het noordoosten van ons '''land''', van Groningen tot de Oude Ijssel.}}
# {{l|en|land}} {{gloss|part of Earth not covered by water}}
# {{lb|nl|Netherlands|Antilles}} a [[constituent country]] of the Kingdom of the Netherlands; the [[territorial]] [[government]] of an overseas constituent country
#* {{quote-web|nl
|title=Gerechtshof: lhbt’s mogen trouwen op Aruba en Curaçao
|trans-title=Appellate court: LGBT people allowed to marry in Aruba and Curaçao
|author=Oscar van Dam; John Samson
|url=https://caribischnetwerk.ntr.nl/2022/12/06/gerechtshof-lhbts-mogen-trouwen-op-aruba-en-curacao/
|work={{w|Omroep NTR|Caribisch Netwerk}}
|date=6 December 2022
|access-date=14 December 2022
|text=Het zijn twee verschillende uitspraken die vandaag door het gerechtshof achter elkaar zijn gedaan. Voor Aruba gaat het om het een zaak van Fundacion Orguyo Aruba en twee vrouwen tegen het '''Land''' Aruba. Voor Curaçao gaat het om een zaak van Human Rights Caribbean Foundation en twee vrouwen tegen het '''Land''' Curaçao.
|translation=Today's rulings are two separate ones handed down by the appellate court back-to-back. For Aruba, it involves a case brought by Fundacion Orguyo Aruba and two women against the '''government''' of Aruba. For Curaçao, it involves a case brought by Human Rights Caribbean Foundation and two women against the '''government''' of Curaçao.}}
# {{lb|nl|history|chiefly in compounds}} the territorial government or state authority in a Dutch colony or overseas territory in the West Indies
===== ව්යුත්පන්න යෙදුම් =====
{{col|nl
|achterland
|Adélieland
|Avondland
|bijland
|binnenland
|boerenland
|braakland
|buitenland
|de Russen zijn in het land
|eiland
|hoogland
|in den lande
|kernland
|laagland
|landadel
|landbouw
|landdag
|landdrost
|landen
|landerij
|landsdienaar
|landgenoot
|landjepik
|landleeuw
|landhuis
|landleger
|landman
|landmassa
|landmijn
|landraad
|landrot
|landsbelang
|landsneger
|landschap
|landskind
|landsknecht
|landsregeling
|landsslaaf
|landstorm
|landsverdediging
|landsverordening
|landsvergadering
|landvoogd
|landweer
|moederland
|niemandsland
|platteland
|proletariërs aller landen, verenigt u
|thuisland
|vaderland
|vasteland
|voorland
|zeeland
|Zeeland
}}
=====Descendants=====
* {{desc|af|land}}
* {{desc|brc|alanda|landi}}
* {{desc|dcr|land|lant|lan}}
* {{desc|skw|land|lantta}}
* {{desc|srn|lanti|bor=1}} {{see desc}}
* {{desc|unc=1|jv|ꦭꦤ꧀}}
=== නිරුක්තිය 2 ===
{{nonlemma}}
==== ක්රියා පදය ====
{{head|nl|verb form}}
# {{infl of|nl|landen||bare-verb}}
{{C|nl|Landforms}}
==Elfdalian==
=== නිරුක්තිය ===
{{root|ovd|ine-pro|*lendʰ-|id=land}}
From {{inh|ovd|non|land}}, from {{inh|ovd|gem-pro|*landą}}, from {{der|ovd|ine-pro|*lendʰ-||land, heath|id=land}}. Cognate with {{cog|sv|land}}.
=== නාම පදය ===
{{head|ovd|noun|g=n}}
# [[country]]; [[nation]]
==== වරනැඟීම ====
{{ovd-decl-blank-full<!--
-->|title=''land''<!--
-->|stem=strong ''a''-stem<!--
-->|g=neuter<!--
-->|nsi=land<!--
-->|asi=land<!--
-->|dsi=lande<!--
-->|gsi=—<!--
-->|nsd=landeð<!--
-->|asd=landeð<!--
-->|dsd=landę<!--
-->|gsd=—<!--
-->|npi=land<!--
-->|api=land<!--
-->|dpi=landum<!--
-->|gpi=—<!--
-->|npd=landę<!--
-->|apd=landę<!--
-->|dpd=landum(e)<!--
-->|gpd=—<!--
-->}}<!--
-->{{catlangname|ovd|a-stem nouns}}<!--
--><noinclude>
{{C|ovd|Law|Collectives|Geography}}
==Faroese==
=== උච්චාරණය ===
* {{IPA|fo|/lant/}}
* {{rhymes|fo|ant}}
=== නිරුක්තිය 1 ===
{{root|fo|ine-pro|*lendʰ-|id=land}}
From {{inh|fo|non|land}}, from {{inh|fo|gem-pro|*landą}}, from {{der|fo|ine-pro|*lendʰ-||land, heath|id=land}}.
==== නාම පදය ====
{{fo-noun|n|lands|lond}}
# {{l|en|land}}
# [[coast]]
# [[country]], [[nation]]
# [[ground]], [[soil]]
# the [[state]]
===== වරනැඟීම =====
{{fo-decl-noun-n8|l|nd}}
===== ආශ්රිත යෙදුම් =====
* {{l|fo|landa}}
=== නිරුක්තිය 2 ===
From {{inh|fo|non|hland}}, from {{inh|fo|gem-pro|*hlandą}}, from {{der|fo|ine-pro|*klān-||liquid, wet ground}}. Cognate with {{cog|lt|klanas||pool, puddle, slop}}.
==== නාම පදය ====
{{fo-noun|n|lands|-}}
# {{lb|fo|uncountable}} [[urine]]
===== වරනැඟීම =====
{{fo-decl-noun-n8-s|l|nd}}
== ප්රංශ ==
=== නාම පදය ===
{{fr-noun|m|+|länder}}
# {{l|en|land}} {{gloss|region of Germany or Austria}}
==Gothic==
=== රෝමානුකරණය ===
{{got-rom}}
# {{romanization of|got|𐌻𐌰𐌽𐌳}}
== අයිස්ලන්ත ==
=== නිරුක්තිය ===
{{root|is|ine-pro|*lendʰ-|id=land}}
From {{inh|is|non|land}}, from {{inh|is|gem-pro|*landą}}, from {{der|is|ine-pro|*lendʰ-||land, heath|id=land}}.
=== උච්චාරණය ===
* {{IPA|is|/lant/}}
* {{rhymes|is|ant|s=1}}
=== නාම පදය ===
{{is-noun|@@}}
# {{lb|is|uncountable}} {{l|en|land}}, [[earth]], [[ground]] (part of the Earth not under water)
# {{lb|is|countable}} [[country]]
#: {{ux|is|Japan er fallegt '''land'''.|Japan is a beautiful '''country'''.}}
# {{lb|is|uncountable}} [[countryside]], [[country]]
#: {{ux|is|Ég bý úti á '''landi'''.|I live in the '''country'''.}}
# {{lb|is|uncountable}} land, as a mass noun, measurable in quantity
# {{lb|is|countable}} [[tract]]s of land, an [[estate]]
#: {{ux|is|Ég á þetta '''land''' og allt sem er á því.|I own this '''land''' and everything on it.}}
==== වරනැඟීම ====
{{is-ndecl|n}}
==== ව්යුත්පන්න යෙදුම් ====
{{col3|is|láta lönd og leið<t:to not [[give a damn]] about something>
|draga að landi<t:to [[eat]] someone's [[leftover]]s>
|draga í land<t:to [[give in]] a little>
|eiga langt í land<t:of something- to have a long way to go/to be finished>
|föðurland
|landlægur
|sinn er siður í landi hverju
|útland
|með lögum skal land byggja
|leggja land undir fót
|Ísland
|Grænland
|Frakkland
|Finnland
|Svartfjallaland
|Þýskaland
}}
== මධ්යකාලීන ඉංග්රීසි ==
=== නාම පදය ===
{{head|enm|noun}}
# {{alt form|enm|lond}}
==Norwegian Bokmål==
=== උච්චාරණය ===
* {{IPA|nb|/lɑnː/}}
* {{rhymes|nb|ɑnː}}
=== නිරුක්තිය 1 ===
{{root|nb|ine-pro|*lendʰ-|id=land}}
From {{inh|nb|non|land}}, from {{der|nb|gem-pro|*landą}}, from {{der|nb|ine-pro|*lendʰ-||land, heath|id=land}}.
==== නාම පදය ====
{{nb-noun-n1}}
# [[country]]
# {{l|en|land}}
===== ව්යුත්පන්න යෙදුම් =====
{{col3|nb
|beiteland
|Det hellige land
|Dronning Maud Land
|drømmeland
|fastland
|fjelland
|foregangsland
|grenseland
|hjemland
|i land
|Ildlandet
|ingenmannsland
|innenlandsk
|innland
|jordbruksland
|landareal
|landbruk
|landegrense
|landemerke
|landesorg
|landfast
|landgang
|landkode
|landkrabbe
|landlig
|landmasse
|landområde
|landsby
|landsbygd
|landsdel
|landsgjennomsnitt
|landskilpadde
|landskode
|landslag
|landsmann
|landsmål
|landsomfattende
|landssviker
|lavland
|medlemsland
|middelhavsland
|moderland
|naboland
|omland
|opprinnelsesland
|produsentland
|pålandsvind
|sletteland
|Sørlandet
|utenlandsk
|utland
|utviklingsland
|Vestlandet
|Østlandet
}}
=== නිරුක්තිය 2 ===
==== ක්රියා පදය ====
{{head|nb|verbf}}
# {{infl of|nb|lande||imp}}
=== මූලාශ්ර ===
* {{R:The Bokmål Dictionary}}
==Norwegian Nynorsk==
=== වෙනත් ආකාර ===
* {{alt|nn|lainnj||eye dialect spelling}}
=== උච්චාරණය ===
* {{IPA|nn|/lanː/|/land/}}
=== නිරුක්තිය 1 ===
{{root|nn|ine-pro|*lendʰ-|id=land}}
From {{inh|nn|non|land}}, from {{der|nn|gem-pro|*landą}}, from {{der|nn|ine-pro|*lendʰ-||land, heath|id=land}}. Akin to {{cog|en|land}}.
==== නාම පදය ====
{{nn-noun-n1}}
# [[country]]
#: {{ux|nn|Noreg er eit '''land''' i nord.|Norway is a '''country''' in the north.}}
# {{l|en|land}}
#: {{ux|nn|Det var mangel på '''land''' for jordbruk.|There was a lack of '''land''' for agriculture.}}
# [[coast]], [[dry land]]
===== ව්යුත්පන්න යෙදුම් =====
{{col3|nn
|Austlandet
|beiteland
|Dronning Maud Land
|fastland
|fjelland
|grenseland
|i land
|ingenmannsland
|innanlandsk
|innland
|jordbruksland
|landareal
|landbruk
|lande,landa
|landegrense
|landemerke
|landesorg
|landfast
|landgang
|landkode
|landkrabbe
|landleg
|landmasse
|landområde
|landsby
|landsdel
|landsgjennomsnitt
|landskode
|landslag
|landsmann
|landsmål
|landssvikar
|medlemsland
|middelhavsland
|moderland
|naboland
|omland
|produsentland
|pålandsvind
|sletteland
|Sørlandet
|utanlandsk
|utland
|utviklingsland
|Vestlandet
}}
=== නිරුක්තිය 2 ===
From {{inh|nn|non|hland}}, from {{inh|nn|gem-pro|*hlandą}}.
==== නාම පදය ====
{{nn-noun-n1}}
# [[urine]] from [[livestock]]
=== මූලාශ්ර ===
* {{R:The Nynorsk Dictionary}}
{{C|nn|Bodily fluids}}
==Old Danish==
=== නිරුක්තිය ===
{{root|gmq-oda|ine-pro|*lendʰ-|id=land}}
From {{inh|gmq-oda|non|land}}, from {{inh|gmq-oda|gem-pro|*landą}}.
=== නාම පදය ===
{{head|gmq-oda|noun|g=n|genitive|lanz|plural|land}}
# {{l|en|land}}
#* {{quote-text|gmq-oda|year=1241|title=Codex Holmiensis|section=prologue
|passage=Mæth logh skal '''land''' byggæs.
|translation=''With law shall '''land''' be built.''}}
==== වරනැඟීම ====
{{gmq-oda-decl-scy|land|landit|land|landin|land|landit|land|landin|landi|landinu|landum|landunum|lanz|lanzins|landa|landanna}}
====Descendants====
* {{desc|da|land}}
== පුරාතන ඉංග්රීසි ==
=== වෙනත් ආකාර ===
* {{alter|ang|lond|lænd}}
=== නිරුක්තිය ===
{{etymon|ang|inh|gmw-pro>*land>area of ground|id=area of ground}}
From {{inh|ang|gmw-pro|*land}}, from {{inh|ang|gem-pro|*landą}}. See there for more.
=== උච්චාරණය ===
* {{ang-IPA|land|lɔnd}}
=== නාම පදය ===
{{ang-noun|n}}
# {{l|en|land}} (dry portion of the Earth's surface)
# a [[country]]
# [[region]] within a country: [[district]], [[province]]
# the [[country]], [[countryside]]
# [[owned]] or tilled land, an [[estate]]
==== භාවිත සටහන් ====
* Using the word ''land'' is the most common way to form country names. This can be done in one of two ways:
** Prefixing the name of a people to the word ''land''. Ex: {{m|ang|Franca||French person}} → {{m|ang|Francland||France}}, {{m|ang|Swēo||Swede}} → {{m|ang|Swēoland||Sweden}}, and {{m|ang|*Unger||a Hungarian}} → {{m|ang|Ungerland||Hungary}}.
** Prefacing ''land'' with the genitive plural form of a people, producing the literal meaning “land of ____ people.” Ex: {{m|ang|Egypta land|t=Egypt|lit=land of the Egyptians}}, {{m|ang|Siġelhearwena land|t=Ethiopia|lit=land of the Ethiopians}}.
* However, country names can also be formed other ways. For instance, words other than ''land'' are used: {{m|ang|Dene||a Dane}} → {{m|ang|Denemearc|t=Denmark|lit=Dane borderland}}. It is also very common to use the name of a people for the country they inhabit: ''On þām dagum wæs Alexander ġeboren on <u>Crēcum</u> swā swā miċel ȳst cōme ofer ealne middanġeard'' (“In those days, Alexander was born in <u>Greece</u> [lit. ''in the Greeks''] like a great storm coming over the whole world”), ''Ymb twā ġēar þæs þe hē cōm of <u>Francum</u>, hē ġefōr'' (”Two years after he came from <u>France</u> [lit. ''from the Franks''], he died”). In addition, country names are sometimes loaned directly from Latin: {{m|ang|Arabia}}, {{m|ang|Isrāhēl}}, {{m|ang|Italia}}, {{m|ang|Syria}}. Finally, some country names are simply idiomatic: {{m|ang|Norþweġ|t=Norway|lit=north way}}.
* Unlike most words, ''land'' undergoes {{w|i-umlaut}} when combined with the suffix {{m|ang|-isċ}}: {{m|ang|inlendisċ||native}}, {{m|ang|uplendisċ||rural}}.
==== වරනැඟීම ====
{{ang-decl-noun-a-n|land}}
==== ව්යුත්පන්න යෙදුම් ====
{{col4|ang|title=Derived prefix terms|landādl<t:nostalgia for one's homeland><g:f>
|landāgend<t:landowner><g:m>
|landār<t:land holdings, a landed estate><g:f>
|landbegang<t:land tilling or dwelling><g:m>
|landbegenġa<t:husbandman, farmer><g:m>
|landbōc<t:land charter><g:f>
|landbrǣċe<t:land breaking or ploughing><g:m>
|landbūend<t:husbandman, a native><g:m>
|landbūend<t:a settlement, colony><g:f>
|landbūende<t:dwelling in a land, living on earth>
|landbūnes<t:a settlement, a colony><g:f>
|landċēap<t:fine or tax on bought land><g:m>
|landcofa<t:the old city of Shechem><g:m>
|landefne<t:amount of land holdings><g:n>
|landfæsten<t:a land fastness, a stronghold><g:n>
|landfeoh<t:a land rent or tax><g:n>
|landfierd<t:land army><g:f>
|landfierding<t:terrestrial military operations><g:f>
|landfolc<t:the people of the land><g:n>
|landfruma<t:prince><g:m>
|landġehwearf<t:land swap><g:n>
|landġemaca<t:neighbor><g:m>
|landġemǣre<t:border><g:n>
|landġemierċe<t:border><g:n>
|landġesċeaft<t:the earth's creation & created things><g:n>
|landġeweorc<t:a land's main stronghold><g:n>
|landġewyrpe<t:earthen heaps cast up><g:n>
|landhæbbende<t:landowning, land-having as a ruler>
|landhæfen<t:land holdings><g:f>
|landhere<t:land army><g:m>
|landhlāford<t:landlord><g:m>
|landhredding<t:redemption of mortgaged land><g:f>
|landielf<t:land elf><g:f>
|landlagu<t:law in a district><g:f>
|landlēas<t:landless>
|landlēod<t:an inhabitant or the people of a land><g:m>
|landlēoda<t:a native of a land><g:m>
|landlyre<t:loss of land><g:m>
|landmann<t:a native of a land><g:m>
|landmearc<t:boundary of a land or an estate><g:f>
|landmearc<t:belonging to a land's boundaries>
|landmearca<t:a territory><g:m>
|landopenung<t:a breaking up of land><g:f>
|landrǣden<t:district or country ordinance, disposition, or institution><g:f>
|landrest<t:grave><g:f>
|landrīċa<t:landlord><g:f>
|landrīċe<t:territory><g:n>
|landriht<t:the law of the land><g:n>
|landsǣta<t:settler, colonist><g:m>
|landsċeap<t:district or swath of land, landscape><g:n>
|landsċearu<t:a share or deal of land><g:f>
|landsċipe<t:a region or swath of land><g:m>
|landseten<t:land possession or occupation thereof><g:f>
|landsetla<t:a settler or tenant><g:m>
|landsidu<t:custom of the land><g:m>
|landsittende<t:occupying land>
|landsōcn<t:land or country seeking><g:f>
|landspēd<t:land holdings><g:f>
|landspēdiġ<t:rich in land holdings or estates>
|landsplott<t:a small plot of ground><g:m>
|landstede<t:a land><g:m>
|landstyċċe<t:a small plot of land><g:n>
|landwaru<t:people of land, a land><g:f>
|landweard<t:the warden of a land, a prince><g:m>
|landwela<t:the earth's wealth><g:m>
|lendan<t:to land>
}}
{{col4|ang|title=Derived suffix terms|
|ātland<t:land for the growing of oats, oatland>
|ælmesland<t:land bequeathed in frankalmoigne, i.e. rich in land is rich in soul><g:m>
|bēanland<t:land for the growing of beans, beanland>
|behātland<t:promised land>
|belandian<t:to deprive of land, dispossess>
|belendan<t:to deprive of land, dispossess>
|bēodland<t:land to defray food consumption, as in a monastery>
|berland<t:land for the growing of barley, bearland>
|bōcland<t:freehold>
|bondeland<t:bond or leased land under written conditions>
|burgland<t:city-land, urban landscape><g:n>
|būrland<t:peasant land>
|ċēapland<t:bought land, compare to landcēap>
|ċiricland<t:church-land, land belonging to the church>
|dūnland<t:down or hilly land>
|ealdland<t:long untilled or unploughed land>
|eardland<t:fatherland>
|earningland<t:land earned or made freehold>
|eleland<t:a strange or foreign land>
|efnland<t:even land, plains>
|eringlond<t:arable land><g:n>
|etelond<t:pasture land><g:n>
|ēþelland<t:homeland>
|fæstland<t:fortified land>
|feldland<t:a field or plain, antonym to dūnland>
|fenland<t:fenland>
|feohland<t:pasture land>
|feorland<t:a far-off land><g:n>
|folcland<t:land of the people>
|fōstorland<t:land for fostering>
|friþland<t:a land at peace with one's own>
|gafolland<t:tenant land>
|ġebūrland<t:peasant land/farmland>
|ġedālland<t:land that may get owned by separate people, divided common land>
|ġehātland<t:promised land>
|ġehlotland<t:land doled out by lot>
|ġelanda<t:fellow countryman><g:m>
|ġelandian<t:to land>
|ġenēatland<t:tenant land>
|ġerēfland<t:tributary land>
|hǣþfeldland<t:moorland or heathland>
|hēafodland<t:a headland or boundary>
|hēahland<t:the high ground>
|hēahlandrīċa<t:a justice of the peace>
|hereġeatland<t:obligatory bequest of land to a lord or king>
|hwǣteland<t:land for the growing of wheat>
|īeġland<t:island>
|ierfeland<t:heritable land>
|ierþland<t:arable land>
|inland<t:Demesne land>
|lǣnland<t:loaned or leased land>
|līnland<t:land for the growing of flax or linseed>
|mǣdland<t:meadow><g:m>
|mæstland<t:land for the forthteeing of mast, i.e. tree nuts>
|mearcland<t:borderland, or wasteland beyond the tilled land, marshland>
|merisċland<t:marshland>
|mōrland<t:moorland, the wild & hilly hinterland>
|muntland<t:mountainous land>
|mynsterland<t:land belonging to the monastery>
|nēahland<t:neighboring country>
|norþland<t:a northern land>
|rēfland<t:sundorġerēfland, i.e. particular tributary lands>
|sacerdland<t:land set aside for priests>
|sǣland<t:maritime district>
|sandland<t:the seashore>
|sċrūdland<t:a land grant to buy clothing>
|sīdland<t:wide open land>
|sundorland<t:private land>
|sūþland<t:a southern land>
|tēoþungland<t:land subject to tithe payment>
|timberland<t:timberland>
|tūnland<t:land of a farm or estate>
|þēodland<t:a populated region or country>
|unfriþland<t:a hostile country>
|unland<t:what is not land: sea, marsh, etc.>
|uppeland<t:rural country away from town>
|ūtanlandes<t:abroad>
|ūtland<t:a foreign country or land>
|wealhland<t:a foreign country or land>
|wīdland<t:broad land, the earth's surface>
|wīnland<t:grapevine land, wine producing region>
}}
{{col4|ang|title=Derived national terms|Bretland<t:Britain>
|Cwēnland<t:historical Lapland, or roughly Finland>
|Cumberland<t:Cumberland>
|Egypta land<t:Egypt>
|Ēstland<t:Estonia>
|Finna land<t:Finland>
|Francland<t:France>
|Frīsland<t:Friesland, Frisia><g:n>
|Gotland<t:Gothland, or Götaland, i.e. a region of Norway>
|Grēcland<t:Greece>
|Hālgoland<t:Hålogaland, a region of Norway>
|Īra land<t:Ireland>
|Langaland<t:a Danish island in the Baltic Sea>
|Scedeland<t:Scania>
|Sċotland<t:a name for Ireland before the Scottish left it behind>
|Seaxland<t:Saxony>
|Swēoland<t:Sweden>
|Ungerland<t:Hungary>
|Wineda land<t:land of the Slavs>
|Wihtland<t:Isle of Wight>
|Wīsleland<t:the land around the Vistula river in Poland>
}}
====Descendants====
* {{desc|enm|lond}}
** {{desc|en|land}}
** {{desc|sco|laund|land}}
** {{desc|yol|lhoan|lone}}
=== මූලාශ්ර ===
* {{R:ang:BT}}
==Old Irish==
=== නාම පදය ===
{{sga-noun}}
# {{alternative spelling of|sga|lann}}
===Mutation===
{{sga-mutation|l|and}}
==Old Norse==
=== නිරුක්තිය ===
{{root|non|ine-pro|*lendʰ-|id=land}}
From {{inh|non|gem-pro|*landą}}, from {{der|non|ine-pro|*lendʰ-||land, heath|id=land}}. Cognate with {{cog|osx|land}}, {{cog|ofs|land}}, {{m|ofs|lond}}, {{cog|ang|land}}, {{m|ang|lond}}, {{cog|odt|lant}}, {{cog|goh|lant}}, {{cog|got|𐌻𐌰𐌽𐌳}}.
=== නාම පදය ===
{{non-noun|n|lands|lǫnd}}
# {{l|en|land}}
==== වරනැඟීම ====
{{non-decl-n-a|land|lǫnd}}
====Descendants====
* {{desc|is|land}}
* {{desc|fo|land}}
* {{desc|nrn|land}}
* {{desc|nn|land}}
** {{desc|crp-rsn|лань}}
* {{desc|gmq-osw|land}}
** {{desc|ovd|land}}
** {{desc|sv|land}}
* {{desc|gmq-oda|land}}
** {{desc|da|land}}
*** {{desc|nb|land}}
** {{desc|gmq-scy|lann}}
* {{desc|gmq-ogt|land}}
** {{desc|gmq-gut|land|lande|landi}}
=== වැඩිදුර් කියවීම සඳහා ===
* {{R:non:Zoega}}
{{C|non|Landforms}}
==Old Saxon==
=== නිරුක්තිය ===
{{root|osx|ine-pro|*lendʰ-|id=land}}
{{dercat|osx|gem-pro|ine-pro|inh=1}}
From {{inh|osx|gmw-pro|*land}}. Cognate with {{cog|ang|land}}, {{m|ang|lond}}, {{cog|ofs|land}}, {{m|ofs|lond}}, {{cog|nl|land}}, {{cog|goh|lant}} ({{cog|de|Land}}), {{cog|non|land}} ({{cog|sv|land}}), {{cog|got|𐌻𐌰𐌽𐌳}}. The {{cog|ine-pro|-}} root is also the source of {{cog|cel-pro|*landā}} ({{cog|cy|llan||enclosure}}, {{cog|br|lann||heath}}).
=== උච්චාරණය ===
* {{IPA|osx|/lɑnd/}}
=== නාම පදය ===
{{osx-noun|g=n}}
# {{l|en|land}}
==== වරනැඟීම ====
{{osx-decl-noun-a-n|land}}
====Descendants====
* {{desc|gml|lant}}
** {{desc|nds|Land}}
*** {{desc|nds-nl|laand}}
*** {{desc|nds-de|Land}}
** {{desc|pdt|Launt}}
==== මූලාශ්ර ====
{{R:osx:Kobler}}
==Old Swedish==
=== නිරුක්තිය ===
{{root|gmq-osw|ine-pro|*lendʰ-|id=land}}
From {{inh|gmq-osw|non|land}}, from {{inh|gmq-osw|gem-pro|*landą}}.
=== නාම පදය ===
{{head|gmq-osw|noun|g=n}}
# {{l|en|land}}
==== වරනැඟීම ====
{{gmq-osw-decl-noun-a-n|land}}
====Descendants====
* {{desc|ovd|land}}
* {{desc|sv|land}}
== පෝලන්ත ==
{{wp|lang=pl}}
=== නිරුක්තිය ===
{{root|pl|ine-pro|*lendʰ-|id=land}}
{{bor+|pl|de|Land}}, from {{der|pl|gmh|lant}}, from {{der|pl|goh|lant}}, from {{der|pl|gmw-pro|*land}}, from {{der|pl|gem-pro|*landą}}, from {{der|pl|ine-pro|*lendʰ-|t=land, heath|id=land}}.
=== උච්චාරණය ===
{{pl-pr|a=LL-Q809 (pol)-Olaf-land.wav}}
=== නාම පදය ===
{{pl-noun|m-in}}
# {{w|Länder|Land}} {{gl|federal state in Austria and Germany}}
#: {{syn|pl|kraj związkowy}}
#: {{coordinate terms|pl|stan|kraj|t2=krai}}
# {{lb|pl|Poznań}} [[countryside]] {{gl|rural area}}
#: {{syn|pl|prowincja|wieś}}
==== වරනැඟීම ====
{{pl-decl-noun-m-in}}
=== වැඩිදුර් කියවීම සඳහා ===
* {{R:pl:WSJP}}
* {{R:pl:PWN}}
{{C|pl|Administrative divisions}}
== රුමේනියානු ==
=== නිරුක්තිය ===
{{root|ro|ine-pro|*lendʰ-|id=land}}
{{bor+|ro|de|Land}}.
=== නාම පදය ===
{{ro-noun|n|landuri}}
# {{l|en|land}} {{gl|German and Austrian province}}
==== වරනැඟීම ====
{{ro-noun-n-uri}}
{{C|ro|Administrative divisions}}
== ස්පාඤ්ඤ ==
=== නිරුක්තිය ===
{{root|es|ine-pro|*lendʰ-|id=land}}
{{bor+|es|de|Land}}.
=== නාම පදය ===
{{es-noun|m}}
# one of the [[federal]] [[state]]s of [[Germany]]
#* {{quote-web
|es
|date=2020-01-29
|work=La Vanguardia
|title=El coronavirus ya se transmite fuera de China y se teme por su afectación al Mobile
|url=https://www.lavanguardia.com/vida/20200129/473204183924/coronavirus-china-mobile.html
|passage=Alemania confirmó ayer los cuatro primeros casos de coronavirus de Wuhan en su territorio, todos pertenecientes a la misma empresa de componentes de automóvil del '''land''' alemán de Baviera.|t=Germany yesterday confirmed the first four cases of Wuhan coronavirus on its territory, all belonging to the same automotive component company from the German '''land''' of Bavaria.}}
=== වැඩිදුර් කියවීම සඳහා ===
* {{R:es:DRAE}}
{{C|es|Administrative divisions}}
== ස්වීඩන් ==
{{wikipedia|lang=sv}}
=== නිරුක්තිය ===
{{root|sv|ine-pro|*lendʰ-|id=land}}
From {{inh|sv|gmq-osw|land}}, from {{inh|sv|non|land}}, from {{inh|sv|gem-pro|*landą}}, from {{der|sv|ine-pro|*lendʰ-||land, heath}}.
=== උච්චාරණය ===
* {{IPA|sv|/land/|[l̪an̪ːd̪]|q3=colloquial|/lan/}}
* {{audio|sv|Sv-land.ogg}}
* {{rhymes|sv|and}}
=== නාම පදය ===
{{sv-noun|n}}
# a [[country]], a {{l|en|land}} (independent political entity)
#: {{ux|sv|Sverige är ett '''land'''|Sweden is a '''country'''}}
#: {{ux|sv|'''länderna''' i EU|'''the countries''' in the EU}}
#: {{ux|sv|främmande '''länder'''|foreign '''lands'''}}
#: {{ux|sv|fjärran '''länder'''|distant '''lands'''}}
==== වරනැඟීම ====
{{sv-noun-irreg-n|3=länder|4=länderna}}
==== අමතර අවධානයට ====
* {{l|sv|nation}}
* {{l|sv|stat}}
=== නාම පදය ===
{{sv-noun|n}}
# {{lb|sv|uncountable}} {{l|en|land}} (as opposed to sea)
#: {{ux|sv|Om man inte har lust att vara på en båt så kan man vara på '''land''' istället|If you don't feel like being on a boat, you can be on '''land''' instead}}
#: {{ux|sv|'''land''' och hav|'''land''' and sea}}
#: {{ux|sv|ha '''land''' i sikte|have '''land''' in sight}}
#: {{ux|sv|'''Land''' i sikte!|'''Land''' ahoy!}}
# {{lb|sv|usually in the definite}} [[countryside]], [[country]]
#: {{ux|sv|Vi bor på '''landet'''|We live in '''the countryside'''}}
#: {{ux|sv|Vi är ute på '''landet'''|We are out in the '''country'''}}
#: {{ux|sv|livet på '''landet'''|life in '''the countryside'''}}
#: {{ux|sv|stad och '''land'''|town and '''country'''}}
#: {{ux|sv|laglöst '''land'''|lawless '''land'''}}
#* {{quote-song|sv|year=2007|author=w:Laser Inc|title=w:Det var en gång en fågel|trans-title=Once upon a time, there was a bird|url=https://www.youtube.com/watch?v=QrqZ-L7fHe8|text=Det var en gång en liten fågel. Ja, en fågel. Han bodde '''på landet''', och Roger hette han. Han ville gärna leka med sina vänner, med sina vänner, men det fick inte han. Men denna historia slutar sorgligt, för Roger blev skjuten, skjuten i magen av gamle jägar'n [jägaren] Pär. Han ville hem och äta, äta en fågel med lite potäter, men Roger hann iväg.|t=Once upon a time, there was a little bird. Yes, a bird. He lived '''in the countryside''', and Roger was his name. He wanted to play with his friends ["He wanted gladly to play with his friends," in the sense of, "He wanted, with keenness, to play with his friends" – the translation skips the {{m|sv|gärna}} as it doesn't make much difference to the meaning], with his friends, but [that – to play with his friends] he didn't get to. But this story ends sadly, because Roger was shot, shot in the stomach by old hunter Pär ["den gamle jägaren Pär" matches "the old hunter Pär" – skipping "{{l|sv|den}}" makes "jägaren Pär" sound [[lexicalized]]]. He wanted to go home and eat, eat a bird with some potatoes, but Roger got away [in time].}}
==== භාවිත සටහන් ====
See {{m|sv|mark}} for some other senses of ''land''.
==== වරනැඟීම ====
{{sv-noun-unc-irreg-n|2=landet}}
==== අමතර අවධානයට ====
* {{l|sv|backe}}
* {{l|sv|landsbygd}}
* {{l|sv|mark}}
* {{l|sv|på landbacken||on land (emphasizing not at sea)}}
=== නාම පදය ===
{{sv-noun|n}}
# a smaller piece of land for small-scale cultivation; a [[patch]], a [[garden]] [[plot]], etc.
#: {{ux|sv|ett jordgubbs'''land'''|a strawberry '''patch'''}}
#: {{ux|sv|ett potatis'''land'''|a potato '''patch'''}}
#: {{ux|sv|påta i '''landet'''|potter in the '''garden plot'''}}
==== වරනැඟීම ====
{{sv-infl-noun-n-zero}}
==== ව්යුත්පන්න යෙදුම් ====
* {{l|sv|grönsaksland||vegetable patch / plot}}
* {{l|sv|trädgårdsland||garden plot}}
==== ව්යුත්පන්න යෙදුම් ====
{{col3|sv|arabland
|Dalsland
|drömland
|England
|Estland
|fastland
|favoritland
|Finland
|Gotland
|grannland
|grönsaksland
|Gästrikland
|Götaland
|Halland
|Holland
|Hälsingland
|högland
|i-land
|inland
|Jämtland
|landa
|landamären
|landareal
|landavträdelse
|landbacken
|landbaserad
|landbo
|landborg
|landbris
|landbrygga
|landdjur
|landeri
|landfast
|landfäste
|landförbindelse
|landgille
|landgräns
|landgång
|landhockey
|landhöjning
|landis
|landkarta
|landkrabba
|landkänning
|landledes
|landmassa
|landmil
|landmina
|landmärke
|landning
|landområde
|landpermission
|landremsa
|landrygg
|landsantikvarie
|landsarkiv
|landsarkivarie
|landsbibliotek
|landsbygd
|landsdel
|landsfader
|landsfaderlig
|landsfiskal
|landsflykt
|landsflyktig
|landsflykting
|landsfogde
|landsförrädare
|landsförräderi
|landsförrädisk
|landsförsamling
|landsförvisa
|landsförvisning
|landshövding
|landsida
|landskamp
|landskampare
|landskap
|landskommun
|Landskrona
|landskronabo
|landskronit
|landskyrka
|landsköldpadda
|landslag
|landsman
|landsmaninna
|landsmoder
|landsmål
|landsmöte
|landsnummer
|landsomfattande
|landsorganisation
|landsort
|landsplåga
|landsråd
|landssekretariat
|landssorg
|landssvek
|landstiga
|landstigning
|landstorm
|landstrategi
|landstridskrafter
|landstrimma
|landstrykare
|landsträcka
|landstäckande
|landställe
|landsväg
|landsända
|landsände
|landsänkning
|landsätta
|landsättning
|landtunga
|landvad
|landvind
|landvägen
|landyta
|lantadel
|lantarbetare
|lantbarn
|lantbefolkning
|lantbo
|lantbrevbärare
|lantbrevbäring
|lantbruk
|lantbröd
|lantdag
|lantegendom
|lantflicka
|lantgreve
|lantgård
|lanthandel
|lanthandlare
|lanthem
|lanthushåll
|lanthushållsskola
|lantis
|lantjunkare
|lantkyrka
|lantlig
|lantlighet
|lantliv
|lantlolla
|lantluft
|lantman
|lantmarskalk
|lantmästare
|lantmätare
|lantmäteri
|lantpatron
|lantpräst
|lantras
|lantråd
|lantställe
|lantvin
|lantvärn
|Lappland
|Lettland
|lågland
|morotsland
|Norrland
|Nyland
|potatisland
|rovland
|rödbetsland
|Skåneland
|slättland
|Småland
|Svealand
|Södermanland
|Sörmland
|trädgårdsland
|Tyskland
|u-land
|uppland
|Uppland
|utland
|utlänning
|Värmland
|Västergötland
|västerlandet
|Västmanland
|Åland
|Öland
|Östergötland
|österlandet
}}
=== මූලාශ්ර ===
* {{R:svenska.se|so}}
* {{R:svenska.se|saol}}
* {{R:svenska.se|saob}}
{{C|sv|Administrative divisions}}
==Zealandic==
=== නිරුක්තිය ===
{{root|zea|ine-pro|*lendʰ-|id=land}}
{{dercat|zea|odt|frk|gmw-pro|gem-pro|ine-pro|inh=5}}
From {{inh|zea|dum|lant}}.
=== නාම පදය ===
{{zea-noun|n}}
# {{l|en|land}}
okfhp2vq60zjbih4a8xdrps2wwjs9zg
235475
235459
2026-06-02T11:06:54Z
Lee
19
/* පරිවර්තන */
235475
wikitext
text/x-wiki
{{also|Land|länd|lǟnd|-land}}
{{minitoc}}
== ඉංග්රීසි ==
{{wikipedia}}
=== උච්චාරණය ===
* {{enPR|lănd}}, {{IPA|en|/lænd/}}
** {{IPA|en|[ɫeə̯nd]|[ɫɛə̯nd]|a=US}}
*** {{audio|en|en-us-land.ogg|a=US}}
** {{IPA|en|[ɫɛə̯nd]|[læ(ː)nd]|a=CA}}
** {{IPA|en|[lænd]|a=RP}}
** {{IPA|en|[leːnd]|[lænd]|a=AU}}
** {{IPA|en|[land]|a=SSBE}}
* {{rhymes|en|ænd|s=1}}
=== නිරුක්තිය 1 ===
{{etymon|en|inh|enm>lond>nation|id=area of ground|tree=1}}
From {{inh|en|enm|lond}}, {{m|enm|land}}, from {{inh|en|ang|land}}, from {{inh|en|gmw-pro|*land}}, from {{inh|en|gem-pro|*landą||land}}, from {{der|en|ine-pro|*lendʰ-||land, heath|id=land}}.
Cognate with {{cog|sco|laund||land}}, {{cog|fy|lân||land}}, {{cog|nl|land||land, country}}, {{cog|de|Land||land, country, state}}, {{cog|no|-}} and {{cog|sv|land||land, country, shore, territory}}, {{cog|is|land||land}}. Non-Germanic cognates include {{cog|sga|lann||heath}}, {{cog|cy|llan||enclosure}}, {{cog|br|lann||heath}}, {{cog|cu|лѧдо}}, from {{cog|sla-pro|*lędo||heath, wasteland}}, {{cog|fr|lande||heath}} and {{cog|sq|lëndinë||heath, grassland}}.
==== නාම පදය ====
{{en-noun|~}}
# The [[part]] of [[Earth]] which is not covered by [[ocean]]s or other bodies of [[water]].
#: {{ux|en|Most insects live on '''land'''.}}
# [[real estate|Real estate]] or [[landed]] [[property]]; a partitioned and measurable area which is owned and acquired and on which [[buildings]] and [[structures]] can be [[build|built]] and [[erected]].
#: {{ux|en|There are 50 acres of '''land''' in this estate.}}
# A [[country]] or [[region]].
#: {{ux|en|They [[come]] from a faraway '''land'''.}}
# A person's country of origin and/or [[homeplace]]; [[homeland]].
# The [[soil]], in respect to its nature or quality for [[farming]].
#: {{ux|en|wet '''land'''    good or bad '''land''' for growing potatoes}}
# {{lb|en|often|in combination}} [[realm]], [[domain]].
#: {{ux|en|I'm going to Disney'''land'''.}}
#: {{ux|en|Maybe that's how it works in TV-'''land''', but not in the real world.}}
# {{senseid|en|unplowed ground between furrows}} {{lb|en|agriculture}} The [[ground#Noun|ground]] [[leave#Verb|left]] [[unploughed]] between [[furrow#Noun|furrows]].
#: {{syn|en|furlong<id:unplowed ground between furrows>}}
# {{senseid|en|portions of a field for ploughing}} {{lb|en|agriculture}} Any of [[several]] [[portion#Noun|portions]] into which a [[field#Noun|field]] is [[divide#Verb|divided]] for [[plough#Verb|ploughing]].
#: {{syn|en|furlong<id:portions of a field for ploughing>}}
#: {{cot|en|headland<id:unplowed boundary of a field>|furlong<id:unplowed boundary of a field>}}
# {{lb|en|Ireland|colloquial}} A shock or fright.
#: {{ux|en|He got an awful '''land''' when the police arrived.}}
# {{lb|en|electronics}} A [[conducting]] area on a [[board]] or [[chip]] which can be used for [[connect]]ing [[wire]]s.
# On a [[compact disc]] or similar [[recording]] [[medium]], an area of the medium which does not have [[pit]]s.
#* {{quote-text|en|year=1935|author=H. Courtney Bryson|title=The Gramophone Record|page=72
|passage=Now, assume that the recording is being done with 100 grooves per inch, and that the record groove is .006 inch wide. This means that the '''land''' on either side on any given groove in the absence of sound waves is .004 inch.}}
# {{lb|en|travel}} The non-airline portion of an itinerary. Hotel, tours, cruises, etc.
#: {{ux|en|Our city offices sell a lot more '''land''' than our suburban offices.}}
# {{lb|en|obsolete}} The ground or [[floor]].
#* {{RQ:Spenser Faerie Queene|book=V|canto=VII|stanza=7|passage=her selfe vppon the '''land''' / She did prostrate}}
# {{lb|en|nautical}} The [[lap]] of the [[strake]]s in a [[clinker-built]] [[boat]]; the lap of [[plate]]s in an [[iron]] [[vessel]]; called also [[landing]].<ref>{{R:Knight AMD}}</ref>
# In any surface prepared with [[indentation]]s, [[perforation]]s, or [[groove]]s, that part of the surface which is not so treated, such as the level part of a [[millstone]] between the furrows.
## {{lb|en|ballistics}} The space between the rifling grooves in a gun.
##* {{quote-book|en| date=2008-08-01| chapter=Ballistics| author=Lisa Steele| title=Science for Lawyers| editor=Eric York Drogin| publisher=American Bar Association| page=16| pageurl=http://books.google.com/books?id=H4zTATcB70wC&pg=PA16&dq=lands| passage=The FBI maintains a database, the General Rifling Characteristics (GRC) file, which is organized by caliber, number of '''lands''' and grooves, direction of twist, and width of '''lands''' and grooves, to help an examiner figure out the origin of a recovered bullet.}}
##* {{quote-av|en|date=2012-11-15|episode=One Way to Get Off| title=[[w:Elementary (TV series)|Elementary]]| season=1| number=7|actor=Jonny Lee Miller| role=Sherlock Holmes| passage=The human eye is a precision instrument. It can detect grooves and '''lands''' on a slug more efficiently than any computer.}}
# {{lb|en|Scotland|historical}} A group of [[dwelling]]s or [[tenement]]s under one [[roof]] and having a common [[entry]].
=====Hyponyms=====
{{col4|en|bookland
|borderland
|brushland
|bushland
|cloud cuckoo-land
|Crown land
|Disneyland
|downland
|dreamland
|dry land
|[[fantasy land]] ([[fantasyland]])
|farmland
|Fiordland
|flatland
|grassland
|herbland
|highland
|homeland
|Hurdland
|inland
|Lalaland
|Levelland
|lowland
|mainland
|midland
|moorland
|Newfoundland
|no man's land
|No Man's Land
|Northland,northland
|outland
|overland
|pastureland
|pineland
|playland
|plowland,ploughland
|Queensland
|revenue land
|Southland,southland
|tableland
|TV land
|upland
|Westland
|wildland
|wonderland
|woodland
}}
===== ව්යුත්පන්න යෙදුම් =====
{{col|en|Dayak land|land surface|land-surface|adland
|airland
|aland
|aridland
|autoland
|backland
|benchland
|Bergisches Land
|birthland
|blackland
|blogland
|bogland
|bottomland
|bowerland
|buckshot land
|byland
|caneland
|canyonland
|chalkland
|Chicagoland
|Chink land
|chink land
|chopstick land
|Cleveland
|cloud cuckoo land
|cloud-cuckoo-land
|cloudland
|clubland
|coastland
|common land
|copland
|cornland
|cotland
|counterland
|cradleland
|crash land
|croftland
|cropland
|crown land
|cubeland
|Curtisland
|dairyland
|Damaraland
|deadland
|desertland
|do a land-office business
|dockland
|domed land snail
|driftland
|dryland
|duneland
|eastland
|edgeland
|Egyptland
|Elfland
|Ellsworth Land
|escapeland
|estate in land
|fairyland
|farm land
|fatherland
|fat of the land
|fernland
|filmland
|Fingoland
|fireland
|flogging the land
|floodland
|folkland
|foras land
|forbyland
|Fordlandia
|foreland
|forestland
|Frankland
|Freelander
|freeman on the land
|gameland
|gangland
|gangsterland
|geländeläufer
|genderland
|ghostland
|glebe-land
|glory-land
|gorseland
|Graham Land
|grainland
|grazeland
|Greenland
|Groveland
|gumland
|hayland
|headland
|heartland
|heathland
|heteroland
|Highland
|hipsterland
|Hungarland
|Iceland
|interest in land
|island
|Jockland
|Kirkland
|kirkland
|Kiwiland
|lackland
|lakeland
|La-La Land
|Lala land
|la-la land
|la-la-land
|landability
|landable
|land acknowledgement
|land acknowledgment
|land agent
|land ahoy
|land art
|land artist
|landbank
|landbanking
|landbase
|landbased
|land battleship
|land-beaver
|land before time
|landbirding
|landblink
|landboc
|landbook
|landbound
|land breeze
|land bridge
|land bubble
|landcare
|land clearer
|landcover
|land crab
|land cress
|land cruiser
|land degradation
|land-diving
|land diving
|land down under
|lander
|landfall
|land-farer
|landfarming
|landfill
|landflood
|land force
|landform
|landfowl
|landful
|landfyrd
|land girl
|landgrab
|landgrabber
|land-grant
|land grant
|land guard
|landguard
|land gull
|land-held
|land ho
|landhold
|landholder
|landholding
|landhopper
|land ironclad
|landish
|land-jobber
|land-jobbing
|landlady
|landleaper
|land-leech
|land legs
|landless
|landlike
|[[land line]], [[landline]]
|landliving
|landlock
|landlocked
|land-locked salmon
|landlord
|landlouper
|land-lover
|landlubber
|landly
|landman
|land mark
|landmark
|[[land mass]], [[landmass]]
|land mile
|[[land mine]], [[landmine]]
|landmonger
|landocracy
|landocrat
|land of a thousand hills
|land of fruits and nuts
|land of milk and honey
|land of Nod
|land of opportunity
|land of plenty
|land of steady habits
|Land of the Ascendant Sun
|land of the free
|land of the living
|Land of the Long White Cloud
|land o' Goshen
|land on one's feet
|Land o' the Leal
|landowner
|landowning
|Land Park
|land patent
|landphoon
|land pirate
|landplane
|land poor
|land-poor
|land quillwort
|landrace
|landrail
|landreeve
|land register
|land rights
|land rights for gay whales
|land run
|landrush
|land rush
|land sailing
|land sake
|land sake alive
|land sakes
|land sakes alive
|land-salamander
|landscape
|landscraper
|landscrip
|Land's End
|land shark
|landshark
|land-shark
|land-sharking
|land shrimp
|landsick
|land sickness
|landside
|landslide
|landsliding
|landslip
|land slug
|land snail
|landspout
|landspreading
|land spring
|land surveyor
|land take
|land-take
|land tax
|land the plane
|land torpedo
|land train
|land under
|land up over
|land-use
|[[land use]] (see also [[w:Land_use|land use]])
|landwaiter
|landward
|landwards
|landwhale
|land whale
|land wind
|land with one's bum in the butter
|landworker
|land yacht
|land-yacht
|land yachting
|law of the land
|layland
|lay of the land
|Levelland
|lie of the land
|linksland
|live off the land
|loessland
|lotus land
|Lotusland
|lubberland
|magazineland
|make land
|marchland
|markland
|Markland
|marshland
|Mashonaland
|Matabeleland
|meadowland
|mealie land
|merland
|Midland
|mireland
|misland
|morning-land
|morning land
|mossland
|motherland
|muckland
|mudland
|multiland
|my land
|Namaqualand
|native land
|neckland
|Netherland
|netherlands
|Netherlands
|never fight a land war in Asia
|neverland
|never-never land
|never start a land war in Asia
|noman's land
|no-man's land
|no-man's-land
|nonland
|Northumberland
|Oakland
|O'Higgins Land
|Oklahoma land rush
|on land
|otherlandish
|ounceland
|oxland
|paddyland
|parentland
|parkland
|peatland
|pennyland
|Pictland
|plainland
|plotland
|Poland
|Portland
|portland
|power in the land
|prairieland
|promised land
|pure land
|quangoland
|quarterland
|rainland
|ranchland
|rangeland
|restaurantland
|riceland
|Richland
|Richlands
|rimland
|rockland
|sabbath of the land
|sageland
|scabland
|scarpland
|Schengenland
|scrubland
|sedgeland
|see how the land lies
|Seriland
|set foot on land
|set the land
|shackland
|shadowland
|shareland
|shoreland
|shrubland
|sire-land
|skyland
|slobland
|soapland
|soft-land
|soft land
|spit of land
|splash-land
|stumpland
|Sundaland
|swampland
|Swaziland
|thaneland
|theatreland
|thirstland
|tideland
|townland
|tract of land
|tussockland
|userland
|valley-land
|valleyland
|valley land
|vineland
|washland
|wasteland
|waste land
|waterland
|Welshland
|westland
|wetland
|wharfland
|wheatland
|white land
|Wilkes Land
|wineland
|Wituland
|Wolfe-land
|Wolfland
|womyn's land
|Yankee land
|yard of land
|Zoom-land
|Zoom land
|Zululand
}}
===== පරිවර්තන =====
{{trans-top|part of Earth that is not covered by oceans or other bodies of water}}
{{multitrans|data=
* Abenaki: {{tt|abe|aki}}
* Aché: {{tt|guq|waxu}}
* Afrikaans: {{tt+|af|land}}
* Albanian: {{tt+|sq|vend|m}}
* Arabic: {{tt|ar|بَرّ|f}}, {{tt+|ar|أَرْض|f}}, {{tt|ar|يابِسة|f}}
*: Egyptian Arabic: {{tt|arz|أرض|f|tr=ʔarḍ}}
* Aramaic: {{tt+|syc|ܐܪܥܐ|f|tr=ʔarʕā}}
* Armenian: {{tt+|hy|ցամաք}}
* Asturian: {{tt+|ast|tierra|f}}
* Bashkir: {{tt|ba|ер|sc=Cyrl}}, {{tt|ba|ҡоро ер|sc=Cyrl}}
* Basque: {{tt|eu|lur}}
* Belarusian: {{tt|be|зямля́|f}}, {{tt|be|су́ша|f}}
* Bengali: {{tt+|bn|ভূমি}}, {{tt+|bn|জমি}}, {{tt+|bn|জমিন}}
* Bhojpuri: {{t|bho|जमीन}}
* Bikol Central: {{tt+|bcl|daga}}
* Blackfoot: {{tt|bla|ksaahko}}
* Brunei Malay: {{tt|kxd|darat}}
* Bulgarian: {{tt+|bg|земя́|f}}, {{tt+|bg|су́ша|f}}
* Burmese: {{tt+|my|ကုန်း}}
* Catalan: {{tt+|ca|terra|f}}
* Central Atlas Tamazight: {{tt|tzm|ⴰⴽⴰⵍ|m}}
* Chamicuro: {{tt|ccc|c̈hijta}}
* Cherokee: {{tt|chr|ᎦᏙᎯ}}
* Cheyenne: {{tt|chy|ho'e}}
* Chinese:
*: Mandarin: {{tt+|cmn|土地|tr=tǔdì}}, {{tt+|cmn|陸地|tr=lùdì}}
* Cree: {{tt|cr|ᐊᐢᑭᕀ}}
* Czech: {{tt+|cs|země|f}}
* Danish: {{tt+|da|land|n}}
* Dutch: {{tt+|nl|land|n}}
* Eastern Bontoc: {{tt|ebk|lota}}
* Egyptian: {{t-egy|tꜣ|h=tA:N23*Z1}}
* Esperanto: {{tt+|eo|tero}}
* Estonian: {{tt+|et|maa}}
* Farefare: {{tt|gur|tɩŋa}}, {{tt|gur|tẽŋa}}
* Faroese: {{tt|fo|land|n}}
* Fijian: {{tt|fj|vanua}}
* Finnish: {{tt+|fi|maa}}
* French: {{tt+|fr|terre|f}}
* Galician: {{tt+|gl|terra|f}}
* Georgian: {{tt|ka|მიწა}}, {{tt|ka|ხმელეთი}}
* German: {{tt+|de|Land|n}}, {{tt+|de|Land|p|alt=Länder}}
*: Rhine Franconian: {{tt|gmw-rfr|Lond}} {{qualifier|Palatine}}
* Greek: {{tt+|el|ξηρά|f}}, {{tt+|el|γη|f}}
* Guaraní: {{tt+|gn|yvy}}
* Gujarati: {{tt+|gu|જમીન|f|tr=jamīn}}
* Hawaiian: {{tt|haw|honua}}
* Hebrew: {{tt+|he|אֶרֶץ|f|tr=érets}}, {{tt+|he|אֲדָמָה|f|tr=adamá}}, {{t+|he|יַבָּשָׁה|f|tr=yabashá}}
* Higaonon: {{tt|mba|bugta}}
* Hindi: {{tt+|hi|भूमि|f}}, {{tt+|hi|ज़मीन|f}}
* Hungarian: {{tt+|hu|föld}}, {{tt+|hu|szárazföld}}
* Icelandic: {{tt+|is|land}}
* Ido: {{tt+|io|lando}}
* Igbo: {{tt|ig|ala}}
* Ilocano: {{tt|ilo|daga}}
* Indonesian: {{tt+|id|tanah}}, {{tt+|id|bumi}}, {{tt+|id|darat}}
* Ingrian: {{t|izh|maa}}
* Istriot: {{tt|ist|tiera|f}}
* Italian: {{tt+|it|terra|f}}
* Japanese: {{tt+|ja|土|tr=つち, tsuchi}}, {{tt+|ja|土地|tr=とち, tochi}}, {{tt+|ja|陸地|tr=りくち, rikuchi}}
* Khmer: {{tt+|km|ដី}}
* Korean: {{tt+|ko|땅}}, {{tt+|ko|뭍}}, {{tt+|ko|토지(土地)}}, {{tt+|ko|육지}}, {{tt+|ko|륙지}} {{qualifier|North Korea}}
* Kurdish:
*: Central Kurdish: {{tt+|ckb|خاک}}
* Ladin: {{tt|lld|tera|f}}
* Lakota: {{tt|lkt|makȟóčhe}}
* Lao: {{tt+|lo|ດິນ}}, {{tt+|lo|ພູ}}
* Latin: {{tt+|la|terra|f}}
* Latvian: {{tt+|lv|zeme|f}}, {{tt+|lv|sauszeme|f}}, {{tt|lv|cietzeme|f}}
* Lithuanian: {{tt|lt|sausuma|f}}, {{tt+|lt|žemė|f}}
* Lü: {{tt|khb|ᦡᦲᧃ}}
* Macedonian: {{tt+|mk|земја|f}}
* Malay: {{tt+|ms|tanah}}, {{tt+|ms|darat}}, {{tt+|ms|bumi}}
* Maltese: {{tt|mt|art}}
* Manchu: {{tt|mnc|ᠨᠠ}}
* Maori: {{tt+|mi|whenua}}
* Marathi: {{tt|mr|जमीन|f|tr=j̈amīn}}
* Mazanderani: {{tt|mzn|زمین|tr=zemin}}
* Minangkabau: {{t+|min|tanah}}
* Mongolian:
*: Cyrillic: {{tt+|mn|газар}}, {{tt+|mn|шороо}}, {{tt+|mn|хөрс}}
* Nahuatl:
*: Classical: {{tt|nci|tlalli}}
* Navajo: {{tt|nv|kéyah}}
* Nepali: {{tt|ne|जमिन|tr=jamin}}
* Nheengatu: {{tt|yrl|retama}}
* North Frisian: {{qualifier|Mooring}} {{tt|frr|lönj|n}}; {{qualifier|Föhr-Amrum}} {{tt|frr|lun|n}}; {{qualifier|Helgoland}} {{tt|frr|Lun|n}}, {{tt|frr|Lön}} {{qualifier|Sylt}}
* Northern Thai: {{t-needed|nod}}
* Norwegian:
*: Bokmål: {{tt+|nb|land|n}}
* Occitan: {{tt+|oc|tèrra}}
* Ojibwe: {{tt|oj|aki}}, {{tt|oj|ᐊᑭ}}
* Old Church Slavonic: {{tt|cu|землꙗ|f}}
* Old East Slavic: {{tt|orv|землꙗ|f}}
* Old English: {{tt+|ang|land|n}}
* Old Javanese: {{tt|kaw|rat}}
* Old Saxon: {{tt|osx|land|n}}
* Oromo: {{tt|om|lafa}}
* Ottawa: {{tt|otw|ki}}
* Persian:
*: Iranian Persian: {{tt|fa-ira|سَرْزَمین}}
* Plautdietsch: {{tt+|pdt|Launt|n}}
* Polish: {{tt+|pl|ziemia|f}}, {{tt+|pl|ląd|m}}
* Portuguese: {{tt+|pt|terra|f}}
* Punjabi: {{tt|pa|ਜ਼ਮੀਨ|tr=zamīn}}
* Romanian: {{tt+|ro|uscat|n}}, {{tt+|ro|pământ|n}}
* Romansch: {{tt|rm|terra|f}}, {{tt|rm|tiara|f}}
* Russian: {{tt+|ru|земля́|f}}, {{tt+|ru|зе́мли|p}}, {{qualifier|as apposed to oceans}} {{tt+|ru|су́ша|f}}
* Sanskrit: {{tt+|sa|भूमि|f}}
* Sardinian: {{tt|sc|terra|f}}
* Scots: {{tt|sco|laund}}
* Scottish Gaelic: {{tt|gd|talamh|m}}, {{tt|gd|tìr|f}}
* Serbo-Croatian:
*: Cyrillic: {{tt|sh|зѐмља|f}}, {{tt|sh|ко̏пно|n}}
*: Roman: {{tt+|sh|zèmlja|f}}, {{tt+|sh|kȍpno|n}}
* Shan: {{t-needed|shn}}
* Sicilian: {{tt+|scn|terra|f}}
* Slovak: {{tt+|sk|zem|f}}
* Slovene: {{tt+|sl|kopno|n}}, {{tt+|sl|zemlja|f}}
* Southern Altai: {{t|alt|јер}}
* Spanish: {{tt+|es|tierra|f}}
* Sundanese: {{tt+|su|lemah}}
* Swahili: {{tt+|sw|ardhi|c9}}
* Swedish: {{tt+|sv|land|n}}
* Tagalog: {{tt+|tl|lupa}}
* Telugu: {{tt+|te|భూమి}}
* Thai: {{tt+|th|ดิน}}, {{tt+|th|ภู}}
* Tocharian A: {{tt|xto|ype}}
* Tocharian B: {{tt|txb|yapoy}}
* Tongan: {{tt|to|fonua}}
* Turkish: {{tt+|tr|kara}}
* Ugaritic: {{tt|uga|𐎀𐎗𐎕}}
* Ukrainian: {{tt+|uk|земля́|f}}, {{tt|uk|су́ша|f}}
* Urdu: {{tt+|ur|زَمِین|f}}
* Venetan: {{tt|vec|tera|f}}
* Vietnamese: {{tt+|vi|đất}}
* Vilamovian: {{tt|wym|łaond|n}}
* Welsh: {{tt+|cy|tir|m}}
* West Frisian: {{tt+|fy|lân}}
* Western Apache: {{tt|apw|kiiya}}, {{tt|apw|bíniʼ}}
* Yankunytjatjara: {{t|kdd|manta}}
* Yiddish: {{tt|yi|ארץ|f|tr=erets}}, {{tt|yi|לאַנד|n}}, {{tt|yi|יבשה|f|tr=yaboshe}}
* Yup'ik: {{tt|esu|nuna}}
* Zhuang: {{tt|za|dieg}}
{{trans-bottom}}
{{trans-top|real estate or landed property}}
* Albanian: {{tt+|sq|truall|m}}, {{tt+|sq|tokë|f}}
* Apache:
*: Western Apache: {{tt|apw|bíniʼ}}
* Asturian: {{t|ast|campa|f}}, {{t+|ast|terrén|n}}, {{t+|ast|finca|f}}, {{t|ast|posesión|f}}, {{t|ast|propiedá|f}}, {{t|ast|facienda|f}}, {{t|ast|fundu|m}}
* Bashkir: {{tt|ba|ер|sc=Cyrl}}
* Bengali: {{tt+|bn|জমি}}, {{tt+|bn|জমিন}}
* Bikol Central: {{tt+|bcl|daga}}
* Brunei Malay: {{tt|kxd|tanah}}
* Bulgarian: {{tt|bg|позе́млена со́бственост|f}}, {{tt+|bg|земя́|f}}
* Catalan: {{tt+|ca|terra}}, {{tt+|ca|terreny}}
* Cheyenne: {{tt|chy|ho'e}}
* Dutch: {{tt+|nl|land|n}}, {{tt+|nl|grond|m}}, {{tt+|nl|land|n}}
* Estonian: {{tt+|et|maa}}
* Finnish: {{tt+|fi|maa}}
* French: {{tt+|fr|terre|f}}, {{tt+|fr|terrain|m}}
* Georgian: {{tt|ka|მიწა}}
* German: {{tt+|de|Land|n}}, {{tt+|de|Land|p|alt=Länder}}
*: Rhine Franconian: {{tt|gmw-rfr|Lond}} {{qualifier|Palatine}}
* Greek: {{tt+|el|γαίες|f-p}}, {{tt+|el|εκτάσεις|f-p}}, {{tt+|el|κτήματα|n-p}}
* Hawaiian: {{tt|haw|ʻāina}}
* Ingrian: {{t|izh|maa}}, {{t|izh|mantu}}
* Japanese: {{tt+|ja|不動産|tr=ふどうさん, fudōsan}}, {{tt+|ja|土地|tr=とち, tochi}}
* Javanese: {{tt+|jv|lemah}} {{qualifier|ngoko}}, {{tt|jv|siti}} {{qualifier|krama}}
* Kabuverdianu: {{tt|kea|txon}}
* Khmer: {{tt+|km|ដី}}
* Korean: {{tt+|ko|땅}}, {{tt+|ko|토지(土地)}}, {{tt+|ko|부동산(不動産)}}
* Lao: {{t-needed|lo}}
* Lithuanian: {{tt+|lt|žemė|f}}
* Malay: {{tt+|ms|tanah}}
* Marathi: {{t|mr|जमीन|f}}
* Nahuatl: {{tt+|nah|tlālli}}, {{tt+|nah|tlali}}
* Ottoman Turkish: {{t|ota|طوپراق|tr=toprak}}
* Portuguese: {{tt+|pt|terra|f}}, {{tt+|pt|propriedade|f}}, {{tt+|pt|terreno|m}}
* Romanian: {{tt+|ro|teren|n}}, {{tt+|ro|pământ|n}}
* Russian: {{tt+|ru|земля́|f}}, {{tt+|ru|недви́жимость|f}}, {{tt|ru|[[земельный|земе́льная]] [[со́бственность]]|f}}
* Serbo-Croatian:
*: Cyrillic: {{tt|sh|по́сед|m}}, {{tt|sh|по́сјед|m}}
*: Roman: {{tt+|sh|pósed|m}}, {{tt+|sh|pósjed|m}}
* Spanish: {{t+|es|propiedad|f}}, {{t+|es|terreno|m}}, {{t+|es|posesión|f}}, {{t+|es|hacienda|f}}, {{t+|es|fundo|m}}, {{t+|es|terruño|m}}, {{t+|es|baldío|m}}, {{t+|es|predio|m}}, {{t+|es|finca|f}}, {{t+|es|conuco|m}}
* Swedish: {{tt+|sv|mark|c}}
* Tagalog: {{tt|tl|lupain}}
* Thai: {{t-needed|th}}
{{trans-bottom}}
{{trans-top|country or region}}
* Afrikaans: {{tt+|af|land}}
* Albanian: {{tt+|sq|tokë|f}}
* Arabic: {{tt|ar|بِلَاد|p}}, {{tt+|ar|أَرْض|f}}, {{tt+|ar|بَلَد|m}}
* Armenian: {{tt+|hy|երկիր}}
* Asturian: {{t+|ast|país|m}}, {{t+|ast|tierra|f}}
* Belarusian: {{tt+|be|краі́на|f}}, {{tt|be|зямля́|f}}
* Bengali: {{tt+|bn|দেশ}}
* Bulgarian: {{tt+|bg|страна́|f}}, {{tt+|bg|земя́|f}}
* Burmese: {{tt+|my|နိုင်ငံ}}
* Catalan: {{tt+|ca|terra}}
* Cherokee: {{tt|chr|ᎦᏙᎯ}}
* Chinese:
*: Cantonese: {{tt|yue|國家|tr=gwok3 gaa1}}
*: Dungan: {{tt|dng|гоцзя}}
*: Mandarin: {{tt+|cmn|國家|tr=guójiā}}
* Corsican: {{tt|co|paesu|m}}
* Czech: {{tt+|cs|země|f}}
* Danish: {{tt+|da|land|c}}
* Dolgan: {{tt|dlg|һир}}
* Dutch: {{tt+|nl|land|n}}
* Erzya: {{tt|myv|мастор}}, {{tt|myv|мода}}
* Esperanto: {{tt+|eo|lando}}
* Estonian: {{tt+|et|maa}}, {{tt+|et|riik}}
* Farefare: {{tt|gur|tɩŋa}}, {{tt|gur|tẽŋa}}
* Faroese: {{tt|fo|land|n}}
* Finnish: {{tt+|fi|maa}}
* French: {{tt+|fr|contrée|f}}, {{tt+|fr|pays|m}}
* Galician: {{tt+|gl|terra|f}}, {{tt+|gl|país|m}}
* German: {{tt+|de|Land|n}}, {{tt+|de|Land|p|alt=Länder}}
*: Rhine Franconian: {{tt|gmw-rfr|Lond}} {{qualifier|Palatine}}
* Gothic: {{tt|got|𐌻𐌰𐌽𐌳|n}}
* Greek: {{tt+|el|χώρα|f}}
*: Ancient: {{tt|grc|χώρα|f}}
* Hawaiian: {{tt|haw|ʻāina}}
* Hindi: {{tt+|hi|देश|m}}, {{tt+|hi|मुल्क|m}}
* Icelandic: {{tt+|is|land|n}}
* Indonesian: {{tt+|id|negara}}, {{tt+|id|negeri}}
* Ingrian: {{t|izh|maa}}, {{t|izh|riikki}}
* Italian: {{tt+|it|terra|f}}
* Japanese: {{tt+|ja|領土|tr=りょうど, ryōdo}}, {{tt+|ja|国土|tr=こくど, kokudo}}, {{tt+|ja|国家|tr=こっか, kokka}}, {{tt+|ja|国|tr=くに, kuni}}
* Kashmiri: {{tt|ks|مُلک}}
* Khmer: {{tt+|km|ប្រទេស}}, {{tt+|km|បទេស}}, {{tt+|km|រដ្ឋ}}
* Korean: {{tt+|ko|땅}}, {{tt+|ko|나라}}, {{tt+|ko|국가(國家)}}
* Kurdish:
*: Central Kurdish: {{tt+|ckb|وڵات}}
*: Northern Kurdish: {{tt+|kmr|welat|m}}
* Lakota: {{tt|lkt|makȟóčhe}}
* Lao: {{tt|lo|ປະເທດ}}, {{tt+|lo|ເມືອງ}}
* Latvian: {{tt+|lv|zeme|f}}
* Lithuanian: {{tt+|lt|kraštas|m}}, {{tt+|lt|šalis|f}}
* Lutuv: {{t|clt|ruo}}
* Luxembourgish: {{tt+|lb|Land|n}}
* Macedonian: {{tt+|mk|земја|f}}
* Malagasy: {{tt+|mg|tany}}
* Malay: {{tt+|ms|negara}}, {{tt+|ms|nasional}}
* Marathi: {{t+|mr|देश|m}}, {{t|mr|भूमी|f}}
* Mazanderani: {{tt|mzn|سامون|tr=samun}}
* Mongolian:
*: Cyrillic: {{tt+|mn|газар}}, {{tt+|mn|орон}}
* Moore: {{tt|mos|tenga}}, {{tt|mos|tẽnga}}
* Navajo: {{tt|nv|kéyah}}
* Ngarrindjeri: {{tt|nay|ruwe}}
* Nhengatu: {{tt|yrl|retama}}
* North Frisian: {{tt|frr|lönj|n}} {{qualifier|Mooring}}, {{tt|frr|Lun|n}} {{qualifier|Heligolandic}}
* Norwegian:
*: Bokmål: {{tt+|nb|land|n}}
* Ojibwe: {{tt|oj|aki}}
* Old Church Slavonic:
*: Cyrillic: {{tt|cu|землꙗ|f}}, {{tt|cu|страна|f}}
* Old East Slavic: {{tt|orv|землꙗ|f}}, {{tt|orv|краина|f}}
* Old English: {{tt+|ang|land|n}}
* Ottoman Turkish: {{t|ota|ایل|tr=il}}, {{t|ota|طوپراق|tr=toprak}}, {{t|ota|ارض|tr=arz}}, {{t|ota|تراب|tr=türâb}}, {{t|ota|ناحیه|tr=nâhiye}}
* Pannonian Rusyn: {{t|rsk|жем|f}}
* Persian:
*: Iranian Persian: {{tt|fa-ira|سَرْزَمین}}, {{tt|fa-ira|کِشْوَر}}, {{tt+|fa-ira|بوم}}, {{tt+|fa-ira|سامان}}
* Polish: {{tt+|pl|kraj|m}}, {{tt+|pl|kraina|f}}, {{tt+|pl|ziemia|f}}
* Portuguese: {{tt+|pt|terra|f}}
* Quechua: {{tt|qu|hallpa}}, {{tt|qu|marka}}
* Romanian: {{tt+|ro|țară|f}}
* Russian: {{tt+|ru|страна́|f}}, {{tt+|ru|земля́|f}}, {{tt+|ru|край|m}}
* Saterland Frisian: {{tt|stq|Lound|n}}
* Scottish Gaelic: {{tt|gd|talamh|m|f}}, {{tt|gd|tìr|f}}
* Serbo-Croatian:
*: Cyrillic: {{tt|sh|зѐмља|f}}
*: Roman: {{tt+|sh|zèmlja|f}}
* Sindhi: {{tt|sd|ملڪ}}
* Sinhalese: {{tt+|si|රට}}
* Slovak: {{tt+|sk|krajina|f}}, {{tt+|sk|zem|f}}
* Slovene: {{tt+|sl|dežela|f}}, {{tt+|sl|zemlja|f}}
* Southern Altai: {{t|alt|јер}}
* Spanish: {{tt+|es|patria|f}}, {{tt+|es|país|m}}
* Swahili: {{tt+|sw|nchi}}
* Swedish: {{tt+|sv|land|n}}
* Tamil: {{tt+|ta|நாடு}}, {{tt+|ta|தேசம்}}
* Taos: {{tt|twf|pǫ̏ʼóna}}
* Thai: {{tt+|th|ประเทศ}}, {{tt+|th|เมือง}}
* Turkish: {{t+|tr|ülke}}
* Ugaritic: {{tt|uga|𐎈𐎆𐎚}}, {{tt|uga|𐎀𐎗𐎕}}
* Ukrainian: {{tt+|uk|краї́на|f}}, {{tt+|uk|земля́|f}}
* Urdu: {{tt|ur|دیش|m}}, {{tt|ur|مُلْک|m}}
* Vietnamese: {{tt+|vi|quốc gia}}
* Welsh: {{tt+|cy|tir|m}}, {{tt+|cy|gwlad|f}}, {{tt+|cy|tiriogaeth|f}}
* West Frisian: {{tt+|fy|lân|n}}
* Yakut: {{tt|sah|сир}}
* Yiddish: {{tt|yi|לאַנד|n}}
* Yup'ik: {{tt|esu|nuna}}
{{trans-bottom}}
{{trans-top|someone's homeplace}}
* Albanian: {{tt+|sq|vend|m}}
* Asturian: {{t|ast|patria|f}}, {{t+|ast|tierra|f}}
* Bikol Central: {{tt|bcl|dagang tinubuan}}
* Chinese:
*: Cantonese: {{tt|yue|祖國|tr=zou2 gwok3}}
*: Mandarin: {{tt+|cmn|祖國|tr=zǔguó}}
* Czech: {{tt+|cs|vlast|f}}
* Dutch: {{tt+|nl|land|n}}, {{tt+|nl|vaderland|n}}
* Estonian: {{tt+|et|kodumaa}}
* Finnish: {{tt+|fi|kotimaa}}, {{tt+|fi|kotiseutu}}
* French: {{tt+|fr|pays|m}}, {{tt+|fr|patrie|f}}
* German: {{tt+|de|Vaterland|n}}
* Japanese: {{tt+|ja|祖国|tr=そこく, sokoku}}
* Korean: {{tt+|ko|조국}}
* Latin: {{tt+|la|patria}}
* Malagasy: {{tt+|mg|tanindrazana}}
* Portuguese: {{tt+|pt|terra|f}}
* Slovak: {{tt|sk|vlasť|f}}
* Spanish: {{t+|es|patria|f}}, {{t+|es|tierra|f}}
* Swedish: {{tt+|sv|fosterland}}
* Vietnamese: {{tt+|vi|tổ quốc}}
{{trans-bottom}}
{{trans-top|ground that is suitable for farming}}
* Albanian: {{tt+|sq|arë}}
* Asturian: {{t|ast|barrial|m}}, {{t|ast|suqueru|m}}, {{t|ast|vega|f}}
* Bengali: {{tt+|bn|জমি}}, {{tt+|bn|জমিন}}
* Bikol Central: {{tt+|bcl|daga}}
* Bulgarian: {{tt+|bg|земя|f}}
* Burmese: {{tt+|my|မြေ}}
* Buryat: {{tt|bua|хүдөө}}
* Cherokee: {{tt|chr|ᎦᏙᎯ}}
* Chinese:
*: Mandarin: {{tt+|cmn|土地|tr=tǔdì}}, {{tt+|cmn|農地|tr=nóngdì}}
* Dutch: {{tt+|nl|grond|f}}
* Estonian: {{tt+|et|maa}}
* Faroese: {{tt+|fo|jørð|f}}
* Finnish: {{tt+|fi|maa}}
* French: {{tt+|fr|terre|f}}
* Galician: {{tt+|gl|terra|f}}
* German: {{tt+|de|Land|n}}, {{tt+|de|Land|p|alt=Länder}}
* Icelandic: {{tt+|is|jörð|f}}
* Ingrian: {{t|izh|maa}}
* Italian: {{tt+|it|terreno|m}}, {{tt+|it|distesa|f}}, {{tt+|it|appezzamento|m}}
* Japanese: {{tt+|ja|土地|tr=とち, tochí}}, {{tt+|ja|農地|tr=のうち, nōchi}}
* Javanese: {{tt+|jv|lemah}} {{qualifier|ngoko}}, {{tt|jv|siti}} {{qualifier|krama}}
* Khmer: {{tt+|km|ដី|tr=dəy}}
* Korean: {{tt+|ko|땅}}, {{tt+|ko|토지(土地)}}
* Mongolian: {{tt+|mn|хөдөө}}
* Portuguese: {{tt+|pt|terra|f}}
* Quechua: {{tt+|qu|allpa}}
* Romanian: {{tt+|ro|pământ|n}} {{qualifier|arabil}}, {{tt+|ro|teren|n}} {{qualifier|cultivabil}}
* Russian: {{tt+|ru|земля́|f}}
* Serbo-Croatian: {{tt+|sh|zèmlja|f}}
* Spanish: {{t+|es|vega|f}}
* Swedish: {{tt+|sv|land|n}}
{{trans-bottom}}
{{trans-see|fright}}
{{trans-top|electronics: conducting area on a board or chip}}
* Finnish: {{tt|fi|johdinkuvio}}
{{trans-bottom}}
{{trans-top|in a compact disc, area which does not have pits}}
* Finnish: {{tt+|fi|tasanko}}
{{trans-bottom}}
{{trans-top|travel: non-airline portion of an itinerary}}
{{trans-bottom}}
{{trans-top|space between the rifling grooves in a gun}}
* Dutch: {{tt+|nl|trek|m}}
* Finnish: {{tt+|fi|harja}}
* Russian: {{tt|ru|[[по́ле]] [[нарез|наре́за]]|n}}
}}<!-- close {{multitrans}} -->
{{trans-bottom}}
==== ක්රියා පදය ====
{{en-verb}}
# {{lb|en|intransitive}} To descend to a [[surface]], especially from the air.
#: ''The plane is about to '''land'''''.
# {{lb|en|dated}} To [[alight]], to descend from a vehicle.
#* '''1859''', “Rules adopted by the Sixth Avenue Railway, N. Y.”, quoted in Alexander Easton, ''A Practical Treatise on Street or Horse-Power Railways'', page 108:
#*: 10. You will be civil and attentive to passengers, giving proper assistance to ladies and children getting in or out, and never start the car before passengers are fairly received or '''landed'''.
# {{lb|en|intransitive}} To come into rest.
# {{lb|en|intransitive}} To arrive on land, especially a [[shore]] or [[dock]], from a body of water.
#* {{quote-book|en|url=https://archive.org/details/pictorialhistory02taip/|title=A Pictorial History of the Republic of China: Its Founding and Development|volume=II|year=1981|location=Taipei|publisher=Modern China Press|OCLC=8883106
|page=303|pageurl=https://archive.org/details/pictorialhistory02taip/page/303/|column=1|text=Tatan and Erhtan are two small islands in the sea southwest of Kinmen.{{...}}A contingent of some 30 Communist troops tried to '''land''' at Erhtan, but were disarmed by Government defenders.}}
# {{lb|en|transitive}} To bring to land.
#: ''It can be tricky to '''land''' a helicopter''.
#: ''Use the net to '''land''' the fish.''
#* {{RQ:Shakespeare Henry 6-3|III|iii|passage=I'll undertake to '''land''' them on our coast.}}
# {{lb|en|transitive|informal}} To capture or arrest.
#* {{quote-journal|1=en|date=June 1920|journal=w:The Electrical Experimenter|location=New York| page=151|column=3|passage=`He told me that he was certain that Coates shot at him. We threw out a drag and '''landed''' Coates within an hour.'}}
# {{lb|en|transitive}} To [[acquire]]; to [[secure]].
#: {{ux|en|She '''landed''' a job at the company.}}
#* {{quote-journal|en|date=May 5, 2012| author=Phil McNulty| title=Chelsea 2-1 Liverpool| work=BBC Sport| url=http://www.bbc.co.uk/sport/0/football/17878435| passage=As Di Matteo celebrated and captain John Terry raised the trophy for the fourth time, the Italian increased his claims to become the permanent successor to Andre Villas-Boas by '''landing''' a trophy.}}
#* {{quote-journal|en|date=2024 May 1|title=Network News: Danes plan fully automated trains|journal=RAIL|issue=1008|page=18|text=Siemens has '''landed''' a contract to upgrade signalling on the entire 170km (105-mile) S-Bane suburban network in Copenhagen to pave the way for fully automated trains.}}
# {{lb|en|slang|transitive}} To succeed in having sexual relations with; to [[score]]
#: {{ux|en|Too ugly to ever '''land''' a chick}}
# {{lb|en|transitive}} (''of a blow'') To [[deliver]].
#: ''If you '''land''' a knockout blow, you’ll win the match''
# {{lb|en|intransitive}} (''of a punch'') To [[connect]]
#: {{ux|en|If the punches '''land''', you might lose a few teeth!}}
# {{lb|en|intransitive}} To go down well with an audience.
#: {{ux|en|Some of the comedian's jokes failed to '''land'''.}}
#* {{quote-av
|en
|date=January 13, 2023
|author=Anonymous ("Jackal Comment")
|time=11:08
|title=CORRECTIONS Episode 68: Week of Monday, January 9
|series=w:Late Night with Seth Meyers
|publisher=w:YouTube
|url=https://www.youtube.com/watch?v=ayvrCwR5nrg
|text=We told an Amelia Earhart joke yesterday- did not go great with the audience. Someone wrote: "You can't be surprised when an Amelia Earhart joke doesn't '''land'''."}}
===== ව්යුත්පන්න යෙදුම් =====
{{col4|en|title=terms derived from the verb ''land''
|black land
|crash-land|land down
|hard-land
|hard land
|soft-land
|soft land
|land on one's bridge
|land up
|land in someone's lap
|reland|land on|land upon|land with
}}
=== නිරුක්තිය 2 ===
From {{inh|en|enm|*land}}, from {{inh|en|ang|hland}}. More at {{m|en|lant}}.
==== නාම පදය ====
{{en-noun|-}}
# [[lant]]; [[urine]]
=== මූලාශ්ර ===
<references/>
* {{R:Webster 1913}}
{{catlangname|en|ergative verbs}}
{{C|en|Landforms}}
==Afrikaans==
=== නිරුක්තිය ===
{{root|af|ine-pro|*lendʰ-|id=land}}
From {{inh|af|nl|land}}, from {{inh|af|odt|lant}}, from {{inh|af|gem-pro|*landą}}, from {{inh|af|ine-pro|*lendʰ-||land, heath|id=land}}.
=== උච්චාරණය ===
* {{IPA|af|/lant/|[länt]|[lant]}}
* {{audio|af|LL-Q14196 (afr)-Oesjaar-land.wav}}
=== නාම පදය ===
{{af-noun|lande}}
# [[country]]; [[nation]]
== ඩෙන්මාර්ක ==
=== උච්චාරණය ===
* {{IPA|da|/lanˀ/|[lanˀ]}}
* {{rhymes|da|and|s=1}}
=== නිරුක්තිය 1 ===
{{root|da|ine-pro|*lendʰ-|id=land}}
From {{inh|da|gmq-oda|land}}, from {{inh|da|non|land}}, from {{inh|da|gem-pro|*landą}}, cognate with {{cog|en|land}}, {{cog|de|Land}}.
==== නාම පදය ====
{{da-noun|et|e}}
# [[country]] {{q|a geographical area that is politically independent}}
#: {{synonyms|da|stat|nation}}
# {{lb|da|uncountable|chiefly|definite singular}} [[country]], [[countryside]] {{q|rural areas outside the cities with agricultural production}}
# {{l|en|land}} {{q|part of Earth that is not covered in water}}
# {{lb|da|as the last part of compounds}} {{non-gloss|a large area or facility dedicated to a certain type of activity or merchandise}}
===== භාවිත සටහන් =====
In compounds: land-, lande-, lands-.
===== වරනැඟීම =====
{{da-decl|et|e}}
===== ව්යුත්පන්න යෙදුම් =====
{{col-top|2|Terms derived from {{l|da|land||country, nation}}}}
* {{l|da|eventyrland}}
* {{l|da|fædreland}}
* {{l|da|landeplage}}
* {{l|da|landsmand}}
* {{l|da|landsdækkende}}
* {{l|da|naboland}}
* {{l|da|olieland}}
{{col-bottom}}
{{col-top|2|Terms derived from {{l|da|land||countryside}}}}
* {{l|da|agerland}}
* {{l|da|landbrug}}
* {{l|da|landluft}}
* {{l|da|landmand}}
* {{l|da|landmiljø}}
{{col-bottom}}
{{col-top|2|Terms derived from {{l|da|land||(dry) land}}}}
* {{l|da|fastland}}
* {{l|da|lande}}
* {{l|da|landfast}}
{{col-bottom}}
{{col-top|2|Terms derived from {{l|da|land||amusement park}}}}
* {{l|da|badeland}}
* {{l|da|legeland}}
* {{l|en|Legoland}}
* {{l|da|sommerland}}
* {{l|da|vandland}}
{{col-bottom}}
=== නිරුක්තිය 2 ===
{{nonlemma}}
==== ක්රියා පදය ====
{{head|da|verb form}}
# {{inflection of|da|lande||imp|nocat=1}}
== ඕලන්ද ==
=== උච්චාරණය ===
* {{IPA|nl|/lɑnt/}}
* {{audio|nl|Nl-land.ogg}}
* {{hyphenation|nl|land}}
* {{rhyme|nl|ɑnt|s=1}}
=== නිරුක්තිය 1 ===
{{root|nl|ine-pro|*lendʰ-|id=land}}
From {{inh|nl|dum|lant}}, from {{inh|nl|odt|lant}}, from {{inh|nl|gmw-pro|*land}}, from {{inh|nl|gem-pro|*landą}}, from {{der|nl|ine-pro|*lendʰ-||land, heath|id=land}}.
==== නාම පදය ====
{{nl-noun|n|-en|+}}
# {{l|en|land}}, [[country]], [[realm]], [[territory]]
#* '''1967''', E. Rijpma & F. G. Schuringa, edited by Jan van Bakel, ''Nederlandse spraakkunst'', 21st ed., p. 24, § 8 (also [https://www.dbnl.org/tekst/rijp001nede01_01/ online at dbnl.org]):
#*: {{quote|nl|In ons '''land''' werd door de Westgermaanse volksstammen het Nederduits (Nederfrankisch en Saksisch) en het Fries gesproken.<br/>Het Nederfrankisch wordt wel verdeeld in: (1) het Hollands-Frankisch (Hollands, Utrechts, Westveluws, Zeeuws, Westvlaams); (2) het Brabants-Frankisch (Westbetuws, Westbrabants, Antwerps, Kempens, Leuvens, Aalsters, Oostvlaams); (3) het Limburgs-Frankisch (Gelders-Limburgs, Limburgs, Oostbrabants).<br/>Het Saksisch (Gelders-Overijssels, Oostveluws, Drents, Gronings) wordt gesproken in het noordoosten van ons '''land''', van Groningen tot de Oude Ijssel.}}
# {{l|en|land}} {{gloss|part of Earth not covered by water}}
# {{lb|nl|Netherlands|Antilles}} a [[constituent country]] of the Kingdom of the Netherlands; the [[territorial]] [[government]] of an overseas constituent country
#* {{quote-web|nl
|title=Gerechtshof: lhbt’s mogen trouwen op Aruba en Curaçao
|trans-title=Appellate court: LGBT people allowed to marry in Aruba and Curaçao
|author=Oscar van Dam; John Samson
|url=https://caribischnetwerk.ntr.nl/2022/12/06/gerechtshof-lhbts-mogen-trouwen-op-aruba-en-curacao/
|work={{w|Omroep NTR|Caribisch Netwerk}}
|date=6 December 2022
|access-date=14 December 2022
|text=Het zijn twee verschillende uitspraken die vandaag door het gerechtshof achter elkaar zijn gedaan. Voor Aruba gaat het om het een zaak van Fundacion Orguyo Aruba en twee vrouwen tegen het '''Land''' Aruba. Voor Curaçao gaat het om een zaak van Human Rights Caribbean Foundation en twee vrouwen tegen het '''Land''' Curaçao.
|translation=Today's rulings are two separate ones handed down by the appellate court back-to-back. For Aruba, it involves a case brought by Fundacion Orguyo Aruba and two women against the '''government''' of Aruba. For Curaçao, it involves a case brought by Human Rights Caribbean Foundation and two women against the '''government''' of Curaçao.}}
# {{lb|nl|history|chiefly in compounds}} the territorial government or state authority in a Dutch colony or overseas territory in the West Indies
===== ව්යුත්පන්න යෙදුම් =====
{{col|nl
|achterland
|Adélieland
|Avondland
|bijland
|binnenland
|boerenland
|braakland
|buitenland
|de Russen zijn in het land
|eiland
|hoogland
|in den lande
|kernland
|laagland
|landadel
|landbouw
|landdag
|landdrost
|landen
|landerij
|landsdienaar
|landgenoot
|landjepik
|landleeuw
|landhuis
|landleger
|landman
|landmassa
|landmijn
|landraad
|landrot
|landsbelang
|landsneger
|landschap
|landskind
|landsknecht
|landsregeling
|landsslaaf
|landstorm
|landsverdediging
|landsverordening
|landsvergadering
|landvoogd
|landweer
|moederland
|niemandsland
|platteland
|proletariërs aller landen, verenigt u
|thuisland
|vaderland
|vasteland
|voorland
|zeeland
|Zeeland
}}
=====Descendants=====
* {{desc|af|land}}
* {{desc|brc|alanda|landi}}
* {{desc|dcr|land|lant|lan}}
* {{desc|skw|land|lantta}}
* {{desc|srn|lanti|bor=1}} {{see desc}}
* {{desc|unc=1|jv|ꦭꦤ꧀}}
=== නිරුක්තිය 2 ===
{{nonlemma}}
==== ක්රියා පදය ====
{{head|nl|verb form}}
# {{infl of|nl|landen||bare-verb}}
{{C|nl|Landforms}}
==Elfdalian==
=== නිරුක්තිය ===
{{root|ovd|ine-pro|*lendʰ-|id=land}}
From {{inh|ovd|non|land}}, from {{inh|ovd|gem-pro|*landą}}, from {{der|ovd|ine-pro|*lendʰ-||land, heath|id=land}}. Cognate with {{cog|sv|land}}.
=== නාම පදය ===
{{head|ovd|noun|g=n}}
# [[country]]; [[nation]]
==== වරනැඟීම ====
{{ovd-decl-blank-full<!--
-->|title=''land''<!--
-->|stem=strong ''a''-stem<!--
-->|g=neuter<!--
-->|nsi=land<!--
-->|asi=land<!--
-->|dsi=lande<!--
-->|gsi=—<!--
-->|nsd=landeð<!--
-->|asd=landeð<!--
-->|dsd=landę<!--
-->|gsd=—<!--
-->|npi=land<!--
-->|api=land<!--
-->|dpi=landum<!--
-->|gpi=—<!--
-->|npd=landę<!--
-->|apd=landę<!--
-->|dpd=landum(e)<!--
-->|gpd=—<!--
-->}}<!--
-->{{catlangname|ovd|a-stem nouns}}<!--
--><noinclude>
{{C|ovd|Law|Collectives|Geography}}
==Faroese==
=== උච්චාරණය ===
* {{IPA|fo|/lant/}}
* {{rhymes|fo|ant}}
=== නිරුක්තිය 1 ===
{{root|fo|ine-pro|*lendʰ-|id=land}}
From {{inh|fo|non|land}}, from {{inh|fo|gem-pro|*landą}}, from {{der|fo|ine-pro|*lendʰ-||land, heath|id=land}}.
==== නාම පදය ====
{{fo-noun|n|lands|lond}}
# {{l|en|land}}
# [[coast]]
# [[country]], [[nation]]
# [[ground]], [[soil]]
# the [[state]]
===== වරනැඟීම =====
{{fo-decl-noun-n8|l|nd}}
===== ආශ්රිත යෙදුම් =====
* {{l|fo|landa}}
=== නිරුක්තිය 2 ===
From {{inh|fo|non|hland}}, from {{inh|fo|gem-pro|*hlandą}}, from {{der|fo|ine-pro|*klān-||liquid, wet ground}}. Cognate with {{cog|lt|klanas||pool, puddle, slop}}.
==== නාම පදය ====
{{fo-noun|n|lands|-}}
# {{lb|fo|uncountable}} [[urine]]
===== වරනැඟීම =====
{{fo-decl-noun-n8-s|l|nd}}
== ප්රංශ ==
=== නාම පදය ===
{{fr-noun|m|+|länder}}
# {{l|en|land}} {{gloss|region of Germany or Austria}}
==Gothic==
=== රෝමානුකරණය ===
{{got-rom}}
# {{romanization of|got|𐌻𐌰𐌽𐌳}}
== අයිස්ලන්ත ==
=== නිරුක්තිය ===
{{root|is|ine-pro|*lendʰ-|id=land}}
From {{inh|is|non|land}}, from {{inh|is|gem-pro|*landą}}, from {{der|is|ine-pro|*lendʰ-||land, heath|id=land}}.
=== උච්චාරණය ===
* {{IPA|is|/lant/}}
* {{rhymes|is|ant|s=1}}
=== නාම පදය ===
{{is-noun|@@}}
# {{lb|is|uncountable}} {{l|en|land}}, [[earth]], [[ground]] (part of the Earth not under water)
# {{lb|is|countable}} [[country]]
#: {{ux|is|Japan er fallegt '''land'''.|Japan is a beautiful '''country'''.}}
# {{lb|is|uncountable}} [[countryside]], [[country]]
#: {{ux|is|Ég bý úti á '''landi'''.|I live in the '''country'''.}}
# {{lb|is|uncountable}} land, as a mass noun, measurable in quantity
# {{lb|is|countable}} [[tract]]s of land, an [[estate]]
#: {{ux|is|Ég á þetta '''land''' og allt sem er á því.|I own this '''land''' and everything on it.}}
==== වරනැඟීම ====
{{is-ndecl|n}}
==== ව්යුත්පන්න යෙදුම් ====
{{col3|is|láta lönd og leið<t:to not [[give a damn]] about something>
|draga að landi<t:to [[eat]] someone's [[leftover]]s>
|draga í land<t:to [[give in]] a little>
|eiga langt í land<t:of something- to have a long way to go/to be finished>
|föðurland
|landlægur
|sinn er siður í landi hverju
|útland
|með lögum skal land byggja
|leggja land undir fót
|Ísland
|Grænland
|Frakkland
|Finnland
|Svartfjallaland
|Þýskaland
}}
== මධ්යකාලීන ඉංග්රීසි ==
=== නාම පදය ===
{{head|enm|noun}}
# {{alt form|enm|lond}}
==Norwegian Bokmål==
=== උච්චාරණය ===
* {{IPA|nb|/lɑnː/}}
* {{rhymes|nb|ɑnː}}
=== නිරුක්තිය 1 ===
{{root|nb|ine-pro|*lendʰ-|id=land}}
From {{inh|nb|non|land}}, from {{der|nb|gem-pro|*landą}}, from {{der|nb|ine-pro|*lendʰ-||land, heath|id=land}}.
==== නාම පදය ====
{{nb-noun-n1}}
# [[country]]
# {{l|en|land}}
===== ව්යුත්පන්න යෙදුම් =====
{{col3|nb
|beiteland
|Det hellige land
|Dronning Maud Land
|drømmeland
|fastland
|fjelland
|foregangsland
|grenseland
|hjemland
|i land
|Ildlandet
|ingenmannsland
|innenlandsk
|innland
|jordbruksland
|landareal
|landbruk
|landegrense
|landemerke
|landesorg
|landfast
|landgang
|landkode
|landkrabbe
|landlig
|landmasse
|landområde
|landsby
|landsbygd
|landsdel
|landsgjennomsnitt
|landskilpadde
|landskode
|landslag
|landsmann
|landsmål
|landsomfattende
|landssviker
|lavland
|medlemsland
|middelhavsland
|moderland
|naboland
|omland
|opprinnelsesland
|produsentland
|pålandsvind
|sletteland
|Sørlandet
|utenlandsk
|utland
|utviklingsland
|Vestlandet
|Østlandet
}}
=== නිරුක්තිය 2 ===
==== ක්රියා පදය ====
{{head|nb|verbf}}
# {{infl of|nb|lande||imp}}
=== මූලාශ්ර ===
* {{R:The Bokmål Dictionary}}
==Norwegian Nynorsk==
=== වෙනත් ආකාර ===
* {{alt|nn|lainnj||eye dialect spelling}}
=== උච්චාරණය ===
* {{IPA|nn|/lanː/|/land/}}
=== නිරුක්තිය 1 ===
{{root|nn|ine-pro|*lendʰ-|id=land}}
From {{inh|nn|non|land}}, from {{der|nn|gem-pro|*landą}}, from {{der|nn|ine-pro|*lendʰ-||land, heath|id=land}}. Akin to {{cog|en|land}}.
==== නාම පදය ====
{{nn-noun-n1}}
# [[country]]
#: {{ux|nn|Noreg er eit '''land''' i nord.|Norway is a '''country''' in the north.}}
# {{l|en|land}}
#: {{ux|nn|Det var mangel på '''land''' for jordbruk.|There was a lack of '''land''' for agriculture.}}
# [[coast]], [[dry land]]
===== ව්යුත්පන්න යෙදුම් =====
{{col3|nn
|Austlandet
|beiteland
|Dronning Maud Land
|fastland
|fjelland
|grenseland
|i land
|ingenmannsland
|innanlandsk
|innland
|jordbruksland
|landareal
|landbruk
|lande,landa
|landegrense
|landemerke
|landesorg
|landfast
|landgang
|landkode
|landkrabbe
|landleg
|landmasse
|landområde
|landsby
|landsdel
|landsgjennomsnitt
|landskode
|landslag
|landsmann
|landsmål
|landssvikar
|medlemsland
|middelhavsland
|moderland
|naboland
|omland
|produsentland
|pålandsvind
|sletteland
|Sørlandet
|utanlandsk
|utland
|utviklingsland
|Vestlandet
}}
=== නිරුක්තිය 2 ===
From {{inh|nn|non|hland}}, from {{inh|nn|gem-pro|*hlandą}}.
==== නාම පදය ====
{{nn-noun-n1}}
# [[urine]] from [[livestock]]
=== මූලාශ්ර ===
* {{R:The Nynorsk Dictionary}}
{{C|nn|Bodily fluids}}
==Old Danish==
=== නිරුක්තිය ===
{{root|gmq-oda|ine-pro|*lendʰ-|id=land}}
From {{inh|gmq-oda|non|land}}, from {{inh|gmq-oda|gem-pro|*landą}}.
=== නාම පදය ===
{{head|gmq-oda|noun|g=n|genitive|lanz|plural|land}}
# {{l|en|land}}
#* {{quote-text|gmq-oda|year=1241|title=Codex Holmiensis|section=prologue
|passage=Mæth logh skal '''land''' byggæs.
|translation=''With law shall '''land''' be built.''}}
==== වරනැඟීම ====
{{gmq-oda-decl-scy|land|landit|land|landin|land|landit|land|landin|landi|landinu|landum|landunum|lanz|lanzins|landa|landanna}}
====Descendants====
* {{desc|da|land}}
== පුරාතන ඉංග්රීසි ==
=== වෙනත් ආකාර ===
* {{alter|ang|lond|lænd}}
=== නිරුක්තිය ===
{{etymon|ang|inh|gmw-pro>*land>area of ground|id=area of ground}}
From {{inh|ang|gmw-pro|*land}}, from {{inh|ang|gem-pro|*landą}}. See there for more.
=== උච්චාරණය ===
* {{ang-IPA|land|lɔnd}}
=== නාම පදය ===
{{ang-noun|n}}
# {{l|en|land}} (dry portion of the Earth's surface)
# a [[country]]
# [[region]] within a country: [[district]], [[province]]
# the [[country]], [[countryside]]
# [[owned]] or tilled land, an [[estate]]
==== භාවිත සටහන් ====
* Using the word ''land'' is the most common way to form country names. This can be done in one of two ways:
** Prefixing the name of a people to the word ''land''. Ex: {{m|ang|Franca||French person}} → {{m|ang|Francland||France}}, {{m|ang|Swēo||Swede}} → {{m|ang|Swēoland||Sweden}}, and {{m|ang|*Unger||a Hungarian}} → {{m|ang|Ungerland||Hungary}}.
** Prefacing ''land'' with the genitive plural form of a people, producing the literal meaning “land of ____ people.” Ex: {{m|ang|Egypta land|t=Egypt|lit=land of the Egyptians}}, {{m|ang|Siġelhearwena land|t=Ethiopia|lit=land of the Ethiopians}}.
* However, country names can also be formed other ways. For instance, words other than ''land'' are used: {{m|ang|Dene||a Dane}} → {{m|ang|Denemearc|t=Denmark|lit=Dane borderland}}. It is also very common to use the name of a people for the country they inhabit: ''On þām dagum wæs Alexander ġeboren on <u>Crēcum</u> swā swā miċel ȳst cōme ofer ealne middanġeard'' (“In those days, Alexander was born in <u>Greece</u> [lit. ''in the Greeks''] like a great storm coming over the whole world”), ''Ymb twā ġēar þæs þe hē cōm of <u>Francum</u>, hē ġefōr'' (”Two years after he came from <u>France</u> [lit. ''from the Franks''], he died”). In addition, country names are sometimes loaned directly from Latin: {{m|ang|Arabia}}, {{m|ang|Isrāhēl}}, {{m|ang|Italia}}, {{m|ang|Syria}}. Finally, some country names are simply idiomatic: {{m|ang|Norþweġ|t=Norway|lit=north way}}.
* Unlike most words, ''land'' undergoes {{w|i-umlaut}} when combined with the suffix {{m|ang|-isċ}}: {{m|ang|inlendisċ||native}}, {{m|ang|uplendisċ||rural}}.
==== වරනැඟීම ====
{{ang-decl-noun-a-n|land}}
==== ව්යුත්පන්න යෙදුම් ====
{{col4|ang|title=Derived prefix terms|landādl<t:nostalgia for one's homeland><g:f>
|landāgend<t:landowner><g:m>
|landār<t:land holdings, a landed estate><g:f>
|landbegang<t:land tilling or dwelling><g:m>
|landbegenġa<t:husbandman, farmer><g:m>
|landbōc<t:land charter><g:f>
|landbrǣċe<t:land breaking or ploughing><g:m>
|landbūend<t:husbandman, a native><g:m>
|landbūend<t:a settlement, colony><g:f>
|landbūende<t:dwelling in a land, living on earth>
|landbūnes<t:a settlement, a colony><g:f>
|landċēap<t:fine or tax on bought land><g:m>
|landcofa<t:the old city of Shechem><g:m>
|landefne<t:amount of land holdings><g:n>
|landfæsten<t:a land fastness, a stronghold><g:n>
|landfeoh<t:a land rent or tax><g:n>
|landfierd<t:land army><g:f>
|landfierding<t:terrestrial military operations><g:f>
|landfolc<t:the people of the land><g:n>
|landfruma<t:prince><g:m>
|landġehwearf<t:land swap><g:n>
|landġemaca<t:neighbor><g:m>
|landġemǣre<t:border><g:n>
|landġemierċe<t:border><g:n>
|landġesċeaft<t:the earth's creation & created things><g:n>
|landġeweorc<t:a land's main stronghold><g:n>
|landġewyrpe<t:earthen heaps cast up><g:n>
|landhæbbende<t:landowning, land-having as a ruler>
|landhæfen<t:land holdings><g:f>
|landhere<t:land army><g:m>
|landhlāford<t:landlord><g:m>
|landhredding<t:redemption of mortgaged land><g:f>
|landielf<t:land elf><g:f>
|landlagu<t:law in a district><g:f>
|landlēas<t:landless>
|landlēod<t:an inhabitant or the people of a land><g:m>
|landlēoda<t:a native of a land><g:m>
|landlyre<t:loss of land><g:m>
|landmann<t:a native of a land><g:m>
|landmearc<t:boundary of a land or an estate><g:f>
|landmearc<t:belonging to a land's boundaries>
|landmearca<t:a territory><g:m>
|landopenung<t:a breaking up of land><g:f>
|landrǣden<t:district or country ordinance, disposition, or institution><g:f>
|landrest<t:grave><g:f>
|landrīċa<t:landlord><g:f>
|landrīċe<t:territory><g:n>
|landriht<t:the law of the land><g:n>
|landsǣta<t:settler, colonist><g:m>
|landsċeap<t:district or swath of land, landscape><g:n>
|landsċearu<t:a share or deal of land><g:f>
|landsċipe<t:a region or swath of land><g:m>
|landseten<t:land possession or occupation thereof><g:f>
|landsetla<t:a settler or tenant><g:m>
|landsidu<t:custom of the land><g:m>
|landsittende<t:occupying land>
|landsōcn<t:land or country seeking><g:f>
|landspēd<t:land holdings><g:f>
|landspēdiġ<t:rich in land holdings or estates>
|landsplott<t:a small plot of ground><g:m>
|landstede<t:a land><g:m>
|landstyċċe<t:a small plot of land><g:n>
|landwaru<t:people of land, a land><g:f>
|landweard<t:the warden of a land, a prince><g:m>
|landwela<t:the earth's wealth><g:m>
|lendan<t:to land>
}}
{{col4|ang|title=Derived suffix terms|
|ātland<t:land for the growing of oats, oatland>
|ælmesland<t:land bequeathed in frankalmoigne, i.e. rich in land is rich in soul><g:m>
|bēanland<t:land for the growing of beans, beanland>
|behātland<t:promised land>
|belandian<t:to deprive of land, dispossess>
|belendan<t:to deprive of land, dispossess>
|bēodland<t:land to defray food consumption, as in a monastery>
|berland<t:land for the growing of barley, bearland>
|bōcland<t:freehold>
|bondeland<t:bond or leased land under written conditions>
|burgland<t:city-land, urban landscape><g:n>
|būrland<t:peasant land>
|ċēapland<t:bought land, compare to landcēap>
|ċiricland<t:church-land, land belonging to the church>
|dūnland<t:down or hilly land>
|ealdland<t:long untilled or unploughed land>
|eardland<t:fatherland>
|earningland<t:land earned or made freehold>
|eleland<t:a strange or foreign land>
|efnland<t:even land, plains>
|eringlond<t:arable land><g:n>
|etelond<t:pasture land><g:n>
|ēþelland<t:homeland>
|fæstland<t:fortified land>
|feldland<t:a field or plain, antonym to dūnland>
|fenland<t:fenland>
|feohland<t:pasture land>
|feorland<t:a far-off land><g:n>
|folcland<t:land of the people>
|fōstorland<t:land for fostering>
|friþland<t:a land at peace with one's own>
|gafolland<t:tenant land>
|ġebūrland<t:peasant land/farmland>
|ġedālland<t:land that may get owned by separate people, divided common land>
|ġehātland<t:promised land>
|ġehlotland<t:land doled out by lot>
|ġelanda<t:fellow countryman><g:m>
|ġelandian<t:to land>
|ġenēatland<t:tenant land>
|ġerēfland<t:tributary land>
|hǣþfeldland<t:moorland or heathland>
|hēafodland<t:a headland or boundary>
|hēahland<t:the high ground>
|hēahlandrīċa<t:a justice of the peace>
|hereġeatland<t:obligatory bequest of land to a lord or king>
|hwǣteland<t:land for the growing of wheat>
|īeġland<t:island>
|ierfeland<t:heritable land>
|ierþland<t:arable land>
|inland<t:Demesne land>
|lǣnland<t:loaned or leased land>
|līnland<t:land for the growing of flax or linseed>
|mǣdland<t:meadow><g:m>
|mæstland<t:land for the forthteeing of mast, i.e. tree nuts>
|mearcland<t:borderland, or wasteland beyond the tilled land, marshland>
|merisċland<t:marshland>
|mōrland<t:moorland, the wild & hilly hinterland>
|muntland<t:mountainous land>
|mynsterland<t:land belonging to the monastery>
|nēahland<t:neighboring country>
|norþland<t:a northern land>
|rēfland<t:sundorġerēfland, i.e. particular tributary lands>
|sacerdland<t:land set aside for priests>
|sǣland<t:maritime district>
|sandland<t:the seashore>
|sċrūdland<t:a land grant to buy clothing>
|sīdland<t:wide open land>
|sundorland<t:private land>
|sūþland<t:a southern land>
|tēoþungland<t:land subject to tithe payment>
|timberland<t:timberland>
|tūnland<t:land of a farm or estate>
|þēodland<t:a populated region or country>
|unfriþland<t:a hostile country>
|unland<t:what is not land: sea, marsh, etc.>
|uppeland<t:rural country away from town>
|ūtanlandes<t:abroad>
|ūtland<t:a foreign country or land>
|wealhland<t:a foreign country or land>
|wīdland<t:broad land, the earth's surface>
|wīnland<t:grapevine land, wine producing region>
}}
{{col4|ang|title=Derived national terms|Bretland<t:Britain>
|Cwēnland<t:historical Lapland, or roughly Finland>
|Cumberland<t:Cumberland>
|Egypta land<t:Egypt>
|Ēstland<t:Estonia>
|Finna land<t:Finland>
|Francland<t:France>
|Frīsland<t:Friesland, Frisia><g:n>
|Gotland<t:Gothland, or Götaland, i.e. a region of Norway>
|Grēcland<t:Greece>
|Hālgoland<t:Hålogaland, a region of Norway>
|Īra land<t:Ireland>
|Langaland<t:a Danish island in the Baltic Sea>
|Scedeland<t:Scania>
|Sċotland<t:a name for Ireland before the Scottish left it behind>
|Seaxland<t:Saxony>
|Swēoland<t:Sweden>
|Ungerland<t:Hungary>
|Wineda land<t:land of the Slavs>
|Wihtland<t:Isle of Wight>
|Wīsleland<t:the land around the Vistula river in Poland>
}}
====Descendants====
* {{desc|enm|lond}}
** {{desc|en|land}}
** {{desc|sco|laund|land}}
** {{desc|yol|lhoan|lone}}
=== මූලාශ්ර ===
* {{R:ang:BT}}
==Old Irish==
=== නාම පදය ===
{{sga-noun}}
# {{alternative spelling of|sga|lann}}
===Mutation===
{{sga-mutation|l|and}}
==Old Norse==
=== නිරුක්තිය ===
{{root|non|ine-pro|*lendʰ-|id=land}}
From {{inh|non|gem-pro|*landą}}, from {{der|non|ine-pro|*lendʰ-||land, heath|id=land}}. Cognate with {{cog|osx|land}}, {{cog|ofs|land}}, {{m|ofs|lond}}, {{cog|ang|land}}, {{m|ang|lond}}, {{cog|odt|lant}}, {{cog|goh|lant}}, {{cog|got|𐌻𐌰𐌽𐌳}}.
=== නාම පදය ===
{{non-noun|n|lands|lǫnd}}
# {{l|en|land}}
==== වරනැඟීම ====
{{non-decl-n-a|land|lǫnd}}
====Descendants====
* {{desc|is|land}}
* {{desc|fo|land}}
* {{desc|nrn|land}}
* {{desc|nn|land}}
** {{desc|crp-rsn|лань}}
* {{desc|gmq-osw|land}}
** {{desc|ovd|land}}
** {{desc|sv|land}}
* {{desc|gmq-oda|land}}
** {{desc|da|land}}
*** {{desc|nb|land}}
** {{desc|gmq-scy|lann}}
* {{desc|gmq-ogt|land}}
** {{desc|gmq-gut|land|lande|landi}}
=== වැඩිදුර් කියවීම සඳහා ===
* {{R:non:Zoega}}
{{C|non|Landforms}}
==Old Saxon==
=== නිරුක්තිය ===
{{root|osx|ine-pro|*lendʰ-|id=land}}
{{dercat|osx|gem-pro|ine-pro|inh=1}}
From {{inh|osx|gmw-pro|*land}}. Cognate with {{cog|ang|land}}, {{m|ang|lond}}, {{cog|ofs|land}}, {{m|ofs|lond}}, {{cog|nl|land}}, {{cog|goh|lant}} ({{cog|de|Land}}), {{cog|non|land}} ({{cog|sv|land}}), {{cog|got|𐌻𐌰𐌽𐌳}}. The {{cog|ine-pro|-}} root is also the source of {{cog|cel-pro|*landā}} ({{cog|cy|llan||enclosure}}, {{cog|br|lann||heath}}).
=== උච්චාරණය ===
* {{IPA|osx|/lɑnd/}}
=== නාම පදය ===
{{osx-noun|g=n}}
# {{l|en|land}}
==== වරනැඟීම ====
{{osx-decl-noun-a-n|land}}
====Descendants====
* {{desc|gml|lant}}
** {{desc|nds|Land}}
*** {{desc|nds-nl|laand}}
*** {{desc|nds-de|Land}}
** {{desc|pdt|Launt}}
==== මූලාශ්ර ====
{{R:osx:Kobler}}
==Old Swedish==
=== නිරුක්තිය ===
{{root|gmq-osw|ine-pro|*lendʰ-|id=land}}
From {{inh|gmq-osw|non|land}}, from {{inh|gmq-osw|gem-pro|*landą}}.
=== නාම පදය ===
{{head|gmq-osw|noun|g=n}}
# {{l|en|land}}
==== වරනැඟීම ====
{{gmq-osw-decl-noun-a-n|land}}
====Descendants====
* {{desc|ovd|land}}
* {{desc|sv|land}}
== පෝලන්ත ==
{{wp|lang=pl}}
=== නිරුක්තිය ===
{{root|pl|ine-pro|*lendʰ-|id=land}}
{{bor+|pl|de|Land}}, from {{der|pl|gmh|lant}}, from {{der|pl|goh|lant}}, from {{der|pl|gmw-pro|*land}}, from {{der|pl|gem-pro|*landą}}, from {{der|pl|ine-pro|*lendʰ-|t=land, heath|id=land}}.
=== උච්චාරණය ===
{{pl-pr|a=LL-Q809 (pol)-Olaf-land.wav}}
=== නාම පදය ===
{{pl-noun|m-in}}
# {{w|Länder|Land}} {{gl|federal state in Austria and Germany}}
#: {{syn|pl|kraj związkowy}}
#: {{coordinate terms|pl|stan|kraj|t2=krai}}
# {{lb|pl|Poznań}} [[countryside]] {{gl|rural area}}
#: {{syn|pl|prowincja|wieś}}
==== වරනැඟීම ====
{{pl-decl-noun-m-in}}
=== වැඩිදුර් කියවීම සඳහා ===
* {{R:pl:WSJP}}
* {{R:pl:PWN}}
{{C|pl|Administrative divisions}}
== රුමේනියානු ==
=== නිරුක්තිය ===
{{root|ro|ine-pro|*lendʰ-|id=land}}
{{bor+|ro|de|Land}}.
=== නාම පදය ===
{{ro-noun|n|landuri}}
# {{l|en|land}} {{gl|German and Austrian province}}
==== වරනැඟීම ====
{{ro-noun-n-uri}}
{{C|ro|Administrative divisions}}
== ස්පාඤ්ඤ ==
=== නිරුක්තිය ===
{{root|es|ine-pro|*lendʰ-|id=land}}
{{bor+|es|de|Land}}.
=== නාම පදය ===
{{es-noun|m}}
# one of the [[federal]] [[state]]s of [[Germany]]
#* {{quote-web
|es
|date=2020-01-29
|work=La Vanguardia
|title=El coronavirus ya se transmite fuera de China y se teme por su afectación al Mobile
|url=https://www.lavanguardia.com/vida/20200129/473204183924/coronavirus-china-mobile.html
|passage=Alemania confirmó ayer los cuatro primeros casos de coronavirus de Wuhan en su territorio, todos pertenecientes a la misma empresa de componentes de automóvil del '''land''' alemán de Baviera.|t=Germany yesterday confirmed the first four cases of Wuhan coronavirus on its territory, all belonging to the same automotive component company from the German '''land''' of Bavaria.}}
=== වැඩිදුර් කියවීම සඳහා ===
* {{R:es:DRAE}}
{{C|es|Administrative divisions}}
== ස්වීඩන් ==
{{wikipedia|lang=sv}}
=== නිරුක්තිය ===
{{root|sv|ine-pro|*lendʰ-|id=land}}
From {{inh|sv|gmq-osw|land}}, from {{inh|sv|non|land}}, from {{inh|sv|gem-pro|*landą}}, from {{der|sv|ine-pro|*lendʰ-||land, heath}}.
=== උච්චාරණය ===
* {{IPA|sv|/land/|[l̪an̪ːd̪]|q3=colloquial|/lan/}}
* {{audio|sv|Sv-land.ogg}}
* {{rhymes|sv|and}}
=== නාම පදය ===
{{sv-noun|n}}
# a [[country]], a {{l|en|land}} (independent political entity)
#: {{ux|sv|Sverige är ett '''land'''|Sweden is a '''country'''}}
#: {{ux|sv|'''länderna''' i EU|'''the countries''' in the EU}}
#: {{ux|sv|främmande '''länder'''|foreign '''lands'''}}
#: {{ux|sv|fjärran '''länder'''|distant '''lands'''}}
==== වරනැඟීම ====
{{sv-noun-irreg-n|3=länder|4=länderna}}
==== අමතර අවධානයට ====
* {{l|sv|nation}}
* {{l|sv|stat}}
=== නාම පදය ===
{{sv-noun|n}}
# {{lb|sv|uncountable}} {{l|en|land}} (as opposed to sea)
#: {{ux|sv|Om man inte har lust att vara på en båt så kan man vara på '''land''' istället|If you don't feel like being on a boat, you can be on '''land''' instead}}
#: {{ux|sv|'''land''' och hav|'''land''' and sea}}
#: {{ux|sv|ha '''land''' i sikte|have '''land''' in sight}}
#: {{ux|sv|'''Land''' i sikte!|'''Land''' ahoy!}}
# {{lb|sv|usually in the definite}} [[countryside]], [[country]]
#: {{ux|sv|Vi bor på '''landet'''|We live in '''the countryside'''}}
#: {{ux|sv|Vi är ute på '''landet'''|We are out in the '''country'''}}
#: {{ux|sv|livet på '''landet'''|life in '''the countryside'''}}
#: {{ux|sv|stad och '''land'''|town and '''country'''}}
#: {{ux|sv|laglöst '''land'''|lawless '''land'''}}
#* {{quote-song|sv|year=2007|author=w:Laser Inc|title=w:Det var en gång en fågel|trans-title=Once upon a time, there was a bird|url=https://www.youtube.com/watch?v=QrqZ-L7fHe8|text=Det var en gång en liten fågel. Ja, en fågel. Han bodde '''på landet''', och Roger hette han. Han ville gärna leka med sina vänner, med sina vänner, men det fick inte han. Men denna historia slutar sorgligt, för Roger blev skjuten, skjuten i magen av gamle jägar'n [jägaren] Pär. Han ville hem och äta, äta en fågel med lite potäter, men Roger hann iväg.|t=Once upon a time, there was a little bird. Yes, a bird. He lived '''in the countryside''', and Roger was his name. He wanted to play with his friends ["He wanted gladly to play with his friends," in the sense of, "He wanted, with keenness, to play with his friends" – the translation skips the {{m|sv|gärna}} as it doesn't make much difference to the meaning], with his friends, but [that – to play with his friends] he didn't get to. But this story ends sadly, because Roger was shot, shot in the stomach by old hunter Pär ["den gamle jägaren Pär" matches "the old hunter Pär" – skipping "{{l|sv|den}}" makes "jägaren Pär" sound [[lexicalized]]]. He wanted to go home and eat, eat a bird with some potatoes, but Roger got away [in time].}}
==== භාවිත සටහන් ====
See {{m|sv|mark}} for some other senses of ''land''.
==== වරනැඟීම ====
{{sv-noun-unc-irreg-n|2=landet}}
==== අමතර අවධානයට ====
* {{l|sv|backe}}
* {{l|sv|landsbygd}}
* {{l|sv|mark}}
* {{l|sv|på landbacken||on land (emphasizing not at sea)}}
=== නාම පදය ===
{{sv-noun|n}}
# a smaller piece of land for small-scale cultivation; a [[patch]], a [[garden]] [[plot]], etc.
#: {{ux|sv|ett jordgubbs'''land'''|a strawberry '''patch'''}}
#: {{ux|sv|ett potatis'''land'''|a potato '''patch'''}}
#: {{ux|sv|påta i '''landet'''|potter in the '''garden plot'''}}
==== වරනැඟීම ====
{{sv-infl-noun-n-zero}}
==== ව්යුත්පන්න යෙදුම් ====
* {{l|sv|grönsaksland||vegetable patch / plot}}
* {{l|sv|trädgårdsland||garden plot}}
==== ව්යුත්පන්න යෙදුම් ====
{{col3|sv|arabland
|Dalsland
|drömland
|England
|Estland
|fastland
|favoritland
|Finland
|Gotland
|grannland
|grönsaksland
|Gästrikland
|Götaland
|Halland
|Holland
|Hälsingland
|högland
|i-land
|inland
|Jämtland
|landa
|landamären
|landareal
|landavträdelse
|landbacken
|landbaserad
|landbo
|landborg
|landbris
|landbrygga
|landdjur
|landeri
|landfast
|landfäste
|landförbindelse
|landgille
|landgräns
|landgång
|landhockey
|landhöjning
|landis
|landkarta
|landkrabba
|landkänning
|landledes
|landmassa
|landmil
|landmina
|landmärke
|landning
|landområde
|landpermission
|landremsa
|landrygg
|landsantikvarie
|landsarkiv
|landsarkivarie
|landsbibliotek
|landsbygd
|landsdel
|landsfader
|landsfaderlig
|landsfiskal
|landsflykt
|landsflyktig
|landsflykting
|landsfogde
|landsförrädare
|landsförräderi
|landsförrädisk
|landsförsamling
|landsförvisa
|landsförvisning
|landshövding
|landsida
|landskamp
|landskampare
|landskap
|landskommun
|Landskrona
|landskronabo
|landskronit
|landskyrka
|landsköldpadda
|landslag
|landsman
|landsmaninna
|landsmoder
|landsmål
|landsmöte
|landsnummer
|landsomfattande
|landsorganisation
|landsort
|landsplåga
|landsråd
|landssekretariat
|landssorg
|landssvek
|landstiga
|landstigning
|landstorm
|landstrategi
|landstridskrafter
|landstrimma
|landstrykare
|landsträcka
|landstäckande
|landställe
|landsväg
|landsända
|landsände
|landsänkning
|landsätta
|landsättning
|landtunga
|landvad
|landvind
|landvägen
|landyta
|lantadel
|lantarbetare
|lantbarn
|lantbefolkning
|lantbo
|lantbrevbärare
|lantbrevbäring
|lantbruk
|lantbröd
|lantdag
|lantegendom
|lantflicka
|lantgreve
|lantgård
|lanthandel
|lanthandlare
|lanthem
|lanthushåll
|lanthushållsskola
|lantis
|lantjunkare
|lantkyrka
|lantlig
|lantlighet
|lantliv
|lantlolla
|lantluft
|lantman
|lantmarskalk
|lantmästare
|lantmätare
|lantmäteri
|lantpatron
|lantpräst
|lantras
|lantråd
|lantställe
|lantvin
|lantvärn
|Lappland
|Lettland
|lågland
|morotsland
|Norrland
|Nyland
|potatisland
|rovland
|rödbetsland
|Skåneland
|slättland
|Småland
|Svealand
|Södermanland
|Sörmland
|trädgårdsland
|Tyskland
|u-land
|uppland
|Uppland
|utland
|utlänning
|Värmland
|Västergötland
|västerlandet
|Västmanland
|Åland
|Öland
|Östergötland
|österlandet
}}
=== මූලාශ්ර ===
* {{R:svenska.se|so}}
* {{R:svenska.se|saol}}
* {{R:svenska.se|saob}}
{{C|sv|Administrative divisions}}
==Zealandic==
=== නිරුක්තිය ===
{{root|zea|ine-pro|*lendʰ-|id=land}}
{{dercat|zea|odt|frk|gmw-pro|gem-pro|ine-pro|inh=5}}
From {{inh|zea|dum|lant}}.
=== නාම පදය ===
{{zea-noun|n}}
# {{l|en|land}}
3q5e5h1wtrbk9zpmsqwjimpwbr7vmzq
හැරේ
0
135064
235460
216726
2026-06-02T10:51:01Z
WrdSrchSi
3305
/* ක්රියා පද */ + blockquote + ප්රවර්ගය
235460
wikitext
text/x-wiki
==සිංහල==
=== නිරුක්තිය ===
{{rfe|si}}
===උච්චාරණය===
* {{IPA|si|/ˈɦæreː/}}
===ක්රියා පද===
{{head|si|verb
|අතීත-අකර්මක අන්ය පුරුෂ ඒකවචන|හැරිණි
|අනතීත-අකර්මක අන්ය පුරුෂ බහුවචන|හැරෙති
|අනතීත-අකර්මක උත්තම ඒකවචන|හැරෙමි
|අනතීත-අකර්මක උත්තම බහුවචන|හැරෙමු
|අනතීත-ප්රයුක්ත|හරවයි
|අනතීත-භාව නාම|හැරෙනවා
|අනතීත-කාරක නාම|හැරෙන්නේ
|වර්තමාන-නිපාත|හැරෙමින්
}}
# {{lb|si||අකර්මක}} {{{1|{{rfdef|si}}}}} #: ''{{{2|<!-- example sentence -->}}}''
{{blockquote|ගාලු පාරේ අවුත් විදුහල දෙසට '''හැරුණු''' සරවුවෙක් (මෝටර රියක්) එයි.|මොහොට්ටි දොණු දේවිදු|[https://www.ahubudu.lk/assets/pdf/EDIYA_Veluma6,Kalaba6.pdf මගේ බළපිටි සමය], 2510 පොසොන්-වප් 1966 ජුනි-ඔක්.}}
# {{infl of|si|හරී||අනතීත|කර්ම කාරක|අන්ය පුරුෂ|ඒකවචන|ආඛ්යාත ක්රියා}}
[[ප්රවර්ගය: සිංහල ආඛ්යාත ක්රියා පද]]
===ආශ්රිත පද===
{{top3}}
* {{l|si|හැරෙන}}
{{bottom}}
==== පරිවර්තන ====
''පරිවර්තන සඳහා අනාගත කාලය සලකා නැත.''
{{trans-top|හැරේ (අකර්මක)}}
* ඉංග්රීසි: {{t|en|turns}} {{qualifier|intransitive}}
{{trans-bottom}}
{{trans-top|හැරේ (කර්ම කාරක)}}
* ඉංග්රීසි: {{t|en|sent}} {{qualifier|He is}}
{{trans-bottom}}
=== මූලාශ්ර ===
<references/>
* "හර", කුමාරණතුංග මුනිදාස, '''''ක්රියා විවරණය''''', පිටුව 220 [https://tipitaka.lk/library/963]
[[ප්රවර්ගය: සිංහල ආඛ්යාත ක්රියා පද]]
qmhkj745z60d25q4m3a6mplee0ii3ee
learn
0
137543
235456
223194
2026-06-02T10:46:52Z
Lee
19
235456
wikitext
text/x-wiki
==ඉංග්රීසි==
===ක්රියා පද===
{{en-verb|+|+|+,~t}}
# {{{1|{{rfdef|en}}}}} #: ''{{{2|<!-- example sentence -->}}}''
{| class="wikitable"
|+
|-
! !!අන්ය පුරුෂ<br>ඒකවචන!!අන්ය පුරුෂ<br>බහුවචන!!උත්තම පුරුෂ<br>ඒකවචන!!උත්තම පුරුෂ<br>බහුවචන
|-
|අනතීත-සකර්මක||[[උගනී]]||[[උගනිති]]||[[උගනිමි]]||[[උගනිමු]]
|-
|}
7ol4k99wd1467z4erlwk8ue0u47anyt
පතයි
0
137696
235479
223621
2026-06-02T11:14:56Z
WrdSrchSi
3305
/* ක්රියා පද */ + quote#2 with link
235479
wikitext
text/x-wiki
==සිංහල==
===වෙනත් ආකාර===
* {{l|si|පතා}}
=== නිරුක්තිය ===
{{etymon|si|id=පතා යි|af|si>පතා>පදය|si>යි>පදය|tree=1}}
''[[පතා]] (වෙනත් ආකාර) + [[යි]] >'' [[පතයි]]
===උච්චාරණය===
* {{IPA|si|/ˈpataji/}}
===ක්රියා පද===
{{head|si|verb
|අතීත-සකර්මක අන්ය පුරුෂ ඒකවචන|පැතී#ක්රියා පද 1
|අනතීත-කර්ම කාරක අන්ය පුරුෂ ඒකවචන|පැතේ#ක්රියා පද
|අතීත-කර්ම කාරක අන්ය පුරුෂ ඒකවචන|පැතිණි#ක්රියා පද
|අනතීත-සකර්මක අන්ය පුරුෂ බහුවචන|පතති#ක්රියා පද
|අනතීත-සකර්මක උත්තම ඒකවචන|පතමි#ක්රියා පද
|අනතීත-සකර්මක උත්තම බහුවචන|පතමු#ක්රියා පද
|අනතීත-ප්රයුක්ත|පතවයි#ක්රියා පද
|අනතීත-භාව නාම|පතනවා#ක්රියා පද
|අනතීත-කාරක නාම|පතන්නේ#ක්රියා පද
|වර්තමාන-නිපාත|පතමින්#ක්රියා පද
}}
# {{lb|si||සකර්මක}} [[ප්රාර්ථනා]] කරයි. [[බලාපොරොත්තු]] වෙයි. [[අපේක්ෂා]] කරයි.
#:* එඩිය, ''[https://www.ahubudu.lk/assets/pdf/EDIYA_Veluma4_Kalaba10.pdf පහදුව]'', 2507 දුරුතු - 1964 ජනවාරි
#:*: ''කොළොඹැ මහ ගිලන් හලේ දකුතුරු, රාජ ජයවිරුවෝ ඉංගිරිසි වෙද වදන් ඉද්දක් එවමින් එයට හෙළ වදන් '''පතති'''.''
#:* මොහොට්ටි දොණු දේවිදු, ''[https://www.ahubudu.lk/assets/pdf/EDIYA_Veluma6,Kalaba6.pdf මගේ බළපිටි සමය]'', 2510 පොසොන්-වප් 1966 ජුනි-ඔක්.
#:*: ''මම කුමාරතුංගයන් නිසා මැ බළපිටි ගුරු ඇබෑසි විදුහල '''පැතුවෙකිමි'''.''
====ආශ්රිත පද====
{{top4}}
* {{l|si|පැතුම්}}
* {{l|si|පැතුම}}
* {{l|si|පතන}}
* {{l|si|පැතූ}}
* {{l|si|නොපැතූ}}
* {{l|si|පතා#ක්රියා පද}} ''(සකර්මක අතීත නිපාත)''
* {{l|si|පැතී#ක්රියා පද 2}} ''(කර්ම කාරක අතීත නිපාත)''
{{bottom}}
=== අමතර අවධානයට ===
{{top4}}
* {{l|si|අවෙක්සයි#ක්රියා පද|අවෙක්සයි}}
* {{l|si|පුලයි#ක්රියා පද|පුලයි}}
{{bottom}}
=== මූලාශ්ර ===
<references/>
* "පත [https://tipitaka.lk/library/963]", කුමාරණතුංග මුනිදාස, '''''ක්රියා විවරණය''''', — පිටුව 155
* "පත (ධා) [https://tipitaka.lk/library/955]", වැලිවිටියේ සෝරත හිමි, '''''ශ්රී සුමංගල සිංහල ශබ්දකෝෂය 2 ප-ළ 1956''''' පිටුව 548
* "4. [https://www.ahubudu.lk/assets/pdf/EDIYA_Veluma4_Kalaba10.pdf]", '''''පහදුව''''', — එඩිය, 4 වෙළුම 10 කලබ 320 පිටුව
* "ප්රාර්ථනාව [https://arutha.lk/search/%E0%B6%B4%E0%B7%8A%E2%80%8D%E0%B6%BB%E0%B7%8F%E0%B6%BB%E0%B7%8A%E0%B6%AE%E0%B6%B1%E0%B7%8F%E0%B7%80]", '''''අරුත.lk''''', — 2025.08.31
[[ප්රවර්ගය: සිංහල ආඛ්යාත ක්රියා පද]]
9y1bgzjyyq9p1cgensft52qrhy892xw
eat
0
138433
235351
223856
2026-06-01T15:08:14Z
Lee
19
235351
wikitext
text/x-wiki
==ඉංග්රීසි==
===ක්රියා පද===
{{en-verb|+|+|ate,et<l:dialectal>,~<l:obsolete>|n,etten<l:dialectal>,ate<l:nonstandard>}}
# {{{1|{{rfdef|en}}}}} #: ''{{{2|<!-- example sentence -->}}}''
{| class="wikitable"
|+
|-
! !!අන්ය පුරුෂ<br>ඒකවචන!!අන්ය පුරුෂ<br>බහුවචන!!උත්තම පුරුෂ<br>ඒකවචන!!උත්තම පුරුෂ<br>බහුවචන
|-
|අනතීත-සකර්මක||[[කයි]]||[[කති]]||[[කමි]]||[[කමු]]
|-
|}
tnvdmskoo1rles80u3sgdjxyd5qf69s
know
0
138570
235411
224091
2026-06-02T04:46:28Z
Lee
19
235411
wikitext
text/x-wiki
==ඉංග්රීසි==
===ක්රියා පද===
{{en-verb|~s|~ing|knew,~ed<l:nonstandard>|~n,knew<l:colloquial,and,nonstandard>}}
# {{{1|{{rfdef|en}}}}} #: ''{{{2|<!-- example sentence -->}}}''
{| class="wikitable"
|+
|-
! !!අන්ය පුරුෂ<br>ඒකවචන!!අන්ය පුරුෂ<br>බහුවචන!!උත්තම පුරුෂ<br>ඒකවචන!!උත්තම පුරුෂ<br>බහුවචන
|-
|අනතීත-සකර්මක||[[දනී]]||[[දනිති]]||[[දනිමි]]||[[දනුමු]]
|-
|}
94um1b4obbfl5soa3rq6sj5yvibemay
read
0
138584
235466
224126
2026-06-02T10:57:22Z
Lee
19
235466
wikitext
text/x-wiki
==ඉංග්රීසි==
===ක්රියා පද===
{{en-verb|~s|~ing|[[:en:#Etymology 2|read]]|+,~en<l:archaic,dialectal>}}
# {{{1|{{rfdef|en}}}}} #: ''{{{2|<!-- example sentence -->}}}''
{| class="wikitable"
|+
|-
! !!අන්ය පුරුෂ<br>ඒකවචන!!අන්ය පුරුෂ<br>බහුවචන!!උත්තම පුරුෂ<br>ඒකවචන!!උත්තම පුරුෂ<br>බහුවචන
|-
|අනතීත-සකර්මක||[[කියවයි]]||[[කියවති]]||[[කියවමි]]||[[කියවමු]]
|-
|}
0xvxszwwnqicmwdio2cb7oh316sm4kr
lift
0
138586
235457
224129
2026-06-02T10:47:14Z
Lee
19
235457
wikitext
text/x-wiki
==ඉංග්රීසි==
===ක්රියා පද===
{{en-verb|+|+|+,~<l:rare,regional,obsolete>|+,~<l:rare,regional,obsolete>,yleft<l:obsolete>}}
# {{{1|{{rfdef|en}}}}} #: ''{{{2|<!-- example sentence -->}}}''
{| class="wikitable"
|+
|-
! !!අන්ය පුරුෂ<br>ඒකවචන!!අන්ය පුරුෂ<br>බහුවචන!!උත්තම පුරුෂ<br>ඒකවචන!!උත්තම පුරුෂ<br>බහුවචන
|-
|අනතීත-සකර්මක||[[ඔසොවයි]]||[[ඔසොවති]]||[[ඔසොවමි]]||[[ඔසොවමු]]
|-
|}
th2ldkx3uy582b0hj831fye8on0z7ey
earn
0
138680
235350
224316
2026-06-01T15:07:33Z
Lee
19
235350
wikitext
text/x-wiki
==ඉංග්රීසි==
===ක්රියා පද===
{{en-verb|+|+|+,~t<l:chiefly,UK>}}
# {{{1|{{rfdef|en}}}}} #: ''{{{2|<!-- example sentence -->}}}''
{| class="wikitable"
|+
|-
! !!අන්ය පුරුෂ<br>ඒකවචන!!අන්ය පුරුෂ<br>බහුවචන!!උත්තම පුරුෂ<br>ඒකවචන!!උත්තම පුරුෂ<br>බහුවචන
|-
|අනතීත-සකර්මක||[[උපයයි]]||[[උපයති]]||[[උපයමි]]||[[උපයමු]]
|-
|}
7aiwuh05yxtx4cgcnmy00wyobmiz15m
kiss
0
138724
235410
224411
2026-06-02T04:46:05Z
Lee
19
235410
wikitext
text/x-wiki
==ඉංග්රීසි==
===ක්රියා පද===
{{en-verb|+|+|+,kist<l:obsolete>}}
# {{{1|{{rfdef|en}}}}} #: ''{{{2|<!-- example sentence -->}}}''
{| class="wikitable"
|+
|-
! !!අන්ය පුරුෂ<br>ඒකවචන!!අන්ය පුරුෂ<br>බහුවචන!!උත්තම පුරුෂ<br>ඒකවචන!!උත්තම පුරුෂ<br>බහුවචන
|-
|අනතීත-සකර්මක||[[සිඹී]]||[[සිඹිති]]||[[සිඹිමි]]||[[සිඹිමු]]
|-
|}
h3p21kb7pw1ietf0c44r1ri9mhph11e
Christmas
0
139310
235354
235221
2026-06-01T15:14:28Z
Lee
19
235354
wikitext
text/x-wiki
== ඉංග්රීසි ==
=== උච්චාරණය ===
{{multiple images
|direction = vertical
|image1 = NativityChristmasLights2.jpg
|caption1 = A [[nativity scene]] depicted using [[Christmas light]]s.
|image2 = Students around a Christmas tree.jpg
|caption2 = [[student|Students]] around a [[Christmas tree]].
}}
* {{enPR|krĭsʹməs|a=RP,GA}}, {{IPA|en|/ˈkɹɪsməs/}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-Christmas.wav|a=Southern England}}
* {{audio|en|En-us-Christmas.ogg|a=GA}}
* {{rhymes|en|ɪsməs|s=2}}
* {{hyphenation|en|Christ|mas}}
=== නිරුක්තිය 1 ===
{{root|en|ine-pro|*gʰrey-|*meyth₂-}}
The {{glossary|proper noun}} is derived from {{inh|en|enm|Cristemasse}}, {{m|enm|Criste-mas|t=Christmas Day; season of Christmas; Christmas festivities}}{{nb...||otherforms=1}},<ref>{{R:MED Online|entry=Criste-mas(se|pos=n|id=MED10371}}</ref> from {{inh|en|ang|Cristes mæsse|t=Christmas|lit=Christ’s mass}}, from {{m|ang|Crist|t=Christ}} + {{m|ang|-es|pos=[[possessive#Adjective|possessive]] marker}} + {{m|ang|mæsse|t=a mass (celebration of the Eucharist)}}. The English word is analysable as {{suffix|en|Christ|mas|pos2=suffix denoting a holiday or sacred day}}.<ref name="OED">Compare {{R:OED Online|pos=n.''{{sup|1}} and ''int|id=1558940598|date=December 2023|nodot=1}}; {{R:Lexico|pos=n}}.</ref> Cognate with {{cog|stq|Kristmisse|t=Christmas}}, {{cog|fy|Krystmis|t=Christmas}}, {{cog|nl|Kerstmis|t=Christmas}}, {{cog|nds-de|Karstmis|t=Christmas}}.
The {{glossary|noun}}, {{glossary|adjective}}, and {{glossary|verb}}<ref>{{R:OED Online|pos=v|id=3223887240|date=July 2023}}</ref> are derived from the proper noun.
Adjective {{senseno|en|color}} (“red and green in color”) refers to these colors being traditionally associated with Christmas.
==== සංඥා නාම පදය ====
{{en-proper noun|~|es|Christmasses}} {{tlb|en|also|attributive}}
# {{senseid|en|festival}}{{lb|en|originally|Christianity}} A [[festival#Noun|festival]] or [[holiday#Noun|holiday]] [[commemorate|commemorating]] the [[birth#Noun|birth]] of [[Jesus Christ]] and [[incorporate#Verb|incorporating]] various [[Christian#Adjective|Christian]], [[pre-Christian#Adjective|pre-Christian]], [[pagan#Adjective|pagan]], and [[secular#Adjective|secular]] [[custom#Noun|customs]], which in [[Western Christianity]] is [[celebrate]]d on [[December]] 25 ([[Christmas Day]]) in most [[place#Noun|places]].
#: {{synonyms|en|Chrimble<q:Britain, slang, humorous>|Chrimbo<q:Britain, slang, humorous>|Chrissy<q:Australia, slang>|Crimble<q:Britain, slang, humorous>|Crimbo<q:Britain, slang, humorous>|Noel|Yule}}
#: {{hypo|en|Chrismahanukwanzakah|Chrismukkah}}
#: {{ux|en|Do you celebrate '''Christmas'''?}}
#: {{ux|en|This '''Christmas''' we’ll open presents, then go to grandma’s for dinner.}}
#* {{quote-book|en|chapter=[[w:Boar's Head Carol|A Caroll Bringyng in the Bores Heed]]|title={{noitalic|[}}Christmasse Carolles{{noitalic|]}}|location=London|publisher={{...|Newely enprinted at Londõ, in the fletestrete at the Sygne of the Sonne, by}} {{w|Wynkyn de Worde}}|year=['''15th century'''] (date written)|year_published=1521|oclc=1350306438|newversion=republished in|2ndauthor=[[w:Joseph Ames (author)|Joseph Ames]]|title2=Typographical Antiquities: Being a Historical Account of Printing in England:{{nb...|With Some Memoirs of Our Antient Printers, and a Register of Books Printed by Them, from the year MCCCCLXXI to the Year MDC. With an Appendix Concerning Printing in Scotland and Ireland to the Same Time.}}|location2=London|publisher2={{...|Printed by}} W[illiam] Faden, and sold by J. Robinson,{{nb...|in Ludgate-Street.}}|year2=1749|page2=96|pageurl2=https://archive.org/details/b30412481/page/96/mode/1up|column2=2|oclc2=940187384|passage=Be gladde, lordes, bothe more and lasse, / For this hath ordeyned our stewarde / To chere you all this '''christmasse''' / The bores heed with mustarde.|brackets=on}}
#* {{RQ:Grafton Chronicle|volume=II|chapter=[[w:Henry VIII|Henry the Eyght]]|pages=1140–1141|pageref=1140|passage=In this Winter was great death in London, wherefore the Terme was adiorned, and the king for to eſchue the plague, kept his '''Chriſtmaſſe''' at Eltham with a ſmall number, for no man might come thether, but ſuch as were appoynted by name: this Chriſtmas in the kings houſe, was called the ſtill '''Chriſtmaſſe'''.}}
#* {{RQ:Dekker Dramatic Works|volume=I|title=Shomakers Holiday|subchapter=To All Good Fellowes, Professors of the Gentle Craft; of what Degree Soeuer|page=3|passage=Kinde Gentlemen, and honeſt Companions, I preſent you here with a merrie conceited Comedie, called ''the Shoomakers Holyday,'' acted by my Lorde Admiralls Players this preſent '''Chriſtmaſſe''', before the Queenes moſt excellent Maieſtie.}}
#* {{RQ:Bacon Henry 7|page=191|passage=Hereupon a ''Peace'' vvas concluded, vvhich vvas publiſhed a little before '''''Chriſtmaſſe''''', in the Fourteenth yeare of the Kings ''Raigne'', to continue for both the Kings liues, and the ouer-liuer of them, and a yeare after.}}
#* {{RQ:Camden Remaines|edition=3rd|chapter=Certaine Prouerbes, Poemes or Poesies, Epigrammes, Rhythmes, and Epitaphs of the English Nation in Former Times, and Some of This Present Age|page=267|passage='''Chriſtmaſſe''' commeth but once a yeere.}}
#* {{RQ:Dampier New Voyage|chapter=III|page=56|passage=[T]heſe Ships {{...}} meet vvith Privateers, vvho reſort hither in the aforeſaid months [May to August], purpoſely to keep a '''''Chriſtmas''''' as they call it; being ſure to meet vvith Liquor enough to be merry vvith, and are very liberal to thoſe that treat them.|footer=Used to refer to a period of festivity during a different time of the year.}}
#* {{RQ:Spectator|author=Steele|issue=450|date=6 August 1712|page=220|passage={{...}} I was always grateful for the sum of my week's profit, and at '''Christmas''' for that of the whole year.}}
#* {{quote-journal|en|title=Account of Lincoln’s Inn: With a Perspective View of the Hall and Chapel|journal=[[w:The Universal Magazine of Knowledge and Pleasure|The Universal Magazine of Knowledge and Pleasure;{{nb...|Containing Letters, Debates, Essays, Tales, Poetry, History, Biography, Antiquities, Voyages, Travels, Astronomy, Geography, Mathematics, Mechanics, Architecture, Philosophy, Medicine, Chemistry, Husbandry, Gardening and Other Arts and Sciences; Which May Render It Instructive and Entertaining. To Which Occasionally Will Be Added an Impartial Account of Books in Several Languages, and of the State of Learning in Europe; Also of the New Theatrical Entertainments.}}]]|volume=CIII|month=July|year=1798|location=London|publisher={{...|Published under His Majesty’s Royal Licence, [b]y}} W[illiam] Bent,{{nb...|at the King’s Arms, Paternoster Row}}|page=42|pageurl=https://books.google.com/books?id=eFg4AQAAMAAJ&pg=PA42|column=2|oclc=977832689|passage=The lord chancellor holds his fittings in this hall, and in former days, like the Temple, it had its revels and great '''Chriſtmaſſes'''. {{...}} The account of the great feaſt in the hall of the Inner Temple, by the ſerjeants, in 1555, is extremely worth conſulting: and alſo of the hoſpitable '''Chriſtmaſſes''' of old times.}}
#* {{RQ:Irving Sketch Book|title=Christmas Eve|page=379|passage=[A] great deal of revelry was permitted, and even encouraged, by the squire, throughout the twelve days of '''Christmas''', provided every thing was done comformably to ancient usage. {{...}} [T]he Yule clog, and '''Christmas''' candle, were regularly burnt, and the mistletoe, with its white berries, hung up, to the imminent peril of all the pretty housemaids.}}
#* {{quote-journal|en|author=Sylvanus Swanquill [pseudonym; [[w:John Hewitt (antiquary)|John Hewitt]]]|title=Merry Christmas and Happy New Year|journal=The New Sporting Magazine|volume=XVIII|issue=105|location=London|publisher=Walter Spiers,{{nb...|Printer, 399, Oxford Street}}|month=January|year=1840|page=53|pageurl=https://archive.org/details/newsportingmaga00unkngoog/page/n60/mode/1up|oclc=6560056|passage=“Lawk!” says our old granddam, who has taken the liberty of looking over our manuscript while we were gone to mix a glass of water and something. “Lawk!” says she, “how can you write such stuff? '''Christmas''', indeed! you’ve no '''Christmas''' now. Do you call this '''Christmas'''? It’s more like a vapour bath. Such weather! Lawk, how times ''are'' changed! the '''Christmasses''' ''I'' remember! the good, old-fashioned '''Christmasses''', when there was snow on the ground six feet deep, and poor people were starved to death by dozens, and you couldn’t go out without having your fingers frost-bitten, and coals were at six shillings a hundred, and canals froze up so that you couldn’t get your goods, and the roads all impassable, and daren’t ask a few friends to merrymake for fear of losing three or four of ’em going home in snow-drifts, and—oh, those ''were'' '''Christmasses'''! we shall never see such times again!”}}
#* {{RQ:Dickens Christmas Carol|page=166|passage=[I]t was always said of him [{{w|Ebenezer Scrooge}}], that he knew how to keep '''Christmas''' well, if any man alive possessed this knowledge. May that be truly said of us, and all of us! And so, as [[w:Tiny Tim (A Christmas Carol)|Tiny Tim]] observed, God Bless Us, Every One!}}
#* {{RQ:Tennyson In Memoriam|canto=XXVIII|page=45|passage=The time draws near the birth of Christ: / The moon is hid; the night is still; / The '''Christmas''' bells from hill to hill / Answer each other in the mist.}}
#* {{quote-book|en|author=[[w:Florence Marryat|[Florence] Marryatt]]|chapter=XXIX|title=Temper. A Novel.|location=New York, N.Y.|publisher={{w|Dick & Fitzgerald}},{{nb...|Publishers, No. 18 Ann Street}}|year=1859|page=205|pageurl=https://archive.org/details/temperanovel00marrgoog/page/n211/mode/1up|oclc=3640422|passage=Reader have your '''Christmasses''' hitherto been marked with happiness? Thank God for it. {{...}} Then mamma died—and later in your college days, dear Herbert, when you were both as tall as men, but as fond of play as ever—and we used to spend such happy '''Christmasses''', till our dear father died, / “That was our first sad winter, the one which followed his death, for you remember how sadly we all missed him, and we were still in mourning—but the next one was a happy day, for Lawry was so full of spirits—and that was our last happy '''Christmas'''. Herbert darling, Lawrence has left the last impression of happiness on my memory—he, who has since broken up our domestic peace, and for a long time spoilt our '''Christmasses'''—Heaven bless him!{{nb...}}”}}
#* {{RQ:Christina Rossetti Time Flies|chapter=December 29 [{{w|Love Came Down at Christmas}}]|page=251|passage=Love came down at '''Christmas''', / Love all lovely, Love Divine, / Love was born at '''Christmas''', / Star and Angels gave the sign.}}
#* {{quote-song|en|author=w:Irving Berlin|artist=w:Bing Crosby|title=[[w:White Christmas (song)|White Christmas]]|location=New York, N.Y.|publisher=w:Decca Records|date=30 July 1942|oclc=244388148|passage=I'm dreaming of a white '''Christmas''' / With every '''Christmas''' card I write / May your days be merry and bright / And may all your '''Christmases''' be white}}
#* {{quote-song|en|lyricist=w:Ralph Blane|composer=w:Hugh Martin|artist=w:Judy Garland|title={{w|Have Yourself a Merry Little Christmas}}|album=Have Yourself a Merry Little Christmas: From the M.G.M. Picture {{w|Meet Me in St. Louis}}|location=New York, N.Y.|publisher=w:Leo Feist|year='''1943''' (date written)|year_published=1944|oclc=82880525|passage=Have yourself a merry little '''Christmas''' / Let your heart be light / Next year all our troubles will be out of sight}}
#* {{quote-book|en|author=[[w:Cherry Drummond, 16th Baroness Strange|Cherry Drummond]]|title=The Remarkable Life of Victoria Drummond, Marine Engineer|location=London|publisher=[[w:Institute of Marine Engineering, Science and Technology|The Institute of Marine Engineers]]|year=1994|page=354|pageurl=https://books.google.com/books?id=Y4jfAAAAMAAJ&q=%22Christmas%2C+1980%22|isbn=0-907206-54-9|passage=The last time I saw her was a week before '''Christmas''', 1980. We took down a fat branch of berried Megginch holly, which we stuck in a pot for a '''Christmas''' tree, hung with silver balls and glitters. Aunt Victoria looked at it, smiled and unexpectedly said, “'''Christmas'''.” Surely she was sitting there dreaming of '''Christmasses''' long past: '''Christmas''' in the South China Sea, the '''Christmas''' lights of Hong Kong, hot '''Christmasses''' so long ago in the ''Anchises'' under the Southern Cross stars, or even longer ago of '''Christmasses''' at Megginch, singing carols round the lighted '''Christmas''' tree in the hall, while Queen Victoria’s goddaughter in her starched white dress and bronze shoes had worn the sparkling pendant given her by the great Queen.}}
#* {{quote-song|en|author=w:Mariah Carey; w:Walter Afanasieff|artist=Mariah Carey|title=w:All I Want for Christmas Is You|album=[[w:Merry Christmas (Mariah Carey album)|Merry Christmas]]|location=New York, N.Y.|publisher=w:Columbia Records|date=29 October 1994|oclc=33186322|passage=I don't want a lot for '''Christmas''' / There is just one thing I need / I don't care about the presents / Underneath the '''Christmas''' tree / I just want you for my own / More than you could ever know / Make my wish come true / All I want for '''Christmas''' is you}}
#* {{quote-journal
|en
|date=December 19, 2018
|author=Tiffany May
|title=Chinese City Bans Christmas Displays Amid Religious Crackdown
|journal=w:The Washington Post
|archiveurl=https://web.archive.org/web/20181219161407/https://www.nytimes.com/2018/12/19/world/asia/china-christmas-display-ban.html
|archivedate=December 19, 2018
|url=https://www.nytimes.com/2018/12/19/world/asia/china-christmas-display-ban.html
|issn=0190-8286
|oclc=2269358
|section=Asia Pacific
|url2=https://archive.ph/zFyo0
|text=This is not the first time a city in China has clamped down on '''Christmas''' merriment. Last December, Hengyang, a city in Hunan province, issued a stern notice asking Communist Party officials and their relatives to “resist the rampant Western festival.” The China Communist Youth League in Anhui wrote on social media last year that “'''Christmas''' is China’s day of shame” and represents a latter-day invasion by the West.}}
# {{lb|en|often|marketing}} {{ellipsis of|en|Christmas season|t=the [[period of time]] before and after Christmas Day, during which people prepare for and celebrate Christmas}}; [[Christmastime]].
#: {{ux|en|The last three '''Christmases''' have been good for retailers.}}
#: {{ux|en|'''Christmas''' shoppers spent less this December than last year, but our store will probably see just as many returned items during the twelve days of Christmas.}}
#* {{quote-song|en|author=[[w:Edward Pola|Eddie [''i.e.'', Edward] Pola]]; {{w|George Wyle}}|artist=w:Andy Williams|title=[[w:It's the Most Wonderful Time of the Year|It’s the Most Wonderful Time of the Year]]|location=New York, N.Y.|publisher=w:Columbia Records|date=14 October 1963|oclc=498383541|passage=There'll be parties for hosting / Marshmallows for toasting / And caroling out in the snow / There'll be scary ghost stories / And tales of the glories / Of '''Christmases''' long, long ago}}
#* {{quote-song|en|author=[[w:John W. Peterson|John W[illard] Peterson]]|title=Christmas is Love|location=Grand Rapids, Mich.|publisher=Singspiration|year=1981|oclc=59821444|passage='''Christmas''' is such a wonderful time of the year / '''Christmas''', it's the season of good cheer / {{...}} / '''Christmas''' is love, '''Christmas''' is love / The love of God, oh that's the marvelous thing}}
# {{place|en|number of places|c/USA}}:
## {{place|en|uninhabited mining community|co/Gila County|s/Arizona}}.
## {{place|en|CDP|co/Orange County|s/Florida}}.
## {{place|en|unincorporated community|twp:Suf/Au Train|co/Alger County|s/Michigan}}.
## {{place|en|unincorporated community|co/Bolivar County|s/Mississippi}}.
# {{surname|en}}.
===== වෙනත් ආකාර =====
* {{alter|en|Christmass|Christmasse}} {{qualifier|obsolete}}
* {{alter|en|Xmas|X-mas}} {{qualifier|abbreviation|informal}}
* {{alter|en|Xtmas}} {{qualifier|abbreviation|archaic}}
===== ව්යුත්පන්න යෙදුම් =====
{{col3|en|{{vern|Christmas moss}} ({{taxlink|Vesicularia montagnei|species}})
|black Christmas
|by Christmas
|cancel someone's Christmas
|Charlie Brown Christmas tree,Charlie Brown's Christmas tree
|Chrismahanukwanzakah
|Chrismukkah
|Christmas Adam
|Christmas and Easter Christian
|Christmas beetle
|Christmas bells
|Christmas berry,Christmasberry
|Christmas block
|Christmas box
|Christmas bush
|[[Christmas cactus]] ({{taxfmt|Schlumbergera|genus}} spp.)
|Christmas cake
|Christmas Capital of the Philippines
|Christmas card
|Christmas carol
|Christmas caterpillar
|Christmas cheer
|Christmas City
|Christmas club
|Christmas come early
|Christmas comes but once a year
|Christmas Common
|Christmas cookie|Christmas break
|Christmas cracker
|Christmas creep
|Christmas Day
|Christmas dinner
|Christmas disease
|Christmas elf
|Christmas Eve
|Christmas Eve box
|Christmas factor
|Christmas fern
|Christmas flower
|Christmas graduate
|Christmas grass
|Christmas green
|Christmas ham
|[[Christmas holly]] ({{taxfmt|Ilex aquifolium|species}})
|Christmas in July
|Christmas is coming
|Christmasish
|Christmas Island
|Christmas Islander
|Christmas Island red crab
|Christmas Island swiftlet
|Christmas Island whiptail skink
|Christmasization
|Christmasize
|Christmasless
|Christmaslessness
|Christmas light
|Christmas-like,Christmaslike
|Christmas lily
|Christmas list
|Christmas log
|Christmasly
|Christmas market
|Christmas melon
|[[Christmas orchid]] ({{taxlink|Angraecum sesquipedale|species}})
|Christmas pickle
|Christmas pie,Christmas Pie,Christmaspie
|Christmas present
|Christmas pride
|Christmas pudding
|Christmas rose
|Christmas seal
|Christmas season
|Christmassed up
|Christmassiness,Christmasiness
|Christmas star
|Christmas stocking
|Christmas Sunday
|Christmassy,Christmasy
|Christmastide,Christmas-tide
|Christmastime,Christmas time,Christmas-time
|Christmas tree
|Christmas tree bill
|Christmas tree effect
|Christmas tree packet
|Christmas tree worm
|Cold Christmas
|Coolie Christmas
|dressed up like a Christmas tree
|Father Christmas
|Friendsmas
|Ghost of Christmas Future
|Ghost of Christmas Past
|Ghost of Christmas Present
|Ghost of Christmas Yet to Come
|Giftmas
|Gothmas
|Green Christmas,green Christmas
|Happy Christmas
|if ifs and buts were candy and nuts, we'd all have a merry Christmas
|light up like a Christmas tree
|like a kid at Christmas,like a kid on Christmas morning
|like turkeys voting for Christmas,like turkeys voting for an early Christmas
|Little Christmas
|lit up like a Christmas tree
|merry Christmas
|Mithrasmas
|Mother Christmas
|Old Christmas
|pickaninny Christmas
|Shitmas
|slow as Christmas
|Thanksmas
|think all one's Christmases have come at once
|Twelve Days of Christmas
|Twixmas
|un-Christmassy
|Vlogmas
|War on Christmas
|white Christmas
|white Christmas slice
|Women's Christmas
|X-mas,Xmas
}}
=====Descendants=====
{{top2}}
* {{desc|bor=1|af|Krismis}}
* {{desctree|bor=1|gil|Kiritimati}}
* {{desc|bor=1|gvf|geresma}}
* {{desc|bor=1|haw|Kalikimaka}}
* {{desc|bor=1|he|כריסטמס}}
* {{desc|bor=1|hi|क्रिसमस|alts=1}}
* {{desc|bor=1|hop|Kyesmis}}
* {{desc|bor=1|ja|クリスマス|tr=Kurisumasu}}
* {{desc|bor=1|ko|^크리스마스}}
* {{desc|bor=1|mi|Kirihimete}}
* {{desc|mh|Kūrijm̧ōj|bor=1}}
* {{desc|bor=1|mnw|ခရေတ်သမာတ်}}
* {{desc|bor=1|my|ခရစ္စမတ်}}
* {{desc|bor=1|ru|Кри́стмас}}
* {{desc|bor=1|es|Crismes}}
* {{desc|bor=1|sw|Krismasi}}
{{bottom}}
===== පරිවර්තන =====
{{trans-top|festival or holiday commemorating the birth of Jesus Christ which in Western Christianity is celebrated on December 25 in most places}}
* Afrikaans: {{t+|af|Kersfees}}
* Albanian: {{t|sq|krishtlindje}}, {{t+|sq|kërshëndella}}
* Alutiiq: {{t|ems|Aʀusistuaq}}
* Amharic: {{t|am|ገና}}
* Arabic: {{t|ar|كْرِيسْمَاس|alt=الْكْرِيسْمَاس|m}}, {{t+|ar|مِيلَاد|alt=الْمِيلَاد|m}}, {{t|ar|عِيد الْمِيلَاد|m}}
*: Egyptian Arabic: {{t|arz|عيد الميلاد|m|tr=ʕīd il-milād}}
*: Hijazi Arabic: {{t|acw|كْرِسْمَس|m|tr=krismas}}, {{t|acw|عيد الميلاد|m|tr=ʕīd al-mīlād}}
*: South Levantine Arabic: {{t|ajp|عيد الميلاد|m|tr=ʕīd il-mīlād}}
* Armenian: {{t|hy|Սուրբ Ծնունդ}}
* Aromanian: {{t|rup|Crãciun}}
* Assamese: {{t|as|বৰদিন}}
* Assyrian Neo-Aramaic: {{t|aii|ܥܹܐܕܵܐ ܕܡܵܘܠܵܕܵܐ|m}}, {{t|aii|ܥܹܐܕܵܐ ܙܥܘܿܪܵܐ|m}}
* Asturian: {{t+|ast|navidá|f}}, {{t+|ast|ñavidá|f}}
* Azerbaijani: {{t|az|Milad}}
* Basque: {{t+|eu|Eguberri}}
* Bavarian: {{t|bar|Weihnåchtn}}
*: Cimbrian: {{t|cim|Boinichtn}}
*: Mòcheno: {{t|mhn|Bainechtn}}
* Belarusian: {{t|be|каля́ды|f-p}}, {{t|be|Раство́|n}}, {{t|be|Ражджаство́|n}}, {{t|be|Ражаство́|n}}, {{t|be|Нараджэ́нне Хрысто́ва|n}}
* Bengali: {{t+|bn|বড়দিন}}
* Bikol Central: {{t|bcl|Pasko}}
* Breton: {{t+|br|Nedeleg|m}}
* Bulgarian: {{t+|bg|Коледа|f}}, {{t|bg|Рождество Христово|n}}
* Burmese: {{t+|my|ခရစ္စမတ်}}, {{t+|my|နာတာလူးပွဲ}}
* Carpathian Rusyn: {{t|rue|Ріство́|n}}
* Catalan: {{t+|ca|Nadal|m}}
* Cebuano: {{t|ceb|Pasko}}
* Central Franconian: {{t|gmw-cfr|Weihnachte}}
* Cherokee: {{t|chr|ᏓᏂᏍᏓᏲᎯᎲ}}
* Chichewa: {{t|ny|Khirisimasi}}
* Chinese:
*: Cantonese: {{t|yue|聖誕節}}
*: Hakka: {{t|hak|聖誕節|tr=Sṳn-tan-chiet}}
*: Hokkien: {{t+|nan-hbl|聖誕|tr=Sèng-tàn}}, {{t+|nan-hbl|耶誕|tr=Iâ-tàn}}
*: Mandarin: {{t+|cmn|聖誕節}}, {{t+|cmn|耶誕節|tr=Yēdànjié, Yédànjié}} {{qualifier|Taiwan}}
* Chuukese: {{t|chk|Kirisimas}}
* Chuvash: {{t|cv|Раштав}}
* Cornish: {{t|kw|Nadelik|m}}
* Corsican: {{t+|co|Natale}}
* Czech: {{t|cs|Boží hod|m}}, {{t+|cs|Vánoce|p}}
* Danish: {{t+|da|jul|c}}
* Dutch: {{t+|nl|Kerstmis|m}}, {{t+|nl|kerst|m}}
* Dzongkha: {{t|dz|ཡེ་ཤུའི་འཁྲུངས་སྟོན}}
* Esperanto: {{t|eo|kristnasko}}
* Estonian: {{t+|et|jõulud|p}}
* Ewe: {{t|ee|Blunya}}
* Faroese: {{t+|fo|jól|n-p}}
* Finnish: {{t+|fi|joulu}}
* Franco-Provençal: {{t|frp|Chalendes}}
* French: {{t+|fr|Noël|m}}
* Friulian: {{t|fur|Nadâl}}
* Galician: {{t+|gl|Nadal|m}}
* Georgian: {{t+|ka|შობა}}, {{t+|ka|ქრისტეშობა}}, {{t|ka|ქრისტეს შობა}}
* German: {{t+|de|Weihnachten|p|n}}
*: Alemannic German: {{t|gsw|Wiehnachte}}
*: Silesian: {{t|gmw-ecg|Weihnachta}}, {{t|gmw-ecg|Weihnachten}}
* Greek: {{t+|el|Χριστούγεννα|n-p}}
* Greenlandic: {{t+|kl|juulli}}
* Gujarati: {{t|gu|નાતાલ|f}}
* Hausa: {{t|ha|Kir̃sìmatì}}
* Hawaiian: {{t|haw|Kalikimaka}}, {{t|haw|Kalikamaka}}
* Hebrew: {{t+|he|חַג הַמּוֹלָד|tr=khag ha'molad}}
* Hindi: {{t|hi|क्रिसमस|m}}, {{t|hi|क्रिस्मस|m}}, {{t|hi|बड़ा दिन|m}}, {{t|hi|ईद-ए-तवल्लुद|m}}, {{t|hi|ईद-ए-विलादत|m}}
* Hungarian: {{t+|hu|karácsony}}
* Hunsrik: {{t|hrx|Weinachte|n}}
* Icelandic: {{t+|is|jól|n-p}}
* Ido: {{t+|io|Kristonasko}}
* Igala: {{t|igl|Íkéléchìmáchì}}
* Igbo: {{t|ig|Ekeresìmeèsì}}
* Ilocano: {{t|ilo|Paskua}}
* Inari Sami: {{t|smn|juovlah|p}}
* Indonesian: {{t+|id|Natal}}
* Ingrian: {{t|izh|Joulu}}
* Irish: {{t+|ga|Nollaig|f}}
*: Old Irish: {{t|sga|Notlaic|f}}
* Italian: {{t+|it|Natale|m}}
* Japanese: {{t+|ja|クリスマス|tr=Kurisumasu}}, {{t+|ja|聖誕祭|tr=せいたんさい, Seitansai}}, {{t+|ja|聖誕節|tr=せいたんせつ, Seitansetsu}}
* Javanese: {{t|jv|Natal}}
* Kannada: {{t|kn|ಕ್ರಿಸ್ಮಸ್}}
* Karelian: {{t|krl|Rastavu}}
* Kashubian: {{t|csb|Gòdë|m-p}}
* Kazakh: {{t|kk|Рождество}}
* Khmer: {{t|km|ណូអែល}}, {{t|km|បុណ្យណូអែល}}
* Komi-Zyrian: {{t|kpv|Рӧштво}}
* Konkani: {{t|kok|नाताळ}}
* Korean: {{t+|ko|^크리스마스}}, {{t+|ko|^성탄절}}
* Kurdish:
*: Northern Kurdish: {{t+|kmr|krismas}}, {{t+|kmr|gaxan}}, {{t+|kmr|noel}}
* Kyrgyz: {{t|ky|Рождество}}
* Ladin: {{t|lld|Nadel|m}}
* Ladino: {{t|lad|Noel}}
* Lakota: {{t|lkt|Wóšpipi}}, {{t|lkt|Wóšpipi Káǧapi}}
* Lao: {{t|lo|ຄິດສະມາດ}}, {{t|lo|ໂນແອນ}}, {{t|lo|ບົນໂນແອນ}}
* Latin: {{t|la|Christi Natalis}}, {{t|la|festum Nativitatis Domini}}, {{t|la|nativitas|f|alt=Nātīvitās}}
* Latvian: {{t|lv|Ziemassvētki|m-p}}, {{t|lv|Ziemsvētki|m-p}}
* Ligurian: {{t|lij|Dënâ}}
* Lithuanian: {{t+|lt|Kalėdos|f-p}}
* Lombard: {{t+|lmo|Nedal|m}}
* Low German:
*: German Low German: {{t|nds-de|Wiehnachten|p|n}}
* Lule Sami: {{t|smj|javlla}}
* Luxembourgish: {{t+|lb|Chrëschtdag|m}}
* Macedonian: {{t|mk|Божиќ|m}}
* Malay: {{t|ms|Hari Natal}}, {{t|ms|Krismas}}
* Malayalam: {{t|ml|ക്രിസ്തുമസ്}}, {{t|ml|തിരുപ്പിറവി}}, {{t|ml|പിറവിത്തിരുനാൾ}}
* Maltese: {{t|mt|Milied|m}}
* Manx: {{t|gv|Nollick|f}}, {{t|gv|Nollick Vooar|f}}
* Maori: {{t|mi|Kirihimete}}
* Marathi: {{t|mr|नाताळ|m}}
* Mari:
*: Eastern Mari: {{t|mhr|Рошто}}
*: Western Mari: {{t|mrj|Шартял}}
* Marshallese: {{t|mh|Kūrijm̧ōj}}
* Middle English: {{t|enm|Cristemasse}}
* Mingrelian: {{t|xmf|ქირსე}}
* Mòcheno: {{t|mhn|bainechtn|p}}
* Mon: {{t+|mnw|တ္ၚဲခရေတ်သမာတ်}}, {{t+|mnw|ခရေတ်သမာတ်}}
* Mongolian:
*: Cyrillic: {{t|mn|Зул сар}}, {{t|mn|Христосын мэндэлсэн өдөр}}
* Navajo: {{t|nv|Késhmish}}
* Nepali: {{t|ne|क्रिसमस}}
* Nheengatu: {{t|yrl|misa-pituna}}
* Nigerian Pidgin: {{t|pcm|Krismas}}
* Norman: {{t|nrf|Noué|m}}, {{t|nrf|Nouel|m}}
* Northern Sami: {{t|se|juovllat|p}}
* Northwestern Ojibwa: {{t|ojb|niibaa-anama'e-giizhigad}}
* Norwegian:
*: Bokmål: {{t+|nb|jul||mf}}
*: Nynorsk: {{t|nn|jol|f}}, {{t|nn|jul|f}}
* Occitan: {{t+|oc|Nadal|m}}
* Odia: {{t+|or|ବଡ଼ ଦିନ}}, {{t+|or|କିସ୍ମସ୍}}
* Ofo: {{t|ofo|noⁿˊpi}}
* Ojibwe: {{t|oj|niibaanamom}}
* Old English: {{t|ang|ġēol|n}}, {{t|ang|Cristes mæsse|f}}, {{t|ang|midwinter|m}}
* Old Norse: {{t|non|jól|n-p}}
* Old Tupi: {{t|tpw|missa-pytuna}}
* Papiamentu: {{t|pap|Pasku}}
* Pashto: {{t|ps|کرسمس|m|tr=kresmas}}
* Persian:
*: Iranian Persian: {{t|fa-ira|کِریسْمَس}}, {{t|fa-ira|نوئِل|tr=no'el}}, {{t|fa-ira|عِیدِ میلادِ مَسیح}}, {{t|fa-ira|عِیدِ نوئِل|tr='eyd-e no'el}}
* Pite Sami: {{t|sje|jåvvlå}}
* Plautdietsch: {{t|pdt|Wienachten|f}}
* Polabian: {{t|pox|tribĕ}}
* Polish: {{t+|pl|Boże Narodzenie|n}}
* Portuguese: {{t+|pt|Natal|m}}
* Punjabi: {{t|pa|ਵੱਡਾ ਦਿਨ}}, {{t|pa|ਕ੍ਰਿਸਮਸ}}
* Rhine Franconian: {{t|gmw-rfr|Woihnachde}}
* Romagnol: {{t|rgn|Nadêl|m}}
* Romanian: {{t+|ro|Crăciun|n}}, {{t|ro|[[naștere|Nașterea]] [[lui]] [[Isus]] [[Cristos]]|f}}, {{t|ro|[[naștere|Nașterea]] [[domn|Domnului]]|f}}
* Russian: {{t+|ru|Рождество́ Христо́во|n}}, {{t+|ru|Рождество́|n}}, {{t|ru|Кри́стмас|m}} {{q|colloquial, foreign context or foreign communities}}
* Santali: {{t|sat|ᱢᱟᱨᱟᱝ ᱢᱟᱦᱟᱸ}}
* Scots: {{t|sco|Yule}}
* Scottish Gaelic: {{t|gd|Nollaig|f}}
* Serbo-Croatian:
*: Cyrillic: {{t|sh|Бо̀жић|m}}, {{t|sh|Рождество|n}}
*: Roman: {{t|sh|Bòžić|m}}, {{t+|sh|Roždestvo|n}}
* Sicilian: {{t+|scn|Natali}}
* Silesian: {{t|szl|Gody|m-p}}
* Sindhi: {{t+|sd|ڪرسمس}}
* Sinhalese: {{t|si|නත්තල}}
* Skolt Sami: {{t|sms|rosttov}}
* Slovak: {{t+|sk|Vianoce|f-p}}
* Slovene: {{t+|sl|bôžič|m}}
* Sorbian:
*: Lower Sorbian: {{t|dsb|gódy|p}}
*: Upper Sorbian: {{t|hsb|hody|m-p}}
* Sotho: {{t|st|Kresemese}}
* Southern Sami: {{t|sma|jåvlh|p}}
* Spanish: {{t+|es|Navidad|f}}, {{t|es|Crismes|m}} {{qualifier|New Mexico}}
* Sranan Tongo: {{t|srn|Bedaki}}, {{t|srn|kresneti}}
* Swahili: {{t|sw|Krismasi}}
* Swedish: {{t+|sv|jul|c}}
* Tagalog: {{t+|tl|Pasko}}
* Tajik: {{t+|tg|Мавлуди Исо}}, {{t|tg|Кристмас}}
* Tamil: {{t|ta|கிசிமிசி}}, {{t|ta|கிறிஸ்மஸ்}}, {{t+|ta|கிறித்துமசு}}, {{t+|ta|கிறிஸ்துமஸ்}}, {{t|ta|நத்தார்}}
* Tatar: {{t|tt|Раштуа}}
* Telugu: {{t|te|క్రిస్మస్}}
* Thai: {{t+|th|คริสต์มาส}}, {{t|th|คริสตสมภพ}}
* Tibetan: {{t|bo|ཡེ་ཤུའི་འཁྲུངས་སྐར}}
* Turkish: {{t+|tr|Noel}}
* Turkmen: {{t|tk|Isanyň dogluşy}}, {{t|tk|roždestwo}}, {{t|tk|milad}}
* Udmurt: {{t|udm|Толсур}}, {{t|udm|Ымусьтон}}
* Ukrainian: {{t+|uk|Різдво́|n}}, {{t|uk|Різдво́ Христо́ве|n}}
* Ume Sami: {{t|sju|juvlla}}
* Urdu: {{t|ur|کِرِسْمَس|m}}, {{t|ur|کْرِسْمَس|m}}, {{t|ur|بَڑا دِن|m}}, {{t|ur|عِیدِ تَوَلُّد|f}}, {{t|ur|عِیدِ وِلادَت|f}}, {{t|ur|عِیدِ میلادِ مَسِیح|m}}
* Uyghur: {{t|ug|روجدېستۋو}}, {{t|ug|روجىستىۋا}}
* Uzbek: {{t|uz|Mavlud}}, {{t+|uz|rojdestvo|alt=Rojdestvo}}
* Vietnamese: {{t|vi|Nô-en}}, {{t+|vi|Giáng sinh}}
* Vilamovian: {{t|wym|Waeinahta|f}}, {{t|wym|Wajnaochta|f}}
* Volapük: {{t+|vo|kritid}}, {{t+|vo|kritidazäl}}
* Walloon: {{t+|wa|Noyé|m|f}}
* Welsh: {{t+|cy|Nadolig|m}}
* West Flemish: {{t|vls|Kestdag|m}}
* West Frisian: {{t|fy|Krysttiid}}
* Yiddish: {{t|yi|ניטל|m}}
* Yoruba: {{t|yo|Kérésìmesì}}
* Yup'ik: {{t|esu|Alussistuaq}}, {{t|esu|Selavi}}
* Zulu: {{t|zu|Ukhisimuzi}}
{{trans-bottom}}
{{trans-see|''ellipsis of'' Christmas season|Christmas season|Christmastime}}
===== අමතර අවධානයට =====
{{s|associated entries}}
{{col4|en
|Advent
|Black Friday
|Boxing Day
|Christmas Eve
|quarter day
|St. Stephen's Day
|Yule
|Yuletide
}}
==== නාම පදය ====
{{en-noun|-}}
# {{senseid|en|decorations}}{{lb|en|informal|or|Britain|regional}} [[sprig#Noun|Sprigs]] of [[holly]] and other [[evergreen#Adjective|evergreen]] [[plant#Noun|plants]] [[use#Verb|used]] as [[Christmas#Proper noun|Christmas]] [[decoration]]s; also {{lb|en|generally}}, any Christmas decorations.
#: {{syn|en|Christmasing}}
#* {{RQ:Cleland Way to Things|page=96|passage=[T]he antient Britons employed for the decoration of their houſes, or, more properly ſpeaking, of their bovvers, branches of ever-green, in invitation to the ſpirits: a cuſtom, vvhich, hovvever the motive may be aboliſhed, is retained to this inſtant. That kind of verdure vvhich is uſed to deck the vvindovvs, and old halls, vve novv, by metonymy, call '''''Chriſtmas'''''.}}
#* {{RQ:Dickens Pickwick Papers|chapter=A Good-humoured Christmas Chapter,{{nb...|Containing an Account of a Wedding, and Some Other Sports beside, which although in Their Way, even as Good Customs as Marriage Itself, are Not Quite so Religiously Kept Up, in these Degenerate Times.}}|page=290|passage="Vere does the mince-pies go, young opium eater?" said Mr. Weller to the fat boy, as he assisted in laying out such articles of consumption as had not been duly arranged on the previous night. The fat boy pointed to the destination of the pies. "Wery good," said Sam, "stick a bit o' '''Christmas''' in 'em.{{nb...}}"}}
#* {{quote-journal|en|author=w:Percy Manning|title=[Folk-lore Miscellanea.] May-Day at Watford, Herts.|journal=Folk-lore: A Quarterly Review of Myth, Tradition, Institution, & Custom|location=London|publisher=[[w:David Nutt (publisher)|David Nutt]],{{nb...|270, Strand.}} for [[w:The Folklore Society|The Folk-lore Society]]|month=September|year=1893|volume=IV|issue=III|page=403|pageurl=https://books.google.com/books?id=rd1cLIVa1tsC&pg=PA403|oclc=7644078|passage=Two of the girls carry between them on a stick what they call "the garland", {{...}} The "garland" in shape reminds me of the "'''Christmas'''" which used to form the centre of the Christmas decorations in Yorkshire some few years ago, except that the latter had a bunch of mistletoe inside the hoops.}}
===== පරිවර්තන =====
{{trans-top|sprigs of holly and other evergreen plants used as Christmas decorations}}
* Finnish: {{t|fi|[[oksa]] [[joulukoriste]]ena}}
* Macedonian: {{t-needed|mk}}
{{trans-bottom}}
{{trans-top|any Christmas decorations}}
* Finnish: {{t+|fi|joulukoriste|p|alt=joulukoristeet}}
* Macedonian: {{t-needed|mk}}
{{trans-bottom}}
==== නාම විශේෂණ පදය ====
{{en-adj|-}} {{tlb|en|US}}
# {{senseid|en|color}} [[red#Adjective|Red]] and [[green#Adjective|green]] in [[color#Noun|color]].
# {{lb|en|chiefly|New Mexico|cooking}} Of a [[dish#Noun|dish]]: [[have#Verb|having]] a [[sauce#Noun|sauce]] [[make#Verb|made]] with red ([[ripe#Adjective|ripe]]) and green ([[unripe]]) [[chili pepper]]s.
===== පරිවර්තන =====
{{trans-top|red and green in color}}
* Finnish: {{t+|fi|punavihreä}}
* Macedonian: {{t-needed|mk}}
{{trans-bottom}}
{{trans-top|of a dish: having a sauce made with red and green chili peppers}}
* Finnish: {{t|fi|[[punainen|punaista]] [[ja]] [[vihreä|vihreää]] [[chili|chiliä]] [[sisältävä]]}}
* Macedonian: {{t-needed|mk}}
{{trans-bottom}}
==== ක්රියා පදය ====
{{en-verb|+,++}}
# {{lb|en|transitive|informal}} To [[decorate]] (a [[place#Noun|place]]) with {{l|en|Christmas|t=[[sprig#Noun|sprigs]] of [[holly]] and other [[evergreen#Adjective|evergreen]] [[plant#Noun|plants]] [[use#Verb|used]] as [[Christmas#Proper noun|Christmas]] [[decoration]]s, or any Christmas decorations|id=decorations}}.
#* {{RQ:Mayhew London Labour|volume=I|chapter=Of the Sellers of Trees, Shrubs, Flowers (Cut and in Pots), Roots, Seeds, and Branches|page=141|column=1|passage="Then look," said a gardener to me, "what's spent on a '''Christmasing''' the churches! Why, now, properly to '''Christmas''' St. Paul's, I say ''properly'', mind, would take 50''l.'' worth at least; aye, more, when I think of it, nearer 100''l.'' I hope there'll be no 'No Popery' nonsense against '''Christmasing''' this year. I'm always sorry when anything of that kind's afloat, because it's frequently a hindrance to business."}}
#* {{quote-book|en|author=w:James Goldman|title=[[w:The Lion in Winter|The Lion in Winter: A Comedy in Two Acts]]|location=New York, N.Y.; Hollywood, Los Angeles, Calif.|publisher=[[w:Samuel French, Inc.|Samuel French]]|year=1966|section=Act I, scene ii|page=17|pageurl=https://archive.org/details/lioninwinter0000unse_q1i7/page/17/mode/1up|oclc=645164|passage=''(Moving to the holly boughs.)'' Come on; let's finish '''Christmassing''' the place.}}
#* {{quote-book|en|author=Robin S. Shapiro|chapter=It’s Never too Late to Play the Violin|title=Touchstones: Essays on Spirituality and Healing|location=[Bloomington, Ind.]|publisher=w:Xlibris|year=2012|page=27|pageurl=https://books.google.com/books?id=wedNAAAAQBAJ&pg=PA27|isbn=978-1-4691-7385-6|passage=Haddonfield was completely '''Christmased''' deep in December. It was lovely to see the beautifully decorated shops. Huge bows adorned the streetlamps, aerosol snow framed the windows, and people bundled up were moving in and out of the shops as the aroma of spice and clove from holiday candles scented the air.}}
# {{lb|en|transitive|obsolete|rare}} To [[bring#Verb|bring]] (someone) Christmas [[cheer#Noun|cheer]].
#* {{RQ:Chapman Works|volume=II|poem=Shadow of Night|subtitle=Hymnus in Noctem|page=7|passage=Her labours feast imperial Night with sports, / Where loves are '''Christmass'd''', with all pleasure's sorts; {{...}}|footer=In the 1st edition, the word was spelled ''Christmast''}}
# {{lb|en|intransitive}} To [[celebrate]] Christmas.
#* {{quote-web|en|author=Ricki Green|title=[[w:David Jones (retailer)|David Jones]] Asks ‘How do Australians Christmas?’ in New Campaign via TBWA Sydney|work=Campaign Brief|archiveurl=https://web.archive.org/web/20231224011205/https://campaignbrief.com/david-jones-asks-how-do-you-ch/|date=3 November 2016|passage=The 2016 campaign via TBWA Sydney asks the question, ‘How do Australians '''Christmas'''?’ with a film to be launched today featuring global superstar and style icon, {{w|Cate Blanchett}}.}}
# {{lb|en|intransitive}} To [[spend#Verb|spend]] Christmas or the [[Christmas season]] in some place.
#* {{quote-book|en|author=“Ironbark” [pseudonym; [[w:G. H. Gibson|George Herbert Gibson]]]|chapter=Christmas in Australia|title=Southerly Busters|location=Sydney, N.S.W.|publisher=John Sands,{{nb...|printer, 392 George Street.}}|year=1878|page=73|pageurl=https://books.google.com/books?id=RV4UAQAAMAAJ&pg=PA73|oclc=13325172|passage=I've '''Christmased''' since those palmy days / In many a varied spot, / And suffered many a weary phase / Of Christmas cold and hot.}}
#* {{quote-journal|en|author=Horace L. Nicholson|title=Baulked by a Berry|editor=W. J. Morgan|journal=The St. James’s Magazine and United Empire Review|location=London|publisher=Charing Cross Publishing Company,{{nb...|Limited, 5, Friar Street, Broadway, E.C.}}|month=December|year=1878|year_published=1879|volume=XXXIV|page=1107|pageurl=https://books.google.com/books?id=VKnCYu5u42IC&pg=PA1107|oclc=12701169|passage=I have spent Christmas on the Severn, at Sharpness Point; in Paris, under siege, and among scenes of heartrending distress; among the Scotch hills, with Presbyterian severity, and I have '''Christmased''' in Normandy, where every tree seems green with mistletoe.}}
#* {{quote-journal|en|title=Facts and Fancies|journal=St. Stephen’s Review|location=London|publisher=The Publishing Company|date=6 July 1889|issue=330|page=9|pageurl=https://books.google.com/books?id=7fknbCXEEfgC&pg=PA9|column=1|oclc=1118137148|passage=[[w:Prince Albert Victor, Duke of Clarence and Avondale|Prince Albert Victor]] on arrival in India will land at Bombay, and travel through Southern India, proceeding from Madras by sea to Calcutta. He will '''Christmas''' at Calcutta, and then make a tour through Bengal, and pay a visit to the frontier.}}
#* {{RQ:Braddon Christmas Hirelings|chapter=Prologue|page=20|passage=Mr. Danby never omitted his annual visits to Penlyon Place. He '''Christmassed''' there, and he Eastered there, and he knew the owner of the fine old Tudor house inside and out, his vices and his virtues, his weaknesses, and his prejudices.}}
#* {{quote-journal|en|journal=Program: A Magazine for Program and Entertainment Committees|location=New York, N.Y.|publisher=Program Company|month=January|year=1938|volume=4|issue=4|page=7|oclc=6784614|passage={{w|André Maurois}} will be one of the spearheads of the [[w:Harold R. Peat|Harold R[eginald] Peat]] list for the coming season, a result of Mr. Peat’s holiday visit to England, where he '''Christmassed''' with [[w:H. G. Wells|H[erbert] G[eorge] Wells]].}}
#* {{quote-book|en|author=[[w:Robert D. Kaplan|Robert D[avid] Kaplan]]|chapter=End of the Rainbow|title=The Arabists: The Romance of an American Elite|location=New York, N.Y.|publisher=[[w:Free Press (publisher)|The Free Press]]|year=1993|section=part I (Dream)|page=80|pageurl=https://archive.org/details/arabistsromanceo00kapl/page/80/mode/1up|isbn=978-0-02-916785-4|passage='''Christmasing''' in Khartoum, writing in his Cairo study about the Al Azhar University, overseeing the publication of learned articles about Moslem medievalism, attending conferences and tea parties hosted by his former AUB students, feted constantly in many an Arab capital, and filling up his diary with descriptions of the bazaars of Lucknow and the exotic birds of Asia, [[w:Bayard Dodge|[Bayard] Dodge]] was reaping the bounty of a life devoted to the Arabs and Moslem culture.}}
#* {{quote-book|en|author=Lorrene Desbien|chapter=December 22|title=Losing Sarah: A Mother’s Journey to Peace|location=Bloomington, Ind.|publisher=w:AuthorHouse|date=26 October 2012|page=64|pageurl=https://books.google.com/books?id=Q_XcK05TlsMC&pg=PA64|isbn=978-1-4772-8607-4|passage=In particular, please keep my brother in your prayers as he '''Christmases''' in Afghanistan.}}
# {{lb|en|colloquial}} To subject to Christmas celebrations.
#* {{quote-book|en|author=Susan Kiernan-Lewis|chapter=17|title=Toujours Dead: A Mystery in Provence|location=Atlanta|publisher=Abdale Books|year=2001|page=342|pageurl=https://archive.org/details/toujoursdead0000kier/page/342/mode/1up|isbn=0-9706716-0-1|passage=“{{...|nospace=1}} But there’s only so much joyful, greedy delight you can see in a young child’s eyes before you want to go screaming out for the nearest bar.” He tossed his handstitched, kidskin gloves onto the table top. “I’m about '''Christmassed'''-out, if you want to know.”}}
#* {{quote-book|en|author=Tina-Sue Ducross|title=No Shadows Left Behind|location=Galion, Oh.|publisher=Harris Innovations|year=2008|page=204|pageurl=https://archive.org/details/noshadowsleftbeh0000ducr/page/204/mode/1up|isbn=978-0-9816055-0-0|passage="The kids claim they are all '''Christmassed'''-out and have disappeared in protest."}}
#* {{quote-book|en|author=[[w:Michael Parker (event organiser)|Michael Parker]]|chapter=Of Loos and Ships and Ceiling Lights, And Cabbages and Kings|title=It’s All Going Terribly Wrong: Organised Chaos at Royal, National and Military Celebrations over 45 years|location=London|publisher=Bene Factum Publishing|year=2012|page=121|pageurl=https://archive.org/details/itsallgoingterri0000park/page/121/mode/1up|isbn=978-1-903071-65-6|passage=I had done Christmas in so many ways that I was somewhat ‘'''Christmassed'''-out.}}
#* {{quote-book|en|author=Nora Laurie Percival; Herman Gund|chapter=A Taste of Paradise|title=Silver Pages on the Lawn: A True Story of Student Love during the 1930s|location=Vilas, N.C.|publisher=Kent Hollow Press|month=February|year=2005|year_published=November 2009|section=part III (Fall 1934—Love Learns)|page=141|pageurl=https://archive.org/details/silverpagesonlaw0000perc/page/141/mode/1up|isbn=978-1-59513-010-5|passage=That evening, after the family, '''Christmased''' out, went early to bed, Herman brought out his unmailed letters.}}
#* {{quote-book|en|author=Julia Williams|chapter=Prologue|title=Last Christmas|location=London|publisher=[[w:Avon (publisher)|Avon]]|year=2009|page=14|pageurl=https://archive.org/details/lastchristmas0000will/page/14/mode/1up|isbn=978-1-84756-086-5|passage=Christmas muzak was pumping out, presumably to get her into the spirit of the thing. Not much chance of that, when she had felt all '''Christmassed''' out for months. Bugger off, she felt like shouting as a particularly cheesy version of ‘Have Yourself a Merry Little Christmas’ blared out. Look at all these people. Do any of them look bloody merry?}}
#* {{quote-book|en|author=w:Jon Ronson|chapter=Santa’s Little Conspirators|title=w:Lost at Sea: The Jon Ronson Mysteries|location=New York, N.Y.|publisher=w:Riverhead Books|year=2012|section=part three (Everyday Difficulty)|page=157|pageurl=https://archive.org/details/lostatseajonrons00jonr/page/157/mode/1up|isbn=978-1-59463-137-5|passage=I notice that this is one of the very few buildings in town that hasn’t any Christmas decorations whatsoever. / “We’re a respite from Christmas, I guess,” Suze explains. “Our kids are all '''Christmassed''' out.”}}
===== වෙනත් ආකාර =====
* {{alter|en|Xmas}} {{qualifier|abbreviation|informal}}
===== පරිවර්තන =====
{{trans-top|to decorate (a place) with Christmas decorations}}
* Finnish: {{t|fi|[[koristella]] [[joulukoriste]]in}}
* Macedonian: {{t-needed|mk}}
{{trans-bottom}}
{{trans-top|to celebrate Christmas}}
* Finnish: {{t|fi|[[viettää]] [[joulu]]a}}
* Macedonian: {{t-needed|mk}}
{{trans-bottom}}
{{trans-top|to spend Christmas or the Christmas season in some place}}
* Finnish: {{t|fi|[[viettää]] [[joulu]]a}}
* Macedonian: {{t-needed|mk}}
{{trans-bottom}}
=== නිරුක්තිය 2 ===
Short for {{m|en|Jiminy Christmas}},<ref name="OED"/> probably a variant of {{m|en|Jiminy Cricket}} or {{m|en|Jiminy Crickets}}, a {{glossary|euphemism}} for {{m|en|Jesus Christ}}.
==== විශ්මයාර්ථ පදය ====
{{en-intj}}
# {{lb|en|euphemistic}} {{non-gloss|An [[expression]] of [[annoyance]] or [[surprise#Noun|surprise]]}}: [[Christ#Interjection|Christ]], [[Jesus Christ#Interjection|Jesus Christ]], [[Jiminy Cricket]], [[Jiminy Crickets]].
#: {{synonyms|en|Jesus Christmas|jiminy Christmas|Jimmy Christmas}}
#* {{quote-text|en|year=1897|author=Rudyard Kipling|title=Captains Courageous
|passage="'''Christmas'''! I didn't know it," said Harvey, turning round. "I'll give you a dollar for it when I—get my wages. Say, I'll give you two dollars."}}
#* {{quote-book|en|author={{w|Ellery Queen}} [pseudonym; Frederic Dannay, Manfred Bennington Lee]|chapter=‘The Time has Come …’|title=[[w:The French Powder Mystery|The French Powder Mystery: A Problem in Deduction]]|location=New York, N.Y.|publisher=[[w:Frederick A. Stokes|Frederick A[bbott] Stokes Company]]|year=1930|page=269|pageurl=https://archive.org/details/pg000002_20220726/pg000144.jpg|oclc=7761808|passage="I've been tottering on the edge … '''Christmas'''!" His eyes brightened with a sudden thought. "How stupid I've been!" he cried at once.}}
#* {{quote-book|en|author=w:Ngaio Marsh|chapter=On the Scent|title=w:False Scent|location=New York, N.Y.|publisher=w:Jove Books|year=1959|year_published=November 1981|section=section 3|page=158|pageurl=https://archive.org/details/falsescent00ngai/page/158/mode/1up|isbn=978-0-515-08056-8|passage=She said, "All right with you, Bertie?" / "Oh '''Christmas'''! he said. "I suppose so."}}
===== පරිවර්තන =====
{{trans-see|''expression of annoyance or surprise''|Christ|Jesus Christ}}
=== මූලාශ්ර ===
<references/>
=== වැඩිදුර් කියවීම සඳහා ===
* {{pedia}}
* {{pedia|Christmas (disambiguation)}}
===Anagrams===
* {{anagrams|en|a=achimrsst|Chartisms}}
{{C|en|Christianity|Christmas|Holidays|Personifications}}
==Scots==
=== නාම පදය ===
{{head|sco|noun}}
# [[Christmas present]]
k4co4rp8v968keosy839togrc1gfpq8
Module:etymon/categories
828
139721
235419
229746
2026-05-12T21:11:59Z
en>Fenakhay
0
235419
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",
},
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"] = "prefix",
["suf"] = "suffix",
["in"] = "infix",
["inter"] = "interfix",
["circum"] = "circumfix",
["naf"] = "non-affix",
["root"] = "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" then
part_data.type = "non-affix"
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 = "term",
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
-- Add borrowing-related categories (top-level only)
local function collect_borrowing_categories(categories, page_lang, term, config)
if config.borrowing_type == "borrowed" 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 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 = "terms inherited",
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 = "root", word = "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
-- Use makeEntryName to strip diacritics for category names
local entry_name = term.lang:makeEntryName(term.title)
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 ~= "non-affix"
end
-- Check if pos=root (treated as non-affix)
if term.args and term.args.pos and term.args.pos == "root" 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
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)
end
-- Borrowing categories from <bor>, <lbor>, or <slbor> modifiers on :af/:surf terms
if keyword == "affix" or keyword == "surf" then
if term.bor then
local bor_config = { borrowing_type = "borrowed" }
collect_borrowing_categories(categories, page_lang, term, bor_config)
elseif term.lbor then
local bor_config = { specialized_borrowing = "learned" }
collect_borrowing_categories(categories, page_lang, term, bor_config)
elseif term.slbor then
local bor_config = { specialized_borrowing = "semi-learned" }
collect_borrowing_categories(categories, page_lang, term, bor_config)
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.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
qaazt3r5h8qyyj6gn4rl4zbmoaycwgt
235420
235419
2026-06-02T04:53:03Z
Lee
19
[[:en:Module:etymon/categories]] වෙතින් එක් සංශෝධනයක්
235419
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",
},
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"] = "prefix",
["suf"] = "suffix",
["in"] = "infix",
["inter"] = "interfix",
["circum"] = "circumfix",
["naf"] = "non-affix",
["root"] = "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" then
part_data.type = "non-affix"
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 = "term",
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
-- Add borrowing-related categories (top-level only)
local function collect_borrowing_categories(categories, page_lang, term, config)
if config.borrowing_type == "borrowed" 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 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 = "terms inherited",
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 = "root", word = "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
-- Use makeEntryName to strip diacritics for category names
local entry_name = term.lang:makeEntryName(term.title)
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 ~= "non-affix"
end
-- Check if pos=root (treated as non-affix)
if term.args and term.args.pos and term.args.pos == "root" 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
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)
end
-- Borrowing categories from <bor>, <lbor>, or <slbor> modifiers on :af/:surf terms
if keyword == "affix" or keyword == "surf" then
if term.bor then
local bor_config = { borrowing_type = "borrowed" }
collect_borrowing_categories(categories, page_lang, term, bor_config)
elseif term.lbor then
local bor_config = { specialized_borrowing = "learned" }
collect_borrowing_categories(categories, page_lang, term, bor_config)
elseif term.slbor then
local bor_config = { specialized_borrowing = "semi-learned" }
collect_borrowing_categories(categories, page_lang, term, bor_config)
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.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
qaazt3r5h8qyyj6gn4rl4zbmoaycwgt
Module:etymon/data
828
139722
235421
226941
2026-05-31T02:17:43Z
en>Fenakhay
0
[[User:Dragonoid76]] Careful....
235421
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,
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,
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.inheritance, {
text = "From", phrase = "from",
})),
["inherited"] = create_keyword(deep_merge(DEFAULTS.inheritance, {
text = "Inherited from",
phrase = "from",
glossary = "inherited",
aliases = { "inh" },
})),
--
-- Basic derivation keywords
--
["uder"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "From",
phrase = "from",
toplevel_category = "undefined derivations",
})),
["derived"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Derived from",
phrase = "from",
abbrev = "der.",
glossary = "derived terms",
aliases = { "der" },
})),
--
-- Affix/compound group keywords
--
["affix"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "From",
phrase = "from",
aliases = { "af" },
})),
["surf"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "By surface analysis,",
phrase = "by surface analysis,",
abbrev = "surf.",
glossary = "surface analysis",
new_sentence = true,
invisible = "tree",
})),
["blend"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "Blend of",
phrase = "a blend of",
abbrev = "blend",
glossary = "blend",
toplevel_category = "blends",
})),
["univerbation"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "Univerbation of",
phrase = "univerbation of",
abbrev = "univ.",
glossary = "univerbation",
toplevel_category = "univerbations",
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 = "Borrowed from",
phrase = "borrowed from",
abbrev = "bor.",
glossary = "loanword",
borrowing_type = "borrowed",
aliases = { "borrowed" },
})),
["lbor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "Learned borrowing from",
phrase = "a learned borrowing from",
abbrev = "lbor.",
glossary = "learned borrowing",
specialized_borrowing = "learned",
})),
["obor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "Orthographic borrowing from",
phrase = "an orthographic borrowing from",
abbrev = "obor.",
glossary = "orthographic borrowing",
specialized_borrowing = "orthographic",
})),
["slbor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "Semi-learned borrowing from",
phrase = "a semi-learned borrowing from",
abbrev = "slbor.",
glossary = "semi-learned borrowing",
specialized_borrowing = "semi-learned",
})),
["ubor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "Unadapted borrowing from",
phrase = "an unadapted borrowing from",
abbrev = "ubor.",
glossary = "unadapted borrowing",
specialized_borrowing = "unadapted",
})),
--
-- Calque-like keywords (non-transitive, start new sentence)
--
["calque"] = create_keyword(deep_merge(DEFAULTS.calque_like, {
text = "Calque of",
phrase = "a calque of",
abbrev = "calq.",
glossary = "calque",
specialized_borrowing = "calque",
aliases = { "cal", "clq" },
})),
["partial calque"] = create_keyword(deep_merge(DEFAULTS.calque_like, {
text = "Partial calque of",
phrase = "a partial calque of",
abbrev = "pcalq.",
glossary = "partial calque",
specialized_borrowing = "partial-calque",
aliases = { "pcal" },
})),
["semantic loan"] = create_keyword(deep_merge(DEFAULTS.calque_like, {
text = "Semantic loan of",
phrase = "a semantic loan of",
abbrev = "sl.",
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 = "Influenced by",
phrase = "influenced by",
abbrev = "influ.",
glossary = "contamination",
separate_clause = true,
})),
--
-- Morphological derivation keywords
--
["clipping"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Clipping of",
phrase = "clipping of",
abbrev = "clip.",
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 = "Back-formation from",
phrase = "a back-formation from",
abbrev = "bf.",
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 = "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",
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 = "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", "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 = "Acronym of",
phrase = "acronym of",
abbrev = "acronym",
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 = "all",
pos_override = "root",
},
["afeq"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "From",
phrase = "from",
transitive = TRANSITIVE.NEVER,
invisible = "all",
})),
}
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"] = "masculine",
["f"] = "feminine",
["n"] = "neuter",
["c"] = "common",
["gneut"] = "gender-neutral",
["s"] = "singular",
["p"] = "plural",
["d"] = "dual",
["pauc"] = "paucal",
["mf"] = "masculine or feminine",
["fm"] = "masculine or feminine",
["mfn"] = "masculine, feminine or neuter",
["mnf"] = "masculine, feminine or neuter",
["fmn"] = "masculine, feminine or neuter",
["fnm"] = "masculine, feminine or neuter",
["nmf"] = "masculine, feminine or neuter",
["nfm"] = "masculine, feminine or neuter",
}
--
-- 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
6ztmzwuxru8jln9olubjn1zzhx3vqny
235422
235421
2026-06-02T04:53:21Z
Lee
19
[[:en:Module:etymon/data]] වෙතින් එක් සංශෝධනයක්
235421
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,
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,
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.inheritance, {
text = "From", phrase = "from",
})),
["inherited"] = create_keyword(deep_merge(DEFAULTS.inheritance, {
text = "Inherited from",
phrase = "from",
glossary = "inherited",
aliases = { "inh" },
})),
--
-- Basic derivation keywords
--
["uder"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "From",
phrase = "from",
toplevel_category = "undefined derivations",
})),
["derived"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Derived from",
phrase = "from",
abbrev = "der.",
glossary = "derived terms",
aliases = { "der" },
})),
--
-- Affix/compound group keywords
--
["affix"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "From",
phrase = "from",
aliases = { "af" },
})),
["surf"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "By surface analysis,",
phrase = "by surface analysis,",
abbrev = "surf.",
glossary = "surface analysis",
new_sentence = true,
invisible = "tree",
})),
["blend"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "Blend of",
phrase = "a blend of",
abbrev = "blend",
glossary = "blend",
toplevel_category = "blends",
})),
["univerbation"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "Univerbation of",
phrase = "univerbation of",
abbrev = "univ.",
glossary = "univerbation",
toplevel_category = "univerbations",
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 = "Borrowed from",
phrase = "borrowed from",
abbrev = "bor.",
glossary = "loanword",
borrowing_type = "borrowed",
aliases = { "borrowed" },
})),
["lbor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "Learned borrowing from",
phrase = "a learned borrowing from",
abbrev = "lbor.",
glossary = "learned borrowing",
specialized_borrowing = "learned",
})),
["obor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "Orthographic borrowing from",
phrase = "an orthographic borrowing from",
abbrev = "obor.",
glossary = "orthographic borrowing",
specialized_borrowing = "orthographic",
})),
["slbor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "Semi-learned borrowing from",
phrase = "a semi-learned borrowing from",
abbrev = "slbor.",
glossary = "semi-learned borrowing",
specialized_borrowing = "semi-learned",
})),
["ubor"] = create_keyword(deep_merge(DEFAULTS.borrowing, {
text = "Unadapted borrowing from",
phrase = "an unadapted borrowing from",
abbrev = "ubor.",
glossary = "unadapted borrowing",
specialized_borrowing = "unadapted",
})),
--
-- Calque-like keywords (non-transitive, start new sentence)
--
["calque"] = create_keyword(deep_merge(DEFAULTS.calque_like, {
text = "Calque of",
phrase = "a calque of",
abbrev = "calq.",
glossary = "calque",
specialized_borrowing = "calque",
aliases = { "cal", "clq" },
})),
["partial calque"] = create_keyword(deep_merge(DEFAULTS.calque_like, {
text = "Partial calque of",
phrase = "a partial calque of",
abbrev = "pcalq.",
glossary = "partial calque",
specialized_borrowing = "partial-calque",
aliases = { "pcal" },
})),
["semantic loan"] = create_keyword(deep_merge(DEFAULTS.calque_like, {
text = "Semantic loan of",
phrase = "a semantic loan of",
abbrev = "sl.",
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 = "Influenced by",
phrase = "influenced by",
abbrev = "influ.",
glossary = "contamination",
separate_clause = true,
})),
--
-- Morphological derivation keywords
--
["clipping"] = create_keyword(deep_merge(DEFAULTS.transitive, {
text = "Clipping of",
phrase = "clipping of",
abbrev = "clip.",
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 = "Back-formation from",
phrase = "a back-formation from",
abbrev = "bf.",
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 = "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",
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 = "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", "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 = "Acronym of",
phrase = "acronym of",
abbrev = "acronym",
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 = "all",
pos_override = "root",
},
["afeq"] = create_keyword(deep_merge(DEFAULTS.affix_group, {
text = "From",
phrase = "from",
transitive = TRANSITIVE.NEVER,
invisible = "all",
})),
}
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"] = "masculine",
["f"] = "feminine",
["n"] = "neuter",
["c"] = "common",
["gneut"] = "gender-neutral",
["s"] = "singular",
["p"] = "plural",
["d"] = "dual",
["pauc"] = "paucal",
["mf"] = "masculine or feminine",
["fm"] = "masculine or feminine",
["mfn"] = "masculine, feminine or neuter",
["mnf"] = "masculine, feminine or neuter",
["fmn"] = "masculine, feminine or neuter",
["fnm"] = "masculine, feminine or neuter",
["nmf"] = "masculine, feminine or neuter",
["nfm"] = "masculine, feminine or neuter",
}
--
-- 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
6ztmzwuxru8jln9olubjn1zzhx3vqny
Module:etymon/text
828
139723
235427
229744
2026-04-29T20:56:46Z
en>Fenakhay
0
235427
Scribunto
text/plain
local export = {}
local loader = require("Module:module loader")
local M = loader.init({
require = {
en_utilities = "Module:en-utilities",
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
if term_text then
text = term.lang:makeWikipediaLink() .. " " .. term_text
elseif term.is_family then
text = M.en_utilities.add_indefinite_article(term.lang:makeWikipediaLink() .. " language", false)
else
-- suppress_term with language change: show only language
text = term.lang:makeWikipediaLink()
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 #terms == 0 then
return nil
end
-- Skip building text part when invisible in text ("all", "text", or true)
local inv = keyword_info.invisible
if inv == "all" or inv == true or inv == "text" 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 containers that get a text part (invisible in text = "all", "text", or true)
local visible_container_count = 0
for _, container in ipairs(containers) do
local keyword_info = container.keyword_info
local inv = keyword_info and keyword_info.invisible
if not (inv == "all" or inv == true or inv == "text") 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 next(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 = "Possibly " .. part.phrase
else
intro = part.intro_text
end
else
if part.is_uncertain then
intro = "possibly " .. part.phrase
else
intro = part.phrase
end
end
result = result .. intro
-- Build terms
if #part.term_parts > 0 then
result = result .. " "
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 .. "possibly "
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
apkzd2ykoxaur8xi7e7q6ckn0p4heg1
235428
235427
2026-06-02T05:00:19Z
Lee
19
[[:en:Module:etymon/text]] වෙතින් එක් සංශෝධනයක්
235427
Scribunto
text/plain
local export = {}
local loader = require("Module:module loader")
local M = loader.init({
require = {
en_utilities = "Module:en-utilities",
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
if term_text then
text = term.lang:makeWikipediaLink() .. " " .. term_text
elseif term.is_family then
text = M.en_utilities.add_indefinite_article(term.lang:makeWikipediaLink() .. " language", false)
else
-- suppress_term with language change: show only language
text = term.lang:makeWikipediaLink()
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 #terms == 0 then
return nil
end
-- Skip building text part when invisible in text ("all", "text", or true)
local inv = keyword_info.invisible
if inv == "all" or inv == true or inv == "text" 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 containers that get a text part (invisible in text = "all", "text", or true)
local visible_container_count = 0
for _, container in ipairs(containers) do
local keyword_info = container.keyword_info
local inv = keyword_info and keyword_info.invisible
if not (inv == "all" or inv == true or inv == "text") 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 next(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 = "Possibly " .. part.phrase
else
intro = part.intro_text
end
else
if part.is_uncertain then
intro = "possibly " .. part.phrase
else
intro = part.phrase
end
end
result = result .. intro
-- Build terms
if #part.term_parts > 0 then
result = result .. " "
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 .. "possibly "
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
apkzd2ykoxaur8xi7e7q6ckn0p4heg1
Module:etymon/tree
828
139724
235429
229740
2026-03-16T07:53:49Z
en>Fenakhay
0
235429
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 = '[[Appendix:Glossary#' .. 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('Etymology tree')
:done()
:done()
:tag('div')
:addClass('NavContent')
:node(container)
:done())
end
return export
ok2w6x96bozaxhyj2cy4qex9anfbtx5
235430
235429
2026-06-02T05:00:45Z
Lee
19
[[:en:Module:etymon/tree]] වෙතින් එක් සංශෝධනයක්
235429
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 = '[[Appendix:Glossary#' .. 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('Etymology tree')
:done()
:done()
:tag('div')
:addClass('NavContent')
:node(container)
:done())
end
return export
ok2w6x96bozaxhyj2cy4qex9anfbtx5
235431
235430
2026-06-02T05:01:19Z
Lee
19
පැරණි සංස්කරණයකින් ගත් කොටස්...
235431
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 = '[[Appendix:Glossary#' .. 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
iz0lgvil7iakggds52f39lobpema4jj
hay
0
141138
235407
229298
2026-06-02T04:43:58Z
Lee
19
/* ඉංග්රීසි */
235407
wikitext
text/x-wiki
{{also|Hay|hãy|hầy|haþ}}
== සර්ව භාෂාමය ==
=== සංකේතය ===
{{mul-symbol}}
# {{ISO 639|3}}
=== අමතර අවධානයට ===
* {{langcat}}
== ඉංග්රීසි ==
[[File:Romanian hay.jpg|thumb|120px|upright|A Romanian haycock]]
=== උච්චාරණය ===
* {{enPR|hā}}, {{IPA|en|/heɪ/}}
* {{audio|en|en-us-hay.ogg|a=US}}
* {{homophones|en|hey}}
* {{rhymes|en|eɪ|s=1}}
=== නිරුක්තිය 1 ===
From {{inh|en|enm|hey}}, from {{inh|en|ang|hīeġ}}, from {{inh|en|gmw-pro|*hawi}}, from {{inh|en|gem-pro|*hawją}}, from {{m|gem-pro|*hawwaną||to hew, cut down}}.
Cognate with {{cog|fy|hea||hay}}, {{cog|gsw|Heuw||hay}}, {{cog|cim|höobe||hay}}, {{cog|nl|hooi||hay}}, {{cog|de|Heu||hay}}, {{cog|lb|Hee||hay}}, {{cog|mhn|hei||hay}}, {{cog|yi|היי||hay}}, {{cog|da|hø||hay}}, {{cog|fo|hoyggj||hay}}, {{cog|gmq-gut|hoy||hay}}, {{cog|is|hey||hay}}, {{cog|nb|-}}, {{cog|nn|høy||hay}}, {{cog|sv|hö||hay}}, {{cog|got|𐌷𐌰𐍅𐌹||grass, hay}}. More at {{l|en|hew}}.
==== නාම පදය ====
{{en-noun|~}}
# {{lb|en|uncountable}} [[grass|Grass]] cut and dried for use as animal [[fodder]].
#* {{RQ:Camden Remaines
|passage=Make '''hay''' while sunne shines.}}
#* {{quote-text|en|year=1857|author=w:Charles Louis Flint|title=Grasses and Forage Plants: A Practical Treatise|section={{...}}
|passage='''Hay''' may be dried too much as well as too little.}}
# {{lb|en|countable}} Any mix of green leafy plants used for fodder.
# {{lb|en|slang}} [[cannabis|Cannabis]]; [[marijuana]].
#* '''1947''', William Burroughs, letter, 19 Feb 1947:
#*: I would like some of that '''hay'''. Enclose $20.
#* {{quote-song|en|year=1994|title=w:Bug Powder Dust|artist=Bomb the Bass|passage=Jeff Spicoli, roll me another '''hay'''}}
# A [[net]] set around the [[haunt]] of an [[animal]], especially a [[rabbit]].
===== ව්යුත්පන්න යෙදුම් =====
{{col4|en
|hay-asthma|that ain't hay
|haybarn|haybag|haybale|hayband|haybird|haybote|haycap|haycart|haycation|hayer|hayey|hayfever|hayfield|Hayford|hayhead|hayland|hayless|haylift|haylike|haymaking|haymonger|haymower|hayrake|hayricker|hayride|hayshed|haystalk|haytime|haywire|Oxhey
|hay bed
|haybox
|haycock
|hay devil
|hay fever
|hayfork
|hay is for horses
|hay knife
|haylage|hay moon
|hayloft
|haymaker
|Haymarket
|haymow
|haynet
|hayrack
|hayrick
|hayseed
|haysel
|haystack
|hay wagon
|hayward
|haywain
|hit the hay
|make hay while the sun shines|deer-hay
|hay bag|hay loft|hay net|hay ride|hay tea|hay wain|hay-bote|hay-cock|hay-fever|hay-scented fern|lunar hay fever|make hay|meadow hay|roll in the hay|romp in the hay|salt hay|salt marsh hay|slough hay|what the hay
}}
===== වැඩිදුර් කියවීම සඳහා =====
* {{pedia}}
==== ක්රියා පදය ====
{{en-verb}}
# To cut grasses or herb plants for use as animal fodder.
# To [[lay]] [[snare]]s for [[rabbit]]s.
===== ව්යුත්පන්න යෙදුම් =====
{{col|en|unhayed
}}
===== පරිවර්තන =====
{{trans-top|to cut green plants for fodder}}
* Basque: {{t|eu|belarra ondu}}
* Bulgarian: {{t|bg|кося и суша трева}}
* Chinese:
*: Mandarin: {{t-check|cmn|制干草|tr=zhì gāncǎo}}, {{t-check|cmn|供给干草|tr=gōngjǐ gāncǎo}} {{qualifier|transitive}}, {{t-check|cmn|晒干草|tr=shài gāncǎo}} {{qualifier|intransitive}}
* Danish: {{t|da|slå hø}}
* Dutch: {{t+|nl|hooien}}
* Estonian: {{t|et|heina tegema}}
* Finnish: {{t|fi|[[tehdä]] [[heinä|heinää]]}}
* Interlingua: {{t|ia|preparar feno}}
* Italian: {{t+|it|far}} {{t+|it|fieno}}
* Lithuanian: {{t|lt|šienauti}}
* Polish: {{t+|pl|kosić}} {{t+|pl|siano}}
* Portuguese: {{t|pt|fenar}}
* Romanian: {{t+|ro|cosi}}
* Russian: {{t|ru|собира́ть се́но}}
* Slovene: {{t|sl|seno sušiti}}
* Spanish: {{t|es|[[cortar]] [[heno]]}}
* Vietnamese: {{t|vi|cắt cỏ cho thú vật}} {{gloss|literally: to cut grass for animals}}
* Volapük: {{t|vo|sigayebön}}
* Zazaki: {{t|zza|patil|f}}, {{t|zza|palax}}
{{trans-bottom}}
==== අමතර අවධානයට ====
* {{l|en|bale}}
* {{l|en|straw}}
=== නිරුක්තිය 2 ===
From {{inh|en|enm|haye}}, {{m|enm|heye}}, a conflation of {{inh|en|ang|heġe|t=hedge, fence}} and {{inh|en|ang|ġehæġ|t=an enclosed piece of land}}.
==== නාම පදය ====
{{en-noun}}
# {{lb|en|obsolete}} A [[hedge]].
# {{lb|en|obsolete}} A [[net]] placed around the [[lair]] or [[burrow]] of an animal.
# {{lb|en|obsolete}} An [[enclosure]], [[haw]].
# {{lb|en|obsolete}} A [[circular]] [[country dance]].
#* {{RQ:Marlowe Edward 2|year=1622|text=My men like Satyres grazing on the lawnes,<br>Shall with their Goate feete daunce an antick '''hay''',}}
#* {{RQ:Shakespeare Love's Labour's Lost|V|1|text=I’ll make one in a dance, or so; or I will play<br>On the tabour to the Worthies, and let them dance the '''hay'''.}}
=== නිරුක්තිය 3 ===
From the sound it represents, by analogy with other letters such as {{m|en|kay}} and {{m|en|gay}}. The expected form in English if the ''h'' had survived in the Latin name of the letter "h", {{m|la|hā}}.
==== නාම පදය ====
{{en-noun}}
# The letter for the ''h'' sound in [[Pitman shorthand]].
===== ආශ්රිත යෙදුම් =====
* {{l|en|aitch}}, the Latin letter for this sound
=== වැඩිදුර් කියවීම සඳහා ===
* {{pedia|Hay (disambiguation)}}
=== අමතර අවධානයට ===
*[[hay ko]]
* {{l|en|yeet hay}}
===Anagrams===
* {{anagrams|en|a=ahy|AYH|YHA|Yah|yah}}
{{C|en|Agriculture|Dances|Grasses}}
==Fingallian==
=== නිරුක්තිය ===
From {{inh|gmw-fin|enm|heye}}, from {{inh|gmw-fin|ang|heġe}}, from {{inh|gmw-fin|gmw-pro|*hagi}}.
=== නාම පදය ===
{{head|gmw-fin|noun}}
# A circular country [[dance]].
#* '''1689''' James Farewell, [https://quod.lib.umich.edu/e/eebo/A40881.0001.001/1:6?rgn=div1;vid=105328;view=fulltext ''The Irish Hudibras, or, Fingallian prince taken from the sixth book of Virgil's Æneids, and adapted to the present times.''] (Appendix: "Alphabetical Table" of "Fingallian Words, or Irish Phrases"):
#*: {{quote|gmw-fin|'''Hay''',|'''''Irish''-Hay, a Dance'''.}}
==Lushootseed==
=== වෙනත් ආකාර ===
* {{l|lut|haya}}
=== උච්චාරණය ===
* {{IPA|lut|/haɪ/}}
=== ක්රියා පදය ===
{{head|lut|verb}}
# to [[know]]
==Malagasy==
=== නිරුක්තිය 1 ===
==== විශ්මයාර්ථ පදය ====
{{head|mg|interjection}}
# [[truly]]!, [[indeed]]!
=== නිරුක්තිය 2 ===
====Participle====
{{head|mg|participle}}
# [[possible]]
# [[known]]
=== නිරුක්තිය 3 ===
==== නාම පදය ====
{{head|mg|noun}}
# {{lb|mg|dialectal}} [[burning]]
=== නිරුක්තිය 4 ===
==== නාම විශේෂණ පදය ====
{{head|mg|adjectives}}
# {{lb|mg|of land}} [[exposed]], [[bare]]
=== නිරුක්තිය 5 ===
==== නාම පදය ====
{{head|mg|noun}}
# {{lb|mg|Tankarana}} an [[insect]] which [[damage]]s [[rice]] [[crop]]s
==Mehri==
===Pronoun===
{{head|gdq|pronoun}}
# [[they]] two (''third-person dual pronoun'')
=== මූලාශ්ර ===
* Aaron Rubin, ''The Mehri Language of Oman''
== මධ්යකාලීන ඉංග්රීසි ==
=== නිරුක්තිය 1 ===
==== නාම පදය ====
{{head|enm|noun|altform=1}}
# {{alt form|enm|haye||net}}
=== නිරුක්තිය 2 ===
==== විශ්මයාර්ථ පදය ====
{{head|enm|interjection|altform=1}}
# {{alt form|enm|hey||hey}}
=== නිරුක්තිය 3 ===
==== නාම පදය ====
{{enm-noun|-}}
# {{alt form|enm|hey||hay}}
=== නිරුක්තිය 4 ===
====Pronoun====
{{head|enm|pronoun|altform=1}}
# {{alt form|enm|he|t=they|id=they}}
=== නිරුක්තිය 5 ===
==== නාම පදය ====
{{head|enm|noun|altform=1}}
# {{alt form|enm|heye||hedge}}
=== නිරුක්තිය 6 ===
==== ක්රියා පදය ====
{{head|enm|verb|altform=1}}
# {{alt form|enm|haven||to have}}
== මධ්යකාලීන ප්රංශ ==
=== ක්රියා පදය ===
{{head|frm|verb form}}
# {{inflection of|frm|hayr||1|s|pres|indc}}
==Old Galician-Portuguese==
=== වෙනත් ආකාර ===
* {{alter|roa-opt|hai|ai|ay}}
=== නිරුක්තිය ===
From {{m|roa-opt|haver|ha}} + {{m|roa-opt|y}}, "there is".
=== උච්චාරණය ===
* {{IPA|roa-opt|[ˈaj]}}
=== ක්රියා පදය ===
{{head|roa-opt|verb form}}
# {{lb|roa-opt|impersonal|Galicia}} there is, there are
#* {{quote-book|gl|year=1370|editor=Ramón Lorenzo|title=Crónica Troiana|page=533
|passage= Et moytas uegadas cõteçe que '''hay''' algũus que nõ catã senõ porlo que he sua prol
|translation= And many times it happens that '''there are''' some than don't care but for their own interest}}
====Descendants====
* {{desc|gl|hai}}
=== වැඩිදුර් කියවීම සඳහා ===
* {{R:gl:DDGM|aver}}
* {{R:gl:CX|hay }}
==Salar==
=== නිරුක්තිය ===
{{bor+|slr|zh|海}}.
=== උච්චාරණය ===
* {{IPA|slr|/xɑj/}}
=== නාම පදය ===
{{slr-noun|ı|lar}}
# [[sea]]
=== මූලාශ්ර ===
* {{R:slr:MaWei2|page=260}}
==Somali==
=== ක්රියා පදය ===
{{head|so|verb}}
# to [[hold]], [[have]]
== ස්පාඤ්ඤ ==
=== නිරුක්තිය ===
From {{inh|es|osp|ha ý||it has there}} (compare {{cog|ca|hi ha}} and {{cog|fr|il y a}}), from {{m|osp|ha}}, third-person singular present form of {{m|osp|aver||to have}}, + {{m|osp|ý}} (locative pronoun, compare modern {{cog|fr|y}} and {{cog|ca|hi}}), from {{der|es|la|ibī||there}}.
=== උච්චාරණය ===
{{es-pr|+<audio:LL-Q1321 (spa)-AdrianAbdulBaha-hay.wav<a:Colombia>><hmp:ay>}}
=== ක්රියා පදය ===
{{head|es|verb form}}
# {{es-verb form of|haber}}
#: [[there is]], [[there are]]
#: {{ux|es|'''Hay''' dos tiendas que venden películas.|t='''There are''' two stores that sell films.}}
==== භාවිත සටහන් ====
Impersonal form of [[haber#Spanish|haber]], '''there is''' or '''there are''', not '''he is''' or '''it was'''.
==== ව්යුත්පන්න යෙදුම් ====
{{col|es|donde hay confianza, da asco|no hay mal que por bien no venga|no hay quien}}
==Tagalog==
=== උච්චාරණය ===
{{tl-pr}}
=== නිරුක්තිය 1 ===
Compare {{w|Hokkien}} {{m|nan-hbl|害矣|tr=hāi--ah}}.
==== විශ්මයාර්ථ පදය ====
{{tl-head|interjection|b=+}}
# {{alt form|tl|ay}}
# {{n-g|an expression of fatigue, exhaustion, grief, sorrow, frustration, or the like}}: [[sigh]]
#: {{ux|tl|'''Hay'''... Antok na ako!|'''Sigh'''... I'm sleepy already!}}
===== ව්යුත්පන්න යෙදුම් =====
{{col3|tl|hay naku|hays}}
=== නිරුක්තිය 2 ===
{{bor+|tl|en|high}}.
==== නාම විශේෂණ පදය ====
{{tl-adj|b=+}}
# {{lb|tl|slang}} [[high]] on [[drug]]s; [[drugged]]
#: {{syn|tl|sabog|basag|bogsa}}
=== නිරුක්තිය 3 ===
==== නාම පදය ====
{{tl-noun|b=+}} {{tlb|tl|obsolete}}
# [[act]] of [[fright]]ing or [[startle|startling]] a [[dog]]
===== ව්යුත්පන්න යෙදුම් =====
{{col3|tl|hayan|ihay|maghay}}
=== වැඩිදුර් කියවීම සඳහා ===
* {{R:Pambansang Diksiyonaryo}}
== වියට්නාම ==
=== උච්චාරණය ===
{{vi-IPA}}
=== නිරුක්තිය 1 ===
Cognate with {{cog|aem|-}} ''hɪː'' ("to understand").
==== ක්රියා පදය ====
{{vi-verb|[[咍]], [[𫨩]], [[台]], [[能]]}}
# {{lb|vi|archaic|or|literary}} to [[know]]; to [[get]] to know; to [[learn]]
#* ''Phật thuyết đại báo phụ mẫu ân trọng kinh'' ({{lang|zh|佛說大報父母恩重經}}), folio 35a
#*: {{ux|vi|{{vi-ruby|合'''咍'''㝵*咍把特恩盎那|ids= 𱍸|Hợp '''hay''' người ấy hay trả được ơn áng nạ}}|Certainly, [one will] '''know''' that such a person can repay their parents' kindness.}}<!--- Chinese original: (則得名為孝順之子) --->
#* {{RQ:Nguyen Trai Quoc am thi tap|chapter=歸崑山重九偶作 Quy côn sơn trùng cửu ngẫu tác
|passage=𣈜恪'''咍'''兠群役恪</br>節冷馬女底朱戈
|translation=Who '''knows''' on a different day if I would be busy or not,</br>[So] I would rather not miss out on this nice weather [right now].
|transliteration=Ngày khác '''hay''' đâu còn việc khác,</br>Tiết lành mựa nỡ để cho qua.}}
#* {{RQ:Nguyen Du Kieu|passage=𬖉𦋦𦰟𦹵𦲿核</br>𧡊囂囂𱢻時'''能'''姉𧗱|tr=Trông ra ngọn cỏ lá cây,</br>Thấy hiu hiu gió thì '''hay''' chị về.|translation=And when you look outside, to where the grass and leaves are,</br>And if you see them sway in the light breeze, then you '''know''' that I, your sister, will come home soon.}} <!-- 能 for hay is one of the few fairly common semantograms in Nôm texts, see the rhyme scheme between cây and hay, both the sixth syllable in each line. -->
#* {{quote-journal|vi|title=Trẻ con lai ở miền Tây: Con không cha như nhà không nóc [The mixed children in Southwestern Vietnam: a fatherless child is like a roofless house]|url=https://tuoitre.vn/tre-con-lai-o-mien-tay-con-khong-cha-nhu-nha-khong-noc-20180122101058204.htm|newspaper=Tuổi Trẻ Online|date=22 Jan 2018|author=Viễn Sự; Sơn Lâm|passage=Hồi mẹ nó ẵm về nước, bà nội nó nói mua cho cái vé khứ hồi, tới hồi ra sân bay về lại Hàn Quốc thì mới '''hay''' cái vé đi có một chiều.
|translation=When his mother carried him in her arms back to Vietnam, his paternal grandmother said they had bought a return ticket for her, but she '''realised''' it was only a one-way ticket when she was at the airport, trying to return to Korea.}}
# {{lb|vi|obsolete|auxiliary}} [[can]], [[could]], [[may]], [[might]]
#* ''Phật thuyết đại báo phụ mẫu ân trọng kinh'' ({{lang|zh|佛說大報父母恩重經}}), folio 35a
#*: {{ux|vi|{{vi-ruby|合咍㝵*'''咍'''把特恩盎那|ids= 𱍸|Hợp hay người ấy '''hay''' trả được ơn áng nạ}}|Certainly, [one will] know that such a person '''can''' repay their parents' kindness.}}<!--- Chinese original: (則得名為孝順之子) --->
==== නාම විශේෂණ පදය ====
{{vi-adj}}
# {{lb|vi|obsolete}} [[able]], [[capable]]
#* {{quote-book|vi|origlang= la|year= 1914|origyear= {{circa|5th century CE}}|compiler= Edmond Nordemann|title= Chrestomathie annamite|chapter= {{lw|vi|Tín biểu các tông đồ|Kinh tin-kính}}|trans-chapter= {{w|Apostles' Creed}}|original= Symbolum Apostolorum|page= 152|pageurl= https://babel.hathitrust.org/cgi/pt?id=coo.31924021947639&seq=186
|origtext= la:Credo in Deum Patrem omni'''potentem''', Creatorem caeli et terrae,{{...}}
|text= Tôi tin kính Dêu cha '''hay''' lọn vậy, dựng nên lời-đất.{{...}}
|translation= I believe in God, the Father All '''Capable''', Creator of heaven and earth,{{...}}}}
===== භාවිත සටහන් =====
* The sense of “to know” is now mostly used in fixed expressions, such as {{m|vi|đến đâu hay đến đó}} and {{m|vi|cho hay||to inform|lit= to let [someone] know}}, in the non-literary language.
===== ව්යුත්පන්න යෙදුම් =====
{{col3|vi|cho hay|hay biết|có hay|đến đâu hay đến đó|hay chữ}}
=== නිරුක්තිය 2 ===
==== නාම විශේෂණ පදය ====
{{vi-adj|[[咍]], [[𫨩]], [[台]]}}
# [[good]], as in [[useful]], [[inventive]], [[interesting]] or [[entertaining]]; compare {{m|vi|tốt|pos=good as in high-quality, skillful or ethical}}
#: {{ant|vi|dở|tệ|tồi}}
#: {{uxi|vi|ý '''hay'''|a good idea}}
#: {{ux|vi|Phim '''hay''' quá ha !|That was a great movie!}}
===== ව්යුත්පන්න යෙදුම් =====
{{col3|vi|hay ho|hay hớm|ơ hay|ô hay}}
==== ක්රියා විශේෂණ පදය ====
{{vi-adv|𫨩}}
# [[well#Adverb|well]]
#: {{ant|vi|dở|tệ|tồi}}
#* {{quote-song|vi|author= Đậu Kinh Luân|year= {{circa|1990s}}|title= Hoa Tay|trans-title= Deftness|url= https://youtu.be/UCRP9WKlrKc|text=Ai hay vẽ rồi sẽ vẽ '''hay'''.|translation= Whoever draws often will draw '''well'''.}}
=== නිරුක්තිය 3 ===
==== ක්රියා විශේෂණ පදය ====
{{vi-adv}}
# [[often]], [[habitually]]
#: {{ux|vi|Con '''hay''' nói nhiều lắm.|You, child, are talkative.|lit= You, child, '''habitually''' talk too much.}}
#* {{quote-song|vi|author= Đậu Kinh Luân|year= {{circa|1990s}}|title= Hoa Tay|trans-title= Deftness|url= https://youtu.be/UCRP9WKlrKc|text=Ai '''hay''' vẽ rồi sẽ vẽ hay.|translation= Whoever draws '''often''' will draw well.}}
=== නිරුක්තිය 4 ===
====Conjunction====
{{vi-con|[[咍]], [[台]], [[能]]}}
# [[or]]
#: {{ux|vi|Chọn cái này, '''hay''' chọn cái kia|Choose this one, or choose that one}}
#* {{RQ:Nguyen Du Kieu|passage=吏輸妸李半命'''能'''牢|tr=Lại thua ả Lý bán mình '''hay''' sao?|translation=Could I fall short of Lady Li, who sold herself?}}
===== ව්යුත්පන්න යෙදුම් =====
* {{l|vi|hay là}}
===== අමතර අවධානයට =====
* {{l|vi|hoặc}}
==Walloon==
=== උච්චාරණය ===
* {{IPA|wa|/haj/}}
=== විශ්මයාර්ථ පදය ===
{{head|wa|interjection}}
# [[go]], [[let us]] [[go]]
==Yilan Creole==
=== විශ්මයාර්ථ පදය ===
{{head|ycr|interjection}}
# [[yes]]
=== මූලාශ්ර ===
* {{R:ycr:Lin 2022}}
==Yola==
===Pronoun===
{{head|yol|pronoun}}
# {{alt form|yol|hea||he}}
#* {{quote-book|yol|year=1927|chapter=LAMENT OF A WIDOW|line=6|page=130|title=THE ANCIENT DIALECT OF THE BARONIES OF FORTH AND BARGY, COUNTY WEXFORD|passage="'''Hay''' was mee gude plowere,|translation="'''He''' was my good plougher,}}
#* {{quote-book|yol|year=1927|chapter=YOLA ZONG O BARONY VORTH|line=4|page=132|title=THE ANCIENT DIALECT OF THE BARONIES OF FORTH AND BARGY, COUNTY WEXFORD|passage=Fan Buckeen '''hay''' pooked lik own thing mad.|translation=When Buckeen '''he''' jumped like a thing mad.}}
#* {{quote-book|yol|year=1927|chapter=YOLA ZONG O BARONY VORTH|line=7|page=132|title=THE ANCIENT DIALECT OF THE BARONIES OF FORTH AND BARGY, COUNTY WEXFORD|passage=Wi spur upa heel '''hay''' gaed him a goad,|translation=With a spur on his heel, '''he''' gave him a goad,}}
#* {{quote-book|yol|year=1927|chapter=PAUDEEN FOUGHLAAN'S WEDDEEN|line=3|page=133|title=THE ANCIENT DIALECT OF THE BARONIES OF FORTH AND BARGY, COUNTY WEXFORD|passage=Shu bin vrem Vorth, an '''hay''' vrem Bargee,|translation=She being from Forth and '''he''' from Bargy;}}
#* {{quote-book|yol|year=1927|chapter=PAUDEEN FOUGHLAAN'S WEDDEEN|line=5|page=133|title=THE ANCIENT DIALECT OF THE BARONIES OF FORTH AND BARGY, COUNTY WEXFORD|passage=Yola Vather Deruse '''hay''' raree cam thoare,|translation=Old Father Devereux ('''he''') early came there,}}
#* {{quote-book|yol|year=1927|chapter=PAUDEEN FOUGHLAAN'S WEDDEEN|line=6|page=133|title=THE ANCIENT DIALECT OF THE BARONIES OF FORTH AND BARGY, COUNTY WEXFORD|passage=Wi buke an wi candale '''hay''' tackled a paare.|translation=With book and with candle '''he''' tackled the pair;}}
=== මූලාශ්ර ===
* {{R:Browne 1927|page=130}}
qb6de32n1350kyl4p162ii8pztesi0i
Module:etymon/doc
828
141288
235414
229700
2026-03-10T02:39:16Z
en>Juwan
0
235414
Scribunto
text/plain
local export = {}
local M = require("Module:module loader").init({
require = {
families = "Module:families",
languages = "Module:languages",
},
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 = frame:expandTemplate{
title = "inflection-table-top",
args = {
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" .. frame:expandTemplate({ title = "inflection-table-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
45rdv2lddvm4ozd9ml1ja360eusj2vh
235415
235414
2026-06-02T04:49:44Z
Lee
19
[[:en:Module:etymon/doc]] වෙතින් එක් සංශෝධනයක්
235414
Scribunto
text/plain
local export = {}
local M = require("Module:module loader").init({
require = {
families = "Module:families",
languages = "Module:languages",
},
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 = frame:expandTemplate{
title = "inflection-table-top",
args = {
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" .. frame:expandTemplate({ title = "inflection-table-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
45rdv2lddvm4ozd9ml1ja360eusj2vh
Module:etymon/data/text allowed
828
141303
235423
229742
2026-05-29T15:44:06Z
en>स्वर्गसुख
0
235423
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 = {
["bg"] = true,
["bnt-sab-pro"] = true,
["cs"] = true,
["en"] = true,
["eo"] = true,
["es"] = true,
["fa"] = true,
["hrx"] = true,
["hsb"] = true,
["iir-pro"] = true,
["jbo"] = true,
["jdt"] = true,
["la"] = true,
["mul"] = true,
["ota"] = true,
["ps"] = true,
["ro"] = true,
["sk"] = true,
["sw"] = true,
["tg"] = true,
["tl"] = true,
["tr"] = true,
["uk"] = true,
["uz"] = true,
["zlw-ocs"] = true,
["zlw-osk"] = true,
["zle-ono"] = true,
},
families = {
["ber"] = true, -- Berber
["dra"] = true, -- Dravidian
["inc"] = true, -- Indo-Aryan
["iir-nur"] = true, -- Nuristani
["roa-gap"] = true, -- Galician-Portuguese
["sem-ara"] = true, -- Aramaic
["sem-arb"] = true, -- Arabic
["tup"] = true, -- Tupian
["zlw-lch"] = true, -- Lechitic
["mun"] = true, -- Munda
},
}
quxdi13v57pkh4cnbus9zevau2rvwwq
235424
235423
2026-06-02T04:53:35Z
Lee
19
[[:en:Module:etymon/data/text_allowed]] වෙතින් එක් සංශෝධනයක්
235423
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 = {
["bg"] = true,
["bnt-sab-pro"] = true,
["cs"] = true,
["en"] = true,
["eo"] = true,
["es"] = true,
["fa"] = true,
["hrx"] = true,
["hsb"] = true,
["iir-pro"] = true,
["jbo"] = true,
["jdt"] = true,
["la"] = true,
["mul"] = true,
["ota"] = true,
["ps"] = true,
["ro"] = true,
["sk"] = true,
["sw"] = true,
["tg"] = true,
["tl"] = true,
["tr"] = true,
["uk"] = true,
["uz"] = true,
["zlw-ocs"] = true,
["zlw-osk"] = true,
["zle-ono"] = true,
},
families = {
["ber"] = true, -- Berber
["dra"] = true, -- Dravidian
["inc"] = true, -- Indo-Aryan
["iir-nur"] = true, -- Nuristani
["roa-gap"] = true, -- Galician-Portuguese
["sem-ara"] = true, -- Aramaic
["sem-arb"] = true, -- Arabic
["tup"] = true, -- Tupian
["zlw-lch"] = true, -- Lechitic
["mun"] = true, -- Munda
},
}
quxdi13v57pkh4cnbus9zevau2rvwwq
power
0
142565
235474
232554
2026-06-02T11:04:27Z
Lee
19
235474
wikitext
text/x-wiki
{{also|Power}}
== ඉංග්රීසි ==
{{wp|lang=en}}
=== වෙනත් ආකාර ===
* {{alt|en|powre||obsolete}}
=== නිරුක්තිය ===
{{root|en|ine-pro|*h₁es-}}
{{etymon|en|id=force|:inh|enm:power<id:force>|tree=1}}
From {{inh|en|enm|power}}, {{m|enm|poer}}, from {{der|en|fro|poeir}}, from {{der|en|la-vul|posso|potēre}}, from {{der|en|la|possum|posse}}, whence {{m+|en|potent}}. Compare {{cog|fr|pouvoir}}. Displaced the native {{ncog|ang|anweald}}.
=== උච්චාරණය ===
* {{a|en|UK}}
** {{IPA|en|/ˈpaʊ̯ə̯/|/ˈpaʊ̯.ə/|a=RP}}
*** {{IPA|en|[ˈpʰaə]|[ˈpʰaː]|[ˈpʰɑː]|a=triphthong smoothing}}
** {{IPA|en|/ˈpuː.ɐ/|a=Northumbria}}
* {{IPA|en|/ˈpaʊ̯.ɚ/|/ˈpaʊ̯ɹ/|[ˈpʰaʊ̯ɚ]|[ˈpʰaʊ̯ɹ]|a=GenAm}}
** {{audio|en|en-us-power.ogg|a=US}}
* {{IPA|en|/ˈpæʊ̯.ə/|[ˈpʰæʊ̯ə]|[ˈpæɔ̯ə]|[ˈpʰɛəː]|a=AU,NZ}} {{q|increasingly [[broad]]er}}
* {{IPA|en|/ˈpaʊ̯.(ə)ɹ/|[p(ʰ)äʊ̯(ə)ɹ]|a=CA}}
** {{IPA|en|/ˈpʌʊ̯.(ə)ɹ/|[p(ʰ)əw(ə)ɹ]|a=dialectal}}
* {{hyphenation|en|pow|er}}
* {{rhymes|en|aʊ.ə(ɹ)|aʊə(ɹ)|s1=2}}
=== නාම පදය ===
{{en-noun|~}}
# The [[ability]] to do or undergo something.
#: {{ux|en|He has lost the '''power''' to speak.}}
#* {{quote-journal|en|year=1950|month=September|title=Network News: Watford Tunnel, L.M.R.|journal=Railway Magazine|page=641|text=On June 8, 1872, the London & North Western Railway obtained '''powers''' to quadruple its main line, and a new tunnel was bored for the up and down slow lines.}}
#* {{quote-book|en|year=2018|author=Marilyn McCord Adams|title=Horrendous Evils and the Goodness of God|page=74|passage=If it is spirits who have '''power''' to suffer, it seems they would also have active powers to think and will.}}
# {{lb|en|social}} The [[ability]] to [[coercion|coerce]], [[influence]]{{,}} or [[control]].
#* {{quote-web|en|date=2022/03/08|title=Magistrate Yang Wen-ke Sends Female Staff in Hsinchu County Government Roses for Their Contributions|archiveurl=https://web.archive.org/web/20220719223009/https://www.hsinchu.gov.tw/en/News_Content.aspx?n=318&s=244007|archivedate=19 July 2022|work=HsinChu County Government|text=The proportion of female colleagues in the Hsinchu County Government and its affiliated units has reached 61%. “Women '''Power'''” is the power behind over half of the services provided by the county government.}}
## {{lb|en|countable}} The [[ability]] to [[affect]] or [[influence]].
##: {{ux|en|the '''power''' of the written word}}
##* {{RQ:Fielding Tom Jones|III|ii|passage=An incident which happened about this time will set the characters of these two lads more fairly before the discerning reader than is in the '''power''' of the longest dissertation.}}
##* {{RQ:Fielding Tom Jones|III|iii|passage=Thwackum, on the contrary, maintained that the human mind, since the fall, was nothing but a sink of iniquity, till purified and redeemed by grace.{{...}}The favourite phrase of the former, was the natural beauty of virtue; that of the latter, was the divine '''power''' of grace.}}
##* {{quote-av|en|date=November 17, 1978|role=w:Carrie Fisher|title=w:The Star Wars Holiday Special|url=https://archive.org/details/TheStarWarsHolidaySpecial|genre=[[science fiction|Science Fiction]]|oclc=968745484|time=1:30:50|text=No matter how different we appear, we're all the same in our struggle against the '''powers''' of evil and darkness. I hope that this day will always be a day of joy in which we can reconfirm our dedication and our courage and more than anything else, our love for one another. This is the promise of the Tree of Life.}}
##* {{quote-book|en|year=1998|author=w:Eckhart Tolle|title=w:The Power of Now|passage=Past and future obviously have no reality of their own. Just as the moon has no light of its own, but can only reflect the light of the sun, so are past and future only pale reflections of the light, '''power''', and reality of the eternal present.}}
## The [[ability]] or [[authority]] to [[control]], [[govern]], [[command]], [[coerce]], etc., such as in a [[legal]], [[political]] or [[business]] sphere.
##: {{ux|en|He's nominally president, but he does not have any real '''power'''.}}
##* {{quote-book|en|year=1913|author=[[w:Robert Barr (writer)|Robert Barr]]|title=Lord Stranleigh Abroad|chapter=4|url=http://openlibrary.org/works/OL1796924W|passage=“{{...}} That woman is stark mad, Lord Stranleigh. Her own father recognised it when he bereft her of all '''power''' in the great business he founded. […]”}}
##* {{quote-book|en|year=1949|author={{w|George Orwell}} [pseudonym; {{w|George Orwell}}]|title=w:Nineteen Eighty-Four|passage=The Party seeks '''power''' entirely for its own sake. We are not interested in the good of others; we are interested solely in '''power'''. Not wealth or luxury or long life or happiness: only '''power''', pure '''power'''. [...] We know that no one ever seizes '''power''' with the intention of relinquishing it. '''Power''' is not a means, it is an end. One does not establish a dictatorship in order to safeguard a revolution; one makes the revolution in order to establish the dictatorship. The object of persecution is persecution. The object of torture is torture. The object of '''power''' is '''power'''.}}
##* {{quote-journal|en|year=2005|journal=Columbia Law Review|month=April|passage=In the face of expanding federal '''power''', California in particular struggled to maintain control over its Chinese population.}}
##* {{quote-journal|en|date=2013-08-10|volume=408|issue=8848|magazine=w:The Economist|title=[http://www.economist.com/news/leaders/21583277-worlds-biggest-polluter-going-green-it-needs-speed-up-transition-can-china Can China clean up fast enough?]|passage=It has jailed environmental activists and is planning to limit the '''power''' of judicial oversight by handing a state-approved body a monopoly over bringing environmental lawsuits.}}
## {{lb|en|metonymically|chiefly|in the plural}} The people in charge of legal or political power, the government.
##: {{syn|en|powers that be}}
## {{lb|en|metonymically}} A strong or influential nation, company, or other such body.
##: {{ux|en|In the 19th century, Britain and France were major colonial '''powers'''.}}
##: {{ux|en|Britain is no longer the maritime '''power''' that it once was.}}
##* {{quote-journal|en|date=2013-08-16|author=[http://www.theguardian.com/profile/johnvidal John Vidal]
|volume=189|issue=10|page=8|magazine=w:The Guardian Weekly|title=[http://www.theguardian.com/global-development/2013/aug/10/china-india-water-grab-dams-himalayas-danger Dams endanger ecology of Himalayas]| passage=Most of the Himalayan rivers have been relatively untouched by dams near their sources. Now the two great Asian '''powers''', India and China, are rushing to harness them as they cut through some of the world's deepest valleys.}}
## {{lb|en|metonymically|archaic}} An [[army]], a [[military]] [[force]].
##* {{RQ:Holinshed Chronicles|passage=The threatning words of duke Robert comming at the last to king Henries eares, caused him foorthwith to conceiue verie sore displeasure against the duke, in so much that he sent ouer a '''power''' of men into Normandie, which finding no great resistance, did much hurt in the countrie, by fetching and carieng spoiles and preies.}}
##* {{RQ:Marlowe Tamburlaine|part=1|scene=i|page=29|passage=Then when our '''powers''' in points of ſwords are ioin’d<br>And cloſde in compaſſe of the killing bullet,<br>Though ſtraite the paſſage and the port be made,<br>That leads to Pallace of my brothers life,<br>Proud is his fortune if we pierce it not.}}
# {{lb|en|physical|uncountable}} {{cap|strength}}, [[energy]].
## [[physical|Physical]] [[force]] or [[strength]].
##: {{ux|en|He needed a lot of '''power''' to hit the ball out of the stadium.}}
## {{lb|en|attributive}} {{n-g|Designating one who does something forcefully or on a large or grand scale.}}
##: {{usex|en|She's a '''power''' shopper; she knows all the best deals.}}
##: {{usex|en|This high-spec computer is ideal for '''power''' users.}}
## {{senseid|en|Q25342}} The production or flow of [[energy#English:_Q11379|energy]] providing means to do [[work#English:_Q42213|work]]; energy per [[time#English:_Q11471|time]] unit.
##: {{ux|en|The '''power''' to haul the train is supplied by two huge locomotives.}}
## {{senseid|en|electricity}} {{lb|en|specifically}} [[electricity|Electricity]] or a [[supply]] of electricity.
##: {{ux|en|After the pylons collapsed, this town was without '''power''' for a few days.}}
##* {{quote-book|en|year=1913|author=[[w:Robert Barr (writer)|Robert Barr]]|title=Lord Stranleigh Abroad|chapter=4|url=http://openlibrary.org/works/OL1796924W| passage=“My father had ideas about conservation long before the United States took it up.{{...}}You preserve water in times of flood and freshet to be used for '''power''' or for irrigation throughout the year. […]”}}
##* {{quote-journal|en|date=2013-07-20|volume=408|issue=8845|magazine=w:The Economist| title=[http://www.economist.com/news/http://www.economist.com/news/asia/21582043-villagers-enjoy-sunlight-after-dark-out-gloom Out of the gloom]| passage=[Rural solar plant] schemes are of little help to industry or other heavy users of electricity. Nor is solar '''power''' yet as cheap as the grid. For all that, the rapid arrival of electric light to Indian villages is long overdue. When the national grid suffers its next huge outage, as it did in July 2012 when hundreds of millions were left in the dark, look for specks of light in the villages.}}
## {{lb|en|physics}} The [[rate]] at which [[work]] is done or [[energy]] is [[transfer]]red, expressed in units of energy per unit of time.
##: {{ux|en|The kilowatt is a unit of '''power''', equivalent to 1,000 joules of energy per second.}}
## The [[strength]] by which a [[lens]] or [[mirror]] [[magnify|magnifies]] an [[optical]] [[image]].
##: {{ux|en|We need a microscope with higher '''power'''.}}
# {{senseid|en|a lot of}} {{lb|en|colloquial|dated|_|outside the phrase 'power of good'}} A large amount or number.
#: {{coi|en|[[do a power of good|do a '''power''' of good]]}}
#* {{quote-book|en|year=1872|author=w:Mark Twain|title=w:Roughing It|chapter=XLVII|passage=Don't you mind my snuffling a little—becuz we're in a '''power''' of trouble.}}
#* {{quote-journal|en|journal=Everybody's Magazine|text=what a '''power''' of languages he knew|title=The White Arc|author=w:Henry Kitchell Webster|year=1918|number=Five|volume=XXXVIII}}
#* {{quote-book|en|author=w:Dylan Thomas|text=All the other children are making a '''power''' of noise|title=Twenty Years a-Growing|genre=filmscript (unfinished)|year=1944/5|year_published=1964}}
#* {{quote-book|en|title=Soldier of the Raj|page=161|author=William Magan|year=2002|passage="There'd be a '''power''' of horses down there on the parade ground, wouldn't there ?"}}
#* {{quote-book|en|text=each word costing her a '''power''' of pain|title=Requiem for a Knave|author=Laura Carlin|year=2020}}
# Any of the elementary forms or parts of machines: three primary (the lever, inclined plane, and pulley) and three secondary (the wheel-and-axle, wedge, and screw).
#: {{coi|en|the mechanical '''powers'''}}
# {{lb|en|trucking}} A [[tractor]].
#: {{ux|en|The set I'm making right now needs a '''power''' on it, but we don't have any tractors left in the yard.}}
# {{lb|en|physics|mechanics}} A measure of the [[effectiveness]] that a force producing a physical [[effect]] has over time. If [[linear]], the quotient of: ([[force]] multiplied by the [[displacement]] of or in an object) ÷ time. If [[rotational]], the quotient of: ([[force]] multiplied by the [[angle]] of [[displacement]]) ÷ time.
# {{lb|en|mathematics}}
## {{senseid|en|exp}}A [[product]] of [[equal]] [[factor]]s (and generalizations of this notion): <math>x^n</math>, read as "<math>x</math> to the power of <math>n</math>" or the like, is called a power and denotes the product <math>x \times x \times \cdots \times x</math>, where <math>x</math> appears <math>n</math> times in the product; <math>x</math> is called the [[base]] and <math>n</math> the [[exponent]].
## {{lb|en|set theory}} [[cardinality|Cardinality]].
## {{lb|en|statistics}} The [[probability]] that a statistical test will reject the [[null hypothesis]] when the alternative hypothesis is true.
# {{lb|en|biblical|in plural}} In Christian [[angelology]], an [[intermediate]] level of [[angel]]s, ranked above [[archangel]]s, but exact position varies by classification scheme.
# {{lb|en|quiz bowl}} A bonus point awarded for answering correctly before a certain part of the [[tossup]] is read.
==== සමාන පද ====
{{checksense|en}}
{{col4|en|title=Terms synonymous with one or more senses of ''power'' (noun)
|aptitude
|arm
|authority
|capability
|capacity
|clout
|command
|competence
|competency
|control
|dominion
|energy
|force
|grip
|hold
|influence
|main
|mastery
|might
|muscle
|potency
|pull
|sinew
|strength
|sway
|vigor
|wald
|weight
}}
* See also [[Thesaurus:power]]
==== විරුද්ධ පද ====
* {{l|en|impotence}}
* {{l|en|weakness}}
==== ව්යුත්පන්න යෙදුම් ====
{{col|en|powerlevel|broken power law|kilikili power
|active power|earning power|earnings power|power button|power house|talk truth to power
|agripower| power interruption|power outage|power-tripper
|airpower|do the power of good|eye power|power puller
|antipower
|atomic power
|auxiliary power unit
|axiom of power set|power hammer|power hitting|power luncher|power lunching|power washing
|Axis power
|balance of power
|Banzhaf power index
|bargaining power
|battery power| low-power|power rule|predictive power
|biopower
|bipower
|black power
|bottom power
|brainpower|people power|power fantasy|power trowel
|brown power
|buying power
|candle power|power shower|candlepower
|civil power| light-collecting power|light-gathering power
|clean power|Power Four
|combined cycle power plant
|come to power
|cone of power
|copower
|corridors of power|A-B power|donkey power|power screw|protecting power|T-power
|counterpower
|cyberpower
|dirty power
|donkeypower
|duckpower
|effective radiated power
|electropower
|fire-power
|firepower
|firm power
|Five Power Defence Arrangements
|flower power|electric power transmission|power transmission line
|formal power series
|girl power
|gray power
|great power
|grey power
|ground power
|gunpower
|hard power
|higher power
|high-power
|horsepower
|horse-power
|horse power
|Hutu Power
|hydroelectric power
|hydropower
|hyperpower
|inherent power
|in power
|knowledge is power
|labor power
|labour power
|lung power
|lung-power
|manpower
|market power
|micropower
|middle power
|military power
|mindpower
|more power to someone,more power to your elbow
|more power to your arm
|motive power
|motive power depot
|multipower
|necropower
|noise power
|nonfirm power
|nonpower
|non-powerlike
|nuclear power
|nuclear power plant
|nuclear power station
|omnipower
|optical power
|perfect power
|personpower
|person-power
|pester power
|phantom power
|Planck power
|police power
|poor power
|powerable
|power adapter
|power adaptor
|power alley
|power animal
|power assist
|power-associative algebra
|power balance
|powerball
|power ballad
|powerband
|power bank
|powerbank
|power bar
|power base
|power behind the throne
|power board
|powerboat
|powerbomb
|power bottom
|power box
|power breakfast
|power brick
|power-broker
|power broker
|powerbroking
|power bump
|power cable
|power car
|power center
|power centre
|power chain
|powerchair
|power charger
|power chord
|power clean
|power cod
|power coffee
|power consumption
|power cord
|Power County
|power couple
|power creep
|power cut
|power cycle
|power-cycle
|power dissipation
|power distance
|power dive
|power domain
|power down
|power-dressed
|power dresser
|power dressing
|power drill
|power dynamics
|power egg,power-egg
|power electronics
|power equation
|power excursion
|power factor
|power failure
|power feminism
|Power Five
|power forward
|powerful
|power function
|power gamer
|power gap
|power grab
|power grid
|power hand
|power harrow
|powerhead
|power hitter
|power hockey
|powerholder
|powerholding
|power hour
|powerhouse
|power-hungry
|power-intensive
|power in the land
|power inverter
|powerish
|powerism
|powerist
|power jam
|power kerosene
|power kite
|power laces
|powerlaw
|power law
|power lead
|powerless
|power level
|powerlifter
|powerlifting
|powerlike
|power-line
|power-line communication
|power line communication
|powerline,power line
|power loom
|power lunch
|power metal
|power mic
|power mike
|power mod
|powermonger
|power move
|power nap
|power noise
|power of appointment
|power of attorney
|power of suggestion
|power of termination
|power of the pencil
|power of the purse
|power of yet
|poweroid
|power-operated
|power pack
|power pill
|power plant
|powerplay,power play
|power point
|power pole
|power-political
|power politician
|power politics
|power pop
|power posing
|power projection
|power rack
|power satellite
|power saw
|power scaling
|power series
|power set
|powersharing,power-sharing,power sharing
|powershift
|power shovel
|powerslam
|powerslash
|power slide
|power snack
|powersome
|power source
|powersport
|powersports
|power spot
|power station
|power steering
|powers that be
|power strip
|power stroke
|power structure
|power struggle
|power suit
|power supply
|power surge
|power take-off
|power tap
|power tie
|power tiller
|power to gas
|power tool
|power toothbrush
|power top
|power tower
|power train
|powertrain
|power trio
|power trip
|power-tripping
|powertrip,power-trip,power trip
|power unit
|power-up
|power user
|power vacuum
|powerviolence
|power walk
|powerwalk
|power-walk
|power wall
|power wash
|powerwash
|powerwasher
|power wheel
|power window
|power word
|powery
|pulling power
|purchasing power
|purchasing power parity
|Puretic power block
|pussy power
|reactive power
|refractive power
|regional power
|relocatable power tap
|residual power
|resolving power
|rest in power
|running powers
|sea power
|seapower
|sharp power
|shore power
|sleeping power
|smart power
|social power
|soft power
|solar power
|spacepower
|space power system
|speak truth to power
|specific power
|spending power
|split-phase power
|statistical power
|staying power
|steam power
|stopping power
|storage power station
|subpower
|super power
|superpower
|technopower
|thermal design power
|thermopower
|tidal power
|to the power of
|ultrapower
|uninterruptible power source
|uninterruptible power supply
|unpower
|warpower
|water power
|wave power
|white power
|will-power
|will power
|willpower
|will to power
|will-to-power
|wind power
|windpower
|womanpower
|world power
}}
==== ආශ්රිත යෙදුම් ====
* {{l|en|possible}}
* {{l|en|potent}}
====Collocations====
{{col-top|2|Adjectives often used with "power"}}
* {{coi|en|electric, nuclear, optical, mechanical, political, absolute, corporate, institutional, military, economic, solar, magic, magical, huge, physical, mental, intellectual, emotional, spiritual, sexual, seductive, coercive, erotic, natural, cultural, positive, negative, etc.}}
{{col-bottom}}
====Descendants====
* {{desc|de|Power|bor=1}}
==== අමතර අවධානයට ====
{{arithmetic operations}}
=== ක්රියා පදය ===
{{en-verb}}
# {{lb|en|transitive}} To [[provide]] [[#Noun|power]] for (a [[mechanical]] or [[electronic]] [[device]]).
#: {{ux|en|This CD player is '''powered''' by batteries.}}
# {{lb|en|transitive}} To [[hit]] or [[kick]] something [[forcefully]].
#* {{quote-journal
|en
|date=February 1, 2011
|author=Mandeep Sanghera
|title=Man Utd 3 - 1 Aston Villa
|work=BBC
|url=http://news.bbc.co.uk/sport2/hi/football/eng_prem/9379942.stm
|page=
|passage=United keeper Edwin van der Sar was the unlikely provider as his clearance found Rooney, who had got ahead of last defender Richard Dunne, and the forward brilliantly controlled a ball coming from over his shoulder before '''powering''' a shot past Brad Friedel.}}
# To [[enable]] or provide the [[impetus]] for.
#* {{quote-journal
|en
|date=April 6, 2017
|author=Samira Shackle
|title=On the frontline with Karachi’s ambulance drivers
|work=the Guardian
|url=https://www.theguardian.com/world/2017/apr/06/on-the-frontline-with-karachis-ambulance-drivers
|page=
|passage=Abdul Sattar Edhi came to Karachi as a poor man from an Indian village in 1947. Starting with a small pharmacy tent, his work rapidly expanded, '''powered''' by donations from ordinary citizens.}}
# {{lb|en|intransitive}} To [[move]] or [[advance]] with [[great]] [[force]] or [[speed]].
#* {{quote-journal|en|date=2019-01-16|title=Ashleigh Barty loses coach but wins latest Australian Open encounter|journal=w:The Guardian|url=https://www.theguardian.com/sport/2019/jan/16/ashleigh-barty-loses-coach-but-wins-latest-australian-open-encounter|passage=Playing with freedom and no fear, {{w|Ashleigh Barty}} has '''powered''' into the {{w|Australian Open}} third round without even a coach. Barty clubbed China’s {{w|Yafan Wang}} 6-2, 6-3 on Wednesday before revealing she had been largely flying solo during her charge to the last 32 for only the second time.}}
==== ව්යුත්පන්න යෙදුම් ====
{{col3|en
|bepower
|depower
|empower
|outpower
|overpower
|power ahead
|power down
|power off
|power on
|power through
|power up
|repower
|unpower
|underpower
}}
=== නාම විශේෂණ පදය ===
{{en-adj}}
# {{lb|en|Malaysia|Singapore|colloquial}} [[impressive|Impressive]].
#* {{quote-book|en|year=2001|author=Thian|title=Makan Time|url=http://www.makantime.com/indexmuslim.html
|passage=Check out the '''POWER''' Mee Rebus & Lontong in this newly established Nasi Padang coffee shop at Market Street Carpark.}}
#* {{quote-book|en|year=2005|author=Bayya|title=Bayya Eats ... and Other Stuff|url=http://crush-ice.blogspot.sg/2005/02/anugerah-planet-musik.html
|passage=Their performance is very the '''Power'''!}}
#* {{quote-book|en|year=2010|author=Caihong Lim; Kesheng Lim|title=Footprints All Over: Love, Happiness,Joy|url=http://footprintsallover.blogspot.sg/2010_03_01_archive.html
|passage=His hokkien is damn '''power''' lah!}}
#* {{quote-book|en|year=2015|author=SGMOJI|title=Your Ultimate Guide to Locally-Grown Emojis|url=http://www.sgmoji.com/sgmoji-guidebook.pdf|passage=Eh his soccer skills damn '''power''' one.|archiveurl=https://web.archive.org/web/20160304222113/http://www.sgmoji.com/sgmoji-guidebook.pdf|archivedate=4 March 2016}}
=== විශ්මයාර්ථ පදය ===
{{en-intj}}
# {{lb|en|Philippines|colloquial}} {{n-g|Used as a [[cheer]] to express [[support]]}} {{rfv-sense|en|pls add attestations}}
==== අමතර අවධානයට ====
* {{l|en|more power to someone}}
=== වැඩිදුර් කියවීම සඳහා ===
* {{R:OneLook}}
{{C|en|Physical quantities|Physics}}
== ජර්මානු ==
=== නිරුක්තිය 1 ===
{{bor+|de|fr|pauvre}}, from {{der|de|la|pauper}}.
==== උච්චාරණය ====
* {{IPA|de|/ˈpoːvər/|[ˈpoːvɐ]}}
* {{hyph|de|po|wer}}
==== නාම විශේෂණ පදය ====
{{de-adj|comp}}
# {{lb|de|regional|informal}} [[poor]], [[miserable]]
===== වරනැඟීම =====
{{de-adecl|comp}}
=== නිරුක්තිය 2 ===
==== උච්චාරණය ====
* {{IPA|de|/ˈpaʊ̯ər/|[ˈpaʊ̯ɐ]}}
* {{homophones|de|Power}}
==== ක්රියා පදය ====
{{head|de|verb form}}
# {{verb form of|de|powern||s|imp}}
# {{lb|de|colloquial}} {{verb form of|de|powern||1|s|pres}}
=== වැඩිදුර් කියවීම සඳහා ===
* {{R:de:Duden}}
* {{R:de:DWDS}}
== මධ්යකාලීන ඉංග්රීසි ==
=== වෙනත් ආකාර ===
* {{alter|enm|poeir|poer|pouer|pouweer|pouwer|pouwere|powair|powere}}
* {{alter|enm|poiar|pouoir|poure|powr|puere|puwer||Late ME}}
=== නිරුක්තිය ===
{{etymon|enm|id=force|:bor|xno:poer<ety:inh<fro:pooir>>}}
{{bor+|enm|xno|poer}}, {{m|fro|poeir}}, {{m|fro|pouer}}, from {{der|enm|la-lat|posso|potēre}}, regularisation of {{der|enm|la|possum|posse}}.
=== උච්චාරණය ===
* {{IPA|enm|/puːˈɛːr/|/ˈpuː(ə)r/|/pɔːˈɛːr/|/ˈpɔː(ə)r/|q3=less common}}
=== නාම පදය ===
{{enm-noun|-}}
# [[ability|Ability]], {{l|en|power}} or [[capability]]:
## A [[faculty]] in a {{gloss|[[particular]]}} [[area]]; the power to do {{gloss|[[something]]}}.
## [[efficacy|Efficacy]]; [[magnitude]] of an [[effect]] or [[ability]] in [[achieve|achieving]] it.
## [[physical|Physical]] [[ability]] or [[condition]]; [[might]], [[strength]].
## [[wealth|Wealth]], [[means]]; [[financial]] power or [[resource]]s.
## The power of a [[deity]] or [[demon]] {{gloss|especially the [[Christian]] [[God]]}}.
## {{lb|enm|astrology}} The [[control]] [[exercise]]d by a [[planet]], [[star]], or [[constellation]].
# [[authority|Authority]], [[rule]]; the [[ability]] to [[govern]]:
## [[governmental|Governmental]] [[authority]] or [[control]]; [[dominion]].
## Legally [[authorise]]d or [[delegate]]d power; [[permission]].
## A [[powerful]] [[governmental]] [[position]], [[title]], or [[dignity]].
## {{lb|enm|rare}} A [[ruler]] or their [[domain]].
# An [[army]] or [[host]]; a [[military]] [[force]].
# {{lb|enm|theology}} A {{l|en|power}} {{gloss|rank of angel}}.
====Descendants====
* {{desctree|en|power}}
* {{desc|gmw-msc|power|powar}}
** {{desc|sco|pouer|pooer|pour|power}}
* {{desc|cy|power|pŵer|bor=1}}
==== මූලාශ්ර ====
* {{R:MED Online|pǒuē̆r(e|n|MED34209}}
{{C|enm|Government|Leaders|Money|Military|Mind|Religion|Theology}}
toihulyzmnrq60ajnfx7n8j9r6gwh23
සාකච්ඡාව:තෙලදසුන
1
143840
235349
234629
2026-06-01T14:58:18Z
Lee
19
/* blockquote යෙදීම */ Reply
235349
wikitext
text/x-wiki
== blockquote යෙදීම ==
@[[පරිශීලක:Lee|Lee]], මෙහි විකිපීඩියාවේ ඇති blockquote යෙදූ විට ලැබුණු ප්රතිඵලය බලන්න. වික්ෂනරියට සුදුසු පරිදි වෙනස් කර ගත හැකි ද? [[පරිශීලක:WrdSrchSi|WrdSrchSi]] ([[පරිශීලක සාකච්ඡාව:WrdSrchSi|සාකච්ඡාව]]) 16:52, 20 මැයි 2026 (යූටීසී)
:@[[පරිශීලක:WrdSrchSi|WrdSrchSi]], බලන්නම්. මට ටික කාලයක් දෙන්න. -- [[පරිශීලක:Lee|Lee]] ([[පරිශීලක සාකච්ඡාව:Lee|සාකච්ඡාව]]) 07:52, 21 මැයි 2026 (යූටීසී)
:@[[පරිශීලක:WrdSrchSi|WrdSrchSi]], {{tl|bq}} අවශ්ය ප්රතිඵලය ලබා දෙනවා ද? -- [[පරිශීලක:Lee|Lee]] ([[පරිශීලක සාකච්ඡාව:Lee|සාකච්ඡාව]]) 14:58, 1 ජූනි 2026 (යූටීසී)
dbr9imnsuk08pdkjmqjw5i4jzzhywxv
235440
235349
2026-06-02T10:32:09Z
WrdSrchSi
3305
/* blockquote යෙදීම */ Reply
235440
wikitext
text/x-wiki
== blockquote යෙදීම ==
@[[පරිශීලක:Lee|Lee]], මෙහි විකිපීඩියාවේ ඇති blockquote යෙදූ විට ලැබුණු ප්රතිඵලය බලන්න. වික්ෂනරියට සුදුසු පරිදි වෙනස් කර ගත හැකි ද? [[පරිශීලක:WrdSrchSi|WrdSrchSi]] ([[පරිශීලක සාකච්ඡාව:WrdSrchSi|සාකච්ඡාව]]) 16:52, 20 මැයි 2026 (යූටීසී)
:@[[පරිශීලක:WrdSrchSi|WrdSrchSi]], බලන්නම්. මට ටික කාලයක් දෙන්න. -- [[පරිශීලක:Lee|Lee]] ([[පරිශීලක සාකච්ඡාව:Lee|සාකච්ඡාව]]) 07:52, 21 මැයි 2026 (යූටීසී)
:@[[පරිශීලක:WrdSrchSi|WrdSrchSi]], {{tl|bq}} අවශ්ය ප්රතිඵලය ලබා දෙනවා ද? -- [[පරිශීලක:Lee|Lee]] ([[පරිශීලක සාකච්ඡාව:Lee|සාකච්ඡාව]]) 14:58, 1 ජූනි 2026 (යූටීසී)
::@[[පරිශීලක:Lee|Lee]]; ඔව්. එහි පහලින් දැක්වෙන උපුටාගැනීමේ මුලාශ්රය ගැන විස්තරය හරි නම් උඩට එන්න ඕනේ. පුලුවන්නම් හදන්න.
::තව මෙහෙම ක්රමයකුත් තියෙනවා. මේකටත් ෂෝ/හයිඩ් ගැටලුව එන්නේ නැහැ.
::# {{l|si|රූපවාහිනිය}}; {{l|en|television}}
::#:* {{quote-text|si|author=ඊලියන් ද සිල්වා|title=[https://www.ahubudu.lk/assets/pdf/EDIYA_Veluma4_Kalaba2.pdf ඉරු දෙවිය]|year=2507 වෙසක් 1963 මැයි|passage=ඉරු-ලප වසර 11.2 කට වරක් දිස්වෙන වග ද එසේ වූ විටැ පොළොවෙහි කාන්දම් පිටිය '''තෙලදසුන්''' ඈ කටයුතු අවුල් වියවුල් වී යන වග නම් දන්නේ මැ යි.}}
::[[පරිශීලක:WrdSrchSi|WrdSrchSi]] ([[පරිශීලක සාකච්ඡාව:WrdSrchSi|සාකච්ඡාව]]) 10:32, 2 ජූනි 2026 (යූටීසී)
1mxraq8e4870vm7i439hti1twwrzis0
235446
235440
2026-06-02T10:36:15Z
Lee
19
/* blockquote යෙදීම */ Reply
235446
wikitext
text/x-wiki
== blockquote යෙදීම ==
@[[පරිශීලක:Lee|Lee]], මෙහි විකිපීඩියාවේ ඇති blockquote යෙදූ විට ලැබුණු ප්රතිඵලය බලන්න. වික්ෂනරියට සුදුසු පරිදි වෙනස් කර ගත හැකි ද? [[පරිශීලක:WrdSrchSi|WrdSrchSi]] ([[පරිශීලක සාකච්ඡාව:WrdSrchSi|සාකච්ඡාව]]) 16:52, 20 මැයි 2026 (යූටීසී)
:@[[පරිශීලක:WrdSrchSi|WrdSrchSi]], බලන්නම්. මට ටික කාලයක් දෙන්න. -- [[පරිශීලක:Lee|Lee]] ([[පරිශීලක සාකච්ඡාව:Lee|සාකච්ඡාව]]) 07:52, 21 මැයි 2026 (යූටීසී)
:@[[පරිශීලක:WrdSrchSi|WrdSrchSi]], {{tl|bq}} අවශ්ය ප්රතිඵලය ලබා දෙනවා ද? -- [[පරිශීලක:Lee|Lee]] ([[පරිශීලක සාකච්ඡාව:Lee|සාකච්ඡාව]]) 14:58, 1 ජූනි 2026 (යූටීසී)
::@[[පරිශීලක:Lee|Lee]]; ඔව්. එහි පහලින් දැක්වෙන උපුටාගැනීමේ මුලාශ්රය ගැන විස්තරය හරි නම් උඩට එන්න ඕනේ. පුලුවන්නම් හදන්න.
::තව මෙහෙම ක්රමයකුත් තියෙනවා. මේකටත් ෂෝ/හයිඩ් ගැටලුව එන්නේ නැහැ.
::# {{l|si|රූපවාහිනිය}}; {{l|en|television}}
::#:* {{quote-text|si|author=ඊලියන් ද සිල්වා|title=[https://www.ahubudu.lk/assets/pdf/EDIYA_Veluma4_Kalaba2.pdf ඉරු දෙවිය]|year=2507 වෙසක් 1963 මැයි|passage=ඉරු-ලප වසර 11.2 කට වරක් දිස්වෙන වග ද එසේ වූ විටැ පොළොවෙහි කාන්දම් පිටිය '''තෙලදසුන්''' ඈ කටයුතු අවුල් වියවුල් වී යන වග නම් දන්නේ මැ යි.}}
::[[පරිශීලක:WrdSrchSi|WrdSrchSi]] ([[පරිශීලක සාකච්ඡාව:WrdSrchSi|සාකච්ඡාව]]) 10:32, 2 ජූනි 2026 (යූටීසී)
:::@[[පරිශීලක:WrdSrchSi|WrdSrchSi]], මේ තියෙන්නේ විකිපීඩියාවේ කේතය. ඊට වඩා සෑහෙන්න වෙනස් වාගේ වික්ශනරි භාවිතය. -- [[පරිශීලක:Lee|Lee]] ([[පරිශීලක සාකච්ඡාව:Lee|සාකච්ඡාව]]) 10:36, 2 ජූනි 2026 (යූටීසී)
c5qxc4nmzdqqqegm2bim5jij0eupp38
235454
235446
2026-06-02T10:43:52Z
WrdSrchSi
3305
/* blockquote යෙදීම */ Reply
235454
wikitext
text/x-wiki
== blockquote යෙදීම ==
@[[පරිශීලක:Lee|Lee]], මෙහි විකිපීඩියාවේ ඇති blockquote යෙදූ විට ලැබුණු ප්රතිඵලය බලන්න. වික්ෂනරියට සුදුසු පරිදි වෙනස් කර ගත හැකි ද? [[පරිශීලක:WrdSrchSi|WrdSrchSi]] ([[පරිශීලක සාකච්ඡාව:WrdSrchSi|සාකච්ඡාව]]) 16:52, 20 මැයි 2026 (යූටීසී)
:@[[පරිශීලක:WrdSrchSi|WrdSrchSi]], බලන්නම්. මට ටික කාලයක් දෙන්න. -- [[පරිශීලක:Lee|Lee]] ([[පරිශීලක සාකච්ඡාව:Lee|සාකච්ඡාව]]) 07:52, 21 මැයි 2026 (යූටීසී)
:@[[පරිශීලක:WrdSrchSi|WrdSrchSi]], {{tl|bq}} අවශ්ය ප්රතිඵලය ලබා දෙනවා ද? -- [[පරිශීලක:Lee|Lee]] ([[පරිශීලක සාකච්ඡාව:Lee|සාකච්ඡාව]]) 14:58, 1 ජූනි 2026 (යූටීසී)
::@[[පරිශීලක:Lee|Lee]]; ඔව්. එහි පහලින් දැක්වෙන උපුටාගැනීමේ මුලාශ්රය ගැන විස්තරය හරි නම් උඩට එන්න ඕනේ. පුලුවන්නම් හදන්න.
::තව මෙහෙම ක්රමයකුත් තියෙනවා. මේකටත් ෂෝ/හයිඩ් ගැටලුව එන්නේ නැහැ.
::# {{l|si|රූපවාහිනිය}}; {{l|en|television}}
::#:* {{quote-text|si|author=ඊලියන් ද සිල්වා|title=[https://www.ahubudu.lk/assets/pdf/EDIYA_Veluma4_Kalaba2.pdf ඉරු දෙවිය]|year=2507 වෙසක් 1963 මැයි|passage=ඉරු-ලප වසර 11.2 කට වරක් දිස්වෙන වග ද එසේ වූ විටැ පොළොවෙහි කාන්දම් පිටිය '''තෙලදසුන්''' ඈ කටයුතු අවුල් වියවුල් වී යන වග නම් දන්නේ මැ යි.}}
::[[පරිශීලක:WrdSrchSi|WrdSrchSi]] ([[පරිශීලක සාකච්ඡාව:WrdSrchSi|සාකච්ඡාව]]) 10:32, 2 ජූනි 2026 (යූටීසී)
:::@[[පරිශීලක:WrdSrchSi|WrdSrchSi]], මේ තියෙන්නේ විකිපීඩියාවේ කේතය. ඊට වඩා සෑහෙන්න වෙනස් වාගේ වික්ශනරි භාවිතය. -- [[පරිශීලක:Lee|Lee]] ([[පරිශීලක සාකච්ඡාව:Lee|සාකච්ඡාව]]) 10:36, 2 ජූනි 2026 (යූටීසී)
::::@[[පරිශීලක:Lee|Lee]]; මා අලුතින් දැම්ම quote-text|si ක්රමයේ අකුරුවල ප්රමාණය උපුටාගැනීමට ගැලපෙන්නේ නැහැ වගේ. අර්ථකථනයට වඩා විශාල අකුරුවලින් එන්නේ. blockquote ක්රමය ඊට වඩා හොඳයි කියලා හිතෙනවා. [[පරිශීලක:WrdSrchSi|WrdSrchSi]] ([[පරිශීලක සාකච්ඡාව:WrdSrchSi|සාකච්ඡාව]]) 10:43, 2 ජූනි 2026 (යූටීසී)
g8dzmkbsho39p7ef0u7fqx6tp2ip9ef
minutes
0
144010
235400
235148
2026-06-02T04:37:16Z
Lee
19
235400
wikitext
text/x-wiki
{{also|minutés|minūtes|minūtēs}}
== ඉංග්රීසි ==
=== උච්චාරණය ===
* {{IPA|en|/ˈmɪnɪts/}}
* {{audio|en|en-us-minutes.ogg|a=US}}
=== නාම පදය ===
{{head|en|noun form}}
# {{plural of|en|minute}}
=== නාම පදය ===
{{en-noun|p}}
# රැස්වීමක තබා ගැනෙන නිල වාර්තා (The official notes kept during a meeting).
#* {{quote-journal|en|date=14 Feb 81|volume=8|number=29|journal=w:Gay Community News|page=1|title=Retrial for PIE Defendants|author=Roger Moody|text=It was obvious from the prosecutions opening speech that they couldn't prove this intention on prima facie evidence: no letters, no '''minutes''', no witnesses to testify to a wicked burning of the midnight oil as the PIE executive endeavoured {{...}}}}
#* {{quote-journal|en|url=https://www.theguardian.com/world/2020/nov/26/fugging-hell-tired-of-mockery-austrian-village-changes-name|date=November 26 2020|author=Philip Oltermann in Berlin|work=w:The Guardian|title=Fugging hell: tired of mockery, Austrian village changes name|text='''Minutes''' from a municipal council meeting published on Thursday showed that the village of about 100 people, 350km (215 miles) west of Vienna, will be named Fugging from 1 January 2021.|archiveurl=https://web.archive.org/web/20201130021605/https://www.theguardian.com/world/2020/nov/26/fugging-hell-tired-of-mockery-austrian-village-changes-name}}
==== පරිවර්තන ====
{{trans-top|the official notes kept during a meeting}}
* Armenian: {{t+|hy|արձանագրություն}}
* Belarusian: {{t|be|пратако́л|m}}
* Bulgarian: {{t+|bg|протоко́л|m}}
* Catalan: {{t+|ca|acta|f}}
* Chinese:
*: Mandarin: {{t+|cmn|記錄|tr=jìlù}}, {{t|cmn|[[會議]][[記錄]]|tr=huìyì jìlù}}, {{t+|cmn|紀要|tr=jìyào}}, {{t|cmn|會議紀要}}
* Czech: {{t+|cs|protokol|m}}, {{t+|cs|zápis|m}}
* Danish: {{t+|da|referat|n}}, {{t|da|mødereferat|n}}
* Dutch: {{t+|nl|notulen|p}}
* Esperanto: {{t|eo|protokolo}}
* Faroese: {{t|fo|gerðabók|f}}, {{t|fo|fundarbók|f}}
* Finnish: {{t+|fi|pöytäkirja}}
* French: {{t+|fr|procès-verbal|m}}
* Georgian: {{t|ka|პროტოკოლი}}, {{t|ka|ოქმი}}
* German: {{t+|de|Protokoll|n}}, {{t+|de|Mitschrift|f}}, {{t+|de|Niederschrift|f}}
* Greek: {{t+|el|πρακτικά|n-p}}, {{t+|el|πρωτόκολλο|n}}
*: Ancient Greek: {{t|grc|ὑπόμνημα|n-p|alt=ὑπομνήματα}}
* Hebrew: {{t+|he|פְּרוֹטוֹקוֹל|m|tr=protokól}}
* Hungarian: {{t+|hu|jegyzőkönyv}}
* Indonesian: {{t+|id|notula}}, {{t|id|notulensi}}, {{t+|id|notulen}}, {{t|id|catatan rapat}}
* Irish: {{t|ga|miontuairisc|f-p|alt=miontuairiscí}}
* Italian: {{t+|it|verbale}}, {{t|it|processo verbale}}
* Japanese: {{t|ja|会議録|tr=かいぎろく, kaigiroku}}, {{t+|ja|議事録|tr=ぎじろく, gijiroku}}
* Kazakh: {{t|kk|хаттама}}
* Korean: {{t+|ko|회의록(會議錄)}}, {{t+|ko|의사록(議事錄)}}
* Kyrgyz: {{t|ky|протокол}}
* Macedonian: {{t|mk|протокол|m}}
* Mongolian:
*: Cyrillic: {{t+|mn|протокол}}
* Norwegian:
*: Bokmål: {{t+|nb|referat|n}}, {{t|nb|protokoll|m}}
* Polish: {{t+|pl|protokół|m}}
* Portuguese: {{t+|pt|ata|f}}
* Russian: {{t+|ru|протоко́л|m}}
* Serbo-Croatian:
*: Cyrillic: {{t|sh|за́писнӣк|m}}, {{t|sh|про̏токол|m}}, {{t-check|sh|службена zabileška|f}}, {{t-check|sh|службена забиљешка|f}}
*: Latin: {{t+|sh|zápisnīk|m}}, {{t+|sh|prȍtokol|m}}, {{t-check|sh|službena забилешка|f}}, {{t-check|sh|službena zabilješka|f}}
* Slovak: {{t|sk|protokol|m}}, {{t|sk|zápis|m}}, {{t|sk|zápisnica|f}}
* Slovene: {{t|sl|zapisnik|m}}
* Spanish: {{t+|es|acta}}
* Swahili: {{t|sw|kumbukumbu za mkutano}}
* Swedish: {{t+|sv|minnesanteckning|c}}, {{t+|sv|protokoll|n}}
* Tagalog: {{t+|tl|akta}}, {{t+|tl|tala}}
* Turkish: {{t+|tr|tutanak}}
*: Ottoman Turkish: {{t|ota|جریده|tr=ceride}}
* Ukrainian: {{t+|uk|протоко́л|m}}
* Uzbek: {{t+|uz|protokol}}
{{trans-bottom}}
=== ක්රියා පදය ===
{{head|en|verb form}}
# {{infl of|en|minute||s-verb-form}}
== ප්රංශ ==
=== උච්චාරණය ===
* {{fr-IPA|mi.nutt}}
* {{audio|fr|LL-Q150 (fra)-0x010C-minutes.wav}}
* {{audio|fr|LL-Q150 (fra)-DenisdeShawi-minutes.wav|a=<<Canada>> (<<Shawinigan>>)}}
* {{audio|fr|LL-Q150 (fra)-Mecanautes-minutes.wav|a=France}}
=== නාම පදය ===
{{head|fr|noun form|g=f}}
# {{plural of|fr|minute}}
=== ක්රියා පදය ===
{{head|fr|verb form}}
# {{inflection of|fr|minuter||2|s|pres|ind//sub}}
==Lithuanian==
=== උච්චාරණය ===
{{lt-pr|minutès}}
=== නාම පදය ===
{{head|lt|noun form}}
# {{inflection of|lt|minutė||acc|pl}}
== පෘතුගීසි ==
=== ක්රියා පදය ===
{{head|pt|verb form}}
# {{pt-verb form of|minutar}}
izu9jac01j2tqy85xh56sgnp83tzsqv
ප්රවර්ගය:en:Mathematics
14
144041
235275
235211
2026-06-01T13:24:21Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235275
wikitext
text/x-wiki
{{category redirect|en:ගණිතය}}
fk9o5hx42knyaafyvkgceiv3me8z22e
ප්රවර්ගය:Mathematics
14
144042
235276
235214
2026-06-01T13:24:31Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235276
wikitext
text/x-wiki
{{category redirect|ගණිතය}}
28rvs3xrlok4k9cjcp12xkcy4pcv0p0
ප්රවර්ගය:si:Mathematics
14
144043
235277
235216
2026-06-01T13:24:41Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235277
wikitext
text/x-wiki
{{category redirect|si:ගණිතය}}
893r4933vvvdua4nzpd2kq3t4qby3sk
ප්රවර්ගය:ඉංග්රීසි අභාවයට ගිය රූපාකාර
14
144060
235257
2022-06-20T05:04:16Z
en>WingerBot
0
use {{auto cat}}, remove extraneous {{catfix}}/TOC templates (manually assisted)
235257
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235258
235257
2026-06-01T12:05:40Z
Lee
19
[[:en:Category:English_obsolete_forms]] වෙතින් එක් සංශෝධනයක්
235257
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235261
235258
2026-06-01T12:07:03Z
Lee
19
Lee විසින් [[ප්රවර්ගය:English obsolete forms]] සිට [[ප්රවර්ගය:ඉංග්රීසි obsolete forms]] වෙත පිටුව ගෙන යන ලදී
235257
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235269
235261
2026-06-01T12:20:55Z
Lee
19
Lee විසින් [[ප්රවර්ගය:ඉංග්රීසි obsolete forms]] සිට [[ප්රවර්ගය:ඉංග්රීසි obsolete රූපාකාර]] වෙත පිටුව ගෙන යන ලදී
235257
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235333
235269
2026-06-01T14:27:50Z
Lee
19
Lee විසින් [[ප්රවර්ගය:ඉංග්රීසි obsolete රූපාකාර]] සිට [[ප්රවර්ගය:ඉංග්රීසි අභාවයට ගිය රූපාකාර]] වෙත පිටුව ගෙන යන ලදී
235257
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
ප්රවර්ගය:ඉංග්රීසි obsolete terms
14
144061
235259
2024-04-10T20:56:26Z
en>Quercus solaris
0
→
235259
wikitext
text/x-wiki
{{auto cat}}
{{also|[[Wiktionary:Forms and spellings#Obsolete forms|Wiktionary:Forms and spellings § Obsolete forms]]}}
{{also|[[Wiktionary:Obsolete and archaic terms|Wiktionary:Obsolete and archaic terms]]}}
{{also|[[Appendix:Glossary#obsolete|Appendix:Glossary s.v. obsolete]]}}
ceerkq331n68wlgeiss5shj8gh6gus9
235260
235259
2026-06-01T12:06:07Z
Lee
19
[[:en:Category:English_obsolete_terms]] වෙතින් එක් සංශෝධනයක්
235259
wikitext
text/x-wiki
{{auto cat}}
{{also|[[Wiktionary:Forms and spellings#Obsolete forms|Wiktionary:Forms and spellings § Obsolete forms]]}}
{{also|[[Wiktionary:Obsolete and archaic terms|Wiktionary:Obsolete and archaic terms]]}}
{{also|[[Appendix:Glossary#obsolete|Appendix:Glossary s.v. obsolete]]}}
ceerkq331n68wlgeiss5shj8gh6gus9
235263
235260
2026-06-01T12:07:25Z
Lee
19
Lee විසින් [[ප්රවර්ගය:English obsolete terms]] සිට [[ප්රවර්ගය:ඉංග්රීසි obsolete terms]] වෙත පිටුව ගෙන යන ලදී
235259
wikitext
text/x-wiki
{{auto cat}}
{{also|[[Wiktionary:Forms and spellings#Obsolete forms|Wiktionary:Forms and spellings § Obsolete forms]]}}
{{also|[[Wiktionary:Obsolete and archaic terms|Wiktionary:Obsolete and archaic terms]]}}
{{also|[[Appendix:Glossary#obsolete|Appendix:Glossary s.v. obsolete]]}}
ceerkq331n68wlgeiss5shj8gh6gus9
ප්රවර්ගය:English obsolete forms
14
144062
235262
2026-06-01T12:07:04Z
Lee
19
Lee විසින් [[ප්රවර්ගය:English obsolete forms]] සිට [[ප්රවර්ගය:ඉංග්රීසි obsolete forms]] වෙත පිටුව ගෙන යන ලදී
235262
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:ඉංග්රීසි obsolete forms]]
81k4p62nc7nqhoxtq0o74q9yr9x1jxk
235278
235262
2026-06-01T13:24:51Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235278
wikitext
text/x-wiki
{{category redirect|ඉංග්රීසි obsolete forms}}
esm6nqq4bw1mye3jsdsl606z5hk6l2p
ප්රවර්ගය:English obsolete terms
14
144063
235264
2026-06-01T12:07:26Z
Lee
19
Lee විසින් [[ප්රවර්ගය:English obsolete terms]] සිට [[ප්රවර්ගය:ඉංග්රීසි obsolete terms]] වෙත පිටුව ගෙන යන ලදී
235264
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:ඉංග්රීසි obsolete terms]]
q16138xvjmphvcgo9kzqh7hcemrxhna
235279
235264
2026-06-01T13:25:01Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235279
wikitext
text/x-wiki
{{category redirect|ඉංග්රීසි obsolete terms}}
dz0xm8gx6x82y3i3eg5md0yovwvjgra
ප්රවර්ගය:ඉංග්රීසි obsolete forms
14
144064
235270
2026-06-01T12:20:56Z
Lee
19
Lee විසින් [[ප්රවර්ගය:ඉංග්රීසි obsolete forms]] සිට [[ප්රවර්ගය:ඉංග්රීසි obsolete රූපාකාර]] වෙත පිටුව ගෙන යන ලදී
235270
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:ඉංග්රීසි obsolete රූපාකාර]]
ikzyldsk6mci4g6m7o38dxdvcs3e9gw
235280
235270
2026-06-01T13:25:11Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235280
wikitext
text/x-wiki
{{category redirect|ඉංග්රීසි obsolete රූපාකාර}}
0nvw5b468sn2wh4z32wsdh4eec6f25n
ප්රවර්ගය:ඉංග්රීසි archaic terms
14
144065
235271
2024-04-10T20:57:56Z
en>Quercus solaris
0
→
235271
wikitext
text/x-wiki
{{auto cat}}
{{also|[[Wiktionary:Obsolete and archaic terms|Wiktionary:Obsolete and archaic terms]]}}
{{also|[[Appendix:Glossary#archaic|Appendix:Glossary s.v. archaic]]}}
6ad4em183rzib782r1q6sgqqiz11iv5
235272
235271
2026-06-01T12:30:25Z
Lee
19
[[:en:Category:English_archaic_terms]] වෙතින් එක් සංශෝධනයක්
235271
wikitext
text/x-wiki
{{auto cat}}
{{also|[[Wiktionary:Obsolete and archaic terms|Wiktionary:Obsolete and archaic terms]]}}
{{also|[[Appendix:Glossary#archaic|Appendix:Glossary s.v. archaic]]}}
6ad4em183rzib782r1q6sgqqiz11iv5
235273
235272
2026-06-01T12:30:59Z
Lee
19
Lee විසින් [[ප්රවර්ගය:English archaic terms]] සිට [[ප්රවර්ගය:ඉංග්රීසි archaic terms]] වෙත පිටුව ගෙන යන ලදී
235271
wikitext
text/x-wiki
{{auto cat}}
{{also|[[Wiktionary:Obsolete and archaic terms|Wiktionary:Obsolete and archaic terms]]}}
{{also|[[Appendix:Glossary#archaic|Appendix:Glossary s.v. archaic]]}}
6ad4em183rzib782r1q6sgqqiz11iv5
ප්රවර්ගය:English archaic terms
14
144066
235274
2026-06-01T12:31:00Z
Lee
19
Lee විසින් [[ප්රවර්ගය:English archaic terms]] සිට [[ප්රවර්ගය:ඉංග්රීසි archaic terms]] වෙත පිටුව ගෙන යන ලදී
235274
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:ඉංග්රීසි archaic terms]]
1oo3dictctd8x5mjxbn47iry44u5k4l
235281
235274
2026-06-01T13:25:21Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235281
wikitext
text/x-wiki
{{category redirect|ඉංග්රීසි archaic terms}}
aor83kuwludhqiya7ouszm71oi5s3in
ප්රවර්ගය:ඉංග්රීසි පෞරාණික රූපාකාර
14
144067
235282
2022-06-15T20:58:27Z
en>Dpleibovitz
0
{{auto cat}}
235282
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235283
235282
2026-06-01T13:55:48Z
Lee
19
[[:en:Category:English_archaic_forms]] වෙතින් එක් සංශෝධනයක්
235282
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235284
235283
2026-06-01T13:56:41Z
Lee
19
Lee විසින් [[ප්රවර්ගය:English archaic forms]] සිට [[ප්රවර්ගය:ඉංග්රීසි archaic forms]] වෙත පිටුව ගෙන යන ලදී
235282
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235286
235284
2026-06-01T13:57:08Z
Lee
19
Lee විසින් [[ප්රවර්ගය:ඉංග්රීසි archaic forms]] සිට [[ප්රවර්ගය:ඉංග්රීසි archaic රූපාකාර]] වෙත පිටුව ගෙන යන ලදී
235282
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235288
235286
2026-06-01T13:58:14Z
Lee
19
Lee විසින් [[ප්රවර්ගය:ඉංග්රීසි archaic රූපාකාර]] සිට [[ප්රවර්ගය:ඉංග්රීසි පෞරාණික රූපාකාර]] වෙත පිටුව ගෙන යන ලදී
235282
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
ප්රවර්ගය:English archaic forms
14
144068
235285
2026-06-01T13:56:41Z
Lee
19
Lee විසින් [[ප්රවර්ගය:English archaic forms]] සිට [[ප්රවර්ගය:ඉංග්රීසි archaic forms]] වෙත පිටුව ගෙන යන ලදී
235285
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:ඉංග්රීසි archaic forms]]
5g8yq1sqvoxs998jerfdw7e1el855th
235359
235285
2026-06-01T15:17:52Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235359
wikitext
text/x-wiki
{{category redirect|ඉංග්රීසි archaic forms}}
a7adxfar2h7fpcpxyrz27jrnxtpul0f
ප්රවර්ගය:ඉංග්රීසි archaic forms
14
144069
235287
2026-06-01T13:57:09Z
Lee
19
Lee විසින් [[ප්රවර්ගය:ඉංග්රීසි archaic forms]] සිට [[ප්රවර්ගය:ඉංග්රීසි archaic රූපාකාර]] වෙත පිටුව ගෙන යන ලදී
235287
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:ඉංග්රීසි archaic රූපාකාර]]
h0tk4qsw812c6139czt72a4em6hgdhu
235360
235287
2026-06-01T15:18:02Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235360
wikitext
text/x-wiki
{{category redirect|ඉංග්රීසි archaic රූපාකාර}}
l6k0on41emxtiw2t2jpot3eyq61fdi8
ප්රවර්ගය:ඉංග්රීසි archaic රූපාකාර
14
144070
235289
2026-06-01T13:58:15Z
Lee
19
Lee විසින් [[ප්රවර්ගය:ඉංග්රීසි archaic රූපාකාර]] සිට [[ප්රවර්ගය:ඉංග්රීසි පෞරාණික රූපාකාර]] වෙත පිටුව ගෙන යන ලදී
235289
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:ඉංග්රීසි පෞරාණික රූපාකාර]]
hh7dc3avjx1a7vuj4mnj8lkyzactdzk
235361
235289
2026-06-01T15:18:12Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235361
wikitext
text/x-wiki
{{category redirect|ඉංග්රීසි පෞරාණික රූපාකාර}}
naxjz3om51nxe6pg1cbskra6g6srf79
ප්රවර්ගය:ඉංග්රීසි යෙදුම්, archaic අරුත් සහිත
14
144071
235291
2026-06-01T14:00:14Z
Lee
19
Lee විසින් [[ප්රවර්ගය:ඉංග්රීසි යෙදුම්, archaic අරුත් සහිත]] සිට [[ප්රවර්ගය:ඉංග්රීසි යෙදුම්, පෞරාණික අරුත් සහිත]] වෙත පිටුව ගෙන යන ලදී
235291
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:ඉංග්රීසි යෙදුම්, පෞරාණික අරුත් සහිත]]
iu36lzot8pcswk1h7mza9103lsltyi1
235362
235291
2026-06-01T15:18:22Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235362
wikitext
text/x-wiki
{{category redirect|ඉංග්රීසි යෙදුම්, පෞරාණික අරුත් සහිත}}
tds1vhxtbq039b1x0lfueuv1l2mw5y7
ප්රවර්ගය:ඉංග්රීසි යල් පැන ගිය රූපාකාර
14
144072
235292
2022-06-20T05:50:50Z
en>WingerBot
0
use {{auto cat}}, remove extraneous {{catfix}}/TOC templates (manually assisted)
235292
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235293
235292
2026-06-01T14:04:51Z
Lee
19
[[:en:Category:English_dated_forms]] වෙතින් එක් සංශෝධනයක්
235292
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235294
235293
2026-06-01T14:06:26Z
Lee
19
Lee විසින් [[ප්රවර්ගය:English dated forms]] සිට [[ප්රවර්ගය:ඉංග්රීසි dated forms]] වෙත පිටුව ගෙන යන ලදී
235292
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235296
235294
2026-06-01T14:06:43Z
Lee
19
Lee විසින් [[ප්රවර්ගය:ඉංග්රීසි dated forms]] සිට [[ප්රවර්ගය:ඉංග්රීසි dated රූපාකාර]] වෙත පිටුව ගෙන යන ලදී
235292
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235298
235296
2026-06-01T14:08:00Z
Lee
19
Lee විසින් [[ප්රවර්ගය:ඉංග්රීසි dated රූපාකාර]] සිට [[ප්රවර්ගය:ඉංග්රීසි යල් පැන ගිය රූපාකාර]] වෙත පිටුව ගෙන යන ලදී
235292
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
ප්රවර්ගය:English dated forms
14
144073
235295
2026-06-01T14:06:26Z
Lee
19
Lee විසින් [[ප්රවර්ගය:English dated forms]] සිට [[ප්රවර්ගය:ඉංග්රීසි dated forms]] වෙත පිටුව ගෙන යන ලදී
235295
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:ඉංග්රීසි dated forms]]
hbnezgmhhbtipy6fw0e56pzgm9cj8rl
235363
235295
2026-06-01T15:18:32Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235363
wikitext
text/x-wiki
{{category redirect|ඉංග්රීසි dated forms}}
d38obpq7cljfe8d5836f6nzcff7964v
ප්රවර්ගය:ඉංග්රීසි dated forms
14
144074
235297
2026-06-01T14:06:44Z
Lee
19
Lee විසින් [[ප්රවර්ගය:ඉංග්රීසි dated forms]] සිට [[ප්රවර්ගය:ඉංග්රීසි dated රූපාකාර]] වෙත පිටුව ගෙන යන ලදී
235297
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:ඉංග්රීසි dated රූපාකාර]]
m8cwjguuqsi6ycn23pzppg9jkcflbt9
235364
235297
2026-06-01T15:18:42Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235364
wikitext
text/x-wiki
{{category redirect|ඉංග්රීසි dated රූපාකාර}}
6mipao8bixrtgg3ilemnw5wuyz05bvz
ප්රවර්ගය:ඉංග්රීසි dated රූපාකාර
14
144075
235299
2026-06-01T14:08:00Z
Lee
19
Lee විසින් [[ප්රවර්ගය:ඉංග්රීසි dated රූපාකාර]] සිට [[ප්රවර්ගය:ඉංග්රීසි යල් පැන ගිය රූපාකාර]] වෙත පිටුව ගෙන යන ලදී
235299
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:ඉංග්රීසි යල් පැන ගිය රූපාකාර]]
pqe9i58ugi86u5frfxyph2kud80jbci
235365
235299
2026-06-01T15:18:52Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235365
wikitext
text/x-wiki
{{category redirect|ඉංග්රීසි යල් පැන ගිය රූපාකාර}}
fmf1bf96j9v8zbwsmupvtk12t924ywh
ප්රවර්ගය:භාෂාව අනුව යල් පැන ගිය රූපාකාර
14
144077
235300
2022-06-20T05:33:08Z
en>WingerBot
0
use {{auto cat}}, remove extraneous {{catfix}}/TOC templates (manually assisted)
235300
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235301
235300
2026-06-01T14:08:56Z
Lee
19
[[:en:Category:Dated_forms_by_language]] වෙතින් එක් සංශෝධනයක්
235300
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235302
235301
2026-06-01T14:09:40Z
Lee
19
Lee විසින් [[ප්රවර්ගය:Dated forms by language]] සිට [[ප්රවර්ගය:භාෂාව අනුව Dated forms]] වෙත පිටුව ගෙන යන ලදී
235300
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235304
235302
2026-06-01T14:10:00Z
Lee
19
Lee විසින් [[ප්රවර්ගය:භාෂාව අනුව Dated forms]] සිට [[ප්රවර්ගය:භාෂාව අනුව Dated රූපාකාර]] වෙත පිටුව ගෙන යන ලදී
235300
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235306
235304
2026-06-01T14:10:39Z
Lee
19
Lee විසින් [[ප්රවර්ගය:භාෂාව අනුව Dated රූපාකාර]] සිට [[ප්රවර්ගය:භාෂාව අනුව යල් පැන ගිය රූපාකාර]] වෙත පිටුව ගෙන යන ලදී
235300
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
ප්රවර්ගය:Dated forms by language
14
144078
235303
2026-06-01T14:09:40Z
Lee
19
Lee විසින් [[ප්රවර්ගය:Dated forms by language]] සිට [[ප්රවර්ගය:භාෂාව අනුව Dated forms]] වෙත පිටුව ගෙන යන ලදී
235303
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:භාෂාව අනුව Dated forms]]
ao1v9x9ebc8qh2966hrbht8f2dsl5gx
235366
235303
2026-06-01T15:19:02Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235366
wikitext
text/x-wiki
{{category redirect|භාෂාව අනුව Dated forms}}
1gl6k9lha659c5ik0rq0k8ujxljtob5
ප්රවර්ගය:භාෂාව අනුව Dated forms
14
144079
235305
2026-06-01T14:10:00Z
Lee
19
Lee විසින් [[ප්රවර්ගය:භාෂාව අනුව Dated forms]] සිට [[ප්රවර්ගය:භාෂාව අනුව Dated රූපාකාර]] වෙත පිටුව ගෙන යන ලදී
235305
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:භාෂාව අනුව Dated රූපාකාර]]
kwg84f87gs4kdrt81jv2p7m9qtzm4xz
235367
235305
2026-06-01T15:19:12Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235367
wikitext
text/x-wiki
{{category redirect|භාෂාව අනුව Dated රූපාකාර}}
1circ3yods2bp26o35ceifzonb766hj
ප්රවර්ගය:භාෂාව අනුව Dated රූපාකාර
14
144080
235307
2026-06-01T14:10:39Z
Lee
19
Lee විසින් [[ප්රවර්ගය:භාෂාව අනුව Dated රූපාකාර]] සිට [[ප්රවර්ගය:භාෂාව අනුව යල් පැන ගිය රූපාකාර]] වෙත පිටුව ගෙන යන ලදී
235307
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:භාෂාව අනුව යල් පැන ගිය රූපාකාර]]
t0hwwafoqoxh118cl4bhw1yvdg3kf3i
235368
235307
2026-06-01T15:19:22Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235368
wikitext
text/x-wiki
{{category redirect|භාෂාව අනුව යල් පැන ගිය රූපාකාර}}
fpgcsb801g8j5cmmmn6jcvxu0qv8n0q
ප්රවර්ගය:භාෂාව අනුව පෞරාණික රූපාකාර
14
144081
235308
2021-08-22T22:59:59Z
en>Dpleibovitz
0
{{auto cat}}
235308
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235309
235308
2026-06-01T14:11:14Z
Lee
19
[[:en:Category:Archaic_forms_by_language]] වෙතින් එක් සංශෝධනයක්
235308
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235310
235309
2026-06-01T14:11:50Z
Lee
19
Lee විසින් [[ප්රවර්ගය:Archaic forms by language]] සිට [[ප්රවර්ගය:භාෂාව අනුව Archaic forms]] වෙත පිටුව ගෙන යන ලදී
235308
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235312
235310
2026-06-01T14:12:09Z
Lee
19
Lee විසින් [[ප්රවර්ගය:භාෂාව අනුව Archaic forms]] සිට [[ප්රවර්ගය:භාෂාව අනුව Archaic රූපාකාර]] වෙත පිටුව ගෙන යන ලදී
235308
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235314
235312
2026-06-01T14:12:43Z
Lee
19
Lee විසින් [[ප්රවර්ගය:භාෂාව අනුව Archaic රූපාකාර]] සිට [[ප්රවර්ගය:භාෂාව අනුව පෞරාණික රූපාකාර]] වෙත පිටුව ගෙන යන ලදී
235308
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
ප්රවර්ගය:Archaic forms by language
14
144082
235311
2026-06-01T14:11:50Z
Lee
19
Lee විසින් [[ප්රවර්ගය:Archaic forms by language]] සිට [[ප්රවර්ගය:භාෂාව අනුව Archaic forms]] වෙත පිටුව ගෙන යන ලදී
235311
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:භාෂාව අනුව Archaic forms]]
16sgqib3xbbz0duxoap19ovuv7twj05
235369
235311
2026-06-01T15:19:32Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235369
wikitext
text/x-wiki
{{category redirect|භාෂාව අනුව Archaic forms}}
5xwyhgr3f5ajd19igk4fw886afhocy9
ප්රවර්ගය:භාෂාව අනුව Archaic forms
14
144083
235313
2026-06-01T14:12:09Z
Lee
19
Lee විසින් [[ප්රවර්ගය:භාෂාව අනුව Archaic forms]] සිට [[ප්රවර්ගය:භාෂාව අනුව Archaic රූපාකාර]] වෙත පිටුව ගෙන යන ලදී
235313
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:භාෂාව අනුව Archaic රූපාකාර]]
s0to1tonl9hq7dblqb9hynl4wbjjwu9
235370
235313
2026-06-01T15:19:42Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235370
wikitext
text/x-wiki
{{category redirect|භාෂාව අනුව Archaic රූපාකාර}}
cb9ccqbql8x6ykqz7oaai7p9b45nydg
ප්රවර්ගය:භාෂාව අනුව Archaic රූපාකාර
14
144084
235315
2026-06-01T14:12:44Z
Lee
19
Lee විසින් [[ප්රවර්ගය:භාෂාව අනුව Archaic රූපාකාර]] සිට [[ප්රවර්ගය:භාෂාව අනුව පෞරාණික රූපාකාර]] වෙත පිටුව ගෙන යන ලදී
235315
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:භාෂාව අනුව පෞරාණික රූපාකාර]]
f32vk8sjt9b32zprzutpw83ilxuk9u8
235371
235315
2026-06-01T15:19:52Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235371
wikitext
text/x-wiki
{{category redirect|භාෂාව අනුව පෞරාණික රූපාකාර}}
3322igf52xfk5yv4c13oizn20mv6ezx
ප්රවර්ගය:භාෂාව අනුව Obsolete terms
14
144085
235316
2022-06-20T05:23:16Z
en>WingerBot
0
use {{auto cat}}, remove extraneous {{catfix}}/TOC templates (manually assisted)
235316
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235317
235316
2026-06-01T14:13:30Z
Lee
19
[[:en:Category:Obsolete_terms_by_language]] වෙතින් එක් සංශෝධනයක්
235316
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235318
235317
2026-06-01T14:14:15Z
Lee
19
Lee විසින් [[ප්රවර්ගය:Obsolete terms by language]] සිට [[ප්රවර්ගය:භාෂාව අනුව Obsolete terms]] වෙත පිටුව ගෙන යන ලදී
235316
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
ප්රවර්ගය:Obsolete terms by language
14
144086
235319
2026-06-01T14:14:16Z
Lee
19
Lee විසින් [[ප්රවර්ගය:Obsolete terms by language]] සිට [[ප්රවර්ගය:භාෂාව අනුව Obsolete terms]] වෙත පිටුව ගෙන යන ලදී
235319
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:භාෂාව අනුව Obsolete terms]]
g54xvhjir5urpvymwmz2tw38m2jc1yj
235372
235319
2026-06-01T15:20:02Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235372
wikitext
text/x-wiki
{{category redirect|භාෂාව අනුව Obsolete terms}}
6lt7vbhts7uv2zv02avjn1kknaemhe8
ප්රවර්ගය:භාෂාව අනුව Archaic terms
14
144087
235320
2021-08-22T23:01:57Z
en>Dpleibovitz
0
{{auto cat}}
235320
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235321
235320
2026-06-01T14:17:33Z
Lee
19
[[:en:Category:Archaic_terms_by_language]] වෙතින් එක් සංශෝධනයක්
235320
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235322
235321
2026-06-01T14:18:12Z
Lee
19
Lee විසින් [[ප්රවර්ගය:Archaic terms by language]] සිට [[ප්රවර්ගය:භාෂාව අනුව Archaic terms]] වෙත පිටුව ගෙන යන ලදී
235320
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
ප්රවර්ගය:Archaic terms by language
14
144088
235323
2026-06-01T14:18:13Z
Lee
19
Lee විසින් [[ප්රවර්ගය:Archaic terms by language]] සිට [[ප්රවර්ගය:භාෂාව අනුව Archaic terms]] වෙත පිටුව ගෙන යන ලදී
235323
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:භාෂාව අනුව Archaic terms]]
6sxfkymbbgawxnaz1v0yeogq9yxxb11
235373
235323
2026-06-01T15:20:12Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235373
wikitext
text/x-wiki
{{category redirect|භාෂාව අනුව Archaic terms}}
18woledv14yrm1xu95rghal4bbfkzsr
ප්රවර්ගය:භාෂාව අනුව Dated terms
14
144089
235324
2022-06-20T05:22:59Z
en>WingerBot
0
use {{auto cat}}, remove extraneous {{catfix}}/TOC templates (manually assisted)
235324
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235325
235324
2026-06-01T14:18:46Z
Lee
19
[[:en:Category:Dated_terms_by_language]] වෙතින් එක් සංශෝධනයක්
235324
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235326
235325
2026-06-01T14:19:40Z
Lee
19
Lee විසින් [[ප්රවර්ගය:Dated terms by language]] සිට [[ප්රවර්ගය:භාෂාව අනුව Dated terms]] වෙත පිටුව ගෙන යන ලදී
235324
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
ප්රවර්ගය:Dated terms by language
14
144090
235327
2026-06-01T14:19:41Z
Lee
19
Lee විසින් [[ප්රවර්ගය:Dated terms by language]] සිට [[ප්රවර්ගය:භාෂාව අනුව Dated terms]] වෙත පිටුව ගෙන යන ලදී
235327
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:භාෂාව අනුව Dated terms]]
3o2oxaf1wefdarmk7e8nr73iunk97vp
235374
235327
2026-06-01T15:20:22Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235374
wikitext
text/x-wiki
{{category redirect|භාෂාව අනුව Dated terms}}
o515ze6vw99z5jzd4qnlpjgchrwxbgt
ප්රවර්ගය:භාෂාව අනුව Obsolete forms
14
144091
235329
2026-06-01T14:21:44Z
Lee
19
Lee විසින් [[ප්රවර්ගය:භාෂාව අනුව Obsolete forms]] සිට [[ප්රවර්ගය:භාෂාව අනුව Obsolete රූපාකාර]] වෙත පිටුව ගෙන යන ලදී
235329
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:භාෂාව අනුව Obsolete රූපාකාර]]
6azgya5orhdif0bn7y9h6pijk5pp4dp
235375
235329
2026-06-01T15:20:32Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235375
wikitext
text/x-wiki
{{category redirect|භාෂාව අනුව Obsolete රූපාකාර}}
bsborwhm2kw4e0wjfouputbp167bvef
ප්රවර්ගය:භාෂාව අනුව Obsolete රූපාකාර
14
144092
235332
2026-06-01T14:27:06Z
Lee
19
Lee විසින් [[ප්රවර්ගය:භාෂාව අනුව Obsolete රූපාකාර]] සිට [[ප්රවර්ගය:භාෂාව අනුව අභාවයට ගිය රූපාකාර]] වෙත පිටුව ගෙන යන ලදී
235332
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:භාෂාව අනුව අභාවයට ගිය රූපාකාර]]
2b5mzkq0lxau1xscn9pjpxk54dff092
235376
235332
2026-06-01T15:20:42Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235376
wikitext
text/x-wiki
{{category redirect|භාෂාව අනුව අභාවයට ගිය රූපාකාර}}
sy0de7800hnv3htdhw9lasy5zcb523m
ප්රවර්ගය:ඉංග්රීසි obsolete රූපාකාර
14
144093
235334
2026-06-01T14:27:51Z
Lee
19
Lee විසින් [[ප්රවර්ගය:ඉංග්රීසි obsolete රූපාකාර]] සිට [[ප්රවර්ගය:ඉංග්රීසි අභාවයට ගිය රූපාකාර]] වෙත පිටුව ගෙන යන ලදී
235334
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:ඉංග්රීසි අභාවයට ගිය රූපාකාර]]
qji9vrlij0h56aplmsoa5kswozobca6
235377
235334
2026-06-01T15:20:52Z
Pinthura
2424
රොබෝ: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම
235377
wikitext
text/x-wiki
{{category redirect|ඉංග්රීසි අභාවයට ගිය රූපාකාර}}
q8al66rvo17xnsscg3lokreya61lj0q
වික්ෂනරි:Requested entries (English)
4
144094
235336
2026-06-01T14:29:41Z
Lee
19
Lee විසින් [[වික්ෂනරි:Requested entries (English)]] සිට [[වික්ෂනරි:Requested entries (ඉංග්රීසි)]] වෙත පිටුව ගෙන යන ලදී
235336
wikitext
text/x-wiki
#යළියොමුව [[වික්ෂනරි:Requested entries (ඉංග්රීසි)]]
fzli65cqprjje2el55z5ywuzz7j4gz0
අභාවයට ගිය
0
144095
235338
2026-06-01T14:34:23Z
Lee
19
'== සිංහල == === නිරුක්තිය === {{rfe|si}} === නාම විශේෂණ පදය === {{si-adj}} # {{rfdef|si}} ==== පරිවර්තන ==== {{trans-top|පරිවර්තන}} * ඉංග්රීසි: {{t|en|obsolete}} {{trans-bottom}} <!-- === අමතර අවධානයට === * {{l|si|<<ආශ්රිත පවතින වෙනත් වචන>>}} -->' යොදමින් නව පිටුවක් තනන ලදි
235338
wikitext
text/x-wiki
== සිංහල ==
=== නිරුක්තිය ===
{{rfe|si}}
=== නාම විශේෂණ පදය ===
{{si-adj}}
# {{rfdef|si}}
==== පරිවර්තන ====
{{trans-top|පරිවර්තන}}
* ඉංග්රීසි: {{t|en|obsolete}}
{{trans-bottom}}
<!--
=== අමතර අවධානයට ===
* {{l|si|<<ආශ්රිත පවතින වෙනත් වචන>>}}
-->
0dqodztbi1c2qrii4bo31w6w26ifh0m
ප්රවර්ගය:Pages with 16 entries
14
144096
235342
2024-08-12T13:55:47Z
en>Theknightwho
0
Created page with "{{auto cat}}"
235342
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235343
235342
2026-06-01T14:44:56Z
Lee
19
[[:en:Category:Pages_with_16_entries]] වෙතින් එක් සංශෝධනයක්
235342
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
සැකිල්ල:bq
10
144097
235344
2026-06-01T14:48:58Z
Lee
19
https://en.wikipedia.org/w/index.php?title=Template:Blockquote&oldid=1317335651
235344
wikitext
text/x-wiki
<templatestyles src="Template:Blockquote/styles.css" /><!--
--><blockquote class="templatequote {{{class|}}}" {{#if:{{{style|}}}|style="{{{style}}}"}}>{{{text|{{{content|{{{quotetext|{{{quote|{{{1|<includeonly>{{error|Error: No text given for quotation (or equals sign used in the actual argument to an unnamed parameter)}}{{main other|[[Category:Pages incorrectly using the quote template]]}}</includeonly><noinclude>{{lorem ipsum}}</noinclude>}}}}}}}}}}}}}}}{{#if:{{{multiline|}}}|<nowiki /><!-- See talk page in 2025 for why this newline needs to be here -->
</blockquote>|</blockquote>}}{{#if:{{{sign|}}}{{{cite|}}}{{{author|}}}{{{by|}}}{{{personquoted|}}}{{{source|}}}{{{ts|}}}{{{title|}}}{{{publication|}}}{{{quotesource|}}}{{{char|}}}{{{character|}}}{{{2|}}}{{{3|}}}{{{4|}}}{{{5|}}}|
<div class="templatequotecite"><p style="display: inline; padding-left: 2.3em;">— {{#if:{{{char|{{{character|{{{5|}}}}}}}}}|{{{char|{{{character|{{{5|}}}}}}}}}, in }}{{Comma separated entries
| {{if empty|{{{sign|}}}|{{{cite|}}}|{{{author|}}}|{{{by|}}}|{{{personquoted|}}}|{{{2|}}}}}
| {{if empty|{{{title|}}}|{{{publication|}}}|{{{ts|}}}|{{{quotesource|}}}|{{{3|}}}}}
| {{if empty|{{{source|}}}|{{{4|}}}}}
}}</p></div>}}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using Blockquote template with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Blockquote]] with unknown parameter "_VALUE_"|ignoreblank=y| 1 | 2 | 3 | 4 | 5 | author | by | char | character | cite | class | content | multiline | personquoted | publication | quote | quotesource | quotetext | sign | source | style | text | title | ts }}<noinclude>
{{documentation}}<!--Add categories to the /doc subpage, not here! -->
</noinclude>
g7n7pv15tnzl05fx3i60b1fldxyxojx
235345
235344
2026-06-01T14:49:58Z
Lee
19
235345
wikitext
text/x-wiki
<templatestyles src="Template:bq/styles.css" /><!--
--><blockquote class="templatequote {{{class|}}}" {{#if:{{{style|}}}|style="{{{style}}}"}}>{{{text|{{{content|{{{quotetext|{{{quote|{{{1|<includeonly>{{error|Error: No text given for quotation (or equals sign used in the actual argument to an unnamed parameter)}}{{main other|[[Category:Pages incorrectly using the quote template]]}}</includeonly><noinclude>{{lorem ipsum}}</noinclude>}}}}}}}}}}}}}}}{{#if:{{{multiline|}}}|<nowiki /><!-- See talk page in 2025 for why this newline needs to be here -->
</blockquote>|</blockquote>}}{{#if:{{{sign|}}}{{{cite|}}}{{{author|}}}{{{by|}}}{{{personquoted|}}}{{{source|}}}{{{ts|}}}{{{title|}}}{{{publication|}}}{{{quotesource|}}}{{{char|}}}{{{character|}}}{{{2|}}}{{{3|}}}{{{4|}}}{{{5|}}}|
<div class="templatequotecite"><p style="display: inline; padding-left: 2.3em;">— {{#if:{{{char|{{{character|{{{5|}}}}}}}}}|{{{char|{{{character|{{{5|}}}}}}}}}, in }}{{Comma separated entries
| {{if empty|{{{sign|}}}|{{{cite|}}}|{{{author|}}}|{{{by|}}}|{{{personquoted|}}}|{{{2|}}}}}
| {{if empty|{{{title|}}}|{{{publication|}}}|{{{ts|}}}|{{{quotesource|}}}|{{{3|}}}}}
| {{if empty|{{{source|}}}|{{{4|}}}}}
}}</p></div>}}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using bq template with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:bq]] with unknown parameter "_VALUE_"|ignoreblank=y| 1 | 2 | 3 | 4 | 5 | author | by | char | character | cite | class | content | multiline | personquoted | publication | quote | quotesource | quotetext | sign | source | style | text | title | ts }}<noinclude>
{{documentation}}<!--Add categories to the /doc subpage, not here! -->
</noinclude>
eeualfpzuuedw7iuohewo9xfyw97v0o
235347
235345
2026-06-01T14:52:22Z
Lee
19
235347
wikitext
text/x-wiki
<templatestyles src="Template:bq/styles.css" /><!--
--><blockquote class="templatequote {{{class|}}}" {{#if:{{{style|}}}|style="{{{style}}}"}}>{{{text|{{{content|{{{quotetext|{{{quote|{{{1|<includeonly>{{error|Error: No text given for quotation (or equals sign used in the actual argument to an unnamed parameter)}}{{main other|[[Category:Pages incorrectly using the quote template]]}}</includeonly><noinclude>{{lorem ipsum}}</noinclude>}}}}}}}}}}}}}}}{{#if:{{{multiline|}}}|<nowiki /><!-- See talk page in 2025 for why this newline needs to be here -->
</blockquote>|</blockquote>}}{{#if:{{{sign|}}}{{{cite|}}}{{{author|}}}{{{by|}}}{{{personquoted|}}}{{{source|}}}{{{ts|}}}{{{title|}}}{{{publication|}}}{{{quotesource|}}}{{{char|}}}{{{character|}}}{{{2|}}}{{{3|}}}{{{4|}}}{{{5|}}}|
<div class="templatequotecite"><p style="display: inline; padding-left: 2.3em;">— {{#if:{{{char|{{{character|{{{5|}}}}}}}}}|{{{char|{{{character|{{{5|}}}}}}}}}, in }}{{Comma separated entries
| {{if empty|{{{sign|}}}|{{{cite|}}}|{{{author|}}}|{{{by|}}}|{{{personquoted|}}}|{{{2|}}}}}
| {{if empty|{{{title|}}}|{{{publication|}}}|{{{ts|}}}|{{{quotesource|}}}|{{{3|}}}}}
| {{if empty|{{{source|}}}|{{{4|}}}}}
}}</p></div>}}<!--
{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using bq template with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:bq]] with unknown parameter "_VALUE_"|ignoreblank=y| 1 | 2 | 3 | 4 | 5 | author | by | char | character | cite | class | content | multiline | personquoted | publication | quote | quotesource | quotetext | sign | source | style | text | title | ts }}--><noinclude>
{{documentation}}<!--Add categories to the /doc subpage, not here! -->
</noinclude>
jwgssuo9fdr9s2hk2g7zhqclfmjam5d
සැකිල්ල:bq/styles.css
10
144098
235346
2026-06-01T14:50:41Z
Lee
19
https://en.wikipedia.org/w/index.php?title=Template:Blockquote/styles.css&oldid=1244412712
235346
sanitized-css
text/css
/* {{pp-template}} */
.templatequote {
overflow: hidden;
margin: 1em 0;
padding: 0 32px;
}
.templatequotecite {
line-height: 1.5em;
/* @noflip */
text-align: left;
margin-top: 0;
}
@media (min-width: 500px) {
.templatequotecite {
/* @noflip */
padding-left: 1.6em;
}
}
975tzgnvhd5jyqf0ucyxd4w8q6i98j0
සැකිල්ල:bq/documentation
10
144099
235348
2026-06-01T14:55:35Z
Lee
19
නිර්මාණය
235348
wikitext
text/x-wiki
{{documentation subpage}}
{{Uses TemplateStyles|Template:{{BASEPAGENAME}}/styles.css}}
ඉංග්රීසි විකිපීඩියාවේ පවතින [[:en:Template:Blockquote]] සිට මෙහි ගෙනැවිත් ඇත. උපදෙස් සඳහා දැනට එහි යොමු වන්න.
<includeonly>
[[Category:Uncategorized templates]]<!-- replace this category with the category of your choice -->
</includeonly>
91znqxujxxta0368kp3d0y1vjvj8tj1
Module:lbe-translit
828
144100
235355
2024-04-05T03:51:59Z
en>Theknightwho
0
Use faster implementation of mw.ustring.char.
235355
Scribunto
text/plain
local u = require("Module:string/char")
local export = {}
local tt = {
["б"]="b", ["п"]="p", ["ф"]="f", ["в"]="w", ["м"]="m",
["д"]="d", ["т"]="t", ["й"]="y", ["н"]="n", ["з"]="z", ["ц"]="c",
["с"]="s", ["ж"]="ž", ["ш"]="š", ["щ"]="š:",
["л"]="l", ["ч"]="č", ["р"]="r", ["г"]="g", ["к"]="k", ["х"]="x",
["ъ"]="ʼ", ["а"]="a", ["е"]="e", ["и"]="i", ["о"]="o", ["у"]="u",
["э"]="e", ["ю"]="uˤ", ["я"]="aˤ",
["Б"]="B", ["П"]="P", ["Ф"]="F", ["В"]="W", ["М"]="M",
["Д"]="D", ["Т"]="T", ["Й"]="Y", ["Н"]="N", ["З"]="Z", ["Ц"]="C",
["С"]="S", ["Ж"]="Ž", ["Ш"]="Š", ["Щ"]="Š:",
["Л"]="L", ["Ч"]="Č", ["Р"]="R", ["Г"]="G", ["К"]="K", ["Х"]="X",
["Ъ"]="ʼ", ["А"]="A", ["Е"]="E", ["И"]="I", ["О"]="O", ["У"]="U",
["Э"]="E", ["Ю"]="Uˤ", ["Я"]="Aˤ"};
local tetragraphs = {
['хьхь'] = 'x̂:',
['Хьхь'] = 'X̂:',
}
local digraphs = {
['пп'] = 'p:',
['пӏ'] = 'pʼ',
['тт'] = 't:',
['аь'] = 'ä',
['оь'] = 'oˤ',
['Пп'] = 'P:',
['Пӏ'] = 'Pʼ',
['Тт'] = 'T:',
['Аь'] = 'Ä',
['Оь'] = 'Oˤ',
['цӏ'] = 'cʼ',
['цц'] = 'c:',
['тӏ'] = 'tʼ',
['сс'] = 's:',
['чч'] = 'č:',
['чӏ'] = 'čʼ',
['кь'] = 'qʼ',
['кк'] = 'k:',
['кӏ'] = 'kʼ',
['хь'] = 'x̂',
['хъ'] = 'q',
['къ'] = 'q:',
['гъ'] = 'ğ',
['хх'] = 'x:',
['хӏ'] = 'ħ',
['гь'] = 'h',
['Цӏ'] = 'Cʼ',
['Цц'] = 'C:',
['Тӏ'] = 'Tʼ',
['Сс'] = 'S:',
['Чч'] = 'Č:',
['Чӏ'] = 'Čʼ',
['Кь'] = 'Qʼ',
['Кк'] = 'K:',
['Кӏ'] = 'Kʼ',
['Хь'] = 'X̂',
['Хъ'] = 'Q',
['Къ'] = 'Q:',
['Гъ'] = 'Ğ',
['Хх'] = 'X:',
['Хӏ'] = 'Ħ',
['Гь'] = 'H',
}
function export.tr(text, lang, sc)
local str_gsub = string.gsub
local UTF8_char = '[%z\1-\127\194-\244][\128-\191]*'
-- Convert capital to lowercase palochka. Lowercase is found in tables
-- above.
text = str_gsub(text, u(0x4C0), u(0x4CF))
for tetragraph, replacement in pairs(tetragraphs) do
text = str_gsub(text, tetragraph, replacement)
end
for digraph, replacement in pairs(digraphs) do
text = str_gsub(text, digraph, replacement)
end
text = str_gsub(text, UTF8_char, tt)
return text
end
return export
44dq1eidgqaivytfgwxwcbtqf3dqwfv
235356
235355
2026-06-01T15:15:25Z
Lee
19
[[:en:Module:lbe-translit]] වෙතින් එක් සංශෝධනයක්
235355
Scribunto
text/plain
local u = require("Module:string/char")
local export = {}
local tt = {
["б"]="b", ["п"]="p", ["ф"]="f", ["в"]="w", ["м"]="m",
["д"]="d", ["т"]="t", ["й"]="y", ["н"]="n", ["з"]="z", ["ц"]="c",
["с"]="s", ["ж"]="ž", ["ш"]="š", ["щ"]="š:",
["л"]="l", ["ч"]="č", ["р"]="r", ["г"]="g", ["к"]="k", ["х"]="x",
["ъ"]="ʼ", ["а"]="a", ["е"]="e", ["и"]="i", ["о"]="o", ["у"]="u",
["э"]="e", ["ю"]="uˤ", ["я"]="aˤ",
["Б"]="B", ["П"]="P", ["Ф"]="F", ["В"]="W", ["М"]="M",
["Д"]="D", ["Т"]="T", ["Й"]="Y", ["Н"]="N", ["З"]="Z", ["Ц"]="C",
["С"]="S", ["Ж"]="Ž", ["Ш"]="Š", ["Щ"]="Š:",
["Л"]="L", ["Ч"]="Č", ["Р"]="R", ["Г"]="G", ["К"]="K", ["Х"]="X",
["Ъ"]="ʼ", ["А"]="A", ["Е"]="E", ["И"]="I", ["О"]="O", ["У"]="U",
["Э"]="E", ["Ю"]="Uˤ", ["Я"]="Aˤ"};
local tetragraphs = {
['хьхь'] = 'x̂:',
['Хьхь'] = 'X̂:',
}
local digraphs = {
['пп'] = 'p:',
['пӏ'] = 'pʼ',
['тт'] = 't:',
['аь'] = 'ä',
['оь'] = 'oˤ',
['Пп'] = 'P:',
['Пӏ'] = 'Pʼ',
['Тт'] = 'T:',
['Аь'] = 'Ä',
['Оь'] = 'Oˤ',
['цӏ'] = 'cʼ',
['цц'] = 'c:',
['тӏ'] = 'tʼ',
['сс'] = 's:',
['чч'] = 'č:',
['чӏ'] = 'čʼ',
['кь'] = 'qʼ',
['кк'] = 'k:',
['кӏ'] = 'kʼ',
['хь'] = 'x̂',
['хъ'] = 'q',
['къ'] = 'q:',
['гъ'] = 'ğ',
['хх'] = 'x:',
['хӏ'] = 'ħ',
['гь'] = 'h',
['Цӏ'] = 'Cʼ',
['Цц'] = 'C:',
['Тӏ'] = 'Tʼ',
['Сс'] = 'S:',
['Чч'] = 'Č:',
['Чӏ'] = 'Čʼ',
['Кь'] = 'Qʼ',
['Кк'] = 'K:',
['Кӏ'] = 'Kʼ',
['Хь'] = 'X̂',
['Хъ'] = 'Q',
['Къ'] = 'Q:',
['Гъ'] = 'Ğ',
['Хх'] = 'X:',
['Хӏ'] = 'Ħ',
['Гь'] = 'H',
}
function export.tr(text, lang, sc)
local str_gsub = string.gsub
local UTF8_char = '[%z\1-\127\194-\244][\128-\191]*'
-- Convert capital to lowercase palochka. Lowercase is found in tables
-- above.
text = str_gsub(text, u(0x4C0), u(0x4CF))
for tetragraph, replacement in pairs(tetragraphs) do
text = str_gsub(text, tetragraph, replacement)
end
for digraph, replacement in pairs(digraphs) do
text = str_gsub(text, digraph, replacement)
end
text = str_gsub(text, UTF8_char, tt)
return text
end
return export
44dq1eidgqaivytfgwxwcbtqf3dqwfv
Module:lbe-translit/documentation
828
144101
235357
2014-07-08T20:39:11Z
en>Rua
0
235357
wikitext
text/x-wiki
{{translit module documentation|lbe}}
e0728qqjorum0a7rr8zbwuunyuvs1j9
235358
235357
2026-06-01T15:15:52Z
Lee
19
[[:en:Module:lbe-translit/documentation]] වෙතින් එක් සංශෝධනයක්
235357
wikitext
text/x-wiki
{{translit module documentation|lbe}}
e0728qqjorum0a7rr8zbwuunyuvs1j9
ප්රවර්ගය:ඉංග්රීසි යෙදුම්, Ā භාවිතා කොට ලියන ලද
14
144102
235383
2026-06-02T04:06:24Z
Pinthura
2424
සේවා: [[:[[en:Category:English terms spelled with Ā]]]] තුළ තිබූ පෙළ මෙහි ඇතුළු කිරීම.
235383
wikitext
text/x-wiki
{{auto cat|context=rare}}
mt1l0ylyh0up319ergs1praiqauolwy
235384
235383
2026-06-02T04:06:34Z
Pinthura
2424
Pinthura විසින් [[ප්රවර්ගය:English terms spelled with Ā]] සිට [[ප්රවර්ගය:ඉංග්රීසි යෙදුම්, Ā භාවිතා කොට ලියන ලද]] වෙත පිටුව ගෙන යන ලදී: සේවා: නව ප්රවර්ග නාමය වෙත ගෙනයාම.
235383
wikitext
text/x-wiki
{{auto cat|context=rare}}
mt1l0ylyh0up319ergs1praiqauolwy
235391
235384
2026-06-02T04:22:01Z
Pinthura
2424
සේවා: ඉංග්රීසි ව්යාපෘතිය වෙත සබැඳියක් එක් කිරීම.
235391
wikitext
text/x-wiki
{{auto cat|context=rare}}
[[en:Category:English terms spelled with Ā]]
18tw27f2ts6s05h35cprairshhqd4qk
ප්රවර්ගය:English terms spelled with Ā
14
144103
235385
2026-06-02T04:06:35Z
Pinthura
2424
Pinthura විසින් [[ප්රවර්ගය:English terms spelled with Ā]] සිට [[ප්රවර්ගය:ඉංග්රීසි යෙදුම්, Ā භාවිතා කොට ලියන ලද]] වෙත පිටුව ගෙන යන ලදී: සේවා: නව ප්රවර්ග නාමය වෙත ගෙනයාම.
235385
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:ඉංග්රීසි යෙදුම්, Ā භාවිතා කොට ලියන ලද]]
651d48owfetd6st06lk4qhzagsxjnqy
ප්රවර්ගය:ඉංග්රීසි යෙදුම්, ◌̄ භාවිතා කොට ලියන ලද
14
144104
235386
2023-05-12T15:43:45Z
en>Theknightwho
0
Created page with "{{auto cat}}"
235386
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235387
235386
2026-06-02T04:21:21Z
Lee
19
[[:en:Category:English_terms_spelled_with_◌̄]] වෙතින් එක් සංශෝධනයක්
235386
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235388
235387
2026-06-02T04:21:41Z
Pinthura
2424
Pinthura විසින් [[ප්රවර්ගය:English terms spelled with ◌̄]] සිට [[ප්රවර්ගය:ඉංග්රීසි යෙදුම්, ◌̄ භාවිතා කොට ලියන ලද]] වෙත පිටුව ගෙන යන ලදී: සේවා: නව ප්රවර්ග නාමය වෙත ගෙනයාම.
235386
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235390
235388
2026-06-02T04:21:51Z
Pinthura
2424
සේවා: ඉංග්රීසි ව්යාපෘතිය වෙත සබැඳියක් එක් කිරීම.
235390
wikitext
text/x-wiki
{{auto cat}}
[[en:Category:English terms spelled with ◌̄]]
odecssc18lihwkdiz1dyzqfkftijsy5
ප්රවර්ගය:English terms spelled with ◌̄
14
144105
235389
2026-06-02T04:21:42Z
Pinthura
2424
Pinthura විසින් [[ප්රවර්ගය:English terms spelled with ◌̄]] සිට [[ප්රවර්ගය:ඉංග්රීසි යෙදුම්, ◌̄ භාවිතා කොට ලියන ලද]] වෙත පිටුව ගෙන යන ලදී: සේවා: නව ප්රවර්ග නාමය වෙත ගෙනයාම.
235389
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:ඉංග්රීසි යෙදුම්, ◌̄ භාවිතා කොට ලියන ලද]]
oo9un6qh3jldnetqbk6d9cm1kkippe7
235392
235389
2026-06-02T04:22:11Z
Pinthura
2424
සේවා: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම.
235392
wikitext
text/x-wiki
{{category redirect|ඉංග්රීසි යෙදුම්, ◌̄ භාවිතා කොට ලියන ලද}}
re15jf3hd169o7n5jlxgc2mf2m8njch
ප්රවර්ගය:English යෙදුම්, ◌̄ භාවිතා කොට ලියන ලද
14
144106
235393
2026-06-02T04:22:21Z
Pinthura
2424
සේවා: මෘදු ප්රවර්ග යළියොමුවක් නිර්මාණය.
235393
wikitext
text/x-wiki
{{category redirect|ඉංග්රීසි යෙදුම්, ◌̄ භාවිතා කොට ලියන ලද}}
re15jf3hd169o7n5jlxgc2mf2m8njch
ප්රවර්ගය:English යෙදුම්, Ā භාවිතා කොට ලියන ලද
14
144107
235394
2026-06-02T04:22:31Z
Pinthura
2424
සේවා: මෘදු ප්රවර්ග යළියොමුවක් නිර්මාණය.
235394
wikitext
text/x-wiki
{{category redirect|ඉංග්රීසි යෙදුම්, Ā භාවිතා කොට ලියන ලද}}
o5vd6tkdce73xf7xnfiukvrgoayup2j
ප්රවර්ගය:ඉංග්රීසි terms spelled with ◌̄
14
144108
235395
2026-06-02T04:22:41Z
Pinthura
2424
සේවා: මෘදු ප්රවර්ග යළියොමුවක් නිර්මාණය.
235395
wikitext
text/x-wiki
{{category redirect|ඉංග්රීසි යෙදුම්, ◌̄ භාවිතා කොට ලියන ලද}}
re15jf3hd169o7n5jlxgc2mf2m8njch
ප්රවර්ගය:ඉංග්රීසි terms spelled with Ā
14
144109
235396
2026-06-02T04:22:51Z
Pinthura
2424
සේවා: මෘදු ප්රවර්ග යළියොමුවක් නිර්මාණය.
235396
wikitext
text/x-wiki
{{category redirect|ඉංග්රීසි යෙදුම්, Ā භාවිතා කොට ලියන ලද}}
o5vd6tkdce73xf7xnfiukvrgoayup2j
Module:Glag-translit
828
144110
235402
2024-10-06T09:45:33Z
en>AshFox
0
235402
Scribunto
text/plain
local export = {}
local U = mw.ustring.char
local letters = {
["common"] = {
["Ⰰ"] = 'A',
["ⰰ"] = 'a',
["Ⱝ"] = 'A',
["ⱝ"] = 'a',
["Ⰱ"] = 'B',
["ⰱ"] = 'b',
["Ⰲ"] = 'V',
["ⰲ"] = 'v',
["Ⰳ"] = 'G',
["ⰳ"] = 'g',
["Ⰴ"] = 'D',
["ⰴ"] = 'd',
["Ⰵ"] = 'E',
["ⰵ"] = 'e',
["Ⰶ"] = 'Ž',
["ⰶ"] = 'ž',
["Ⰷ"] = 'Dz',
["ⰷ"] = 'dz',
["Ⰸ"] = 'Z',
["ⰸ"] = 'z',
["Ⰹ"] = 'I',
["ⰹ"] = 'i',
["Ⰺ"] = 'I',
["ⰺ"] = 'i',
["Ⰻ"] = 'I',
["ⰻ"] = 'i',
["Ⰼ"] = 'Đ',
["ⰼ"] = 'đ',
["Ⰽ"] = 'K',
["ⰽ"] = 'k',
["Ⰾ"] = 'L',
["ⰾ"] = 'l',
["Ⰿ"] = 'M',
["ⰿ"] = 'm',
["Ⱞ"] = 'M',
["ⱞ"] = 'm',
["Ⱀ"] = 'N',
["ⱀ"] = 'n',
["Ⱁ"] = 'O',
["ⱁ"] = 'o',
["Ⱉ"] = 'O',
["ⱉ"] = 'o',
["Ⱂ"] = 'P',
["ⱂ"] = 'p',
["Ⱃ"] = 'R',
["ⱃ"] = 'r',
["Ⱄ"] = 'S',
["ⱄ"] = 's',
["Ⱅ"] = 'T',
["ⱅ"] = 't',
["Ⱆ"] = 'U',
["ⱆ"] = 'u',
["Ⱇ"] = 'F',
["ⱇ"] = 'f',
["Ⱈ"] = 'X',
["ⱈ"] = 'x',
["Ⱒ"] = 'X',
["ⱒ"] = 'x',
["Ⱌ"] = 'C',
["ⱌ"] = 'c',
["Ⱍ"] = 'Č',
["ⱍ"] = 'č',
["Ⱎ"] = 'Š',
["ⱎ"] = 'š',
["Ⱏ"] = 'Ŭ',
["ⱏ"] = 'ŭ',
["Ⱐ"] = 'Ĭ',
["ⱐ"] = 'ĭ',
["Ⱜ"] = 'Ĭ',
["ⱜ"] = 'ĭ',
["Ⱑ"] = 'Ě',
["ⱑ"] = 'ě',
["Ⱓ"] = 'Ju',
["ⱓ"] = 'ju',
["Ⱔ"] = 'Ę',
["ⱔ"] = 'ę',
["Ⱕ"] = 'Y̨',
["ⱕ"] = 'y̨',
["Ⱗ"] = 'Ję',
["ⱗ"] = 'ję',
["Ⱘ"] = 'Ǫ',
["ⱘ"] = 'ǫ',
["Ⱖ"] = 'Ǫ',
["ⱖ"] = 'ǫ',
["Ⱙ"] = 'Jǫ',
["ⱙ"] = 'jǫ',
["Ⱚ"] = 'Θ',
["ⱚ"] = 'θ',
["Ⱛ"] = 'Ü',
["ⱛ"] = 'ü',
["Ⱋ"] = 'Št',
["ⱋ"] = 'št'
},
["zle-ono"] = {
["Ⱌ"] = 'Ć',
["ⱌ"] = 'ć',
["Ⱍ"] = 'Ć',
["ⱍ"] = 'ć',
["Ⱋ"] = 'Ść',
["ⱋ"] = 'ść'
}
}
local digraphs = {
["common"] = {
["Ⱏ[ⰉⰊⰋⰹⰺⰻ]"] = "Y", ["ⱏ[ⰹⰺⰻ]"] = "y",
},
["zle-ono"] = {
["ⱏ[ⰹⰺⰻ]"] = 'ŷi',
}
}
function export.tr(text, lang, sc)
if not sc then
sc = require("Module:languages").getByCode(lang):findBestScript(text):getCode()
end
local function digraph_subst(digraphs)
for key, repl in pairs(digraphs) do
text = mw.ustring.gsub(text, key, repl)
end
end
if sc ~= "Glag" then
text = nil
else
-- Transliterate the kamora as prime
text = mw.ustring.gsub(text, U(0x0484), "ʹ")
if digraphs[lang] then
digraph_subst(digraphs[lang])
end
digraph_subst(digraphs["common"])
if letters[lang] then
text = mw.ustring.gsub(text, '.', letters[lang])
end
text = mw.ustring.gsub(text, '.', letters["common"])
-- Transliterate the titlo and vzmet as colon.
text = mw.ustring.gsub(text, "[" .. U(0x0483) .. U(0xA66F) .. "]", ":")
end
return text
end
return export
1x7ffbwugu4d88axvwlk1lcu9394755
235403
235402
2026-06-02T04:40:45Z
Lee
19
[[:en:Module:Glag-translit]] වෙතින් එක් සංශෝධනයක්
235402
Scribunto
text/plain
local export = {}
local U = mw.ustring.char
local letters = {
["common"] = {
["Ⰰ"] = 'A',
["ⰰ"] = 'a',
["Ⱝ"] = 'A',
["ⱝ"] = 'a',
["Ⰱ"] = 'B',
["ⰱ"] = 'b',
["Ⰲ"] = 'V',
["ⰲ"] = 'v',
["Ⰳ"] = 'G',
["ⰳ"] = 'g',
["Ⰴ"] = 'D',
["ⰴ"] = 'd',
["Ⰵ"] = 'E',
["ⰵ"] = 'e',
["Ⰶ"] = 'Ž',
["ⰶ"] = 'ž',
["Ⰷ"] = 'Dz',
["ⰷ"] = 'dz',
["Ⰸ"] = 'Z',
["ⰸ"] = 'z',
["Ⰹ"] = 'I',
["ⰹ"] = 'i',
["Ⰺ"] = 'I',
["ⰺ"] = 'i',
["Ⰻ"] = 'I',
["ⰻ"] = 'i',
["Ⰼ"] = 'Đ',
["ⰼ"] = 'đ',
["Ⰽ"] = 'K',
["ⰽ"] = 'k',
["Ⰾ"] = 'L',
["ⰾ"] = 'l',
["Ⰿ"] = 'M',
["ⰿ"] = 'm',
["Ⱞ"] = 'M',
["ⱞ"] = 'm',
["Ⱀ"] = 'N',
["ⱀ"] = 'n',
["Ⱁ"] = 'O',
["ⱁ"] = 'o',
["Ⱉ"] = 'O',
["ⱉ"] = 'o',
["Ⱂ"] = 'P',
["ⱂ"] = 'p',
["Ⱃ"] = 'R',
["ⱃ"] = 'r',
["Ⱄ"] = 'S',
["ⱄ"] = 's',
["Ⱅ"] = 'T',
["ⱅ"] = 't',
["Ⱆ"] = 'U',
["ⱆ"] = 'u',
["Ⱇ"] = 'F',
["ⱇ"] = 'f',
["Ⱈ"] = 'X',
["ⱈ"] = 'x',
["Ⱒ"] = 'X',
["ⱒ"] = 'x',
["Ⱌ"] = 'C',
["ⱌ"] = 'c',
["Ⱍ"] = 'Č',
["ⱍ"] = 'č',
["Ⱎ"] = 'Š',
["ⱎ"] = 'š',
["Ⱏ"] = 'Ŭ',
["ⱏ"] = 'ŭ',
["Ⱐ"] = 'Ĭ',
["ⱐ"] = 'ĭ',
["Ⱜ"] = 'Ĭ',
["ⱜ"] = 'ĭ',
["Ⱑ"] = 'Ě',
["ⱑ"] = 'ě',
["Ⱓ"] = 'Ju',
["ⱓ"] = 'ju',
["Ⱔ"] = 'Ę',
["ⱔ"] = 'ę',
["Ⱕ"] = 'Y̨',
["ⱕ"] = 'y̨',
["Ⱗ"] = 'Ję',
["ⱗ"] = 'ję',
["Ⱘ"] = 'Ǫ',
["ⱘ"] = 'ǫ',
["Ⱖ"] = 'Ǫ',
["ⱖ"] = 'ǫ',
["Ⱙ"] = 'Jǫ',
["ⱙ"] = 'jǫ',
["Ⱚ"] = 'Θ',
["ⱚ"] = 'θ',
["Ⱛ"] = 'Ü',
["ⱛ"] = 'ü',
["Ⱋ"] = 'Št',
["ⱋ"] = 'št'
},
["zle-ono"] = {
["Ⱌ"] = 'Ć',
["ⱌ"] = 'ć',
["Ⱍ"] = 'Ć',
["ⱍ"] = 'ć',
["Ⱋ"] = 'Ść',
["ⱋ"] = 'ść'
}
}
local digraphs = {
["common"] = {
["Ⱏ[ⰉⰊⰋⰹⰺⰻ]"] = "Y", ["ⱏ[ⰹⰺⰻ]"] = "y",
},
["zle-ono"] = {
["ⱏ[ⰹⰺⰻ]"] = 'ŷi',
}
}
function export.tr(text, lang, sc)
if not sc then
sc = require("Module:languages").getByCode(lang):findBestScript(text):getCode()
end
local function digraph_subst(digraphs)
for key, repl in pairs(digraphs) do
text = mw.ustring.gsub(text, key, repl)
end
end
if sc ~= "Glag" then
text = nil
else
-- Transliterate the kamora as prime
text = mw.ustring.gsub(text, U(0x0484), "ʹ")
if digraphs[lang] then
digraph_subst(digraphs[lang])
end
digraph_subst(digraphs["common"])
if letters[lang] then
text = mw.ustring.gsub(text, '.', letters[lang])
end
text = mw.ustring.gsub(text, '.', letters["common"])
-- Transliterate the titlo and vzmet as colon.
text = mw.ustring.gsub(text, "[" .. U(0x0483) .. U(0xA66F) .. "]", ":")
end
return text
end
return export
1x7ffbwugu4d88axvwlk1lcu9394755
Module:Glag-translit/documentation
828
144111
235404
2023-07-28T23:05:21Z
en>Fenakhay
0
Created page with "{{translit module documentation}}"
235404
wikitext
text/x-wiki
{{translit module documentation}}
8zdhvu7d00lrp6fban8tkoywlys7oi0
235405
235404
2026-06-02T04:41:05Z
Lee
19
[[:en:Module:Glag-translit/documentation]] වෙතින් එක් සංශෝධනයක්
235404
wikitext
text/x-wiki
{{translit module documentation}}
8zdhvu7d00lrp6fban8tkoywlys7oi0
Module:rut-translit
828
144112
235412
2025-01-20T07:00:08Z
en>Vahagn Petrosyan
0
Greek chi > Roman chi, because capital Greek chi looks the same as capital Roman x
235412
Scribunto
text/plain
local gsub = mw.ustring.gsub
local u = require("Module:string utilities").char
local export = {}
local tt = {
["б"]="b", ["п"]="p", ["ф"]="f", ["д"]="d", ["т"]="t", ["ц"]="c",
["з"]="z", ["с"]="s", ["ч"]="č", ["ж"]="ž", ["ш"]="š", ["г"]="g",
["к"]="k", ["х"]="ꭓ", ["ъ"]="ʔ", ["м"]="m", ["н"]="n", ["р"]="r",
["л"]="l", ["в"]="v", ["й"]="j", ["ю"]="ju", ["я"]="ja", ["ё"]="jo",
["и"]="i", ["е"]="je", ["э"]="e", ["а"]="a", ["ы"]="ɨ", ["о"]="o", ["у"]="u",
["Б"]="B", ["П"]="P", ["Ф"]="F", ["Д"]="D", ["Т"]="T", ["Ц"]="C",
["З"]="Z", ["С"]="S", ["Ч"]="Č", ["Ж"]="Ž", ["Ш"]="Š", ["Г"]="G",
["К"]="K", ["Х"]="Ꭓ", ["Ъ"]="ʔ", ["М"]="M", ["Н"]="N", ["Р"]="R",
["Л"]="L", ["В"]="V", ["Й"]="J", ["Ю"]="Ju", ["Я"]="Ja", ["Ё"]="Jo",
["И"]="I", ["Е"]="Je", ["Э"]="E", ["А"]="A", ["Ы"]="Ɨ", ["О"]="O", ["U"]="U",
}
local roundings = {
'([тцчкТЦЧК]ӏ)в',
'([кхгКХГ]ъ)в',
'([цсшчгкхЦСШЧГКХ])в',
'([дД]ж)в', '([хХ]ь)в',
}
local digraphs = {
['пӏ'] = 'ṗ', ['Пӏ'] = 'Ṗ',
['тӏ'] = 'ṭ', ['Тӏ'] = 'Ṭ',
['дз'] = 'ʒ', ['Дз'] = 'Ʒ',
['цӏ'] = 'c̣', ['Цӏ'] = 'C̣',
['дж'] = 'ǯ', ['Дж'] = 'Ǯ',
['чӏ'] = 'č̣', ['Чӏ'] = 'Č̣',
['кӏ'] = 'ḳ', ['Кӏ'] = 'Ḳ',
['гӏ'] = 'ɣ', ['Гӏ'] = 'Ɣ',
['хь'] = 'x', ['Хь'] = 'X',
['хӏ'] = 'ħ', ['Хӏ'] = 'Ħ',
['къ'] = 'q:', ['Къ'] = 'Q:',
['хъ'] = 'q', ['Хъ'] = 'Q',
['кь'] = 'q̇', ['Кь'] = 'Q̇',
['гъ'] = 'ʁ', ['Гъ'] = 'ʁ',
['гь'] = 'h', ['Гь'] = 'H',
['аь'] = 'ä', ['Аь'] = 'Ä',
['уь'] = 'ü', ['Уь'] = 'Ü',
['([ауыАУЫ])ӏ'] = '%1ˤ',
}
function export.tr(text, lang, sc)
if sc ~= "Cyrl" then
return nil
end
-- Convert capital to lowercase palochka. Lowercase is found in tables
-- above.
text = gsub(text, u(0x4C0), u(0x4CF))
-- Non-initial е is not je.
text = gsub(text, "([Ё-ӏ])е", "%1e")
for _, rounding in ipairs(roundings) do
text = gsub(text, rounding, "%1ʷ")
end
for digraph, translit in pairs(digraphs) do
text = gsub(text, digraph, translit)
end
text = gsub(text, "[Ё-ӏ]", tt)
return text
end
return export
5p650u7pxvsg7ms0wy7p63ty5btpmao
235413
235412
2026-06-02T04:47:19Z
Lee
19
[[:en:Module:rut-translit]] වෙතින් එක් සංශෝධනයක්
235412
Scribunto
text/plain
local gsub = mw.ustring.gsub
local u = require("Module:string utilities").char
local export = {}
local tt = {
["б"]="b", ["п"]="p", ["ф"]="f", ["д"]="d", ["т"]="t", ["ц"]="c",
["з"]="z", ["с"]="s", ["ч"]="č", ["ж"]="ž", ["ш"]="š", ["г"]="g",
["к"]="k", ["х"]="ꭓ", ["ъ"]="ʔ", ["м"]="m", ["н"]="n", ["р"]="r",
["л"]="l", ["в"]="v", ["й"]="j", ["ю"]="ju", ["я"]="ja", ["ё"]="jo",
["и"]="i", ["е"]="je", ["э"]="e", ["а"]="a", ["ы"]="ɨ", ["о"]="o", ["у"]="u",
["Б"]="B", ["П"]="P", ["Ф"]="F", ["Д"]="D", ["Т"]="T", ["Ц"]="C",
["З"]="Z", ["С"]="S", ["Ч"]="Č", ["Ж"]="Ž", ["Ш"]="Š", ["Г"]="G",
["К"]="K", ["Х"]="Ꭓ", ["Ъ"]="ʔ", ["М"]="M", ["Н"]="N", ["Р"]="R",
["Л"]="L", ["В"]="V", ["Й"]="J", ["Ю"]="Ju", ["Я"]="Ja", ["Ё"]="Jo",
["И"]="I", ["Е"]="Je", ["Э"]="E", ["А"]="A", ["Ы"]="Ɨ", ["О"]="O", ["U"]="U",
}
local roundings = {
'([тцчкТЦЧК]ӏ)в',
'([кхгКХГ]ъ)в',
'([цсшчгкхЦСШЧГКХ])в',
'([дД]ж)в', '([хХ]ь)в',
}
local digraphs = {
['пӏ'] = 'ṗ', ['Пӏ'] = 'Ṗ',
['тӏ'] = 'ṭ', ['Тӏ'] = 'Ṭ',
['дз'] = 'ʒ', ['Дз'] = 'Ʒ',
['цӏ'] = 'c̣', ['Цӏ'] = 'C̣',
['дж'] = 'ǯ', ['Дж'] = 'Ǯ',
['чӏ'] = 'č̣', ['Чӏ'] = 'Č̣',
['кӏ'] = 'ḳ', ['Кӏ'] = 'Ḳ',
['гӏ'] = 'ɣ', ['Гӏ'] = 'Ɣ',
['хь'] = 'x', ['Хь'] = 'X',
['хӏ'] = 'ħ', ['Хӏ'] = 'Ħ',
['къ'] = 'q:', ['Къ'] = 'Q:',
['хъ'] = 'q', ['Хъ'] = 'Q',
['кь'] = 'q̇', ['Кь'] = 'Q̇',
['гъ'] = 'ʁ', ['Гъ'] = 'ʁ',
['гь'] = 'h', ['Гь'] = 'H',
['аь'] = 'ä', ['Аь'] = 'Ä',
['уь'] = 'ü', ['Уь'] = 'Ü',
['([ауыАУЫ])ӏ'] = '%1ˤ',
}
function export.tr(text, lang, sc)
if sc ~= "Cyrl" then
return nil
end
-- Convert capital to lowercase palochka. Lowercase is found in tables
-- above.
text = gsub(text, u(0x4C0), u(0x4CF))
-- Non-initial е is not je.
text = gsub(text, "([Ё-ӏ])е", "%1e")
for _, rounding in ipairs(roundings) do
text = gsub(text, rounding, "%1ʷ")
end
for digraph, translit in pairs(digraphs) do
text = gsub(text, digraph, translit)
end
text = gsub(text, "[Ё-ӏ]", tt)
return text
end
return export
5p650u7pxvsg7ms0wy7p63ty5btpmao
Module:etymon/descendants
828
144113
235425
2026-04-12T19:01:52Z
en>Surjection
0
Protected "[[Module:etymon/descendants]]": Highly visible template/module ([Edit=Allow only autopatrollers] (indefinite) [Move=Allow only autopatrollers] (indefinite))
235425
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
235426
235425
2026-06-02T04:53:52Z
Lee
19
[[:en:Module:etymon/descendants]] වෙතින් එක් සංශෝධනයක්
235425
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
Module:uk-adjective
828
144114
235432
2025-07-01T09:49:15Z
en>Theknightwho
0
Show vocative, but treat it as identical to the nominative (except for surnames, where appropriate).
235432
Scribunto
text/plain
local export = {}
--[=[
Authorship: Ben Wing <benwing2>
]=]
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of case/gender/number.
Example slot names for adjectives are "gen_f" (genitive feminine singular) and
"loc_p" (locative plural). Each slot is filled with zero or more forms.
-- "form" = The declined Ukrainian form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Ukrainian term. Generally the nominative
masculine singular, but may occasionally be another form if the nominative
masculine singular is missing.
]=]
local lang = require("Module:languages").getByCode("uk")
local m_links = require("Module:links")
local m_table = require("Module:table")
local m_string_utilities = require("Module:string utilities")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local m_para = require("Module:parameters")
local com = require("Module:uk-common")
local u = mw.ustring.char
local rsplit = mw.text.split
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local AC = u(0x0301) -- acute = ́
-- All slots that are used by any of the different tables. The key is the slot and the value is a list of the
-- tables that use the slot. "" = regular, "surname" = 'surname' indicator, "plonly" = special=plonly in
-- {{uk-adecl-manual}}, "dva" = special=dva in {{uk-adecl-manual}}. Note that the accelerators for some of the
-- below slots (gen_m, dat_m, ins_m, loc_m) are different for surnames vs. others, which we need to handle
-- specially when constructing the output slots.
local input_adjective_slots = {
nom_m = {"", "surname"},
nom_f = {"", "surname"},
nom_n = {""},
nom_p = {"", "surname", "plonly"},
nom_mp = {"dva"},
nom_fp = {"dva"},
gen_m = {"", "surname"},
gen_f = {"", "surname"},
gen_p = {"", "surname", "plonly", "dva"},
dat_m = {"", "surname"},
dat_f = {"", "surname"},
dat_p = {"", "surname", "plonly", "dva"},
acc_m = {"surname"},
acc_m_an = {""},
acc_m_in = {""},
acc_f = {"", "surname"},
acc_n = {""},
acc_p = {"surname"},
acc_p_an = {"", "plonly", "dva"},
acc_p_in = {"", "plonly"},
acc_mp_in = {"dva"},
acc_fp_in = {"dva"},
ins_m = {"", "surname"},
ins_f = {"", "surname"},
ins_p = {"", "surname", "plonly", "dva"},
loc_m = {"", "surname"},
loc_f = {"", "surname"},
loc_p = {"", "surname", "plonly", "dva"},
voc_m = {"", "surname"},
voc_f = {"", "surname"},
voc_p = {"", "surname"},
voc_mp = {"dva"},
voc_fp = {"dva"},
short = {""},
}
local output_adjective_slots = {
nom_m = "nom|m|s",
nom_m_linked = "nom|m|s", -- used in [[Module:uk-noun]]?
nom_f = "nom|f|s",
nom_n = "nom|n|s",
nom_p = "nom|p",
nom_mp = "nom|m//n|p",
nom_fp = "nom|f|p",
gen_m = "gen|m//n|s",
gen_f = "gen|f|s",
gen_p = "gen|p",
dat_m = "dat|m//n|s",
dat_f = "dat|f|s",
dat_p = "dat|p",
acc_m = "acc|m|s",
acc_m_an = "an|acc|m|s",
acc_m_in = "in|acc|m|s",
acc_f = "acc|f|s",
acc_n = "acc|n|s",
acc_p = "acc|p",
acc_p_an = "an|acc|p",
acc_p_in = "in|acc|p",
acc_mp_in = "in|acc|m//n|p",
acc_fp_in = "in|acc|f|p",
ins_m = "ins|m//n|s",
ins_f = "ins|f|s",
ins_p = "ins|p",
loc_m = "loc|m//n|s",
loc_f = "loc|f|s",
loc_p = "loc|p",
voc_m = "voc|m|s",
voc_f = "voc|f|s",
voc_n = "voc|n|s",
voc_p = "voc|p",
voc_mp = "voc|m//n|p",
voc_fp = "voc|f|p",
short = "short|form",
}
local function get_output_adjective_slots(alternant_multiword_spec)
if alternant_multiword_spec.surname then
output_adjective_slots.gen_m = "gen|m|s"
output_adjective_slots.dat_m = "dat|m|s"
output_adjective_slots.ins_m = "ins|m|s"
output_adjective_slots.loc_m = "loc|m|s"
end
return output_adjective_slots
end
local function add(base, slot, stems, endings)
iut.add_forms(base.forms, slot, stems, endings, com.combine_stem_ending)
end
local function add_normal_decl(base, stem,
nom_m, nom_f, nom_n, nom_p,
gen_m, gen_f, gen_p,
dat_m, dat_f, dat_p,
acc_f,
ins_m, ins_f, ins_p,
loc_m, loc_f, loc_p,
footnote)
stem = com.generate_form(stem, footnote)
add(base, "nom_m", stem, nom_m)
add(base, "nom_f", stem, nom_f)
add(base, "nom_n", stem, nom_n)
add(base, "nom_p", stem, nom_p)
add(base, "gen_m", stem, gen_m)
add(base, "gen_f", stem, gen_f)
add(base, "gen_p", stem, gen_p)
add(base, "dat_m", stem, dat_m)
add(base, "dat_f", stem, dat_f)
add(base, "dat_p", stem, dat_p)
add(base, "acc_f", stem, acc_f)
add(base, "ins_m", stem, ins_m)
add(base, "ins_f", stem, ins_f)
add(base, "ins_p", stem, ins_p)
add(base, "loc_m", stem, loc_m)
add(base, "loc_f", stem, loc_f)
add(base, "loc_p", stem, loc_p)
end
local function add_vocative(base, stem, voc_m, voc_f, voc_p)
add(base, "voc_m", stem, voc_m)
add(base, "voc_f", stem, voc_f)
add(base, "voc_p", stem, voc_p)
end
local function stress_ending(ending)
if type(ending) == "string" then
return com.maybe_stress_initial_syllable(ending)
else
for i, e in ipairs(ending) do
ending[i] = com.maybe_stress_initial_syllable(e)
end
return ending
end
end
local function maybe_stress_endings(suffix, endings)
if com.is_stressed(suffix) then
for i, e in ipairs(endings) do
endings[i] = stress_ending(e)
end
end
end
local decls = {}
decls["normal"] = function(base)
local normal_endings, old_endings
local stem, suffix
local function add_endings()
maybe_stress_endings(suffix, normal_endings)
add_normal_decl(base, stem, unpack(normal_endings))
if base.old then
maybe_stress_endings(suffix, old_endings)
local nom_f, nom_n, nom_p, acc_f = unpack(old_endings)
old_endings = {
{}, nom_f, nom_n, nom_p, --nom
{}, {}, {}, --gen
{}, {}, {}, --dat
acc_f, --acc
{}, {}, {}, --ins
{}, {}, {}, --loc
"[dated or dialectal]",
}
add_normal_decl(base, stem, unpack(old_endings))
end
end
-- semi-soft in -ций
stem, suffix = rmatch(base.lemma, "^(.*ц)(и́?й)$")
if stem then
normal_endings = {
"ий", "я", "е", "і", --nom
"ього", "ьої", "их", --gen
"ьому", "ій", "им", --dat
"ю", --acc
"им", "ьою", "ими", --ins
{"ьому", "ім"}, "ій", "их", --loc
}
old_endings = {
"яя", "еє", "ії", --nom
"юю", --acc
}
add_endings()
return
end
-- hard in -ий
stem, suffix = rmatch(base.lemma, "^(.*)(и́?й)$")
if stem then
normal_endings = {
"ий", "а", "е", "і", --nom
"ого", "ої", "их", --gen
"ому", "ій", "им", --dat
"у", --acc
"им", "ою", "ими", --ins
{"ому", "ім"}, "ій", "их", --loc
}
old_endings = {
"ая", "еє", "ії", --nom
"ую", --acc
}
add_endings()
return
end
-- soft in -ій
stem, suffix = rmatch(base.lemma, "^(.*)(і́?й)$")
if stem then
normal_endings = {
"ій", "я", "є", "і", --nom
"ього", "ьої", "іх", --gen
"ьому", "ій", "ім", --dat
"ю", --acc
"ім", "ьою", "іми", --ins
{"ьому", "ім"}, "ій", "іх", --loc
}
old_endings = {
"яя", "єє", "ії", --nom
"юю", --acc
}
add_endings()
return
end
-- soft-after-vowel in -їй
stem, suffix = rmatch(base.lemma, "^(.*)(ї́?й)$")
if stem then
normal_endings = {
"їй", "я", "є", "ї", --nom
"його", "йої", "їх", --gen
"йому", "їй", "їм", --dat
"ю", --acc
"їм", "йою", "їми", --ins
{"йому", "їм"}, "їй", "їх", --loc
}
old_endings = {
"яя", "єє", "її", --nom
"юю", --acc
}
add_endings()
return
end
error("Unrecognized adjective lemma, should end in '-ий', '-ій' or '-їй': '" .. base.lemma .. "'")
end
decls["poss"] = function(base)
local ending_prefix
local stem, suffix
while true do
stem, suffix = rmatch(base.lemma, "^(.*)([ії]́?в)$")
if stem then
ending_prefix = com.apply_vowel_alternation(base.ialt, suffix)
break
end
stem, suffix = rmatch(base.lemma, "^(.*)([иї]́?н)$")
if stem then
ending_prefix = suffix
break
end
error("Unrecognized possessive adjective lemma, should end in '-ів', '-їв', '-ин' or '-їн': '" .. base.lemma .. "'")
end
local endings = {
"а", "е", "і", --nom
"ого", "ої", "их", --gen
"ому", "ій", "им", --dat
"у", --acc
"им", "ою", "ими", --ins
{"ому", "ім"}, "ій", "их", --loc
}
if com.is_stressed(suffix) then
ending_prefix = com.maybe_stress_initial_syllable(ending_prefix)
end
-- Do the nominative singular separately from the rest, which may have
-- a different stem ending (e.g. -ов vs. -ів).
add_normal_decl(base, stem, suffix)
add_normal_decl(base, stem .. ending_prefix, nil, unpack(endings))
-- FIXME: Are there 'old' endings here too?
end
decls["surname"] = function(base)
local ending_prefix
local stem, suffix
while true do
stem, suffix = rmatch(base.lemma, "^(.*)([ії]́?в)$")
if stem then
ending_prefix = com.apply_vowel_alternation(base.ialt, suffix)
break
end
stem, suffix = rmatch(base.lemma, "^(.*)([оє]́?в)$")
if stem then
ending_prefix = suffix
break
end
stem, suffix = rmatch(base.lemma, "^(.*)([иії]́?н)$")
if stem then
ending_prefix = suffix
break
end
error("Unrecognized possessive surname lemma, should end in '-ів', '-їв', '-ов', '-єв', '-ин', '-ін' or '-їн': '" .. base.lemma .. "'")
end
local endings = {
"а", nil, "и", --nom
"а", "ої", "их", --gen
"у", "ій", "им", --dat
"у", --acc
"им", "ою", "ими", --ins
{"у", "і"}, "ій", "их", --loc
}
-- Do the nominative singular separately from the rest, which may have
-- a different stem ending (e.g. -ов vs. -ів).
add_normal_decl(base, stem, suffix)
add_normal_decl(base, stem .. ending_prefix, nil, unpack(endings))
add_vocative(base, stem, suffix)
add_vocative(base, stem .. ending_prefix, "е", "а", "и")
-- FIXME: Are there 'old' endings here too?
end
local function parse_indicator_spec(angle_bracket_spec)
local inside = rmatch(angle_bracket_spec, "^<(.*)>$")
assert(inside)
local base = {forms = {}}
if inside ~= "" then
local parts = rsplit(inside, ".", true)
for _, part in ipairs(parts) do
if part == "old" then
if base.old then
error("Can't specify 'old' twice: '" .. inside .. "'")
end
base.old = true
elseif part == "surname" then
if base.surname then
error("Can't specify 'surname' twice: '" .. inside .. "'")
end
base.surname = true
elseif part == "io" or part == "ijo" or part == "ie" then
if base.ialt then
error("Can't specify і-alternation indicator twice: '" .. inside .. "'")
end
base.ialt = part
else
error("Unrecognized indicator '" .. part .. "': '" .. inside .. "'")
end
end
end
return base
end
-- Check that multisyllabic lemmas have stress, and add stress to monosyllabic
-- lemmas if needed.
local function normalize_all_lemmas(alternant_multiword_spec)
iut.map_word_specs(alternant_multiword_spec, function(base)
base.orig_lemma = base.lemma
base.orig_lemma_no_links = com.add_monosyllabic_stress(m_links.remove_links(base.lemma))
base.lemma = base.orig_lemma_no_links
if not rfind(base.lemma, AC) then
error("Multisyllabic lemma '" .. base.orig_lemma .. "' needs an accent")
end
end)
end
local function detect_indicator_spec(base)
if rfind(base.lemma, "й$") then
base.decl = "normal"
elseif rfind(base.lemma, "[вн]$") then
if base.surname then
base.decl = "surname"
else
base.decl = "poss"
end
else
error("Unrecognized adjective lemma: '" .. base.lemma .. "'")
end
if base.ialt and base.decl ~= "poss" and base.decl ~= "surname" then
error("Vowel alternation spec '" .. base.ialt .. "' can only be specified with possessive/surname adjectives")
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
iut.map_word_specs(alternant_multiword_spec, function(base)
detect_indicator_spec(base)
if alternant_multiword_spec.surname == nil then
alternant_multiword_spec.surname = base.surname or false
elseif alternant_multiword_spec.surname ~= (base.surname or false) then
error("If 'surname' is specified in one alternant, it must be specified in all of them")
end
end)
end
local function decline_adjective(base)
if not decls[base.decl] then
error("Internal error: Unrecognized declension type '" .. base.decl .. "'")
end
decls[base.decl](base)
-- handle_derived_slots_and_overrides(base)
end
local function get_variants(form)
return
form:find(com.VAR1) and "var1" or
form:find(com.VAR2) and "var2" or
form:find(com.VAR3) and "var3" or
nil
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
error("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
-- Process override for the arguments in `args`, storing the results into `forms`. If `do_acc_voc`, only do accusative and vocative
-- slots; otherwise, don't do accusative or vocative slots.
local function process_overrides(forms, args, do_acc_voc)
do_acc_voc = not not do_acc_voc
for slot, _ in pairs(input_adjective_slots) do
local case = slot:sub(1, 3)
if args[slot] and (do_acc_voc == (case == "acc") or do_acc_voc == (case == "voc")) then
forms[slot] = nil
if args[slot] ~= "-" and args[slot] ~= "—" then
local segments = put.parse_balanced_segment_run(args[slot], "[", "]")
local comma_separated_groups = put.split_alternating_runs(segments, "%s*,%s*")
for _, comma_separated_group in ipairs(comma_separated_groups) do
local formobj = {
form = comma_separated_group[1],
footnotes = fetch_footnotes(comma_separated_group),
}
iut.insert_form(forms, slot, formobj)
end
end
end
end
end
local function check_allowed_overrides(alternant_multiword_spec, args)
local special = alternant_multiword_spec.special or alternant_multiword_spec.surname and "surname" or ""
for slot, types in pairs(input_adjective_slots) do
if args[slot] then
local allowed = false
for _, typ in ipairs(types) do
if typ == special then
allowed = true
break
end
end
if not allowed then
error(("Override %s= not allowed for %s"):format(slot, special == "" and "regular declension" or
"special=" .. special))
end
end
end
end
local function set_accusative_vocative(alternant_multiword_spec)
local forms = alternant_multiword_spec.forms
if alternant_multiword_spec.surname then
iut.insert_forms(forms, "acc_m", forms["gen_m"])
iut.insert_forms(forms, "acc_p", forms["gen_p"])
iut.insert_forms(forms, "voc_m", forms["nom_m"])
iut.insert_forms(forms, "voc_f", forms["nom_f"])
iut.insert_forms(forms, "voc_p", forms["nom_p"])
elseif alternant_multiword_spec.special == "dva" then
iut.insert_forms(forms, "acc_p_an", forms["gen_p"])
iut.insert_forms(forms, "acc_mp_in", forms["nom_mp"])
iut.insert_forms(forms, "acc_fp_in", forms["nom_fp"])
iut.insert_forms(forms, "voc_mp", forms["nom_mp"])
iut.insert_forms(forms, "voc_fp", forms["nom_fp"])
else
iut.insert_forms(forms, "acc_n", forms["nom_n"])
iut.insert_forms(forms, "acc_m_an", forms["gen_m"])
iut.insert_forms(forms, "acc_m_in", forms["nom_m"])
iut.insert_forms(forms, "acc_p_an", forms["gen_p"])
iut.insert_forms(forms, "acc_p_in", forms["nom_p"])
iut.insert_forms(forms, "voc_m", forms["nom_m"])
iut.insert_forms(forms, "voc_f", forms["nom_f"])
iut.insert_forms(forms, "voc_n", forms["nom_n"])
iut.insert_forms(forms, "voc_p", forms["nom_p"])
end
end
local function add_categories(alternant_multiword_spec)
local cats = {}
local function insert(cattype)
table.insert(cats, "Ukrainian " .. cattype .. " adjectives")
end
if not alternant_multiword_spec.manual then
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.decl == "poss" then
insert("possessive")
elseif rfind(base.lemma, "ци́?й$") then
insert("ц-stem")
elseif rfind(base.lemma, "ий$") then
insert("hard-stem stem-stressed")
elseif rfind(base.lemma, "и́й$") then
insert("hard-stem ending-stressed")
elseif rfind(base.lemma, "і́?й$") then
insert("soft-stem")
elseif rfind(base.lemma, "ї́?й$") then
insert("vowel-stem")
end
end)
end
alternant_multiword_spec.categories = cats
end
local function show_forms(alternant_multiword_spec)
local lemmas = {}
local lemmaform = alternant_multiword_spec.forms.nom_m or alternant_multiword_spec.forms.nom_p or
alternant_multiword_spec.forms.nom_mp
if lemmaform then
for _, form in ipairs(lemmaform) do
table.insert(lemmas, com.remove_monosyllabic_stress(form.form))
end
end
local props = {
lemmas = lemmas,
slot_table = get_output_adjective_slots(alternant_multiword_spec),
lang = lang,
canonicalize = function(form)
return com.remove_variant_codes(com.remove_monosyllabic_stress(form))
end,
include_translit = true,
}
iut.show_forms(alternant_multiword_spec.forms, props)
end
local function make_table(alternant_multiword_spec)
local forms = alternant_multiword_spec.forms
local frame = mw.getCurrentFrame()
local function template_prelude()
return frame:expandTemplate{
title = 'inflection-table-top',
args = {
title = '{title}{annotation}',
palette = 'blue',
tall = 'yes',
class="tr-alongside"
}
}
end
local function template_postlude()
return frame:expandTemplate{
title = 'inflection-table-bottom',
args = {
notes = '{footnote}',
}
}
end
local table_spec = template_prelude() .. [=[
! class="outer" colspan="2" |
! class="outer" colspan="3" | singular
! class="outer" rowspan="2" | plural
|-
! colspan="2" |
! masculine
! neuter
! feminine
|-
! colspan="2" | nominative
| {nom_m}
| {nom_n}
| {nom_f}
| {nom_p}
|-
! colspan="2" | genitive
| colspan="2" | {gen_m}
| {gen_f}
| {gen_p}
|-
! colspan="2" | dative
| colspan="2" | {dat_m}
| {dat_f}
| {dat_p}
|-
! rowspan="2" | accusative
! class="secondary" | animate
| {acc_m_an}
| rowspan="2" | {acc_n}
| rowspan="2" | {acc_f}
| {acc_p_an}
|-
! class="secondary" | inanimate
| {acc_m_in}
| {acc_p_in}
|-
! colspan="2" | instrumental
| colspan="2" | {ins_m}
| {ins_f}
| {ins_p}
|-
! colspan="2" | locative
| colspan="2" | {loc_m}
| {loc_f}
| {loc_p}
|-
! colspan="2" | vocative
| {voc_m}
| {voc_n}
| {voc_f}
| {voc_p}{short_clause}
]=] .. template_postlude()
local table_spec_surname = template_prelude() .. [=[
! class="outer" |
! class="outer" colspan="2" | singular
! class="outer" rowspan="2" | plural
|-
!
! masculine
! feminine
|-
! nominative
| {nom_m}
| {nom_f}
| {nom_p}
|-
! genitive
| {gen_m}
| {gen_f}
| {gen_p}
|-
! dative
| {dat_m}
| {dat_f}
| {dat_p}
|-
! accusative
| {acc_m}
| {acc_f}
| {acc_p}
|-
! instrumental
| {ins_m}
| {ins_f}
| {ins_p}
|-
! locative
| {loc_m}
| {loc_f}
| {loc_p}
|-
! vocative
| {voc_m}
| {voc_f}
| {voc_p}
]=] .. template_postlude()
local table_spec_plonly = template_prelude() .. [=[
! colspan="2" |
! plural
|-
! colspan="2" | nominative
| {nom_p}
|-
! colspan="2" | genitive
| {gen_p}
|-
! colspan="2" | dative
| {dat_p}
|-
! rowspan="2" | accusative
! class="secondary" | animate
| {acc_p_an}
|-
! class="secondary" | inanimate
| {acc_p_in}
|-
! colspan="2" | instrumental
| {ins_p}
|-
! colspan="2" | locative
| {loc_p}
|-
! colspan="2" | vocative
| {voc_p}
]=] .. template_postlude()
local table_spec_dva = template_prelude() .. [=[
! colspan="2" |
! class="outer" colspan="2" | plural
|-
! colspan="2" |
! masculine/neuter
! feminine
|-
! colspan="2" | nominative
| {nom_mp}
| {nom_fp}
|-
! colspan="2" | genitive
| colspan="2" | {gen_p}
|-
! colspan="2" | dative
| colspan="2" | {dat_p}
|-
! rowspan="2" | accusative
! class="secondary" | animate
| colspan="2" | {acc_p_an}
|-
! class="secondary" | inanimate
| {acc_mp_in}
| {acc_fp_in}
|-
! colspan="2" | instrumental
| colspan="2" | {ins_p}
|-
! colspan="2" | locative
| colspan="2" | {loc_p}
|-
! colspan="2" | vocative
| {voc_mp}
| {voc_fp}
]=] .. template_postlude()
local short_form_template = [=[
|-
! colspan="6" |
|-
! colspan="2" | short form
| colspan="1" | {short}]=]
if alternant_multiword_spec.title then
forms.title = alternant_multiword_spec.title
else
forms.title = 'Declension of <i lang="uk" class="Cyrl">' .. forms.lemma .. '</i>'
end
if alternant_multiword_spec.manual then
forms.annotation = ""
else
local ann_parts = {}
local decls = {}
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.decl == "surname" then
m_table.insertIfNot(decls, "surname")
elseif base.decl == "poss" then
m_table.insertIfNot(decls, "possessive")
elseif rfind(base.lemma, "и́?й$") then
m_table.insertIfNot(decls, "hard")
else
m_table.insertIfNot(decls, "soft")
end
end)
table.insert(ann_parts, table.concat(decls, " // "))
forms.annotation = " (" .. table.concat(ann_parts, ", ") .. ")"
end
forms.short_clause = forms.short and forms.short ~= "—" and
m_string_utilities.format(short_form_template, forms) or ""
return m_string_utilities.format(
alternant_multiword_spec.surname and table_spec_surname or
alternant_multiword_spec.special == "plonly" and table_spec_plonly or
alternant_multiword_spec.special == "dva" and table_spec_dva or
table_spec, forms
)
end
-- Externally callable function to parse and decline an adjective given
-- user-specified arguments. Return value is WORD_SPEC, an object where the
-- declined forms are in `WORD_SPEC.forms` for each slot. If there are no values
-- for a slot, the slot key will be missing. The value for a given slot is a
-- list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(parent_args, pos, from_headword, def)
local params = {
[1] = {required = true, default = "си́ній"},
json = {type = "boolean"}, -- for use with bots
title = {},
}
for slot, _ in pairs(input_adjective_slots) do
params[slot] = {}
end
local args = m_para.process(parent_args, params)
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
allow_default_indicator = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(args[1], parse_props)
alternant_multiword_spec.title = args.title
alternant_multiword_spec.forms = {}
normalize_all_lemmas(alternant_multiword_spec)
detect_all_indicator_specs(alternant_multiword_spec)
check_allowed_overrides(alternant_multiword_spec, args)
local inflect_props = {
slot_table = get_output_adjective_slots(alternant_multiword_spec),
get_variants = get_variants,
inflect_word_spec = decline_adjective,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
-- Do non-accusative/vocative overrides so they get copied to the accusative/vocative forms appropriately.
process_overrides(alternant_multiword_spec.forms, args)
set_accusative_vocative(alternant_multiword_spec)
-- Do accusative and vocative overrides after copying the accusative/vocative forms.
process_overrides(alternant_multiword_spec.forms, args, "do_acc_voc")
add_categories(alternant_multiword_spec)
if args.json and not from_headword then
return require("Module:JSON").toJSON(alternant_multiword_spec)
end
return alternant_multiword_spec
end
-- Externally callable function to parse and decline an adjective where all
-- forms are given manually. Return value is WORD_SPEC, an object where the
-- declined forms are in `WORD_SPEC.forms` for each slot. If there are no values
-- for a slot, the slot key will be missing. The value for a given slot is a
-- list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms_manual(parent_args, pos, from_headword, def)
local params = {
special = {},
json = {type = "boolean"}, -- for use with bots
title = {},
}
for slot, _ in pairs(input_adjective_slots) do
params[slot] = {}
end
local args = m_para.process(parent_args, params)
local alternant_multiword_spec = {
special = args.special,
title = args.title,
forms = {},
manual = true,
}
check_allowed_overrides(alternant_multiword_spec, args)
-- Do non-accusative/vocative overrides so they get copied to the accusative/vocative forms appropriately.
process_overrides(alternant_multiword_spec.forms, args)
set_accusative_vocative(alternant_multiword_spec)
-- Do accusative and vocative overrides after copying the accusative/vocative forms.
process_overrides(alternant_multiword_spec.forms, args, "do_acc_voc")
add_categories(alternant_multiword_spec)
if args.json and not from_headword then
return require("Module:JSON").toJSON(alternant_multiword_spec)
end
return alternant_multiword_spec
end
-- Entry point for {{uk-adecl}}. Template-callable function to parse and decline
-- an adjective given user-specified arguments and generate a displayable table
-- of the declined forms.
function export.show(frame)
local parent_args = frame:getParent().args
local alternant_multiword_spec = export.do_generate_forms(parent_args)
show_forms(alternant_multiword_spec)
return make_table(alternant_multiword_spec) .. require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang)
end
-- Entry point for {{uk-adecl-manual}}. Template-callable function to parse and
-- decline an adjective given manually-specified inflections and generate a
-- displayable table of the declined forms.
function export.show_manual(frame)
local parent_args = frame:getParent().args
local alternant_multiword_spec = export.do_generate_forms_manual(parent_args)
show_forms(alternant_multiword_spec)
return make_table(alternant_multiword_spec) .. require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang)
end
return export
ijbi92n5r31dlpd4epb9gywh70suxya
235433
235432
2026-06-02T10:29:27Z
Lee
19
[[:en:Module:uk-adjective]] වෙතින් එක් සංශෝධනයක්
235432
Scribunto
text/plain
local export = {}
--[=[
Authorship: Ben Wing <benwing2>
]=]
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of case/gender/number.
Example slot names for adjectives are "gen_f" (genitive feminine singular) and
"loc_p" (locative plural). Each slot is filled with zero or more forms.
-- "form" = The declined Ukrainian form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Ukrainian term. Generally the nominative
masculine singular, but may occasionally be another form if the nominative
masculine singular is missing.
]=]
local lang = require("Module:languages").getByCode("uk")
local m_links = require("Module:links")
local m_table = require("Module:table")
local m_string_utilities = require("Module:string utilities")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local m_para = require("Module:parameters")
local com = require("Module:uk-common")
local u = mw.ustring.char
local rsplit = mw.text.split
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local AC = u(0x0301) -- acute = ́
-- All slots that are used by any of the different tables. The key is the slot and the value is a list of the
-- tables that use the slot. "" = regular, "surname" = 'surname' indicator, "plonly" = special=plonly in
-- {{uk-adecl-manual}}, "dva" = special=dva in {{uk-adecl-manual}}. Note that the accelerators for some of the
-- below slots (gen_m, dat_m, ins_m, loc_m) are different for surnames vs. others, which we need to handle
-- specially when constructing the output slots.
local input_adjective_slots = {
nom_m = {"", "surname"},
nom_f = {"", "surname"},
nom_n = {""},
nom_p = {"", "surname", "plonly"},
nom_mp = {"dva"},
nom_fp = {"dva"},
gen_m = {"", "surname"},
gen_f = {"", "surname"},
gen_p = {"", "surname", "plonly", "dva"},
dat_m = {"", "surname"},
dat_f = {"", "surname"},
dat_p = {"", "surname", "plonly", "dva"},
acc_m = {"surname"},
acc_m_an = {""},
acc_m_in = {""},
acc_f = {"", "surname"},
acc_n = {""},
acc_p = {"surname"},
acc_p_an = {"", "plonly", "dva"},
acc_p_in = {"", "plonly"},
acc_mp_in = {"dva"},
acc_fp_in = {"dva"},
ins_m = {"", "surname"},
ins_f = {"", "surname"},
ins_p = {"", "surname", "plonly", "dva"},
loc_m = {"", "surname"},
loc_f = {"", "surname"},
loc_p = {"", "surname", "plonly", "dva"},
voc_m = {"", "surname"},
voc_f = {"", "surname"},
voc_p = {"", "surname"},
voc_mp = {"dva"},
voc_fp = {"dva"},
short = {""},
}
local output_adjective_slots = {
nom_m = "nom|m|s",
nom_m_linked = "nom|m|s", -- used in [[Module:uk-noun]]?
nom_f = "nom|f|s",
nom_n = "nom|n|s",
nom_p = "nom|p",
nom_mp = "nom|m//n|p",
nom_fp = "nom|f|p",
gen_m = "gen|m//n|s",
gen_f = "gen|f|s",
gen_p = "gen|p",
dat_m = "dat|m//n|s",
dat_f = "dat|f|s",
dat_p = "dat|p",
acc_m = "acc|m|s",
acc_m_an = "an|acc|m|s",
acc_m_in = "in|acc|m|s",
acc_f = "acc|f|s",
acc_n = "acc|n|s",
acc_p = "acc|p",
acc_p_an = "an|acc|p",
acc_p_in = "in|acc|p",
acc_mp_in = "in|acc|m//n|p",
acc_fp_in = "in|acc|f|p",
ins_m = "ins|m//n|s",
ins_f = "ins|f|s",
ins_p = "ins|p",
loc_m = "loc|m//n|s",
loc_f = "loc|f|s",
loc_p = "loc|p",
voc_m = "voc|m|s",
voc_f = "voc|f|s",
voc_n = "voc|n|s",
voc_p = "voc|p",
voc_mp = "voc|m//n|p",
voc_fp = "voc|f|p",
short = "short|form",
}
local function get_output_adjective_slots(alternant_multiword_spec)
if alternant_multiword_spec.surname then
output_adjective_slots.gen_m = "gen|m|s"
output_adjective_slots.dat_m = "dat|m|s"
output_adjective_slots.ins_m = "ins|m|s"
output_adjective_slots.loc_m = "loc|m|s"
end
return output_adjective_slots
end
local function add(base, slot, stems, endings)
iut.add_forms(base.forms, slot, stems, endings, com.combine_stem_ending)
end
local function add_normal_decl(base, stem,
nom_m, nom_f, nom_n, nom_p,
gen_m, gen_f, gen_p,
dat_m, dat_f, dat_p,
acc_f,
ins_m, ins_f, ins_p,
loc_m, loc_f, loc_p,
footnote)
stem = com.generate_form(stem, footnote)
add(base, "nom_m", stem, nom_m)
add(base, "nom_f", stem, nom_f)
add(base, "nom_n", stem, nom_n)
add(base, "nom_p", stem, nom_p)
add(base, "gen_m", stem, gen_m)
add(base, "gen_f", stem, gen_f)
add(base, "gen_p", stem, gen_p)
add(base, "dat_m", stem, dat_m)
add(base, "dat_f", stem, dat_f)
add(base, "dat_p", stem, dat_p)
add(base, "acc_f", stem, acc_f)
add(base, "ins_m", stem, ins_m)
add(base, "ins_f", stem, ins_f)
add(base, "ins_p", stem, ins_p)
add(base, "loc_m", stem, loc_m)
add(base, "loc_f", stem, loc_f)
add(base, "loc_p", stem, loc_p)
end
local function add_vocative(base, stem, voc_m, voc_f, voc_p)
add(base, "voc_m", stem, voc_m)
add(base, "voc_f", stem, voc_f)
add(base, "voc_p", stem, voc_p)
end
local function stress_ending(ending)
if type(ending) == "string" then
return com.maybe_stress_initial_syllable(ending)
else
for i, e in ipairs(ending) do
ending[i] = com.maybe_stress_initial_syllable(e)
end
return ending
end
end
local function maybe_stress_endings(suffix, endings)
if com.is_stressed(suffix) then
for i, e in ipairs(endings) do
endings[i] = stress_ending(e)
end
end
end
local decls = {}
decls["normal"] = function(base)
local normal_endings, old_endings
local stem, suffix
local function add_endings()
maybe_stress_endings(suffix, normal_endings)
add_normal_decl(base, stem, unpack(normal_endings))
if base.old then
maybe_stress_endings(suffix, old_endings)
local nom_f, nom_n, nom_p, acc_f = unpack(old_endings)
old_endings = {
{}, nom_f, nom_n, nom_p, --nom
{}, {}, {}, --gen
{}, {}, {}, --dat
acc_f, --acc
{}, {}, {}, --ins
{}, {}, {}, --loc
"[dated or dialectal]",
}
add_normal_decl(base, stem, unpack(old_endings))
end
end
-- semi-soft in -ций
stem, suffix = rmatch(base.lemma, "^(.*ц)(и́?й)$")
if stem then
normal_endings = {
"ий", "я", "е", "і", --nom
"ього", "ьої", "их", --gen
"ьому", "ій", "им", --dat
"ю", --acc
"им", "ьою", "ими", --ins
{"ьому", "ім"}, "ій", "их", --loc
}
old_endings = {
"яя", "еє", "ії", --nom
"юю", --acc
}
add_endings()
return
end
-- hard in -ий
stem, suffix = rmatch(base.lemma, "^(.*)(и́?й)$")
if stem then
normal_endings = {
"ий", "а", "е", "і", --nom
"ого", "ої", "их", --gen
"ому", "ій", "им", --dat
"у", --acc
"им", "ою", "ими", --ins
{"ому", "ім"}, "ій", "их", --loc
}
old_endings = {
"ая", "еє", "ії", --nom
"ую", --acc
}
add_endings()
return
end
-- soft in -ій
stem, suffix = rmatch(base.lemma, "^(.*)(і́?й)$")
if stem then
normal_endings = {
"ій", "я", "є", "і", --nom
"ього", "ьої", "іх", --gen
"ьому", "ій", "ім", --dat
"ю", --acc
"ім", "ьою", "іми", --ins
{"ьому", "ім"}, "ій", "іх", --loc
}
old_endings = {
"яя", "єє", "ії", --nom
"юю", --acc
}
add_endings()
return
end
-- soft-after-vowel in -їй
stem, suffix = rmatch(base.lemma, "^(.*)(ї́?й)$")
if stem then
normal_endings = {
"їй", "я", "є", "ї", --nom
"його", "йої", "їх", --gen
"йому", "їй", "їм", --dat
"ю", --acc
"їм", "йою", "їми", --ins
{"йому", "їм"}, "їй", "їх", --loc
}
old_endings = {
"яя", "єє", "її", --nom
"юю", --acc
}
add_endings()
return
end
error("Unrecognized adjective lemma, should end in '-ий', '-ій' or '-їй': '" .. base.lemma .. "'")
end
decls["poss"] = function(base)
local ending_prefix
local stem, suffix
while true do
stem, suffix = rmatch(base.lemma, "^(.*)([ії]́?в)$")
if stem then
ending_prefix = com.apply_vowel_alternation(base.ialt, suffix)
break
end
stem, suffix = rmatch(base.lemma, "^(.*)([иї]́?н)$")
if stem then
ending_prefix = suffix
break
end
error("Unrecognized possessive adjective lemma, should end in '-ів', '-їв', '-ин' or '-їн': '" .. base.lemma .. "'")
end
local endings = {
"а", "е", "і", --nom
"ого", "ої", "их", --gen
"ому", "ій", "им", --dat
"у", --acc
"им", "ою", "ими", --ins
{"ому", "ім"}, "ій", "их", --loc
}
if com.is_stressed(suffix) then
ending_prefix = com.maybe_stress_initial_syllable(ending_prefix)
end
-- Do the nominative singular separately from the rest, which may have
-- a different stem ending (e.g. -ов vs. -ів).
add_normal_decl(base, stem, suffix)
add_normal_decl(base, stem .. ending_prefix, nil, unpack(endings))
-- FIXME: Are there 'old' endings here too?
end
decls["surname"] = function(base)
local ending_prefix
local stem, suffix
while true do
stem, suffix = rmatch(base.lemma, "^(.*)([ії]́?в)$")
if stem then
ending_prefix = com.apply_vowel_alternation(base.ialt, suffix)
break
end
stem, suffix = rmatch(base.lemma, "^(.*)([оє]́?в)$")
if stem then
ending_prefix = suffix
break
end
stem, suffix = rmatch(base.lemma, "^(.*)([иії]́?н)$")
if stem then
ending_prefix = suffix
break
end
error("Unrecognized possessive surname lemma, should end in '-ів', '-їв', '-ов', '-єв', '-ин', '-ін' or '-їн': '" .. base.lemma .. "'")
end
local endings = {
"а", nil, "и", --nom
"а", "ої", "их", --gen
"у", "ій", "им", --dat
"у", --acc
"им", "ою", "ими", --ins
{"у", "і"}, "ій", "их", --loc
}
-- Do the nominative singular separately from the rest, which may have
-- a different stem ending (e.g. -ов vs. -ів).
add_normal_decl(base, stem, suffix)
add_normal_decl(base, stem .. ending_prefix, nil, unpack(endings))
add_vocative(base, stem, suffix)
add_vocative(base, stem .. ending_prefix, "е", "а", "и")
-- FIXME: Are there 'old' endings here too?
end
local function parse_indicator_spec(angle_bracket_spec)
local inside = rmatch(angle_bracket_spec, "^<(.*)>$")
assert(inside)
local base = {forms = {}}
if inside ~= "" then
local parts = rsplit(inside, ".", true)
for _, part in ipairs(parts) do
if part == "old" then
if base.old then
error("Can't specify 'old' twice: '" .. inside .. "'")
end
base.old = true
elseif part == "surname" then
if base.surname then
error("Can't specify 'surname' twice: '" .. inside .. "'")
end
base.surname = true
elseif part == "io" or part == "ijo" or part == "ie" then
if base.ialt then
error("Can't specify і-alternation indicator twice: '" .. inside .. "'")
end
base.ialt = part
else
error("Unrecognized indicator '" .. part .. "': '" .. inside .. "'")
end
end
end
return base
end
-- Check that multisyllabic lemmas have stress, and add stress to monosyllabic
-- lemmas if needed.
local function normalize_all_lemmas(alternant_multiword_spec)
iut.map_word_specs(alternant_multiword_spec, function(base)
base.orig_lemma = base.lemma
base.orig_lemma_no_links = com.add_monosyllabic_stress(m_links.remove_links(base.lemma))
base.lemma = base.orig_lemma_no_links
if not rfind(base.lemma, AC) then
error("Multisyllabic lemma '" .. base.orig_lemma .. "' needs an accent")
end
end)
end
local function detect_indicator_spec(base)
if rfind(base.lemma, "й$") then
base.decl = "normal"
elseif rfind(base.lemma, "[вн]$") then
if base.surname then
base.decl = "surname"
else
base.decl = "poss"
end
else
error("Unrecognized adjective lemma: '" .. base.lemma .. "'")
end
if base.ialt and base.decl ~= "poss" and base.decl ~= "surname" then
error("Vowel alternation spec '" .. base.ialt .. "' can only be specified with possessive/surname adjectives")
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
iut.map_word_specs(alternant_multiword_spec, function(base)
detect_indicator_spec(base)
if alternant_multiword_spec.surname == nil then
alternant_multiword_spec.surname = base.surname or false
elseif alternant_multiword_spec.surname ~= (base.surname or false) then
error("If 'surname' is specified in one alternant, it must be specified in all of them")
end
end)
end
local function decline_adjective(base)
if not decls[base.decl] then
error("Internal error: Unrecognized declension type '" .. base.decl .. "'")
end
decls[base.decl](base)
-- handle_derived_slots_and_overrides(base)
end
local function get_variants(form)
return
form:find(com.VAR1) and "var1" or
form:find(com.VAR2) and "var2" or
form:find(com.VAR3) and "var3" or
nil
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
error("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
-- Process override for the arguments in `args`, storing the results into `forms`. If `do_acc_voc`, only do accusative and vocative
-- slots; otherwise, don't do accusative or vocative slots.
local function process_overrides(forms, args, do_acc_voc)
do_acc_voc = not not do_acc_voc
for slot, _ in pairs(input_adjective_slots) do
local case = slot:sub(1, 3)
if args[slot] and (do_acc_voc == (case == "acc") or do_acc_voc == (case == "voc")) then
forms[slot] = nil
if args[slot] ~= "-" and args[slot] ~= "—" then
local segments = put.parse_balanced_segment_run(args[slot], "[", "]")
local comma_separated_groups = put.split_alternating_runs(segments, "%s*,%s*")
for _, comma_separated_group in ipairs(comma_separated_groups) do
local formobj = {
form = comma_separated_group[1],
footnotes = fetch_footnotes(comma_separated_group),
}
iut.insert_form(forms, slot, formobj)
end
end
end
end
end
local function check_allowed_overrides(alternant_multiword_spec, args)
local special = alternant_multiword_spec.special or alternant_multiword_spec.surname and "surname" or ""
for slot, types in pairs(input_adjective_slots) do
if args[slot] then
local allowed = false
for _, typ in ipairs(types) do
if typ == special then
allowed = true
break
end
end
if not allowed then
error(("Override %s= not allowed for %s"):format(slot, special == "" and "regular declension" or
"special=" .. special))
end
end
end
end
local function set_accusative_vocative(alternant_multiword_spec)
local forms = alternant_multiword_spec.forms
if alternant_multiword_spec.surname then
iut.insert_forms(forms, "acc_m", forms["gen_m"])
iut.insert_forms(forms, "acc_p", forms["gen_p"])
iut.insert_forms(forms, "voc_m", forms["nom_m"])
iut.insert_forms(forms, "voc_f", forms["nom_f"])
iut.insert_forms(forms, "voc_p", forms["nom_p"])
elseif alternant_multiword_spec.special == "dva" then
iut.insert_forms(forms, "acc_p_an", forms["gen_p"])
iut.insert_forms(forms, "acc_mp_in", forms["nom_mp"])
iut.insert_forms(forms, "acc_fp_in", forms["nom_fp"])
iut.insert_forms(forms, "voc_mp", forms["nom_mp"])
iut.insert_forms(forms, "voc_fp", forms["nom_fp"])
else
iut.insert_forms(forms, "acc_n", forms["nom_n"])
iut.insert_forms(forms, "acc_m_an", forms["gen_m"])
iut.insert_forms(forms, "acc_m_in", forms["nom_m"])
iut.insert_forms(forms, "acc_p_an", forms["gen_p"])
iut.insert_forms(forms, "acc_p_in", forms["nom_p"])
iut.insert_forms(forms, "voc_m", forms["nom_m"])
iut.insert_forms(forms, "voc_f", forms["nom_f"])
iut.insert_forms(forms, "voc_n", forms["nom_n"])
iut.insert_forms(forms, "voc_p", forms["nom_p"])
end
end
local function add_categories(alternant_multiword_spec)
local cats = {}
local function insert(cattype)
table.insert(cats, "Ukrainian " .. cattype .. " adjectives")
end
if not alternant_multiword_spec.manual then
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.decl == "poss" then
insert("possessive")
elseif rfind(base.lemma, "ци́?й$") then
insert("ц-stem")
elseif rfind(base.lemma, "ий$") then
insert("hard-stem stem-stressed")
elseif rfind(base.lemma, "и́й$") then
insert("hard-stem ending-stressed")
elseif rfind(base.lemma, "і́?й$") then
insert("soft-stem")
elseif rfind(base.lemma, "ї́?й$") then
insert("vowel-stem")
end
end)
end
alternant_multiword_spec.categories = cats
end
local function show_forms(alternant_multiword_spec)
local lemmas = {}
local lemmaform = alternant_multiword_spec.forms.nom_m or alternant_multiword_spec.forms.nom_p or
alternant_multiword_spec.forms.nom_mp
if lemmaform then
for _, form in ipairs(lemmaform) do
table.insert(lemmas, com.remove_monosyllabic_stress(form.form))
end
end
local props = {
lemmas = lemmas,
slot_table = get_output_adjective_slots(alternant_multiword_spec),
lang = lang,
canonicalize = function(form)
return com.remove_variant_codes(com.remove_monosyllabic_stress(form))
end,
include_translit = true,
}
iut.show_forms(alternant_multiword_spec.forms, props)
end
local function make_table(alternant_multiword_spec)
local forms = alternant_multiword_spec.forms
local frame = mw.getCurrentFrame()
local function template_prelude()
return frame:expandTemplate{
title = 'inflection-table-top',
args = {
title = '{title}{annotation}',
palette = 'blue',
tall = 'yes',
class="tr-alongside"
}
}
end
local function template_postlude()
return frame:expandTemplate{
title = 'inflection-table-bottom',
args = {
notes = '{footnote}',
}
}
end
local table_spec = template_prelude() .. [=[
! class="outer" colspan="2" |
! class="outer" colspan="3" | singular
! class="outer" rowspan="2" | plural
|-
! colspan="2" |
! masculine
! neuter
! feminine
|-
! colspan="2" | nominative
| {nom_m}
| {nom_n}
| {nom_f}
| {nom_p}
|-
! colspan="2" | genitive
| colspan="2" | {gen_m}
| {gen_f}
| {gen_p}
|-
! colspan="2" | dative
| colspan="2" | {dat_m}
| {dat_f}
| {dat_p}
|-
! rowspan="2" | accusative
! class="secondary" | animate
| {acc_m_an}
| rowspan="2" | {acc_n}
| rowspan="2" | {acc_f}
| {acc_p_an}
|-
! class="secondary" | inanimate
| {acc_m_in}
| {acc_p_in}
|-
! colspan="2" | instrumental
| colspan="2" | {ins_m}
| {ins_f}
| {ins_p}
|-
! colspan="2" | locative
| colspan="2" | {loc_m}
| {loc_f}
| {loc_p}
|-
! colspan="2" | vocative
| {voc_m}
| {voc_n}
| {voc_f}
| {voc_p}{short_clause}
]=] .. template_postlude()
local table_spec_surname = template_prelude() .. [=[
! class="outer" |
! class="outer" colspan="2" | singular
! class="outer" rowspan="2" | plural
|-
!
! masculine
! feminine
|-
! nominative
| {nom_m}
| {nom_f}
| {nom_p}
|-
! genitive
| {gen_m}
| {gen_f}
| {gen_p}
|-
! dative
| {dat_m}
| {dat_f}
| {dat_p}
|-
! accusative
| {acc_m}
| {acc_f}
| {acc_p}
|-
! instrumental
| {ins_m}
| {ins_f}
| {ins_p}
|-
! locative
| {loc_m}
| {loc_f}
| {loc_p}
|-
! vocative
| {voc_m}
| {voc_f}
| {voc_p}
]=] .. template_postlude()
local table_spec_plonly = template_prelude() .. [=[
! colspan="2" |
! plural
|-
! colspan="2" | nominative
| {nom_p}
|-
! colspan="2" | genitive
| {gen_p}
|-
! colspan="2" | dative
| {dat_p}
|-
! rowspan="2" | accusative
! class="secondary" | animate
| {acc_p_an}
|-
! class="secondary" | inanimate
| {acc_p_in}
|-
! colspan="2" | instrumental
| {ins_p}
|-
! colspan="2" | locative
| {loc_p}
|-
! colspan="2" | vocative
| {voc_p}
]=] .. template_postlude()
local table_spec_dva = template_prelude() .. [=[
! colspan="2" |
! class="outer" colspan="2" | plural
|-
! colspan="2" |
! masculine/neuter
! feminine
|-
! colspan="2" | nominative
| {nom_mp}
| {nom_fp}
|-
! colspan="2" | genitive
| colspan="2" | {gen_p}
|-
! colspan="2" | dative
| colspan="2" | {dat_p}
|-
! rowspan="2" | accusative
! class="secondary" | animate
| colspan="2" | {acc_p_an}
|-
! class="secondary" | inanimate
| {acc_mp_in}
| {acc_fp_in}
|-
! colspan="2" | instrumental
| colspan="2" | {ins_p}
|-
! colspan="2" | locative
| colspan="2" | {loc_p}
|-
! colspan="2" | vocative
| {voc_mp}
| {voc_fp}
]=] .. template_postlude()
local short_form_template = [=[
|-
! colspan="6" |
|-
! colspan="2" | short form
| colspan="1" | {short}]=]
if alternant_multiword_spec.title then
forms.title = alternant_multiword_spec.title
else
forms.title = 'Declension of <i lang="uk" class="Cyrl">' .. forms.lemma .. '</i>'
end
if alternant_multiword_spec.manual then
forms.annotation = ""
else
local ann_parts = {}
local decls = {}
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.decl == "surname" then
m_table.insertIfNot(decls, "surname")
elseif base.decl == "poss" then
m_table.insertIfNot(decls, "possessive")
elseif rfind(base.lemma, "и́?й$") then
m_table.insertIfNot(decls, "hard")
else
m_table.insertIfNot(decls, "soft")
end
end)
table.insert(ann_parts, table.concat(decls, " // "))
forms.annotation = " (" .. table.concat(ann_parts, ", ") .. ")"
end
forms.short_clause = forms.short and forms.short ~= "—" and
m_string_utilities.format(short_form_template, forms) or ""
return m_string_utilities.format(
alternant_multiword_spec.surname and table_spec_surname or
alternant_multiword_spec.special == "plonly" and table_spec_plonly or
alternant_multiword_spec.special == "dva" and table_spec_dva or
table_spec, forms
)
end
-- Externally callable function to parse and decline an adjective given
-- user-specified arguments. Return value is WORD_SPEC, an object where the
-- declined forms are in `WORD_SPEC.forms` for each slot. If there are no values
-- for a slot, the slot key will be missing. The value for a given slot is a
-- list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(parent_args, pos, from_headword, def)
local params = {
[1] = {required = true, default = "си́ній"},
json = {type = "boolean"}, -- for use with bots
title = {},
}
for slot, _ in pairs(input_adjective_slots) do
params[slot] = {}
end
local args = m_para.process(parent_args, params)
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
allow_default_indicator = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(args[1], parse_props)
alternant_multiword_spec.title = args.title
alternant_multiword_spec.forms = {}
normalize_all_lemmas(alternant_multiword_spec)
detect_all_indicator_specs(alternant_multiword_spec)
check_allowed_overrides(alternant_multiword_spec, args)
local inflect_props = {
slot_table = get_output_adjective_slots(alternant_multiword_spec),
get_variants = get_variants,
inflect_word_spec = decline_adjective,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
-- Do non-accusative/vocative overrides so they get copied to the accusative/vocative forms appropriately.
process_overrides(alternant_multiword_spec.forms, args)
set_accusative_vocative(alternant_multiword_spec)
-- Do accusative and vocative overrides after copying the accusative/vocative forms.
process_overrides(alternant_multiword_spec.forms, args, "do_acc_voc")
add_categories(alternant_multiword_spec)
if args.json and not from_headword then
return require("Module:JSON").toJSON(alternant_multiword_spec)
end
return alternant_multiword_spec
end
-- Externally callable function to parse and decline an adjective where all
-- forms are given manually. Return value is WORD_SPEC, an object where the
-- declined forms are in `WORD_SPEC.forms` for each slot. If there are no values
-- for a slot, the slot key will be missing. The value for a given slot is a
-- list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms_manual(parent_args, pos, from_headword, def)
local params = {
special = {},
json = {type = "boolean"}, -- for use with bots
title = {},
}
for slot, _ in pairs(input_adjective_slots) do
params[slot] = {}
end
local args = m_para.process(parent_args, params)
local alternant_multiword_spec = {
special = args.special,
title = args.title,
forms = {},
manual = true,
}
check_allowed_overrides(alternant_multiword_spec, args)
-- Do non-accusative/vocative overrides so they get copied to the accusative/vocative forms appropriately.
process_overrides(alternant_multiword_spec.forms, args)
set_accusative_vocative(alternant_multiword_spec)
-- Do accusative and vocative overrides after copying the accusative/vocative forms.
process_overrides(alternant_multiword_spec.forms, args, "do_acc_voc")
add_categories(alternant_multiword_spec)
if args.json and not from_headword then
return require("Module:JSON").toJSON(alternant_multiword_spec)
end
return alternant_multiword_spec
end
-- Entry point for {{uk-adecl}}. Template-callable function to parse and decline
-- an adjective given user-specified arguments and generate a displayable table
-- of the declined forms.
function export.show(frame)
local parent_args = frame:getParent().args
local alternant_multiword_spec = export.do_generate_forms(parent_args)
show_forms(alternant_multiword_spec)
return make_table(alternant_multiword_spec) .. require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang)
end
-- Entry point for {{uk-adecl-manual}}. Template-callable function to parse and
-- decline an adjective given manually-specified inflections and generate a
-- displayable table of the declined forms.
function export.show_manual(frame)
local parent_args = frame:getParent().args
local alternant_multiword_spec = export.do_generate_forms_manual(parent_args)
show_forms(alternant_multiword_spec)
return make_table(alternant_multiword_spec) .. require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang)
end
return export
ijbi92n5r31dlpd4epb9gywh70suxya
Module:uk-adjective/documentation
828
144115
235434
2024-03-06T05:42:38Z
en>WingerBot
0
remove unnecessary categorization now handled automatically by [[Module:documentation]] and [[Module:module categorization]] (manually assisted)
235434
wikitext
text/x-wiki
This module supports {{temp|uk-adecl}} and {{temp|uk-adecl-manual}}.
7jbxe2l2mh15zv9cm7f97csj2nmnyk0
235435
235434
2026-06-02T10:29:47Z
Lee
19
[[:en:Module:uk-adjective/documentation]] වෙතින් එක් සංශෝධනයක්
235434
wikitext
text/x-wiki
This module supports {{temp|uk-adecl}} and {{temp|uk-adecl-manual}}.
7jbxe2l2mh15zv9cm7f97csj2nmnyk0
Module:number list/data/yrk-tun
828
144116
235436
2026-01-22T22:02:06Z
en>Benwing2
0
Benwing2 moved page [[Module:number list/data/yrk]] to [[Module:number list/data/yrk-tun]] without leaving a redirect: rename Nenets codes: yrk -> yrk-tun, syd-fne -> yrk-for per [[Wiktionary:Language_treatment_requests#add_families_"Enets_languages",_"Nenets_languages"_and_"Komi_languages"]]
235436
Scribunto
text/plain
local export = {numbers = {}}
local numbers = {}
export.numbers = numbers
numbers[1] = {
cardinal = "ӈобˮ",
ordinal = "нюртей",
}
numbers[2] = {
cardinal = "сидя",
ordinal = "нябимдей",
fractional = "пеля",
}
numbers[3] = {
cardinal = "няхӑрˮ",
ordinal = "няхӑрамдэй",
fractional = "няхӑрамдоˮма"
}
numbers[4] = {
cardinal = "тет",
ordinal = "тетимдей",
fractional = "тетимдоˮма",
}
numbers[5] = {
cardinal = "сӑмляӈг",
ordinal = "сӑмлянзимдей",
fractional = "сӑмлянзимдаˮма",
}
numbers[6] = {
cardinal = "мӑтˮ",
ordinal = "мӑтдомдэй",
fractional = "мӑтдомдаˮма",
}
numbers[7] = {
cardinal = "сӣˮив",
ordinal = "сӣбимдей",
}
numbers[8] = {
cardinal = "сидндет",
ordinal = "сидндетимдей",
fractional = "сидндетимдаˮма",
}
numbers[9] = {
cardinal = "хасуюˮ",
ordinal = "хасуюдимдей",
fractional = "хасуюдимдаˮма",
}
numbers[10] = {
cardinal = "юˮ",
ordinal = "юдимдей",
fractional = "юдимдаˮма",
}
numbers[100] = {
cardinal = "юрˮ",
ordinal = "юримдей",
fractional = "юримдаˮма",
}
numbers[1000] = {
cardinal = "ёнарˮ",
ordinal = "ёнарамдей",
}
numbers[1000000] = {
cardinal = "миллион",
}
return export
2iwmdccojjfgv0izcic0ucba4kp0uwz
235437
235436
2026-06-02T10:31:12Z
Lee
19
[[:en:Module:number_list/data/yrk-tun]] වෙතින් එක් සංශෝධනයක්
235436
Scribunto
text/plain
local export = {numbers = {}}
local numbers = {}
export.numbers = numbers
numbers[1] = {
cardinal = "ӈобˮ",
ordinal = "нюртей",
}
numbers[2] = {
cardinal = "сидя",
ordinal = "нябимдей",
fractional = "пеля",
}
numbers[3] = {
cardinal = "няхӑрˮ",
ordinal = "няхӑрамдэй",
fractional = "няхӑрамдоˮма"
}
numbers[4] = {
cardinal = "тет",
ordinal = "тетимдей",
fractional = "тетимдоˮма",
}
numbers[5] = {
cardinal = "сӑмляӈг",
ordinal = "сӑмлянзимдей",
fractional = "сӑмлянзимдаˮма",
}
numbers[6] = {
cardinal = "мӑтˮ",
ordinal = "мӑтдомдэй",
fractional = "мӑтдомдаˮма",
}
numbers[7] = {
cardinal = "сӣˮив",
ordinal = "сӣбимдей",
}
numbers[8] = {
cardinal = "сидндет",
ordinal = "сидндетимдей",
fractional = "сидндетимдаˮма",
}
numbers[9] = {
cardinal = "хасуюˮ",
ordinal = "хасуюдимдей",
fractional = "хасуюдимдаˮма",
}
numbers[10] = {
cardinal = "юˮ",
ordinal = "юдимдей",
fractional = "юдимдаˮма",
}
numbers[100] = {
cardinal = "юрˮ",
ordinal = "юримдей",
fractional = "юримдаˮма",
}
numbers[1000] = {
cardinal = "ёнарˮ",
ordinal = "ёнарамдей",
}
numbers[1000000] = {
cardinal = "миллион",
}
return export
2iwmdccojjfgv0izcic0ucba4kp0uwz
235441
235437
2026-06-02T10:32:40Z
Lee
19
Lee විසින් යලියොමුවක් නොදමාම [[Module:number list/data/yrk-tun]] පිටුව [[Module:number list/data/yrk]] වෙත ගෙනයන ලදී
235436
Scribunto
text/plain
local export = {numbers = {}}
local numbers = {}
export.numbers = numbers
numbers[1] = {
cardinal = "ӈобˮ",
ordinal = "нюртей",
}
numbers[2] = {
cardinal = "сидя",
ordinal = "нябимдей",
fractional = "пеля",
}
numbers[3] = {
cardinal = "няхӑрˮ",
ordinal = "няхӑрамдэй",
fractional = "няхӑрамдоˮма"
}
numbers[4] = {
cardinal = "тет",
ordinal = "тетимдей",
fractional = "тетимдоˮма",
}
numbers[5] = {
cardinal = "сӑмляӈг",
ordinal = "сӑмлянзимдей",
fractional = "сӑмлянзимдаˮма",
}
numbers[6] = {
cardinal = "мӑтˮ",
ordinal = "мӑтдомдэй",
fractional = "мӑтдомдаˮма",
}
numbers[7] = {
cardinal = "сӣˮив",
ordinal = "сӣбимдей",
}
numbers[8] = {
cardinal = "сидндет",
ordinal = "сидндетимдей",
fractional = "сидндетимдаˮма",
}
numbers[9] = {
cardinal = "хасуюˮ",
ordinal = "хасуюдимдей",
fractional = "хасуюдимдаˮма",
}
numbers[10] = {
cardinal = "юˮ",
ordinal = "юдимдей",
fractional = "юдимдаˮма",
}
numbers[100] = {
cardinal = "юрˮ",
ordinal = "юримдей",
fractional = "юримдаˮма",
}
numbers[1000] = {
cardinal = "ёнарˮ",
ordinal = "ёнарамдей",
}
numbers[1000000] = {
cardinal = "миллион",
}
return export
2iwmdccojjfgv0izcic0ucba4kp0uwz
235442
235441
2026-06-02T10:33:12Z
Lee
19
Lee විසින් [[Module:number list/data/yrk]] සිට [[Module:number list/data/yrk-tun]] වෙත පිටුව ගෙන යන ලදී
235436
Scribunto
text/plain
local export = {numbers = {}}
local numbers = {}
export.numbers = numbers
numbers[1] = {
cardinal = "ӈобˮ",
ordinal = "нюртей",
}
numbers[2] = {
cardinal = "сидя",
ordinal = "нябимдей",
fractional = "пеля",
}
numbers[3] = {
cardinal = "няхӑрˮ",
ordinal = "няхӑрамдэй",
fractional = "няхӑрамдоˮма"
}
numbers[4] = {
cardinal = "тет",
ordinal = "тетимдей",
fractional = "тетимдоˮма",
}
numbers[5] = {
cardinal = "сӑмляӈг",
ordinal = "сӑмлянзимдей",
fractional = "сӑмлянзимдаˮма",
}
numbers[6] = {
cardinal = "мӑтˮ",
ordinal = "мӑтдомдэй",
fractional = "мӑтдомдаˮма",
}
numbers[7] = {
cardinal = "сӣˮив",
ordinal = "сӣбимдей",
}
numbers[8] = {
cardinal = "сидндет",
ordinal = "сидндетимдей",
fractional = "сидндетимдаˮма",
}
numbers[9] = {
cardinal = "хасуюˮ",
ordinal = "хасуюдимдей",
fractional = "хасуюдимдаˮма",
}
numbers[10] = {
cardinal = "юˮ",
ordinal = "юдимдей",
fractional = "юдимдаˮма",
}
numbers[100] = {
cardinal = "юрˮ",
ordinal = "юримдей",
fractional = "юримдаˮма",
}
numbers[1000] = {
cardinal = "ёнарˮ",
ordinal = "ёнарамдей",
}
numbers[1000000] = {
cardinal = "миллион",
}
return export
2iwmdccojjfgv0izcic0ucba4kp0uwz
Module:yrk-tun-translit
828
144117
235438
2026-01-22T23:25:38Z
en>Benwing2
0
Benwing2 moved page [[Module:yrk-translit]] to [[Module:yrk-tun-translit]] without leaving a redirect: rename Nenets codes: yrk -> yrk-tun, syd-fne -> yrk-for per [[Wiktionary:Language_treatment_requests#add_families_"Enets_languages",_"Nenets_languages"_and_"Komi_languages"]]
235438
Scribunto
text/plain
local export = {}
local tab = {
["А"]="A", ["Б"]="B", ["В"]="W", ["Г"]="G", ["Д"]="D", ["Е"]="Ye", ["Ё"]="Yo", ["Ж"]="Ž", ["З"]="Z", ["И"]="Yi", ["Й"]="Y", ["Ӑ"]="Ă",
["К"]="K", ["Л"]="L", ["М"]="M", ["Н"]="N", ["О"]="O", ["П"]="P", ["Р"]="R", ["С"]="S", ["Т"]="T", ["У"]="U", ["Ф"]="F", ["Ӣ"]="Yī",
["Х"]="X", ["Ц"]="C", ["Ч"]="Ć", ["Ш"]="Š", ["Щ"]="Ś", ["Ъ"]="ʺ", ["Ы"]="I", ["Ь"]="ʹ", ["Э"]="E", ["Ю"]="Yu", ["Я"]="Ya", ["Ӈ"]="Ŋ",
['а']='a', ['б']='b', ['в']='w', ['г']='g', ['д']='d', ['е']='ye', ['ё']='yo', ['ж']='ž', ['з']='z', ['и']='yi', ['й']='y', ["ӑ"]="ă",
['к']='k', ['л']='l', ['м']='m', ['н']='n', ['о']='o', ['п']='p', ['р']='r', ['с']='s', ['т']='t', ['у']='u', ['ф']='f', ["ӣ"]="yī",
['х']='x', ['ц']='c', ['ч']='ć', ['ш']='š', ['щ']='ś', ['ъ']='ʺ', ['ы']='i', ['ь']='ʹ', ['э']='e', ['ю']='yu', ['я']='ya', ["ӈ"]="ŋ",
["ˮ"]="q", ["ʼ"]="h", ['Ӯ']='Ū', ['ӯ']='ū',
}
function export.tr(text, lang, sc)
text = mw.ustring.gsub(text, "([БВГДЖЗЙКЛМНПРСТФХЦЧШЩЬӇбвгджзйклмнпрстфхцчшщьӈ])$", "%1°")
text = mw.ustring.gsub(text, "([БВГДЖЗЙКЛМНПРСТФХЦЧШЩЬӇбвгджзйклмнпрстфхцчшщьӈ]) ", "%1° ")
text = mw.ustring.gsub(text, "([БВГДЖЗЙКЛМНПРСТФХЦЧШЩЬӇбвгджзйклмнпрстфхцчшщьӈ])[ˮʼ]$", "%1")
text = mw.ustring.gsub(text, "([БВГДЖЗЙКЛМНПРСТФХЦЧШЩЬӇбвгджзйклмнпрстфхцчшщьӈ])[ˮʼ] ", "%1 ")
return (mw.ustring.gsub(text, '.' ,tab))
end
return export
q1kv1lcd5uy44cw8g2rio41k8bpbjt3
235439
235438
2026-06-02T10:31:31Z
Lee
19
[[:en:Module:yrk-tun-translit]] වෙතින් එක් සංශෝධනයක්
235438
Scribunto
text/plain
local export = {}
local tab = {
["А"]="A", ["Б"]="B", ["В"]="W", ["Г"]="G", ["Д"]="D", ["Е"]="Ye", ["Ё"]="Yo", ["Ж"]="Ž", ["З"]="Z", ["И"]="Yi", ["Й"]="Y", ["Ӑ"]="Ă",
["К"]="K", ["Л"]="L", ["М"]="M", ["Н"]="N", ["О"]="O", ["П"]="P", ["Р"]="R", ["С"]="S", ["Т"]="T", ["У"]="U", ["Ф"]="F", ["Ӣ"]="Yī",
["Х"]="X", ["Ц"]="C", ["Ч"]="Ć", ["Ш"]="Š", ["Щ"]="Ś", ["Ъ"]="ʺ", ["Ы"]="I", ["Ь"]="ʹ", ["Э"]="E", ["Ю"]="Yu", ["Я"]="Ya", ["Ӈ"]="Ŋ",
['а']='a', ['б']='b', ['в']='w', ['г']='g', ['д']='d', ['е']='ye', ['ё']='yo', ['ж']='ž', ['з']='z', ['и']='yi', ['й']='y', ["ӑ"]="ă",
['к']='k', ['л']='l', ['м']='m', ['н']='n', ['о']='o', ['п']='p', ['р']='r', ['с']='s', ['т']='t', ['у']='u', ['ф']='f', ["ӣ"]="yī",
['х']='x', ['ц']='c', ['ч']='ć', ['ш']='š', ['щ']='ś', ['ъ']='ʺ', ['ы']='i', ['ь']='ʹ', ['э']='e', ['ю']='yu', ['я']='ya', ["ӈ"]="ŋ",
["ˮ"]="q", ["ʼ"]="h", ['Ӯ']='Ū', ['ӯ']='ū',
}
function export.tr(text, lang, sc)
text = mw.ustring.gsub(text, "([БВГДЖЗЙКЛМНПРСТФХЦЧШЩЬӇбвгджзйклмнпрстфхцчшщьӈ])$", "%1°")
text = mw.ustring.gsub(text, "([БВГДЖЗЙКЛМНПРСТФХЦЧШЩЬӇбвгджзйклмнпрстфхцчшщьӈ]) ", "%1° ")
text = mw.ustring.gsub(text, "([БВГДЖЗЙКЛМНПРСТФХЦЧШЩЬӇбвгджзйклмнпрстфхцчшщьӈ])[ˮʼ]$", "%1")
text = mw.ustring.gsub(text, "([БВГДЖЗЙКЛМНПРСТФХЦЧШЩЬӇбвгджзйклмнпрстфхцчшщьӈ])[ˮʼ] ", "%1 ")
return (mw.ustring.gsub(text, '.' ,tab))
end
return export
q1kv1lcd5uy44cw8g2rio41k8bpbjt3
235447
235439
2026-06-02T10:37:47Z
Lee
19
Lee විසින් යලියොමුවක් නොදමාම [[Module:yrk-tun-translit]] පිටුව [[Module:yrk-translit]] වෙත ගෙනයන ලදී
235438
Scribunto
text/plain
local export = {}
local tab = {
["А"]="A", ["Б"]="B", ["В"]="W", ["Г"]="G", ["Д"]="D", ["Е"]="Ye", ["Ё"]="Yo", ["Ж"]="Ž", ["З"]="Z", ["И"]="Yi", ["Й"]="Y", ["Ӑ"]="Ă",
["К"]="K", ["Л"]="L", ["М"]="M", ["Н"]="N", ["О"]="O", ["П"]="P", ["Р"]="R", ["С"]="S", ["Т"]="T", ["У"]="U", ["Ф"]="F", ["Ӣ"]="Yī",
["Х"]="X", ["Ц"]="C", ["Ч"]="Ć", ["Ш"]="Š", ["Щ"]="Ś", ["Ъ"]="ʺ", ["Ы"]="I", ["Ь"]="ʹ", ["Э"]="E", ["Ю"]="Yu", ["Я"]="Ya", ["Ӈ"]="Ŋ",
['а']='a', ['б']='b', ['в']='w', ['г']='g', ['д']='d', ['е']='ye', ['ё']='yo', ['ж']='ž', ['з']='z', ['и']='yi', ['й']='y', ["ӑ"]="ă",
['к']='k', ['л']='l', ['м']='m', ['н']='n', ['о']='o', ['п']='p', ['р']='r', ['с']='s', ['т']='t', ['у']='u', ['ф']='f', ["ӣ"]="yī",
['х']='x', ['ц']='c', ['ч']='ć', ['ш']='š', ['щ']='ś', ['ъ']='ʺ', ['ы']='i', ['ь']='ʹ', ['э']='e', ['ю']='yu', ['я']='ya', ["ӈ"]="ŋ",
["ˮ"]="q", ["ʼ"]="h", ['Ӯ']='Ū', ['ӯ']='ū',
}
function export.tr(text, lang, sc)
text = mw.ustring.gsub(text, "([БВГДЖЗЙКЛМНПРСТФХЦЧШЩЬӇбвгджзйклмнпрстфхцчшщьӈ])$", "%1°")
text = mw.ustring.gsub(text, "([БВГДЖЗЙКЛМНПРСТФХЦЧШЩЬӇбвгджзйклмнпрстфхцчшщьӈ]) ", "%1° ")
text = mw.ustring.gsub(text, "([БВГДЖЗЙКЛМНПРСТФХЦЧШЩЬӇбвгджзйклмнпрстфхцчшщьӈ])[ˮʼ]$", "%1")
text = mw.ustring.gsub(text, "([БВГДЖЗЙКЛМНПРСТФХЦЧШЩЬӇбвгджзйклмнпрстфхцчшщьӈ])[ˮʼ] ", "%1 ")
return (mw.ustring.gsub(text, '.' ,tab))
end
return export
q1kv1lcd5uy44cw8g2rio41k8bpbjt3
235448
235447
2026-06-02T10:38:14Z
Lee
19
Lee විසින් [[Module:yrk-translit]] සිට [[Module:yrk-tun-translit]] වෙත පිටුව ගෙන යන ලදී
235438
Scribunto
text/plain
local export = {}
local tab = {
["А"]="A", ["Б"]="B", ["В"]="W", ["Г"]="G", ["Д"]="D", ["Е"]="Ye", ["Ё"]="Yo", ["Ж"]="Ž", ["З"]="Z", ["И"]="Yi", ["Й"]="Y", ["Ӑ"]="Ă",
["К"]="K", ["Л"]="L", ["М"]="M", ["Н"]="N", ["О"]="O", ["П"]="P", ["Р"]="R", ["С"]="S", ["Т"]="T", ["У"]="U", ["Ф"]="F", ["Ӣ"]="Yī",
["Х"]="X", ["Ц"]="C", ["Ч"]="Ć", ["Ш"]="Š", ["Щ"]="Ś", ["Ъ"]="ʺ", ["Ы"]="I", ["Ь"]="ʹ", ["Э"]="E", ["Ю"]="Yu", ["Я"]="Ya", ["Ӈ"]="Ŋ",
['а']='a', ['б']='b', ['в']='w', ['г']='g', ['д']='d', ['е']='ye', ['ё']='yo', ['ж']='ž', ['з']='z', ['и']='yi', ['й']='y', ["ӑ"]="ă",
['к']='k', ['л']='l', ['м']='m', ['н']='n', ['о']='o', ['п']='p', ['р']='r', ['с']='s', ['т']='t', ['у']='u', ['ф']='f', ["ӣ"]="yī",
['х']='x', ['ц']='c', ['ч']='ć', ['ш']='š', ['щ']='ś', ['ъ']='ʺ', ['ы']='i', ['ь']='ʹ', ['э']='e', ['ю']='yu', ['я']='ya', ["ӈ"]="ŋ",
["ˮ"]="q", ["ʼ"]="h", ['Ӯ']='Ū', ['ӯ']='ū',
}
function export.tr(text, lang, sc)
text = mw.ustring.gsub(text, "([БВГДЖЗЙКЛМНПРСТФХЦЧШЩЬӇбвгджзйклмнпрстфхцчшщьӈ])$", "%1°")
text = mw.ustring.gsub(text, "([БВГДЖЗЙКЛМНПРСТФХЦЧШЩЬӇбвгджзйклмнпрстфхцчшщьӈ]) ", "%1° ")
text = mw.ustring.gsub(text, "([БВГДЖЗЙКЛМНПРСТФХЦЧШЩЬӇбвгджзйклмнпрстфхцчшщьӈ])[ˮʼ]$", "%1")
text = mw.ustring.gsub(text, "([БВГДЖЗЙКЛМНПРСТФХЦЧШЩЬӇбвгджзйклмнпрстфхцчшщьӈ])[ˮʼ] ", "%1 ")
return (mw.ustring.gsub(text, '.' ,tab))
end
return export
q1kv1lcd5uy44cw8g2rio41k8bpbjt3
Module:number list/data/yrk
828
144119
235443
2026-06-02T10:33:12Z
Lee
19
Lee විසින් [[Module:number list/data/yrk]] සිට [[Module:number list/data/yrk-tun]] වෙත පිටුව ගෙන යන ලදී
235443
Scribunto
text/plain
return require [[Module:number list/data/yrk-tun]]
lh06li6wvjmzj93ppk341l3ah7af4oz
Module talk:number list/data/yrk
829
144120
235445
2026-06-02T10:33:12Z
Lee
19
Lee විසින් [[Module talk:number list/data/yrk]] සිට [[Module talk:number list/data/yrk-tun]] වෙත පිටුව ගෙන යන ලදී
235445
wikitext
text/x-wiki
#යළියොමුව [[Module talk:number list/data/yrk-tun]]
a7uy12siyxdwzo2jfe1xw8qzq1xl3sy
Module:yrk-translit
828
144122
235449
2026-06-02T10:38:14Z
Lee
19
Lee විසින් [[Module:yrk-translit]] සිට [[Module:yrk-tun-translit]] වෙත පිටුව ගෙන යන ලදී
235449
Scribunto
text/plain
return require [[Module:yrk-tun-translit]]
acwspob0s8m91tnpw2rqr8u2rcwi3b1
Module:uga-translit
828
144123
235469
2024-04-27T09:41:09Z
en>SurjectionBot
0
Protected "[[Module:uga-translit]]": (bot) automatically protect highly visible templates/modules (reference score: 2000+ >= 1000) ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite))
235469
Scribunto
text/plain
local export = {}
local tt = {
["𐎀"] = "ả", ["𐎁"] = "b", ["𐎂"] = "g", ["𐎃"] = "ḫ", ["𐎄"] = "d",
["𐎅"] = "h", ["𐎆"] = "w", ["𐎇"] = "z", ["𐎈"] = "ḥ", ["𐎉"] = "ṭ",
["𐎊"] = "y", ["𐎋"] = "k", ["𐎌"] = "š", ["𐎍"] = "l", ["𐎎"] = "m",
["𐎏"] = "ḏ", ["𐎐"] = "n", ["𐎑"] = "ẓ", ["𐎒"] = "s", ["𐎓"] = "ʿ",
["𐎔"] = "p", ["𐎕"] = "ṣ", ["𐎖"] = "q", ["𐎗"] = "r", ["𐎘"] = "ṯ",
["𐎙"] = "ġ", ["𐎚"] = "t", ["𐎛"] = "ỉ",["𐎜"] = "ủ", ["𐎝"] = "s̀",
["𐎟"] = " · ", -- word divider
}
local reverse = {
["ả"] = "𐎀", ["b"] = "𐎁", ["g"] = "𐎂", ["ḫ"] = "𐎃", ["d"] = "𐎄",
["h"] = "𐎅", ["w"] = "𐎆", ["z"] = "𐎇", ["ḥ"] = "𐎈", ["ṭ"] = "𐎉",
["y"] = "𐎊", ["k"] = "𐎋", ["š"] = "𐎌", ["l"] = "𐎍", ["m"] = "𐎎",
["ḏ"] = "𐎏", ["n"] = "𐎐", ["ẓ"] = "𐎑", ["s"] = "𐎒", ["ʿ"] = "𐎓",
["p"] = "𐎔", ["ṣ"] = "𐎕", ["q"] = "𐎖", ["r"] = "𐎗", ["ṯ"] = "𐎘",
["ġ"] = "𐎙", ["t"] = "𐎚", ["ỉ"] = "𐎛",["ủ"] = "𐎜", ["ś"] = "𐎝",
["·"] = "𐎟", -- word divider
}
local get_glottal = {
["a"] = "ả",
["i"] = "ỉ",
["u"] = "ủ",
}
local aliases = {
["a"] = "ả",
["i"] = "ỉ",
["u"] = "ủ",
["θ"] = "ṯ",
["ð"] = "ḏ",
["x"] = "ḫ",
["ẖ"] = "ḫ",
["ɣ"] = "ġ",
["ḡ"] = "ġ",
["ħ"] = "ḥ",
["ḳ"] = "q",
["ḓ"] = "ẓ",
}
function export.tr(text, lang, sc)
text = mw.ustring.gsub(text, ".", tt)
return text
end
function export.reverse(text)
if type(text) == "table" then
text = text.args[1]
end
text = mw.ustring.gsub(text, " *[.·] *", "·")
text = mw.ustring.gsub(text, "[ʿˁʕ‘]", "ʿ")
text = mw.ustring.gsub(text, "[ʾˀʔ’]", "ʾ")
text = mw.ustring.gsub(text, "ʾ([aiu])", get_glottal)
text = mw.ustring.gsub(text, "s[̀2₂]", "ś")
text = mw.ustring.gsub(text, "s<sub>2</sub>", "ś")
text = mw.ustring.gsub(text, ".", reverse)
return text
end
return export
6j8ilw9h8b2rmgndr5stv1mxsvvfpwu
235470
235469
2026-06-02T11:00:49Z
Lee
19
[[:en:Module:uga-translit]] වෙතින් එක් සංශෝධනයක්
235469
Scribunto
text/plain
local export = {}
local tt = {
["𐎀"] = "ả", ["𐎁"] = "b", ["𐎂"] = "g", ["𐎃"] = "ḫ", ["𐎄"] = "d",
["𐎅"] = "h", ["𐎆"] = "w", ["𐎇"] = "z", ["𐎈"] = "ḥ", ["𐎉"] = "ṭ",
["𐎊"] = "y", ["𐎋"] = "k", ["𐎌"] = "š", ["𐎍"] = "l", ["𐎎"] = "m",
["𐎏"] = "ḏ", ["𐎐"] = "n", ["𐎑"] = "ẓ", ["𐎒"] = "s", ["𐎓"] = "ʿ",
["𐎔"] = "p", ["𐎕"] = "ṣ", ["𐎖"] = "q", ["𐎗"] = "r", ["𐎘"] = "ṯ",
["𐎙"] = "ġ", ["𐎚"] = "t", ["𐎛"] = "ỉ",["𐎜"] = "ủ", ["𐎝"] = "s̀",
["𐎟"] = " · ", -- word divider
}
local reverse = {
["ả"] = "𐎀", ["b"] = "𐎁", ["g"] = "𐎂", ["ḫ"] = "𐎃", ["d"] = "𐎄",
["h"] = "𐎅", ["w"] = "𐎆", ["z"] = "𐎇", ["ḥ"] = "𐎈", ["ṭ"] = "𐎉",
["y"] = "𐎊", ["k"] = "𐎋", ["š"] = "𐎌", ["l"] = "𐎍", ["m"] = "𐎎",
["ḏ"] = "𐎏", ["n"] = "𐎐", ["ẓ"] = "𐎑", ["s"] = "𐎒", ["ʿ"] = "𐎓",
["p"] = "𐎔", ["ṣ"] = "𐎕", ["q"] = "𐎖", ["r"] = "𐎗", ["ṯ"] = "𐎘",
["ġ"] = "𐎙", ["t"] = "𐎚", ["ỉ"] = "𐎛",["ủ"] = "𐎜", ["ś"] = "𐎝",
["·"] = "𐎟", -- word divider
}
local get_glottal = {
["a"] = "ả",
["i"] = "ỉ",
["u"] = "ủ",
}
local aliases = {
["a"] = "ả",
["i"] = "ỉ",
["u"] = "ủ",
["θ"] = "ṯ",
["ð"] = "ḏ",
["x"] = "ḫ",
["ẖ"] = "ḫ",
["ɣ"] = "ġ",
["ḡ"] = "ġ",
["ħ"] = "ḥ",
["ḳ"] = "q",
["ḓ"] = "ẓ",
}
function export.tr(text, lang, sc)
text = mw.ustring.gsub(text, ".", tt)
return text
end
function export.reverse(text)
if type(text) == "table" then
text = text.args[1]
end
text = mw.ustring.gsub(text, " *[.·] *", "·")
text = mw.ustring.gsub(text, "[ʿˁʕ‘]", "ʿ")
text = mw.ustring.gsub(text, "[ʾˀʔ’]", "ʾ")
text = mw.ustring.gsub(text, "ʾ([aiu])", get_glottal)
text = mw.ustring.gsub(text, "s[̀2₂]", "ś")
text = mw.ustring.gsub(text, "s<sub>2</sub>", "ś")
text = mw.ustring.gsub(text, ".", reverse)
return text
end
return export
6j8ilw9h8b2rmgndr5stv1mxsvvfpwu
Module:uga-translit/documentation
828
144124
235471
2014-07-08T20:44:10Z
en>Rua
0
235471
wikitext
text/x-wiki
{{translit module documentation|uga}}
lmuidfs9hf8jrzopakx5fp6ar17987n
235472
235471
2026-06-02T11:01:17Z
Lee
19
[[:en:Module:uga-translit/documentation]] වෙතින් එක් සංශෝධනයක්
235471
wikitext
text/x-wiki
{{translit module documentation|uga}}
lmuidfs9hf8jrzopakx5fp6ar17987n
Module:etymology languages/canonical names.json
828
144125
235480
2026-05-17T18:29:03Z
en>Theknightwho
0
[[MediaWiki:UpdateLanguageNameAndCode.js|updated]]
235480
json
application/json
{
"ALUPEC Kabuverdianu": "kea-alu",
"Abhiri": "pra-abh",
"Abron": "abr",
"Abuzeydabadi": "xme-abz",
"Abyanehi": "xme-aby",
"Acadian French": "fr-aca",
"Achaemenid Elamite": "elx-ach",
"Achterhoeks": "act",
"Adamawa Fulfulde": "fub",
"Addu Dhivehi": "dv-add",
"Aeolic Greek": "grc-aeo",
"Afghan Uzbek": "uz-afg",
"African Romance": "la-afr",
"Afridi": "ps-afr",
"Akhmimic Coptic": "cop-akh",
"Akuapem Twi": "tw-aku",
"Aleppine North Levantine Arabic": "apc-ale",
"Alsatian Alemannic German": "gsw-FR-als",
"Amdo Tibetan": "adx",
"American English": "en-US",
"Amorehi": "xme-amo",
"Ampezan Ladin": "lld-amp",
"Amrum North Frisian": "frr-amr",
"Anaraki": "xme-ana",
"Anatri Chuvash": "cv-ana",
"Anbarani": "tly-anb",
"Angkorian Old Khmer": "okz-ang",
"Anglian Old English": "ang-ang",
"Anglo-Norman": "xno",
"Anxi Hokkien": "nan-anx",
"Aquitanian": "xaq",
"Aranese": "oc-ara",
"Arbëresh Albanian": "aae",
"Arcadian Greek": "grc-arc",
"Arcadocypriot Greek": "grc-arp",
"Ardestani": "xme-ard",
"Ardhamagadhi Prakrit": "pra-ard",
"Arghu": "klj-arg",
"Armeno-Kipchak": "qwm-arm",
"Arvanitika Albanian": "aat",
"Asalemi": "tly-asa",
"Asante Twi": "tw-asa",
"Ashtiani": "atn",
"Attic Greek": "grc-att",
"Australian Aboriginal English": "en-aae",
"Australian English": "en-AU",
"Austrian German": "de-AT",
"Auvergnat": "oc-auv",
"Avahattha": "inc-aav",
"Avanti": "pra-ava",
"Ayutthaya Old Thai": "th-ayu",
"Azerbaijani Talysh": "tly-aze",
"Badiot Ladin": "lld-bad",
"Badrudi": "xme-bdr",
"Bagirmi Fulfulde": "fui",
"Bahliki": "pra-bah",
"Bajui": "sgh-baj",
"Baltic German": "de-bal",
"Bandari": "bsg-ban",
"Bangash": "ps-bng",
"Bannu": "ps-ban",
"Barlavento Kabuverdianu": "kea-bar",
"Barpetia Kamrupi Assamese": "as-bkm",
"Bartangi": "sgh-bar",
"Bartangi-Oroshori": "sgh-bro",
"Beijing Mandarin": "cmn-bei",
"Beijingic Mandarin": "cmn-bec",
"Belgian Dutch": "nl-BE",
"Besemah": "pse-bsm",
"Betawi Kota": "bew-kot",
"Bhaca": "xh-bha",
"Biblical Aramaic": "arc-bib",
"Biblical Hebrew": "hbo",
"Bidhandi": "xme-bid",
"Bijagani": "xme-bij",
"Boa Vista Kabuverdianu": "kea-bvi",
"Boeotian Greek": "grc-boi",
"Bohairic Coptic": "cop-boh",
"Bolivian Spanish": "es-BO",
"Bombay Hindi": "hi-mum",
"Borana": "gax",
"Borgu Fulfulde": "fue",
"Borujerdi": "xme-bor",
"Brahmanic Sanskrit": "sa-bra",
"Brava Kabuverdianu": "kea-bra",
"Brazilian Portuguese": "pt-BR",
"British English": "en-GB",
"Buddhist Hybrid Sanskrit": "sa-bhs",
"Burenjani": "fay-bur",
"Bushehri": "fay-bsh",
"Byzantine Greek": "gkm",
"Cadorino Ladin": "lld-cad",
"Cajun French": "frc",
"California English": "en-US-CA",
"Camorta": "ncb-cam",
"Campidanese": "sc-sro",
"Canadian English": "en-CA",
"Canadian French": "fr-CA",
"Canadian Ukrainian": "uk-CA",
"Candali": "pra-can",
"Capenate": "xfa-cap",
"Central Ghilzay": "ps-cgi",
"Central Korean": "ko-cen",
"Central Plains Mandarin": "cmn-cep",
"Central Talysh": "tly-cen",
"Central Tati": "xme-ttc-cen",
"Central-Eastern Niger Fulfulde": "fuq",
"Chakavian Serbo-Croatian": "ckm",
"Chakhar Mongolian": "mn-cha",
"Chali Tati": "tks-cal",
"Changtai Hokkien": "nan-cha",
"Chilean Spanish": "es-CL",
"Chimehi": "xme-cim",
"Christian Palestinian Aramaic": "arc-cpa",
"Chungcheong Korean": "ko-chu",
"Ci": "lzh-cii",
"Cisalpine Gaulish": "xcg",
"Classical Azerbaijani": "az-cls",
"Classical Cantonese": "lzh-yue",
"Classical Japanese": "ja-cla",
"Classical Latin": "la-cla",
"Classical Malay": "ms-cla",
"Classical Mandarin": "lzh-cmn",
"Classical Persian": "fa-cls",
"Classical Sanskrit": "cls",
"Classical Tagalog": "tl-cls",
"Classical Taishanese": "lzh-tai",
"Classical Taiwanese Mandarin": "lzh-cmn-TW",
"Colombian Spanish": "es-CO",
"Common Bantu": "bnt-cmn",
"Contemporary Latin": "la-con",
"Coptic Dialect G": "cop-ggg",
"Coptic Dialect J": "cop-jjj",
"Coptic Dialect K": "cop-kkk",
"Coptic Dialect P": "cop-ppp",
"Cretan Ancient Greek": "grc-kre",
"Cretan Greek": "el-crt",
"Cuban Spanish": "es-CU",
"Cuman": "qwm-cum",
"Cypriot Ancient Greek": "grc-cyp",
"Cypriot Greek": "el-cyp",
"Cypriot Turkish": "tr-CY",
"Dabu Hakka": "hak-dab",
"Daksinatya": "pra-dak",
"Damascene North Levantine Arabic": "apc-dam",
"Danesfani": "tks-dan",
"Danube Bulgar": "xbo-dan",
"Danzhou Chinese": "zhx-dan",
"Dari": "prs",
"Dashtaki": "fay-dsh",
"Davani": "fay-dav",
"Delijani": "xme-del",
"Dhakaiya Vaṅga Bengali": "bn-dvn",
"Digor Ossetian": "os-dig",
"Dnieper Baltic": "bat-dni",
"Dobrujan Tatar": "crh-dbj",
"Doric Greek": "grc-dor",
"Dramili": "pra-dra",
"Drents": "drt",
"Dutch Low Saxon": "nds-nl",
"Early Brythonic": "bry-ear",
"Early Mandarin": "cmn-ear",
"Early Medieval Latin": "la-eme",
"Early Middle Chinese": "ltc-ear",
"Early Middle Japanese": "ja-mid-ear",
"Early Middle Korean": "okm-ear",
"Early Middle Mongol": "xng-ear",
"Early Middle Persian": "pal-ear",
"Early Modern Czech": "cs-ear",
"Early Modern English": "en-ear",
"Early Modern Hakka": "hak-eam",
"Early Modern Japanese": "ja-ear",
"Early Modern Spanish": "es-ear",
"Early New High German": "de-ear",
"Early New Persian": "fa-ear",
"Early Old Chinese": "och-ear",
"Early Old Ossetic": "oos-ear",
"Early Old Persian": "peo-ear",
"Early Scots": "enm-esc",
"Early Sogdian": "sog-ear",
"East Frisian Low German": "frs",
"East Midland Middle English": "enm-emi",
"Eastern Armenian": "hye",
"Eastern Balochi": "bgp",
"Eastern Mansi": "mns-eas",
"Eastern Old Japanese": "ojp-eas",
"Eastern Tati": "xme-ttc-eas",
"Ebrahimabadi": "tks-ebr",
"Ecclesiastical Latin": "la-ecc",
"Elean Greek": "grc-ela",
"Emamzada Esmaili": "fay-eze",
"Epic Greek": "grc-epi",
"Epic Sanskrit": "sa-epi",
"Esfarvarini": "tks-esf",
"European Portuguese": "pt-PT",
"Fante Akan": "fat",
"Farizandi": "xme-far",
"Fascian Ladin": "lld-fas",
"Fayyumic Coptic": "cop-fay",
"Fodom Ladin": "lld-fod",
"Fogo Kabuverdianu": "kea-fog",
"Fornes Ladin": "lld-for",
"Frankish": "frk",
"Fumani": "tly-fum",
"Fuyu Kyrgyz": "kjh-fyu",
"Föhr North Frisian": "frr-foh",
"Föhr-Amrum North Frisian": "frr-fam",
"Gangwon Korean": "ko-gan",
"Gascon": "oc-gas",
"Gavkoshaki": "fay-gav",
"Gazi": "gzi",
"Geordie": "en-geo",
"German Low German": "nds-de",
"Ghat": "thv-ght",
"Gheg Albanian": "aln",
"Gherdëina Ladin": "lld-ghe",
"Goesharde North Frisian": "frr-goe",
"Golyad": "bat-gol",
"Goral": "pl-gor",
"Greater Polish": "pl-gre",
"Greenlandic Norse": "non-grn",
"Gronings": "gos",
"Guangzhou Cantonese": "yue-gua",
"Guanzhong Mandarin": "cmn-gua",
"Guernsey Norman": "nrf-grn",
"Guilin Mandarin": "cmn-gui",
"Gurjara Apabhramsa": "inc-agu",
"Gyeonggi Korean": "ko-gyg",
"Gyeongsang Korean": "ko-gys",
"Hailu Hakka": "hak-hai",
"Halligen North Frisian": "frr-hal",
"Hamadani": "xme-ham",
"Hamgyong Korean": "ko-ham",
"Hangzhounese": "wuu-han",
"Hanjani": "xme-han",
"Hanyu Pinyin": "cmn-pinyin",
"Harar Oromo": "hae",
"Hatran Aramaic": "arc-hat",
"Havigannada": "kn-hav",
"Hazaragi": "haz",
"Heligoland North Frisian": "frr-hel",
"Helu Prakrit": "pra-hel",
"Hengyang Xiang": "hsn-hya",
"Hengzhou Xiang": "hsn-hzh",
"Hermopolitan Coptic": "cop-her",
"High Alemannic German": "gsw-hig",
"Highest Alemannic German": "gsw-hst",
"Hokkaido Ainu": "ain-hok",
"Hong Kong Cantonese": "yue-HK",
"Hong Kong English": "en-HK",
"Hong Kong Hakka": "hak-HK",
"Hormozi": "bsg-hor",
"Houlu Min": "nan-hou",
"Hui'an Hokkien": "nan-hui",
"Huiyang Hakka": "hak-hui",
"Huvadhu Dhivehi": "dv-huv",
"Hwanghae Korean": "ko-hwa",
"Imperial Aramaic": "arc-imp",
"Indian English": "en-IN",
"Insular North Frisian": "frr-ins",
"Insular Scots": "sco-ins",
"Ionic Greek": "grc-ion",
"Iranian Persian": "fa-ira",
"Irish English": "en-IE",
"Iron Ossetian": "os-iro",
"Isfahani": "xme-isf",
"Israeli Hebrew": "he-IL",
"Jadrani": "ps-jad",
"Jeolla Korean": "ko-jeo",
"Jersey Norman": "nrf-jer",
"Jewish Babylonian Aramaic": "tmr",
"Jewish Literary Aramaic": "arc-jla",
"Jewish Palestinian Aramaic": "jpa",
"Jianghuai Mandarin": "cmn-jhu",
"Jinjiang Hokkien": "nan-jin",
"Jirofti": "rdb-jir",
"Jowshaqani": "xme-jow",
"Judeo-Arabic": "jrb",
"Kafroni": "xme-kaf",
"Kahaki": "xme-kah",
"Kahnuji": "rdb-kah",
"Kajkavian Serbo-Croatian": "kjv",
"Kakari": "ps-kak",
"Kaliarda": "el-kal",
"Kamviri": "xvi",
"Kandahari": "ps-kan",
"Kaniguram": "oru-kan",
"Karganrudi": "tly-kar",
"Karrharde North Frisian": "frr-kar",
"Kashani": "xme-kas",
"Kasmiri Apabhramsa": "inc-aka",
"Katchal": "ncb-kat",
"Katharevousa": "el-kth",
"Kathiyawadi": "gu-kat",
"Kativiri": "bsh-kat",
"Kentish Middle English": "enm-ken",
"Kentish Old English": "ang-ken",
"Kermani": "xme-krm",
"Kesehi": "xme-kes",
"Khalkha Mongolian": "mn-kha",
"Khamba": "kbg",
"Khams Tibetan": "khg",
"Khargi": "fay-kar",
"Khasa Prakrit": "pra-kha",
"Khatak": "ps-xat",
"Khiaraji": "tks-xia",
"Khollari": "fay-kho",
"Khorchin Mongolian": "mn-khr",
"Khoznini": "tks-xoz",
"Khufi": "sgh-xuf",
"Khughni": "sgh-xug",
"Khughni-Bajui": "sgh-xgb",
"Khunsari": "kfm",
"Khuri": "xme-xur",
"Khuzestani Arabic": "acm-khu",
"Kinmenese Hokkien": "nan-kin",
"Kinyarwanda": "rw-kin",
"Kirundi": "rw-run",
"Koine Greek": "grc-koi",
"Komjani": "xme-kom",
"Kondazi": "fay-kon",
"Korean Classical Chinese": "lzh-KO",
"Kosena": "kze",
"Kromanti": "alv-kro",
"Kundagannada": "kn-kun",
"Kuril Ainu": "ain-kur",
"Kölsch": "ksh",
"Languedocien": "oc-lan",
"Lanuvian": "itc-lan",
"Lanyin Mandarin": "cmn-lan",
"Late Babylonian": "akk-lbb",
"Late Brythonic": "bry-lat",
"Late Egyptian": "egy-lat",
"Late Khotanese": "kho-lat",
"Late Latin": "la-lat",
"Late Middle Chinese": "ltc-lat",
"Late Middle Japanese": "ja-mid-lat",
"Late Middle Mongol": "xng-lat",
"Late Middle Persian": "pal-lat",
"Late Old Chinese": "och-lat",
"Late Old Korean": "oko-lat",
"Late Old Ossetic": "oos-lat",
"Late Old Persian": "peo-lat",
"Late Old Swedish": "gmq-osw-lat",
"Late Sogdian": "sog-lat",
"Law French": "xno-law",
"Lebanese North Levantine Arabic": "apc-leb",
"Lesser Polish": "pl-les",
"Limousin": "oc-lim",
"Lisan ud-Dawat Gujarati": "gu-lda",
"Literary Cantonese": "yue-lit",
"Literary Chinese": "lzh-lit",
"Logar": "oru-log",
"Logudorese": "sc-src",
"Lombardic": "lng",
"Loudi Xiang": "hsn-lou",
"Louisiana French": "fr-lou",
"Low Alemannic German": "gsw-low",
"Low Prussian": "nds-lpr",
"Lucanian": "osc-luc",
"Lunfardo": "es-lun",
"Lycopolitan Coptic": "cop-lyc",
"Língua Geral Amazônica": "tpw-lga",
"Língua Geral Paulista": "tpw-lgp",
"Maasina Fulfulde": "ffm",
"Magadhi Prakrit": "pra-mag",
"Mahallati": "xme-mah",
"Maharastri Apabhramsa": "inc-ama",
"Maharastri Prakrit": "pra-mah",
"Mahsudi": "ps-mah",
"Mainland North Frisian": "frr-mai",
"Maio Kabuverdianu": "kea-mai",
"Malaysian Huiyang Hakka": "hak-hui-MY",
"Malaysian Mandarin": "cmn-MY",
"Mamluk-Kipchak": "qwm-mam",
"Manichaean Middle Persian": "xmn",
"Manx English": "en-IM",
"Masali": "tly-msa",
"Masarami": "fay-mas",
"Masovian Polish": "pl-mas",
"Masulei": "tly-msu",
"Medan Hokkien": "nan-med",
"Medieval Hebrew": "he-med",
"Medieval Latin": "la-med",
"Medieval Sinhalese": "si-med",
"Medieval Tashelhit": "shi-med",
"Meixian Hakka": "hak-mei",
"Mercian Old English": "ang-mer",
"Mexican Spanish": "es-MX",
"Meymehi": "xme-mey",
"Middle Assyrian": "akk-mas",
"Middle Babylonian": "akk-mbb",
"Middle Belarusian": "zle-mbe",
"Middle Bulgarian": "cu-bgm",
"Middle Chuvash": "cv-mid",
"Middle Egyptian": "egy-mid",
"Middle Elamite": "elx-mid",
"Middle Georgian": "ka-mid",
"Middle Hindi": "hi-mid",
"Middle Japanese": "ja-mid",
"Middle Konkani": "kok-mid",
"Middle Polish": "zlw-mpl",
"Middle Russian": "zle-mru",
"Middle Tamil": "ta-mid",
"Middle Ukrainian": "zle-muk",
"Minabi": "bsg-min",
"Mishnaic Hebrew": "he-mis",
"Missouri French": "fr-mis",
"Mitanni": "inc-mit",
"Moldovan": "ro-MD",
"Mooring North Frisian": "frr-moo",
"Mulaku Dhivehi": "dv-mul",
"Mumviri": "bsh-mum",
"Nabataean Aramaic": "arc-nab",
"Nalbaria Kamrupi Assamese": "as-nkm",
"Nancowry": "ncb-nan",
"Nanjing Mandarin": "cmn-nan",
"Naraqi": "xme-nar",
"Nashalji": "xme-nas",
"Natanzi": "ntz",
"Nayini": "nyq",
"Neo-Assyrian": "akk-nas",
"Neo-Babylonian": "akk-nbb",
"Neo-Elamite": "elx-neo",
"Neo-Middle Egyptian": "egy-nmi",
"New Latin": "la-new",
"New Sanskrit": "sa-neo",
"New Xiang": "hsn-new",
"New Zealand English": "en-NZ",
"Nigerian Fulfulde": "fuv",
"Ningbonese": "wuu-nin",
"Noakhailla Vaṅga Bengali": "bn-nvn",
"Nones Ladin": "lld-non",
"North Alaskan Inupiatun": "esi",
"North American English": "en-NNN",
"North Karelian": "krl-nor",
"North Lebanese North Levantine Arabic": "apc-nle",
"North Wales Welsh": "cy-nor",
"Northeastern Mandarin": "cmn-noe",
"Northeastern Pashto": "ps-nea",
"Northern Irish English": "en-GB-NIR",
"Northern Kankanaey": "xnn",
"Northern Lushootseed": "lut-nor",
"Northern Middle English": "enm-nor",
"Northern Scots": "sco-nor",
"Northern Talysh": "tly-nor",
"Northern Tati": "xme-ttc-nor",
"Northern Wu": "wuu-nor",
"Northumbrian Old English": "ang-nor",
"Northwest Alaskan Inupiatun": "esk",
"Northwestern Pashto": "ps-nwe",
"Nuorese": "sc-nuo",
"Nushabadi": "xme-nus",
"Odri": "pra-odr",
"Old Akkadian": "akk-old",
"Old Aramaic": "arc-old",
"Old Assyrian": "akk-oas",
"Old Avestan": "ae-old",
"Old Azari": "xme-azr",
"Old Babylonian": "akk-obb",
"Old Braj": "bra-old",
"Old Chuvash": "cv-old",
"Old Coptic": "cop-old",
"Old Dhivehi": "dv-old",
"Old East Norse": "non-oen",
"Old Egyptian": "egy-old",
"Old Elamite": "elx-old",
"Old Emilian": "egl-old",
"Old Franco-Provençal": "frp-old",
"Old Friulian": "fur-old",
"Old Italian": "roa-oit",
"Old Kazeruni": "fay-kzo",
"Old Khotanese": "kho-old",
"Old Kirghiz": "otk-kir",
"Old Konkani": "kok-old",
"Old Latin": "itc-ola",
"Old Ligurian": "lij-old",
"Old Lombard": "lmo-old",
"Old Malay": "ms-old",
"Old Mohawk": "iro-omo",
"Old Neapolitan": "nap-old",
"Old Northern French": "fro-nor",
"Old Onondaga": "iro-oon",
"Old Ossetic": "oos",
"Old Piedmontese": "pms-old",
"Old Provençal": "oc-pro-old",
"Old Pskovian": "zle-ops",
"Old Romagnol": "rgn-old",
"Old Romansh": "rm-old",
"Old Sardinian": "sc-old",
"Old Shirazi": "fay-sho",
"Old Sicilian": "scn-old",
"Old Tagalog": "tl-old",
"Old Thai": "th-old",
"Old Venetan": "vec-old",
"Old Wendat": "iro-ohu",
"Old West Norse": "non-own",
"Old Xiang": "hsn-old",
"Ontenu": "ont",
"Opuntian Locrian": "grc-opl",
"Ordos Mongolian": "mn-ord",
"Orkhon Turkic": "otk-ork",
"Orma": "orc",
"Oroshori": "sgh-oro",
"Oxyrhynchite Coptic": "cop-oxy",
"Ozolian Locrian": "grc-ozl",
"Paisaci Prakrit": "pra-pai",
"Palasbaria Kamrupi Assamese": "as-pkm",
"Palatine German": "pfl",
"Paleo-Balkan": "qsb-bal",
"Paleo-Hispanic": "qsb-ibe",
"Palladius": "cmn-palladius",
"Palmyrene Aramaic": "arc-pal",
"Pamphylian Greek": "grc-pam",
"Paphian Greek": "el-pap",
"Papuni": "fay-pap",
"Penang Hokkien": "nan-pen",
"Peruvian Spanish": "es-PE",
"Peshawari": "ps-pes",
"Philippine Hokkien": "nan-hbl-PH",
"Philippine Mandarin": "cmn-PH",
"Philippine Spanish": "es-PH",
"Picard Old French": "fro-pic",
"Polari": "pld",
"Postal Romanization": "zh-postal",
"Pracya": "pra-pra",
"Praenestine": "itc-pra",
"Pre-Angkorian Old Khmer": "okz-pre",
"Pre-Classical Chinese": "lzh-pre",
"Pre-Greek": "qsb-grc",
"Proto-Anglo-Frisian": "gmw-afr-pro",
"Proto-Arinic": "qfa-yrn-pro",
"Proto-Baltic": "bat-pro",
"Proto-Bulgar": "trk-bul-pro",
"Proto-Common Turkic": "trk-cmn-pro",
"Proto-Finno-Permic": "urj-fpr-pro",
"Proto-Finno-Ugric": "fiu-pro",
"Proto-Ketic": "qfa-yke-pro",
"Proto-Kottic": "qfa-yko-pro",
"Proto-Lycopolitan Coptic": "cop-ply",
"Proto-Middle Indo-Aryan": "inc-ash-pro",
"Proto-New Indo-Aryan": "pra-pro",
"Proto-North Sea Germanic": "gmw-nsg-pro",
"Proto-Oghur": "trk-ogr-pro",
"Proto-Oghuz": "trk-ogz-pro",
"Proto-Pumpokolic": "qfa-ypm-pro",
"Proto-Romance": "roa-pro",
"Proto-Tibeto-Burman": "tbq-pro",
"Provençal": "oc-pro",
"Puerto Rican Spanish": "es-PR",
"Pulaar": "fuc",
"Pular": "fuf",
"Puter Romansh": "rm-put",
"Pyongan Korean": "ko-pyo",
"Qalhari": "xme-qal",
"Qashqai": "qxq",
"Qianlu Min": "nan-qia",
"Qohrudi": "xme-qoh",
"Quanzhou Hokkien": "nan-qua",
"Renaissance Latin": "la-ren",
"Rigvedic Sanskrit": "sa-rig",
"Rioplatense Spanish": "es-AR",
"Roshani": "sgh-ros",
"Roshani-Khufi": "sgh-rsx",
"Rumantsch Grischun": "rm-gri",
"Russian Church Slavonic": "zls-chs-ru",
"Sabari": "pra-sab",
"Sagzabadi": "tks-sag",
"Sahidic Coptic": "cop-sah",
"Saint Dominican Creole French": "ht-sdm",
"Sakari": "pra-sak",
"Sakhalin Ainu": "ain-sak",
"Sal Kabuverdianu": "kea-sal",
"Sallands": "sdz",
"Samghani": "fay-sam",
"Samnite": "osc-sam",
"Santiago Kabuverdianu": "kea-san",
"Santo Antão Kabuverdianu": "kea-saa",
"Sauraseni Apabhramsa": "inc-asa",
"Sauraseni Prakrit": "pra-sau",
"Scottish English": "en-GB-SCT",
"Sedehi": "xme-sed",
"Shadi Wu": "wuu-chm",
"Shandarmani": "tly-san",
"Shanghainese": "wuu-sha",
"Shangsi Zhuang": "tai-shz",
"Sher": "ps-ser",
"Shirazi": "fay-shr",
"Shuadit": "oc-jud",
"Silesian East Central German": "sli",
"Singapore Hokkien": "nan-hbl-SG",
"Singapore Mandarin": "cmn-SG",
"Sixian Hakka": "hak-six",
"Skagit": "ska",
"Snohomish": "sno",
"Soi": "soj",
"Sorkhi": "fay-sor",
"Sotavento Kabuverdianu": "kea-sot",
"South African English": "en-ZA",
"South Karelian": "krl-sou",
"South Lebanese North Levantine Arabic": "apc-sle",
"South Wales Welsh": "cy-sou",
"Southeastern Pashto": "ps-sea",
"Southern Balochi": "bcc",
"Southern Lushootseed": "slh",
"Southern Malaysian Hokkien": "nan-spm",
"Southern Middle English": "enm-sou",
"Southern Scots": "sco-sou",
"Southern Talysh": "tly-sou",
"Southern Tati": "xme-ttc-sou",
"Southwestern Mandarin": "cmn-sow",
"Southwestern Pashto": "ps-swe",
"Standard Babylonian": "akk-stb",
"Stellingwerfs": "stl",
"Suevic": "gem-sue",
"Sukhothai Old Thai": "th-suk",
"Surmiran Romansh": "rm-srm",
"Sursilvan Romansh": "rm-srs",
"Sutsilvan Romansh": "rm-sut",
"Suzhounese": "wuu-suz",
"Swiss French": "fr-CH",
"Switzerland German": "de-CH",
"Switzerland Italian": "it-CH",
"Sylt North Frisian": "frr-syl",
"Syrian North Levantine Arabic": "apc-syr",
"São Nicolau Kabuverdianu": "kea-sni",
"São Vicente Kabuverdianu": "kea-svi",
"Taiwanese Hakka": "hak-TW",
"Taiwanese Hokkien": "nan-hbl-TW",
"Taiwanese Mandarin": "cmn-TW",
"Takestani": "tks-tak",
"Takka Apabhramsa": "inc-ata",
"Taleshdulabi": "tly-tal",
"Tamahaq": "thv",
"Tamasheq": "taq",
"Tarehi": "xme-trh",
"Tari": "xme-tar",
"Tawellemmet": "ttq",
"Tayert": "thz",
"Thessalian Greek": "grc-ths",
"Tianjin Mandarin": "cmn-tia",
"Tong'an Hokkien": "nan-ton",
"Tongyong Pinyin": "cmn-tongyong",
"Torlakian Serbo-Croatian": "sh-tor",
"Tosk Albanian": "als",
"Traditional Chinese poetry": "lzh-shi",
"Transalpine Gaulish": "xtg",
"Tseku": "tsk",
"Tularudi": "tly-tul",
"Twents": "twd",
"Twi Akan": "tw",
"Ukrainian Church Slavonic": "zls-chs-uk",
"Ulster English": "en-uls",
"Ulster Scots": "sco-uls",
"United States Spanish": "es-US",
"Upper Saxon German": "sxu",
"Vafsi": "vaf",
"Valencian": "ca-val",
"Vallader Romansh": "rm-val",
"Valujerdi": "xme-val",
"Varani": "xme-var",
"Varzenehi": "xme-vrz",
"Vedic Sanskrit": "vsn",
"Veluws": "vel",
"Venezuelan Spanish": "es-VE",
"Viennese German": "de-AT-vie",
"Vietnamese Classical Chinese": "lzh-VI",
"Viryal Chuvash": "cv-vir",
"Vivaro-Alpine": "oc-viv",
"Volga Bulgar": "xbo-vol",
"Vonishuni": "xme-von",
"Vracada Apabhramsa": "inc-avr",
"Vulgar Latin": "la-vul",
"Waata": "ssn",
"Wade–Giles": "cmn-wadegiles",
"Walser German": "wae",
"Wasa": "wss",
"Waziri": "ps-waz",
"Welsh English": "en-GB-WLS",
"Wenzhounese": "wuu-wen",
"West Midland Middle English": "enm-wmi",
"West Saxon Old English": "ang-wsx",
"Western Armenian": "hyw",
"Western Balochi": "bgn",
"Western Mansi": "mns-wes",
"Western Niger Fulfulde": "fuh",
"Western Punjabi": "pnb",
"Western Tati": "xme-ttc-wes",
"Westphalian": "wep",
"Wiedingharde North Frisian": "frr-wie",
"Written vernacular Cantonese": "yue-wvc",
"Written vernacular Mandarin": "cmn-wvc",
"Written vernacular Taishanese": "zhx-tai-wvc",
"Wuhan Mandarin": "cmn-wuh",
"Xiamen Hokkien": "nan-xia",
"Xining Mandarin": "cmn-xin",
"Yangzhou Mandarin": "cmn-yan",
"Yarandi": "xme-yar",
"Yazdi": "xme-yaz",
"Yongchun Hokkien": "nan-yon",
"Younger Avestan": "ae-yng",
"Yukjin Korean": "ko-yuk",
"Zarphatic": "zrp",
"Zefrehi": "xme-zef",
"Zhangping Hokkien": "nan-zhp",
"Zhangzhou Hokkien": "nan-zha",
"Zhao'an Hakka": "hak-zha",
"Zhao'an Hokkien": "nan-zho",
"Zhongshan Min": "zhx-zho",
"Zori": "xme-zor",
"Zoroastrian Dari": "gbz",
"taxonomic name": "mul-tax",
"the BMAC substrate": "qsb-bma"
}
mifa94441zjggsetp815ei1at85xxlb
235481
235480
2026-06-02T11:16:39Z
Lee
19
[[:en:Module:etymology_languages/canonical_names.json]] වෙතින් එක් සංශෝධනයක්
235480
json
application/json
{
"ALUPEC Kabuverdianu": "kea-alu",
"Abhiri": "pra-abh",
"Abron": "abr",
"Abuzeydabadi": "xme-abz",
"Abyanehi": "xme-aby",
"Acadian French": "fr-aca",
"Achaemenid Elamite": "elx-ach",
"Achterhoeks": "act",
"Adamawa Fulfulde": "fub",
"Addu Dhivehi": "dv-add",
"Aeolic Greek": "grc-aeo",
"Afghan Uzbek": "uz-afg",
"African Romance": "la-afr",
"Afridi": "ps-afr",
"Akhmimic Coptic": "cop-akh",
"Akuapem Twi": "tw-aku",
"Aleppine North Levantine Arabic": "apc-ale",
"Alsatian Alemannic German": "gsw-FR-als",
"Amdo Tibetan": "adx",
"American English": "en-US",
"Amorehi": "xme-amo",
"Ampezan Ladin": "lld-amp",
"Amrum North Frisian": "frr-amr",
"Anaraki": "xme-ana",
"Anatri Chuvash": "cv-ana",
"Anbarani": "tly-anb",
"Angkorian Old Khmer": "okz-ang",
"Anglian Old English": "ang-ang",
"Anglo-Norman": "xno",
"Anxi Hokkien": "nan-anx",
"Aquitanian": "xaq",
"Aranese": "oc-ara",
"Arbëresh Albanian": "aae",
"Arcadian Greek": "grc-arc",
"Arcadocypriot Greek": "grc-arp",
"Ardestani": "xme-ard",
"Ardhamagadhi Prakrit": "pra-ard",
"Arghu": "klj-arg",
"Armeno-Kipchak": "qwm-arm",
"Arvanitika Albanian": "aat",
"Asalemi": "tly-asa",
"Asante Twi": "tw-asa",
"Ashtiani": "atn",
"Attic Greek": "grc-att",
"Australian Aboriginal English": "en-aae",
"Australian English": "en-AU",
"Austrian German": "de-AT",
"Auvergnat": "oc-auv",
"Avahattha": "inc-aav",
"Avanti": "pra-ava",
"Ayutthaya Old Thai": "th-ayu",
"Azerbaijani Talysh": "tly-aze",
"Badiot Ladin": "lld-bad",
"Badrudi": "xme-bdr",
"Bagirmi Fulfulde": "fui",
"Bahliki": "pra-bah",
"Bajui": "sgh-baj",
"Baltic German": "de-bal",
"Bandari": "bsg-ban",
"Bangash": "ps-bng",
"Bannu": "ps-ban",
"Barlavento Kabuverdianu": "kea-bar",
"Barpetia Kamrupi Assamese": "as-bkm",
"Bartangi": "sgh-bar",
"Bartangi-Oroshori": "sgh-bro",
"Beijing Mandarin": "cmn-bei",
"Beijingic Mandarin": "cmn-bec",
"Belgian Dutch": "nl-BE",
"Besemah": "pse-bsm",
"Betawi Kota": "bew-kot",
"Bhaca": "xh-bha",
"Biblical Aramaic": "arc-bib",
"Biblical Hebrew": "hbo",
"Bidhandi": "xme-bid",
"Bijagani": "xme-bij",
"Boa Vista Kabuverdianu": "kea-bvi",
"Boeotian Greek": "grc-boi",
"Bohairic Coptic": "cop-boh",
"Bolivian Spanish": "es-BO",
"Bombay Hindi": "hi-mum",
"Borana": "gax",
"Borgu Fulfulde": "fue",
"Borujerdi": "xme-bor",
"Brahmanic Sanskrit": "sa-bra",
"Brava Kabuverdianu": "kea-bra",
"Brazilian Portuguese": "pt-BR",
"British English": "en-GB",
"Buddhist Hybrid Sanskrit": "sa-bhs",
"Burenjani": "fay-bur",
"Bushehri": "fay-bsh",
"Byzantine Greek": "gkm",
"Cadorino Ladin": "lld-cad",
"Cajun French": "frc",
"California English": "en-US-CA",
"Camorta": "ncb-cam",
"Campidanese": "sc-sro",
"Canadian English": "en-CA",
"Canadian French": "fr-CA",
"Canadian Ukrainian": "uk-CA",
"Candali": "pra-can",
"Capenate": "xfa-cap",
"Central Ghilzay": "ps-cgi",
"Central Korean": "ko-cen",
"Central Plains Mandarin": "cmn-cep",
"Central Talysh": "tly-cen",
"Central Tati": "xme-ttc-cen",
"Central-Eastern Niger Fulfulde": "fuq",
"Chakavian Serbo-Croatian": "ckm",
"Chakhar Mongolian": "mn-cha",
"Chali Tati": "tks-cal",
"Changtai Hokkien": "nan-cha",
"Chilean Spanish": "es-CL",
"Chimehi": "xme-cim",
"Christian Palestinian Aramaic": "arc-cpa",
"Chungcheong Korean": "ko-chu",
"Ci": "lzh-cii",
"Cisalpine Gaulish": "xcg",
"Classical Azerbaijani": "az-cls",
"Classical Cantonese": "lzh-yue",
"Classical Japanese": "ja-cla",
"Classical Latin": "la-cla",
"Classical Malay": "ms-cla",
"Classical Mandarin": "lzh-cmn",
"Classical Persian": "fa-cls",
"Classical Sanskrit": "cls",
"Classical Tagalog": "tl-cls",
"Classical Taishanese": "lzh-tai",
"Classical Taiwanese Mandarin": "lzh-cmn-TW",
"Colombian Spanish": "es-CO",
"Common Bantu": "bnt-cmn",
"Contemporary Latin": "la-con",
"Coptic Dialect G": "cop-ggg",
"Coptic Dialect J": "cop-jjj",
"Coptic Dialect K": "cop-kkk",
"Coptic Dialect P": "cop-ppp",
"Cretan Ancient Greek": "grc-kre",
"Cretan Greek": "el-crt",
"Cuban Spanish": "es-CU",
"Cuman": "qwm-cum",
"Cypriot Ancient Greek": "grc-cyp",
"Cypriot Greek": "el-cyp",
"Cypriot Turkish": "tr-CY",
"Dabu Hakka": "hak-dab",
"Daksinatya": "pra-dak",
"Damascene North Levantine Arabic": "apc-dam",
"Danesfani": "tks-dan",
"Danube Bulgar": "xbo-dan",
"Danzhou Chinese": "zhx-dan",
"Dari": "prs",
"Dashtaki": "fay-dsh",
"Davani": "fay-dav",
"Delijani": "xme-del",
"Dhakaiya Vaṅga Bengali": "bn-dvn",
"Digor Ossetian": "os-dig",
"Dnieper Baltic": "bat-dni",
"Dobrujan Tatar": "crh-dbj",
"Doric Greek": "grc-dor",
"Dramili": "pra-dra",
"Drents": "drt",
"Dutch Low Saxon": "nds-nl",
"Early Brythonic": "bry-ear",
"Early Mandarin": "cmn-ear",
"Early Medieval Latin": "la-eme",
"Early Middle Chinese": "ltc-ear",
"Early Middle Japanese": "ja-mid-ear",
"Early Middle Korean": "okm-ear",
"Early Middle Mongol": "xng-ear",
"Early Middle Persian": "pal-ear",
"Early Modern Czech": "cs-ear",
"Early Modern English": "en-ear",
"Early Modern Hakka": "hak-eam",
"Early Modern Japanese": "ja-ear",
"Early Modern Spanish": "es-ear",
"Early New High German": "de-ear",
"Early New Persian": "fa-ear",
"Early Old Chinese": "och-ear",
"Early Old Ossetic": "oos-ear",
"Early Old Persian": "peo-ear",
"Early Scots": "enm-esc",
"Early Sogdian": "sog-ear",
"East Frisian Low German": "frs",
"East Midland Middle English": "enm-emi",
"Eastern Armenian": "hye",
"Eastern Balochi": "bgp",
"Eastern Mansi": "mns-eas",
"Eastern Old Japanese": "ojp-eas",
"Eastern Tati": "xme-ttc-eas",
"Ebrahimabadi": "tks-ebr",
"Ecclesiastical Latin": "la-ecc",
"Elean Greek": "grc-ela",
"Emamzada Esmaili": "fay-eze",
"Epic Greek": "grc-epi",
"Epic Sanskrit": "sa-epi",
"Esfarvarini": "tks-esf",
"European Portuguese": "pt-PT",
"Fante Akan": "fat",
"Farizandi": "xme-far",
"Fascian Ladin": "lld-fas",
"Fayyumic Coptic": "cop-fay",
"Fodom Ladin": "lld-fod",
"Fogo Kabuverdianu": "kea-fog",
"Fornes Ladin": "lld-for",
"Frankish": "frk",
"Fumani": "tly-fum",
"Fuyu Kyrgyz": "kjh-fyu",
"Föhr North Frisian": "frr-foh",
"Föhr-Amrum North Frisian": "frr-fam",
"Gangwon Korean": "ko-gan",
"Gascon": "oc-gas",
"Gavkoshaki": "fay-gav",
"Gazi": "gzi",
"Geordie": "en-geo",
"German Low German": "nds-de",
"Ghat": "thv-ght",
"Gheg Albanian": "aln",
"Gherdëina Ladin": "lld-ghe",
"Goesharde North Frisian": "frr-goe",
"Golyad": "bat-gol",
"Goral": "pl-gor",
"Greater Polish": "pl-gre",
"Greenlandic Norse": "non-grn",
"Gronings": "gos",
"Guangzhou Cantonese": "yue-gua",
"Guanzhong Mandarin": "cmn-gua",
"Guernsey Norman": "nrf-grn",
"Guilin Mandarin": "cmn-gui",
"Gurjara Apabhramsa": "inc-agu",
"Gyeonggi Korean": "ko-gyg",
"Gyeongsang Korean": "ko-gys",
"Hailu Hakka": "hak-hai",
"Halligen North Frisian": "frr-hal",
"Hamadani": "xme-ham",
"Hamgyong Korean": "ko-ham",
"Hangzhounese": "wuu-han",
"Hanjani": "xme-han",
"Hanyu Pinyin": "cmn-pinyin",
"Harar Oromo": "hae",
"Hatran Aramaic": "arc-hat",
"Havigannada": "kn-hav",
"Hazaragi": "haz",
"Heligoland North Frisian": "frr-hel",
"Helu Prakrit": "pra-hel",
"Hengyang Xiang": "hsn-hya",
"Hengzhou Xiang": "hsn-hzh",
"Hermopolitan Coptic": "cop-her",
"High Alemannic German": "gsw-hig",
"Highest Alemannic German": "gsw-hst",
"Hokkaido Ainu": "ain-hok",
"Hong Kong Cantonese": "yue-HK",
"Hong Kong English": "en-HK",
"Hong Kong Hakka": "hak-HK",
"Hormozi": "bsg-hor",
"Houlu Min": "nan-hou",
"Hui'an Hokkien": "nan-hui",
"Huiyang Hakka": "hak-hui",
"Huvadhu Dhivehi": "dv-huv",
"Hwanghae Korean": "ko-hwa",
"Imperial Aramaic": "arc-imp",
"Indian English": "en-IN",
"Insular North Frisian": "frr-ins",
"Insular Scots": "sco-ins",
"Ionic Greek": "grc-ion",
"Iranian Persian": "fa-ira",
"Irish English": "en-IE",
"Iron Ossetian": "os-iro",
"Isfahani": "xme-isf",
"Israeli Hebrew": "he-IL",
"Jadrani": "ps-jad",
"Jeolla Korean": "ko-jeo",
"Jersey Norman": "nrf-jer",
"Jewish Babylonian Aramaic": "tmr",
"Jewish Literary Aramaic": "arc-jla",
"Jewish Palestinian Aramaic": "jpa",
"Jianghuai Mandarin": "cmn-jhu",
"Jinjiang Hokkien": "nan-jin",
"Jirofti": "rdb-jir",
"Jowshaqani": "xme-jow",
"Judeo-Arabic": "jrb",
"Kafroni": "xme-kaf",
"Kahaki": "xme-kah",
"Kahnuji": "rdb-kah",
"Kajkavian Serbo-Croatian": "kjv",
"Kakari": "ps-kak",
"Kaliarda": "el-kal",
"Kamviri": "xvi",
"Kandahari": "ps-kan",
"Kaniguram": "oru-kan",
"Karganrudi": "tly-kar",
"Karrharde North Frisian": "frr-kar",
"Kashani": "xme-kas",
"Kasmiri Apabhramsa": "inc-aka",
"Katchal": "ncb-kat",
"Katharevousa": "el-kth",
"Kathiyawadi": "gu-kat",
"Kativiri": "bsh-kat",
"Kentish Middle English": "enm-ken",
"Kentish Old English": "ang-ken",
"Kermani": "xme-krm",
"Kesehi": "xme-kes",
"Khalkha Mongolian": "mn-kha",
"Khamba": "kbg",
"Khams Tibetan": "khg",
"Khargi": "fay-kar",
"Khasa Prakrit": "pra-kha",
"Khatak": "ps-xat",
"Khiaraji": "tks-xia",
"Khollari": "fay-kho",
"Khorchin Mongolian": "mn-khr",
"Khoznini": "tks-xoz",
"Khufi": "sgh-xuf",
"Khughni": "sgh-xug",
"Khughni-Bajui": "sgh-xgb",
"Khunsari": "kfm",
"Khuri": "xme-xur",
"Khuzestani Arabic": "acm-khu",
"Kinmenese Hokkien": "nan-kin",
"Kinyarwanda": "rw-kin",
"Kirundi": "rw-run",
"Koine Greek": "grc-koi",
"Komjani": "xme-kom",
"Kondazi": "fay-kon",
"Korean Classical Chinese": "lzh-KO",
"Kosena": "kze",
"Kromanti": "alv-kro",
"Kundagannada": "kn-kun",
"Kuril Ainu": "ain-kur",
"Kölsch": "ksh",
"Languedocien": "oc-lan",
"Lanuvian": "itc-lan",
"Lanyin Mandarin": "cmn-lan",
"Late Babylonian": "akk-lbb",
"Late Brythonic": "bry-lat",
"Late Egyptian": "egy-lat",
"Late Khotanese": "kho-lat",
"Late Latin": "la-lat",
"Late Middle Chinese": "ltc-lat",
"Late Middle Japanese": "ja-mid-lat",
"Late Middle Mongol": "xng-lat",
"Late Middle Persian": "pal-lat",
"Late Old Chinese": "och-lat",
"Late Old Korean": "oko-lat",
"Late Old Ossetic": "oos-lat",
"Late Old Persian": "peo-lat",
"Late Old Swedish": "gmq-osw-lat",
"Late Sogdian": "sog-lat",
"Law French": "xno-law",
"Lebanese North Levantine Arabic": "apc-leb",
"Lesser Polish": "pl-les",
"Limousin": "oc-lim",
"Lisan ud-Dawat Gujarati": "gu-lda",
"Literary Cantonese": "yue-lit",
"Literary Chinese": "lzh-lit",
"Logar": "oru-log",
"Logudorese": "sc-src",
"Lombardic": "lng",
"Loudi Xiang": "hsn-lou",
"Louisiana French": "fr-lou",
"Low Alemannic German": "gsw-low",
"Low Prussian": "nds-lpr",
"Lucanian": "osc-luc",
"Lunfardo": "es-lun",
"Lycopolitan Coptic": "cop-lyc",
"Língua Geral Amazônica": "tpw-lga",
"Língua Geral Paulista": "tpw-lgp",
"Maasina Fulfulde": "ffm",
"Magadhi Prakrit": "pra-mag",
"Mahallati": "xme-mah",
"Maharastri Apabhramsa": "inc-ama",
"Maharastri Prakrit": "pra-mah",
"Mahsudi": "ps-mah",
"Mainland North Frisian": "frr-mai",
"Maio Kabuverdianu": "kea-mai",
"Malaysian Huiyang Hakka": "hak-hui-MY",
"Malaysian Mandarin": "cmn-MY",
"Mamluk-Kipchak": "qwm-mam",
"Manichaean Middle Persian": "xmn",
"Manx English": "en-IM",
"Masali": "tly-msa",
"Masarami": "fay-mas",
"Masovian Polish": "pl-mas",
"Masulei": "tly-msu",
"Medan Hokkien": "nan-med",
"Medieval Hebrew": "he-med",
"Medieval Latin": "la-med",
"Medieval Sinhalese": "si-med",
"Medieval Tashelhit": "shi-med",
"Meixian Hakka": "hak-mei",
"Mercian Old English": "ang-mer",
"Mexican Spanish": "es-MX",
"Meymehi": "xme-mey",
"Middle Assyrian": "akk-mas",
"Middle Babylonian": "akk-mbb",
"Middle Belarusian": "zle-mbe",
"Middle Bulgarian": "cu-bgm",
"Middle Chuvash": "cv-mid",
"Middle Egyptian": "egy-mid",
"Middle Elamite": "elx-mid",
"Middle Georgian": "ka-mid",
"Middle Hindi": "hi-mid",
"Middle Japanese": "ja-mid",
"Middle Konkani": "kok-mid",
"Middle Polish": "zlw-mpl",
"Middle Russian": "zle-mru",
"Middle Tamil": "ta-mid",
"Middle Ukrainian": "zle-muk",
"Minabi": "bsg-min",
"Mishnaic Hebrew": "he-mis",
"Missouri French": "fr-mis",
"Mitanni": "inc-mit",
"Moldovan": "ro-MD",
"Mooring North Frisian": "frr-moo",
"Mulaku Dhivehi": "dv-mul",
"Mumviri": "bsh-mum",
"Nabataean Aramaic": "arc-nab",
"Nalbaria Kamrupi Assamese": "as-nkm",
"Nancowry": "ncb-nan",
"Nanjing Mandarin": "cmn-nan",
"Naraqi": "xme-nar",
"Nashalji": "xme-nas",
"Natanzi": "ntz",
"Nayini": "nyq",
"Neo-Assyrian": "akk-nas",
"Neo-Babylonian": "akk-nbb",
"Neo-Elamite": "elx-neo",
"Neo-Middle Egyptian": "egy-nmi",
"New Latin": "la-new",
"New Sanskrit": "sa-neo",
"New Xiang": "hsn-new",
"New Zealand English": "en-NZ",
"Nigerian Fulfulde": "fuv",
"Ningbonese": "wuu-nin",
"Noakhailla Vaṅga Bengali": "bn-nvn",
"Nones Ladin": "lld-non",
"North Alaskan Inupiatun": "esi",
"North American English": "en-NNN",
"North Karelian": "krl-nor",
"North Lebanese North Levantine Arabic": "apc-nle",
"North Wales Welsh": "cy-nor",
"Northeastern Mandarin": "cmn-noe",
"Northeastern Pashto": "ps-nea",
"Northern Irish English": "en-GB-NIR",
"Northern Kankanaey": "xnn",
"Northern Lushootseed": "lut-nor",
"Northern Middle English": "enm-nor",
"Northern Scots": "sco-nor",
"Northern Talysh": "tly-nor",
"Northern Tati": "xme-ttc-nor",
"Northern Wu": "wuu-nor",
"Northumbrian Old English": "ang-nor",
"Northwest Alaskan Inupiatun": "esk",
"Northwestern Pashto": "ps-nwe",
"Nuorese": "sc-nuo",
"Nushabadi": "xme-nus",
"Odri": "pra-odr",
"Old Akkadian": "akk-old",
"Old Aramaic": "arc-old",
"Old Assyrian": "akk-oas",
"Old Avestan": "ae-old",
"Old Azari": "xme-azr",
"Old Babylonian": "akk-obb",
"Old Braj": "bra-old",
"Old Chuvash": "cv-old",
"Old Coptic": "cop-old",
"Old Dhivehi": "dv-old",
"Old East Norse": "non-oen",
"Old Egyptian": "egy-old",
"Old Elamite": "elx-old",
"Old Emilian": "egl-old",
"Old Franco-Provençal": "frp-old",
"Old Friulian": "fur-old",
"Old Italian": "roa-oit",
"Old Kazeruni": "fay-kzo",
"Old Khotanese": "kho-old",
"Old Kirghiz": "otk-kir",
"Old Konkani": "kok-old",
"Old Latin": "itc-ola",
"Old Ligurian": "lij-old",
"Old Lombard": "lmo-old",
"Old Malay": "ms-old",
"Old Mohawk": "iro-omo",
"Old Neapolitan": "nap-old",
"Old Northern French": "fro-nor",
"Old Onondaga": "iro-oon",
"Old Ossetic": "oos",
"Old Piedmontese": "pms-old",
"Old Provençal": "oc-pro-old",
"Old Pskovian": "zle-ops",
"Old Romagnol": "rgn-old",
"Old Romansh": "rm-old",
"Old Sardinian": "sc-old",
"Old Shirazi": "fay-sho",
"Old Sicilian": "scn-old",
"Old Tagalog": "tl-old",
"Old Thai": "th-old",
"Old Venetan": "vec-old",
"Old Wendat": "iro-ohu",
"Old West Norse": "non-own",
"Old Xiang": "hsn-old",
"Ontenu": "ont",
"Opuntian Locrian": "grc-opl",
"Ordos Mongolian": "mn-ord",
"Orkhon Turkic": "otk-ork",
"Orma": "orc",
"Oroshori": "sgh-oro",
"Oxyrhynchite Coptic": "cop-oxy",
"Ozolian Locrian": "grc-ozl",
"Paisaci Prakrit": "pra-pai",
"Palasbaria Kamrupi Assamese": "as-pkm",
"Palatine German": "pfl",
"Paleo-Balkan": "qsb-bal",
"Paleo-Hispanic": "qsb-ibe",
"Palladius": "cmn-palladius",
"Palmyrene Aramaic": "arc-pal",
"Pamphylian Greek": "grc-pam",
"Paphian Greek": "el-pap",
"Papuni": "fay-pap",
"Penang Hokkien": "nan-pen",
"Peruvian Spanish": "es-PE",
"Peshawari": "ps-pes",
"Philippine Hokkien": "nan-hbl-PH",
"Philippine Mandarin": "cmn-PH",
"Philippine Spanish": "es-PH",
"Picard Old French": "fro-pic",
"Polari": "pld",
"Postal Romanization": "zh-postal",
"Pracya": "pra-pra",
"Praenestine": "itc-pra",
"Pre-Angkorian Old Khmer": "okz-pre",
"Pre-Classical Chinese": "lzh-pre",
"Pre-Greek": "qsb-grc",
"Proto-Anglo-Frisian": "gmw-afr-pro",
"Proto-Arinic": "qfa-yrn-pro",
"Proto-Baltic": "bat-pro",
"Proto-Bulgar": "trk-bul-pro",
"Proto-Common Turkic": "trk-cmn-pro",
"Proto-Finno-Permic": "urj-fpr-pro",
"Proto-Finno-Ugric": "fiu-pro",
"Proto-Ketic": "qfa-yke-pro",
"Proto-Kottic": "qfa-yko-pro",
"Proto-Lycopolitan Coptic": "cop-ply",
"Proto-Middle Indo-Aryan": "inc-ash-pro",
"Proto-New Indo-Aryan": "pra-pro",
"Proto-North Sea Germanic": "gmw-nsg-pro",
"Proto-Oghur": "trk-ogr-pro",
"Proto-Oghuz": "trk-ogz-pro",
"Proto-Pumpokolic": "qfa-ypm-pro",
"Proto-Romance": "roa-pro",
"Proto-Tibeto-Burman": "tbq-pro",
"Provençal": "oc-pro",
"Puerto Rican Spanish": "es-PR",
"Pulaar": "fuc",
"Pular": "fuf",
"Puter Romansh": "rm-put",
"Pyongan Korean": "ko-pyo",
"Qalhari": "xme-qal",
"Qashqai": "qxq",
"Qianlu Min": "nan-qia",
"Qohrudi": "xme-qoh",
"Quanzhou Hokkien": "nan-qua",
"Renaissance Latin": "la-ren",
"Rigvedic Sanskrit": "sa-rig",
"Rioplatense Spanish": "es-AR",
"Roshani": "sgh-ros",
"Roshani-Khufi": "sgh-rsx",
"Rumantsch Grischun": "rm-gri",
"Russian Church Slavonic": "zls-chs-ru",
"Sabari": "pra-sab",
"Sagzabadi": "tks-sag",
"Sahidic Coptic": "cop-sah",
"Saint Dominican Creole French": "ht-sdm",
"Sakari": "pra-sak",
"Sakhalin Ainu": "ain-sak",
"Sal Kabuverdianu": "kea-sal",
"Sallands": "sdz",
"Samghani": "fay-sam",
"Samnite": "osc-sam",
"Santiago Kabuverdianu": "kea-san",
"Santo Antão Kabuverdianu": "kea-saa",
"Sauraseni Apabhramsa": "inc-asa",
"Sauraseni Prakrit": "pra-sau",
"Scottish English": "en-GB-SCT",
"Sedehi": "xme-sed",
"Shadi Wu": "wuu-chm",
"Shandarmani": "tly-san",
"Shanghainese": "wuu-sha",
"Shangsi Zhuang": "tai-shz",
"Sher": "ps-ser",
"Shirazi": "fay-shr",
"Shuadit": "oc-jud",
"Silesian East Central German": "sli",
"Singapore Hokkien": "nan-hbl-SG",
"Singapore Mandarin": "cmn-SG",
"Sixian Hakka": "hak-six",
"Skagit": "ska",
"Snohomish": "sno",
"Soi": "soj",
"Sorkhi": "fay-sor",
"Sotavento Kabuverdianu": "kea-sot",
"South African English": "en-ZA",
"South Karelian": "krl-sou",
"South Lebanese North Levantine Arabic": "apc-sle",
"South Wales Welsh": "cy-sou",
"Southeastern Pashto": "ps-sea",
"Southern Balochi": "bcc",
"Southern Lushootseed": "slh",
"Southern Malaysian Hokkien": "nan-spm",
"Southern Middle English": "enm-sou",
"Southern Scots": "sco-sou",
"Southern Talysh": "tly-sou",
"Southern Tati": "xme-ttc-sou",
"Southwestern Mandarin": "cmn-sow",
"Southwestern Pashto": "ps-swe",
"Standard Babylonian": "akk-stb",
"Stellingwerfs": "stl",
"Suevic": "gem-sue",
"Sukhothai Old Thai": "th-suk",
"Surmiran Romansh": "rm-srm",
"Sursilvan Romansh": "rm-srs",
"Sutsilvan Romansh": "rm-sut",
"Suzhounese": "wuu-suz",
"Swiss French": "fr-CH",
"Switzerland German": "de-CH",
"Switzerland Italian": "it-CH",
"Sylt North Frisian": "frr-syl",
"Syrian North Levantine Arabic": "apc-syr",
"São Nicolau Kabuverdianu": "kea-sni",
"São Vicente Kabuverdianu": "kea-svi",
"Taiwanese Hakka": "hak-TW",
"Taiwanese Hokkien": "nan-hbl-TW",
"Taiwanese Mandarin": "cmn-TW",
"Takestani": "tks-tak",
"Takka Apabhramsa": "inc-ata",
"Taleshdulabi": "tly-tal",
"Tamahaq": "thv",
"Tamasheq": "taq",
"Tarehi": "xme-trh",
"Tari": "xme-tar",
"Tawellemmet": "ttq",
"Tayert": "thz",
"Thessalian Greek": "grc-ths",
"Tianjin Mandarin": "cmn-tia",
"Tong'an Hokkien": "nan-ton",
"Tongyong Pinyin": "cmn-tongyong",
"Torlakian Serbo-Croatian": "sh-tor",
"Tosk Albanian": "als",
"Traditional Chinese poetry": "lzh-shi",
"Transalpine Gaulish": "xtg",
"Tseku": "tsk",
"Tularudi": "tly-tul",
"Twents": "twd",
"Twi Akan": "tw",
"Ukrainian Church Slavonic": "zls-chs-uk",
"Ulster English": "en-uls",
"Ulster Scots": "sco-uls",
"United States Spanish": "es-US",
"Upper Saxon German": "sxu",
"Vafsi": "vaf",
"Valencian": "ca-val",
"Vallader Romansh": "rm-val",
"Valujerdi": "xme-val",
"Varani": "xme-var",
"Varzenehi": "xme-vrz",
"Vedic Sanskrit": "vsn",
"Veluws": "vel",
"Venezuelan Spanish": "es-VE",
"Viennese German": "de-AT-vie",
"Vietnamese Classical Chinese": "lzh-VI",
"Viryal Chuvash": "cv-vir",
"Vivaro-Alpine": "oc-viv",
"Volga Bulgar": "xbo-vol",
"Vonishuni": "xme-von",
"Vracada Apabhramsa": "inc-avr",
"Vulgar Latin": "la-vul",
"Waata": "ssn",
"Wade–Giles": "cmn-wadegiles",
"Walser German": "wae",
"Wasa": "wss",
"Waziri": "ps-waz",
"Welsh English": "en-GB-WLS",
"Wenzhounese": "wuu-wen",
"West Midland Middle English": "enm-wmi",
"West Saxon Old English": "ang-wsx",
"Western Armenian": "hyw",
"Western Balochi": "bgn",
"Western Mansi": "mns-wes",
"Western Niger Fulfulde": "fuh",
"Western Punjabi": "pnb",
"Western Tati": "xme-ttc-wes",
"Westphalian": "wep",
"Wiedingharde North Frisian": "frr-wie",
"Written vernacular Cantonese": "yue-wvc",
"Written vernacular Mandarin": "cmn-wvc",
"Written vernacular Taishanese": "zhx-tai-wvc",
"Wuhan Mandarin": "cmn-wuh",
"Xiamen Hokkien": "nan-xia",
"Xining Mandarin": "cmn-xin",
"Yangzhou Mandarin": "cmn-yan",
"Yarandi": "xme-yar",
"Yazdi": "xme-yaz",
"Yongchun Hokkien": "nan-yon",
"Younger Avestan": "ae-yng",
"Yukjin Korean": "ko-yuk",
"Zarphatic": "zrp",
"Zefrehi": "xme-zef",
"Zhangping Hokkien": "nan-zhp",
"Zhangzhou Hokkien": "nan-zha",
"Zhao'an Hakka": "hak-zha",
"Zhao'an Hokkien": "nan-zho",
"Zhongshan Min": "zhx-zho",
"Zori": "xme-zor",
"Zoroastrian Dari": "gbz",
"taxonomic name": "mul-tax",
"the BMAC substrate": "qsb-bma"
}
mifa94441zjggsetp815ei1at85xxlb