Wiktionary
viwiktionary
https://vi.wiktionary.org/wiki/Wiktionary:Trang_Ch%C3%ADnh
MediaWiki 1.47.0-wmf.23
case-sensitive
Phương tiện
Đặc biệt
Thảo luận
Thành viên
Thảo luận Thành viên
Wiktionary
Thảo luận Wiktionary
Tập tin
Thảo luận Tập tin
MediaWiki
Thảo luận MediaWiki
Bản mẫu
Thảo luận Bản mẫu
Trợ giúp
Thảo luận Trợ giúp
Thể loại
Thảo luận Thể loại
Phụ lục
Thảo luận Phụ lục
TimedText
TimedText talk
Mô đun
Thảo luận Mô đun
Sự kiện
Thảo luận Sự kiện
astrometry
0
5830
2569603
2372030
2026-10-11T11:23:30Z
Hiyuune
50834
2569603
wikitext
text/x-wiki
=={{langname|en}}==
{{wp|en:}}
==={{section|etym}}===
Từ {{confix|en|astro|metry}}.
==={{section|pron}}===
* {{IPA|en|/əˈstɹɒmətɹi/|a=UK}}
* {{audio|en|LL-Q1860 (eng)-Flame, not lame-astrometry.wav|a=US}}
==={{section|n}}===
{{en-noun|-|+}}
# {{lb|en|astronomy}} [[thuật|Thuật]] [[đo]] [[sao]], [[trắc tinh học]].
===={{section|drv}}====
{{col|en|spectroastrometry}}
===={{section|rel}}====
* {{l|en|astrometric}}
* {{l|en|astrometrician}}
==={{section|ref}}===
* {{R:FVDP|db=ev}}
dnwfmzsqlapcc2m3spuvx2ro64009o5
asterism
0
7767
2569491
2280318
2026-10-10T14:59:38Z
Hiyuune
50834
2569491
wikitext
text/x-wiki
=={{langname|en}}==
{{wp|en:}}
==={{section|pron}}===
* {{IPA|en|/ˈas.təˌɹɪz.əm/|a=UK}}
* {{IPA|en|/ˈæs.təˌrɪz.əm/|a=US}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-asterism.wav|a=Southern England}}
==={{section|n}}===
{{en-noun}}
# {{nhãn|en|thiên văn học}} [[khoảnh sao|Khoảnh sao]], [[mảng sao]].
# [[dấu|Dấu]] [[hình]] [[ba]] [[sao]] ([[⁂]]).
===={{section|drv}}====
{{col|en|asterismal}}
===={{section|rel}}====
{{col|en
|aster
|asterisk
|asteroid
|asteroidal
|catasterism
}}
==={{section|see}}===
{{col|en
|starstone
|syzygy
|constellation
|stellar
}}
==={{section|ref}}===
* {{R:FVDP|db=ev}}
{{C|en|Khoảnh sao}}
==={{section|ana}}===
* {{anagrams|en|a=aeimrsst|smarties|semitars|Reitsmas|St. Maries|maisters|Maestris|Ritsemas|misrates|maistres|semistar}}
=={{langname|ro}}==
==={{section|etym}}===
{{ety|ro|:bor|fr:astérisme|text=+|tree=1}}
==={{section|n}}===
{{ro-noun|n|asterisme}}
# [[khoảnh sao|Khoảnh sao]], [[mảng sao]].
===={{section|decl}}====
{{ro-noun-n}}
nyb2kuxcst737m9wnpunn87zxi2ubvz
astonish
0
59202
2569576
2452197
2026-10-11T10:41:26Z
Hiyuune
50834
2569576
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|pron}}===
* {{IPA|en|/əˈstɒnɪʃ/|a=RP}}
* {{IPA|en|/əˈstɑnɪʃ/|a=GA}}
* {{audio|en|En-us-astonish.oga|a=US}}
* {{hyph|en|as|ton|ish}}
==={{section|v}}===
{{en-verb}}
# Làm [[ngạc nhiên]].
#: {{syn|en|astound|flabbergast|surprise|astony|qq4=không còn dùng|floor}}
==={{section|ref}}===
* {{R:FVDP|db=ev}}
murrhwx27me97d20wzljn5zgb2hpv29
astonishing
0
106718
2569575
2163206
2026-10-11T10:40:18Z
Hiyuune
50834
2569575
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|pron}}===
* {{IPA|en|/əˈstɒnɪʃɪŋ/|a=RP}}
* {{IPA|en|/əˈstɑnɪʃɪŋ/|a=GA}}
** {{audio|en|en-us-astonishing.ogg|a=Mid-Atlantic US}}
* {{hyph|en|as|ton|ish|ing}}
==={{section|adj}}===
{{en-adj}}
# Làm [[ngạc nhiên]], [[lạ lùng]], [[kinh dị]].
===={{section|drv}}====
{{col|en|astonishingly|astonishingness|nonastonishing|unastonishing}}
==={{section|v}}===
{{head|en|Biến thể hình thái động từ}}
# {{infl of|en|astonish||ing-form}}.
==={{section|ref}}===
* {{R:FVDP|db=ev}}
8tx7lzlzmvqxlpus4474ww168hc7xqf
astonished
0
109603
2569578
2452198
2026-10-11T10:43:25Z
Hiyuune
50834
2569578
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|pron}}===
* {{IPA|en|/æ- -d/|/əˈstɒn.ɪʃt/}}
** {{a|en|US}} {{IPAchar|/-ˈstɑ.nɪ-/}}
* {{audio|en|en-us-astonished.ogg|a=US}}
* {{rhymes|en|ɒnɪʃt|s=3}}
* {{hyphenation|en|a|ston|ished}}
==={{section|adj}}===
{{en-adj}}
# [[ngạc nhiên|Ngạc nhiên]], [[kinh ngạc]].
===={{section|syn}}====
* {{l|en|shocked}}
* {{l|en|speechless}}
* {{l|en|amazed}}
* {{l|en|agape}}
* {{l|en|bewildered}}
* Xem thêm [[Kho từ vựng:astonished]]
===={{section|drv}}====
{{col|en|astonishedly|astonishedness|unastonished}}
==={{section|v}}===
{{head|en|Biến thể hình thái động từ}}
# {{infl of|en|astonish||ed-form}}
==={{section|ref}}===
* {{R:FVDP|db=ev}}
k7aiseu9ebkl8i2y6agxkn2jlipbetd
abalienation
0
110140
2569515
1788701
2026-10-11T01:44:21Z
Hiyuune
50834
2569515
wikitext
text/x-wiki
{{also|abaliénation}}
=={{langname|en}}==
==={{section|etym}}===
Từ {{der|en|la|abalienatio}}. Tương đương từ {{suffix|en|abalienate|ion}}.
==={{section|pron}}===
* {{IPA|en|/ˌæbˌeɪl.jəˈneɪ.ʃən/|/ˌæbˌeɪ.li.əˈneɪ.ʃən/|a=GenAm}}
* {{audio|en|en-us-abalienation.ogg|a=US}}
* {{rhymes|en|eɪʃən|s=6}}
==={{section|n}}===
{{en-noun|~}} {{tlb|en|archaic}}
# {{lb|en|legal}} Sự [[nhường lại]] [[tài sản]].
==={{section|ref}}===
* {{R:FVDP|db=ev}}
5sm4kvledcnbx01yw3qyd4kmd0u68bp
astrometeorology
0
112919
2569501
2053649
2026-10-10T15:54:09Z
Hiyuune
50834
2569501
wikitext
text/x-wiki
=={{langname|en}}==
{{wp|en:}}
==={{section|etym}}===
{{ety|en|:af|astro-|meteorology|text=+|tree=1}}
==={{section|n}}===
{{en-noun|-}}
# {{lb|en|astrology}} [[khí tượng học|Khí tượng học]] [[thiên thể]].
==={{section|ref}}===
* {{R:FVDP|db=ev}}
sgmj6fd62ge4ti52tul6239pqgbnq2v
idealisation
0
126408
2569513
1855809
2026-10-11T01:40:09Z
Hiyuune
50834
2569513
wikitext
text/x-wiki
{{also|idéalisation}}
=={{langname|en}}==
==={{section|pron}}===
* {{rhymes|en|eɪʃən|s=6}}
==={{section|n}}===
{{en-noun|~}}
# {{alternative spelling of|en|idealization}}
==={{section|ref}}===
* {{R:FVDP|db=ev}}
4opivh8jcu40ce1goridjovask386ph
caponner
0
133824
2569522
1808516
2026-10-11T01:59:29Z
Hiyuune
50834
2569522
wikitext
text/x-wiki
=={{langname|fr}}==
==={{section|etym}}===
Từ {{m|fr|capon}}, từ {{m|fr|chapon}}, từ {{uder|fr|it|capo}}, {{m|it|cappone}}, cùng gốc với {{cog|nl|kapoen}}, {{m|nl|kapuin}}, {{cog|es|capón}}.
==={{section|pron}}===
* {{fr-IPA}}
* {{audio|fr|LL-Q150 (fra)-Lyokoï-caponner.wav|a=Lyon}}
* {{audio|fr|LL-Q150 (fra)-WikiLucas00-caponner.wav|a=Lyon}}
* {{audio|fr|LL-Q150 (fra)-Jérémy-Günther-Heinz Jähnick-caponner.wav|a=Somain}}
==={{section|v}}===
{{fr-verb}}
# {{lb|fr|intransitive}} [[nhút nhát|Nhút nhát]].
# [[chơi|Chơi]] [[bạc]] [[gian]].
===={{section|forms}}====
{{fr-conj-auto}}
===={{section|rel}}====
* {{l|fr|caponnière}}
==={{section|ref}}===
* {{R:FVDP|db=fv}}
==={{section|further}}===
* {{R:fr:TLFi}}
4ncb1r1lxq46e9lbyq11hhii8iv1qyx
nonvoting
0
149251
2569518
269348
2026-10-11T01:50:34Z
Hiyuune
50834
Hiyuune đã đổi [[non-voting]] thành [[nonvoting]]
269348
wikitext
text/x-wiki
{{-eng-}}
{{-adj-}}
'''non-voting'''
# Không [[bầu cử]].
# Không có [[quyền]] [[bầu cử]].
{{-ref-}}
{{R:FVDP}}
[[Thể loại:Tính từ tiếng Anh]]
2k6yc1ni47s9lcjpbxmd7b19lik16nj
2569520
2569518
2026-10-11T01:51:21Z
Hiyuune
50834
2569520
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|etym}}===
{{ety|en|:af|non-<id:không có>|voting|text=+|tree=1}}
==={{section|adj}}===
{{en-adj|-}}
# Không có [[quyền]] [[bầu cử]].
==={{section|ref}}===
* {{R:FVDP|db=ev}}
l2w1p725wm0wbd9vmo9uhpznatcowas
arise
0
170375
2569475
2246892
2026-10-10T14:23:51Z
Hiyuune
50834
2569475
wikitext
text/x-wiki
{{also|ärise|arisé}}
=={{langname|en}}==
==={{section|alt}}===
* {{alt|en|arize||không còn dùng}}
==={{section|pron}}===
* {{IPA|en|/əˈɹaɪz/|a=RP,GA,CA}}
** {{audio|en|en-us-arise.ogg|a=California}}
* {{IPA|en|/əˈɹɑez/|a=AU}}
* {{IPA|en|[əˈɹɑe̯z]|a=NZ}}
* {{rhymes|en|aɪz|s=2}}
==={{section|v}}===
{{en-verb|arise<,,arose,arisen:arised[nonstandard]:arose[hiện nay không tiêu chuẩn]>}}
# {{lb|en|intransitive}} [[xuất hiện|Xuất hiện]], [[nảy sinh]] ra, [[xảy ra]].
#: {{ux|en|More difficulties arose.|Nhiều khó khăn nảy sinh ra.}}
#: {{ux|en|There arose many heroes.|Nhiều anh hùng xuất hiện.}}
# {{lb|en|intransitive}} [[phát sinh|Phát sinh]] [[do]]; do [[bởi]].
#: {{ux|en|Difficulties arising from the war.|Những phát sinh khó khăn do chiến tranh.}}
# [[sống lại|Sống lại]], [[hồi sinh]].
# [[mọc|Mọc]] lên; [[trở]] [[dậy]].
# [[nổi lên|Nổi lên]], [[vọng]] đến, [[vang]] đến ([[tiếng]] [[âm thanh]]).
# [[sanh|Sanh]], [[sanh khởi]]
#: {{ux|en|unarisen taints do not '''arise'''|các lậu hoặc chưa sanh không '''sanh khởi'''}}
===={{section|drv}}====
{{col|en|unarisen|arist|rearise|unarising}}
===={{section|rel}}====
* {{l|en|arisal}}
==={{section|n}}===
{{en-noun}}
# {{lb|en|obsolete}} Sự [[trở]] [[dậy]].
==={{section|ref}}===
* {{R:Century}}
* {{R:Webster 1913}}
* {{R:FVDP|db=ev}}
==={{section|ana}}===
* {{anagrams|en|a=aeirs|Aesir|Aries|ERISA|Resia|aesir|aires|raise|reais|serai}}
{{cln|en|Động từ bất quy tắc}}
=={{langname|ang}}==
==={{section|pron}}===
* {{ang-IPA|ārīse}}
* {{ang-IPA|ārise}}
==={{section|v}}===
{{head|ang|Biến thể hình thái động từ|head=ārīse}}
# {{infl of|ang|ārīsan||indc|pres|ở|1|s|;|subj|pres|s}}
==={{section|v}}===
{{head|ang|Biến thể hình thái động từ|head=ārise}}
# {{infl of|ang|ārīsan||indc|pret|ở|2|s|;|subj|pret|s}}
=={{langname|fr}}==
==={{section|pron}}===
* {{homophones|fr|arisent|arises}}
==={{section|v}}===
{{head|fr|Biến thể hình thái động từ}}
# {{inflection of|fr|ariser||ind//sub|pres|ở|1//3|s|;|imp|ở|2|s}}
jewnl9v0cjccj7g85jwlyzx031l8krq
2569477
2569475
2026-10-10T14:26:33Z
Hiyuune
50834
2569477
wikitext
text/x-wiki
{{also|ärise|arisé}}
=={{langname|en}}==
==={{section|alt}}===
* {{alt|en|arize||không còn dùng}}
==={{section|pron}}===
* {{IPA|en|/əˈɹaɪz/|a=RP,GA,Canada}}
** {{audio|en|en-us-arise.ogg|a=California}}
* {{IPA|en|/əˈɹɑez/|a=AU}}
* {{IPA|en|[əˈɹɑe̯z]|a=NZ}}
* {{rhymes|en|aɪz|s=2}}
==={{section|v}}===
{{en-verb|arise<,,arose,arisen:arised[nonstandard]:arose[hiện nay không tiêu chuẩn]>}}
# {{lb|en|intransitive}} [[xuất hiện|Xuất hiện]], [[nảy sinh]] ra, [[xảy ra]].
#: {{ux|en|More difficulties arose.|Nhiều khó khăn nảy sinh ra.}}
#: {{ux|en|There arose many heroes.|Nhiều anh hùng xuất hiện.}}
# {{lb|en|intransitive}} [[phát sinh|Phát sinh]] [[do]]; do [[bởi]].
#: {{ux|en|Difficulties arising from the war.|Những phát sinh khó khăn do chiến tranh.}}
# [[sống lại|Sống lại]], [[hồi sinh]].
# [[mọc|Mọc]] lên; [[trở]] [[dậy]].
# [[nổi lên|Nổi lên]], [[vọng]] đến, [[vang]] đến ([[tiếng]] [[âm thanh]]).
# [[sanh|Sanh]], [[sanh khởi]]
#: {{ux|en|unarisen taints do not '''arise'''|các lậu hoặc chưa sanh không '''sanh khởi'''}}
===={{section|drv}}====
{{col|en|unarisen|arist|rearise|unarising}}
===={{section|rel}}====
* {{l|en|arisal}}
==={{section|n}}===
{{en-noun}}
# {{lb|en|obsolete}} Sự [[trở]] [[dậy]].
==={{section|ref}}===
* {{R:Century}}
* {{R:Webster 1913}}
* {{R:FVDP|db=ev}}
==={{section|ana}}===
* {{anagrams|en|a=aeirs|Aesir|Aries|ERISA|Resia|aesir|aires|raise|reais|serai}}
{{cln|en|Động từ bất quy tắc}}
=={{langname|ang}}==
==={{section|pron}}===
* {{ang-IPA|ārīse}}
* {{ang-IPA|ārise}}
==={{section|v}}===
{{head|ang|Biến thể hình thái động từ|head=ārīse}}
# {{infl of|ang|ārīsan||indc|pres|ở|1|s|;|subj|pres|s}}
==={{section|v}}===
{{head|ang|Biến thể hình thái động từ|head=ārise}}
# {{infl of|ang|ārīsan||indc|pret|ở|2|s|;|subj|pret|s}}
=={{langname|fr}}==
==={{section|pron}}===
* {{homophones|fr|arisent|arises}}
==={{section|v}}===
{{head|fr|Biến thể hình thái động từ}}
# {{inflection of|fr|ariser||ind//sub|pres|ở|1//3|s|;|imp|ở|2|s}}
140p4sh1kq4f6m6zf3uqdlfnpjm3v2r
arisen
0
170377
2569481
2065736
2026-10-10T14:36:59Z
Hiyuune
50834
2569481
wikitext
text/x-wiki
{{also|ärisen}}
=={{langname|en}}==
==={{section|pron}}===
* {{IPA|en|/əˈɹɪzən/}}
* {{audio|en|En-us-arisen.ogg|a=US}}
* {{rhymes|en|ɪzən|s=3}}
==={{section|v}}===
{{head|en|Biến thể hình thái động từ}}
# {{inflection of|en|arise||part|past}}
===={{section|drv}}====
{{col|en|unarisen}}
==={{section|ref}}===
* {{R:FVDP|db=ev}}
==={{section|ana}}===
* {{anagrams|en|a=aeinrs|Neiras|Nerias|Raines|Resian|arsine|erasin|esiRNA|esirna|raines|sarnie}}
=={{langname|ang}}==
==={{section|v}}===
* {{ang-IPA|ārīsen}}
* {{ang-IPA|ārisen}}
==={{section|v}}===
{{head|ang|Biến thể hình thái động từ|head=ārīsen}}
# {{infl of|ang|ārīsan||subj|pres|p}}
==={{section|v}}===
{{head|ang|Biến thể hình thái động từ|head=ārisen}}
# {{infl of|ang|ārīsan||subj|pret|p}}
==={{section|ptcp}}===
{{head|ang|Phân từ quá khứ|head=ārisen}}
# {{infl of|ang|ārīsan||part|past}}
=={{langname|enm}}==
==={{section|alt}}===
* {{alter|enm|aryse}}
* {{alter|enm|arrisen||hiếm}}
==={{section|etym}}===
Từ {{inh|enm|ang|ārīsan}}, tương đương từ {{prefix|enm|a-|risen}}.
==={{section|pron}}===
* {{IPA|enm|/aˈriːzən/}}
==={{section|v}}===
{{head|enm|Động từ}}
# [[xuất hiện|Xuất hiện]], nảy sinh ra, [[xảy ra]].
===={{section|forms}}====
{{enm-conj-st|c=1|aris|aros|3a=aris|4a=ares|3s2=arist|y=0}}
===={{section|desc}}====
* {{desc|en|arise}}
** {{desc|gmw-msc|arys|aryis|bor=1}}
*** {{desc|sco|arise}}
===={{section|ref}}====
* {{R:MED Online|entry=arīsen|pos=v|id=MED2240}}
kdleuum1x4iqdu3u16q472xw7dncw4s
arose
0
170381
2569476
2022749
2026-10-10T14:25:33Z
Hiyuune
50834
2569476
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|pron}}===
* {{IPA|en|/əˈɹoʊz/}}
* {{audio|en|en-us-arose.ogg|a=US}}
*: {{rhymes|en|əʊz|s=2}}
==={{section|v}}===
{{head|en|Biến thể hình thái động từ}}
# {{infl of|en|arise||spast}}
# {{lb|en|now|colloquial|and|nonstandard}} {{past participle of|en|arise|nocat=1}}
==={{section|ref}}===
* {{R:FVDP|db=ev}}
==={{section|ana}}===
* {{anagrams|en|a=aeors|OAers|aeros}}
5o18tl0u27ffyuj0c8mywsjmrgzccfz
astma
0
188289
2569497
2429984
2026-10-10T15:21:38Z
Hiyuune
50834
2569497
wikitext
text/x-wiki
{{also|astmă|astmą}}
=={{langname|pl}}==
{{wp|pl:}}
==={{section|etym}}===
Có lẽ từ {{lbor|pl|la|asthma|nocap=1}}, từ {{der|pl|grc|ἆσθμα}}.
==={{section|pron}}===
{{pl-pr|a=Pl-astma.ogg}}
==={{section|n}}===
{{pl-noun|f}}
# {{lb|pl|pathology}} [[bệnh|Bệnh]] [[hen suyễn]].
#: {{syn|pl|dusznica|dycha|dychawica|zadyszka}}
===={{section|decl}}====
{{pl-decl-noun-f|tantum=s}}
===={{section|drv}}====
{{col|pl|title=danh từ|astmatyczka|astmatyk}}
===={{section|rel}}====
{{col|pl|title=tính từ|astmatyczny}}
{{col|pl|title=phó từ|astmatycznie}}
==={{section|further}}===
* {{R:pl:WSJP}}
* {{R:pl:PWN}}
=={{langname|fo}}==
==={{section|etym}}===
Từ {{der|fo|grc|ἆσθμα}}.
==={{section|pron}}===
* {{IPA|fo|/ˈasma/}}
==={{section|n}}===
{{fo-noun|f|astmu|-}}
# {{lb|fo|pathology}} [[bệnh|Bệnh]] [[hen suyễn]].
===={{section|decl}}====
{{fo-decl-noun-f1-s|astm}}
=={{langname|nl}}==
{{wp|nl:}}
==={{section|etym}}===
Vay mượn từ {{bor|nl|la|āsthma}}, từ {{der|nl|grc|ἆσθμα}}.
==={{section|pron}}===
* {{IPA|nl|/ˈɑs(t)maː/}}
* {{audio|nl|Nl-astma.ogg}}
* {{hyphenation|nl|ast|ma}}
==={{section|n}}===
{{nl-noun|n|-|-}}
# {{lb|nl|pathology}} [[bệnh|Bệnh]] [[hen suyễn]].
===={{section|drv}}====
{{col|nl
|astma-aanval
|astmalijder
|astmapatiënt
|astmasigaret
}}
===={{section|rel}}====
{{col|nl
|astmaticus
|astmatiek
|astmatisch
}}
===={{section|desc}}====
* {{desc|af|asma}}
* {{desc|id|bor=1|asma}}
=={{langname|nb}}==
{{wp|no:}}
==={{section|n}}===
{{nb-noun-mu}}
# {{lb|nb|pathology}} [[bệnh|Bệnh]] [[hen suyễn]].
===={{section|drv}}====
* {{l|nb|astmatisk}}
=={{langname|nn}}==
{{wp|nn:}}
==={{section|n}}===
{{nn-noun-mu}}
# {{lb|nn|pathology}} [[bệnh|Bệnh]] [[hen suyễn]].
===={{section|drv}}====
* {{l|nn|astmatisk}}
=={{langname|fi}}==
==={{section|etym}}===
Từ {{der|fi|grc|ἆσθμα}}.
==={{section|pron}}===
{{fi-pronunciation}}
==={{section|n}}===
{{fi-noun}}
# {{lb|fi|pathology}} [[bệnh|Bệnh]] [[hen suyễn]].
===={{section|decl}}====
{{fi-decl-kala|astm|||a}}
===={{section|drv}}====
{{col|fi
|astmainen
}}
{{col|fi|title=từ ghép
|astmakohtaus
|astmalääke
|astmapiippu
|keuhkoastma
|rasitusastma
}}
===={{section|rel}}====
{{col|fi
|astmaatikko
}}
==={{section|further}}===
* {{R:fi:KTSK|accessdate=2023-07-02}}
==={{section|ana}}===
* {{anagrams|fi|a=aamst|samat}}
=={{langname|cs}}==
{{wp|cs:}}
==={{section|pron}}===
* {{cs-IPA}}
* {{audio|cs|LL-Q9056 (ces)-Ghost4Man-astma.wav}}
==={{section|n}}===
{{cs-noun|n|adj=astmatický}}
# {{lb|cs|pathology}} [[bệnh|Bệnh]] [[hen suyễn]].
#: {{syn|cs|záchvatová dušnost|záducha|dýchavičnost}}
===={{section|decl}}====
{{cs-ndecl|n}}
===={{section|rel}}====
{{col|cs|astmatik<g:m>}}
===={{section|see}}====
* {{l|cs|CHOPN}}
==={{section|further}}===
* {{R:cs:PSJC}}
* {{R:cs:SSJC}}
=={{langname|sh}}==
==={{section|pron}}===
* {{sh-IPA|àstma}}
* {{hyphenation|sh|as|tma}}
==={{section|n}}===
{{sh-noun|àstma|f}}
# {{lb|sh|pathology}} [[bệnh|Bệnh]] [[hen suyễn]].
===={{section|decl}}====
{{sh-decl-noun
|àstma|astme
|astme|àstmī
|astmi|astmama
|astmu|astme
|astmo|astme
|astmi|astmama
|astmom|astmama
}}
=={{langname|sk}}==
{{wp|sk:}}
==={{section|etym}}===
{{ety|sk|:der|grc:ἆσθμα|text=+|tree=1}}
==={{section|pron}}===
* {{sk-IPA}}
==={{section|n}}===
{{sk-noun|f|adj=astmatický}}
# {{lb|sk|pathology}} [[bệnh|Bệnh]] [[hen suyễn]].
#: {{syn|sk|záduch}}
===={{section|rel}}====
{{col|sk
|astmatik<g:m>
|astmatička<g:f>
}}
==={{section|ref}}===
* {{R:sk:SDK}}
=={{langname|sv}}==
{{wp|sv:}}
==={{section|n}}===
{{sv-noun|c|-}}
# {{lb|sv|pathology}} [[bệnh|Bệnh]] [[hen suyễn]].
===={{section|decl}}====
{{sv-noun-unc-irreg-c}}
===={{section|drv}}====
{{col2|sv|astmatiker|astmatisk}}
==={{section|ana}}===
* {{anagrams|sv|a=aamst|matas}}
=={{langname|uz}}==
==={{section|n}}===
{{uz-noun}}
# {{lb|uz|pathology}} [[bệnh|Bệnh]] [[hen suyễn]].
===={{section|decl}}====
{{uz-decl-noun}}
=={{langname|vro}}==
==={{section|etym}}===
Từ {{inh|vro|urj-fin-pro|*astudak}}.
==={{section|v}}===
{{vro-verb|astuq|astu}}
# [[bước|Bước]] [[đi]].
# [[đi bộ|Đi bộ]].
===={{section|infl}}====
{{rfinfl|vro|động từ}}
=={{langname|da}}==
{{wp|da:}}
==={{section|etym}}===
Từ {{der|da|grc|ἆσθμα}}.
==={{section|pron}}===
* {{IPA|da|/astma/|[ˈasd̥ma]}}
==={{section|n}}===
{{da-noun|en|-}}
# {{lb|da|pathology}} [[bệnh|Bệnh]] [[hen suyễn]].
===={{section|decl}}====
{{da-noun-infl|en|n=sg}}
===={{section|drv}}====
* {{l|da|astmaeksem}}
* {{l|da|astmapatient}}
* {{l|da|astmaanfald}}
* {{l|da|astmatiker}}
* {{l|da|astmatisk}}
==={{section|ref}}===
* {{R:DDO}}
mui6d473jo74s17l1q532y40x769nsv
astonishes
0
222928
2569577
1797386
2026-10-11T10:41:56Z
Hiyuune
50834
2569577
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|v}}===
{{head|en|Biến thể hình thái động từ}}
# {{infl of|en|astonish||s-verb-form}}
ec2majby486y1u41h1v8artujrziec4
arriving
0
225725
2569486
2162957
2026-10-10T14:50:38Z
Hiyuune
50834
2569486
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|pron}}===
* {{IPA|en|/əˈɹaɪvɪŋ/}}
* {{audio|en|LL-Q1860 (eng)-Persent101-arriving.wav|a=US}}
* {{rhymes|en|aɪvɪŋ|s=3}}
==={{section|v}}===
{{head|en|Biến thể hình thái động từ}}
# {{infl of|en|arrive||ing-form}}.
k3py8jspnm3sh8yuwxjkwoux8o135dy
raises
0
227061
2569479
1902706
2026-10-10T14:29:25Z
Hiyuune
50834
2569479
wikitext
text/x-wiki
{{also|raíses}}
=={{langname|en}}==
==={{section|pron}}===
* {{audio|en|en-us-raises.ogg|a=US}}
==={{section|v}}===
{{head|en|vf}}
# {{infl of|en|raise||s-verb-form}}
==={{section|n}}===
{{head|en|nf}}
# {{plural of|en|raise}}
==={{section|ana}}===
* {{anagrams|en|a=aeirss|Riases|serais|resais|arises|assier}}
89r2ehztr367deasupjz69y08x3ynk0
depriving
0
227324
2569489
2165727
2026-10-10T14:52:36Z
Hiyuune
50834
2569489
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|pron}}===
* {{rhymes|en|aɪvɪŋ|s=3}}
==={{section|v}}===
{{head|en|Biến thể hình thái động từ}}
# {{infl of|en|deprive||ing-form}}.
te36nqu9lfqrpg6uzlogcm057t5ejby
Mô đun:languages/data/3/m
828
260128
2569469
2569161
2026-10-10T13:38:33Z
Lcsnes
40261
2569469
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
local m = {}
m["maa"] = {
"San Jerónimo Tecóatl Mazatec",
7692927,
"omq-maz",
"Latn",
}
m["mab"] = {
"Yutanduchi Mixtec",
12645448,
"omq-mxt",
"Latn",
}
m["mad"] = {
"tiếng Madura",
36213,
"poz-msa",
"Latn",
"Tiếng Madura",
"Madura",
}
m["mae"] = {
"Bo-Rukul",
34967,
"nic-ple",
"Latn",
}
m["maf"] = {
"Mafa",
35819,
"cdc-cbm",
"Latn",
}
m["mag"] = {
"tiếng Magaha",
33728,
"inc-eas",
"Deva, Kthi",
"Tiếng Magaha",
"Magaha",
ancestors = "bh",
}
m["mai"] = {
"tiếng Maithil",
36109,
"inc-eas",
"Deva, Tirh, Kthi, Newa",
"Tiếng Maithil",
"Maithil",
ancestors = "bh",
translit = {
Deva = "mai-translit",
Tirh = "mai-Tirh-translit",
Kthi = "bho-Kthi-translit",
},
}
m["maj"] = {
"Jalapa de Díaz Mazatec",
3915999,
"omq-maz",
"Latn",
}
m["mak"] = {
"tiếng Makassar",
33643,
"poz-ssw",
"Latn, Bugi, Maka",
"Tiếng Makassar",
"Makassar",
}
m["mam"] = {
"Mam",
33467,
"myn",
"Latn",
}
m["man"] = {
"Mandingo",
35772,
"dmn-man",
"Latn",
}
m["maq"] = {
"Chiquihuitlán Mazatec",
5101757,
"omq-maz",
"Latn",
}
m["mas"] = {
"tiếng Maasai",
35787,
"sdv-lma",
"Latn",
"Tiếng Maasai",
"Maasai",
}
m["mat"] = {
"Matlatzinca",
12953704,
"omq",
"Latn",
}
m["mau"] = {
"Huautla Mazatec",
36230,
"omq-maz",
"Latn",
}
m["mav"] = {
"Sateré-Mawé",
6794475,
"tup",
"Latn",
}
m["maw"] = {
"tiếng Mampruli",
35804,
"nic-wov",
"Latn",
"Tiếng Mampruli",
"Mampruli",
}
m["max"] = {
"tiếng Mã Lai Bắc Maluku",
7056136,
"crp",
"Latn",
"Tiếng Mã Lai Bắc Maluku",
"Mã Lai Bắc Maluku",
}
m["maz"] = {
"tiếng Mazahua Trung",
36228,
"oto",
"Latn",
"Tiếng Mazahua Trung",
"Mazahua Trung",
}
m["mba"] = {
"tiếng Higaonon",
5753411,
"mno",
"Latn",
"Tiếng Higaonon",
"Higaonon",
}
m["mbb"] = {
"Western Bukidnon Manobo",
7987643,
"mno",
"Latn",
}
m["mbc"] = {
"tiếng Macushi",
56633,
"sai-pem",
"Latn",
"Tiếng Macushi",
"Macushi",
}
m["mbd"] = {
"tiếng Dibabawon",
18755523,
"mno",
"Latn",
"Tiếng Dibabawon",
"Dibabawon",
}
m["mbe"] = {
"Molale",
3319444,
"nai-plp",
"Latn",
}
m["mbf"] = {
"tiếng Mã Lai Baba",
18642798,
"crp",
"Latn",
"Tiếng Mã Lai Baba",
"Mã Lai Baba",
ancestors = "ms",
}
m["mbh"] = {
"Mangseng",
6749147,
"poz-ocw",
"Latn",
}
m["mbi"] = {
"Ilianen Manobo",
14916911,
"mno",
"Latn",
}
m["mbj"] = {
"Nadëb",
3335011,
"sai-nad",
"Latn",
}
m["mbk"] = {
"Malol",
6744477,
"poz-ocw",
"Latn",
}
m["mbl"] = {
"Maxakalí",
3029682,
"sai-mje",
"Latn",
}
m["mbm"] = {
"Ombamba",
36407,
"bnt-mbt",
"Latn",
}
m["mbn"] = {
"Macaguán",
3273980,
"sai-guh",
"Latn",
}
m["mbo"] = { -- is, like 'bqz', 'bsi' and 'bss', a dialect of Manenguba
"Mbo (Cameroon)",
nil,
"bnt-mne",
"Latn",
}
m["mbp"] = {
"Wiwa",
3012604,
"cba",
"Latn",
}
m["mbq"] = {
"Maisin",
3448149,
nil,
"Latn",
}
m["mbr"] = {
"Nukak Makú",
3346228,
"sai-nad",
"Latn",
}
m["mbs"] = {
"Sarangani Manobo",
7423093,
"mno",
"Latn",
}
m["mbt"] = {
"Matigsalug Manobo",
6787447,
"mno",
"Latn",
}
m["mbu"] = {
"Mbula-Bwazza",
3913324,
"nic-jrn",
"Latn",
}
m["mbv"] = {
"Mbulungish",
36003,
"alv-nal",
"Latn",
}
m["mbw"] = {
"Maring",
3293280,
nil,
"Latn",
}
m["mbx"] = {
"Sepik Mari",
6760942,
"paa-spk",
"Latn",
}
m["mby"] = {
"tiếng Memon",
4180871,
"inc-snd",
"Gujr, ur-Arab",
"Tiếng Memon",
"Memon",
}
m["mbz"] = {
"Amoltepec Mixtec",
13583504,
"omq-mxt",
"Latn",
}
m["mca"] = {
"Maca",
3281043,
"sai-mtc",
"Latn",
}
m["mcb"] = {
"Machiguenga",
3915441,
"awd",
"Latn",
}
m["mcc"] = {
"Bitur",
4919173,
}
m["mcd"] = {
"Sharanahua",
12953881,
"sai-pan",
"Latn",
}
m["mce"] = {
"Itundujia Mixtec",
12953727,
"omq-mxt",
"Latn",
}
m["mcf"] = {
"Matsés",
2981620,
"sai-pan",
"Latn",
}
m["mcg"] = {
"Mapoyo",
56946,
"sai-map",
"Latn",
}
m["mch"] = {
"tiếng Ye'kwana",
3082027,
"sai-car",
"Latn",
"Tiếng Ye'kwana",
"Ye'kwana",
sort_key = {
remove_diacritics = "%-%s",
from = {"'", "ñ", "ö", "sh", "ü"},
to = {"’", "n" .. p[1], "o" .. p[1], "s" .. p[1], "u" .. p[1]}
}
}
m["mci"] = {
"Mese",
6821190,
}
m["mcj"] = {
"Mvanip",
3913281,
"nic-mmb",
"Latn",
}
m["mck"] = {
"Mbunda",
34170,
"bnt-clu",
"Latn",
}
m["mcl"] = {
"Macaguaje",
6722435,
"sai-tuc",
"Latn",
}
m["mcm"] = {
"Kristang",
2669169,
"crp",
"Latn",
ancestors = "pt",
}
m["mcn"] = {
"Masana",
56668,
"cdc-mas",
}
m["mco"] = {
"Coatlán Mixe",
25559716,
"nai-miz",
"Latn",
}
m["mcp"] = {
"Makaa",
35803,
"bnt-mka",
}
m["mcq"] = {
"tiếng Ese",
5397551,
"ngf-koi",
"Latn",
"Tiếng Ese",
"Ese",
}
m["mcr"] = {
"Menya",
11732444,
"ngf",
}
m["mcs"] = {
"Mambai",
6748872,
"alv-mbm",
}
m["mcu"] = {
"tiếng Mambila Cameroon",
19359039,
"nic-mmb",
"Latn",
"Tiếng Mambila Cameroon",
"Mambila Cameroon",
}
m["mcv"] = {
"Minanibai",
6863167,
"ngf",
}
m["mcw"] = {
"Mawa",
3441333,
"cdc-est",
"Latn",
}
m["mcx"] = {
"tiếng Mpiemo",
35908,
"bnt-bek",
"Latn",
"Tiếng Mpiemo",
"Mpiemo",
}
m["mcy"] = {
"South Watut",
12953293,
"poz-ocw",
}
m["mcz"] = {
"Mawan",
11732429,
"ngf-mad",
}
m["mda"] = {
"Mada (Nigeria)",
3915843,
"nic-nin",
"Latn",
}
m["mdb"] = {
"Morigi",
6912195,
"paa-kiw",
}
m["mdc"] = {
"Male",
6742927,
"ngf-mad",
}
m["mdd"] = {
"Mbum",
36170,
"alv-mbm",
}
m["mde"] = {
"tiếng Mabang",
35860,
"ssa",
"Arab, Latn",
"Tiếng Mabang",
"Mabang",
}
m["mdf"] = {
"tiếng Moksha",
13343,
"urj-mdv",
"Cyrl",
"Tiếng Moksha",
"Moksha",
translit = "mdf-translit",
entry_name = {remove_diacritics = c.acute},
override_translit = true,
sort_key = "mdf-sortkey",
}
m["mdg"] = {
"Massalat",
759984,
}
m["mdh"] = {
"tiếng Maguindanao",
33717,
"phi",
"Latn, Arab",
"Tiếng Maguindanao",
"Maguindanao",
}
m["mdi"] = {
"Mamvu",
3033594,
"csu-mle",
}
m["mdj"] = {
"Mangbetu",
56327,
"csu-maa",
}
m["mdk"] = {
"Mangbutu",
6748877,
"csu-mle",
}
m["mdl"] = {
"Maltese Sign Language",
6744816,
"sgn",
}
m["mdm"] = {
"tiếng Mayogo",
6797580,
"nic-nke",
"Latn",
"Tiếng Mayogo",
"Mayogo",
}
m["mdn"] = {
"Mbati",
36165,
"bnt-ngn",
}
m["mdp"] = {
"Mbala",
6799583,
"bnt-pen",
}
m["mdq"] = {
"Mbole",
6799727,
"bnt-mbe",
}
m["mdr"] = {
"Mandar",
35995,
"poz-ssw",
"Bugi, Latn",
}
m["mds"] = {
"Maria",
3448673,
}
m["mdt"] = {
"Mbere",
36062,
"bnt-mbt",
}
m["mdu"] = {
"Mboko",
36058,
"bnt-mbo",
}
m["mdv"] = {
"Santa Lucía Monteverde Mixtec",
12953722,
"omq-mxt",
"Latn",
}
m["mdw"] = {
"Mbosi",
36035,
"bnt-mbo",
}
m["mdx"] = {
"tiếng Dizi",
35313,
"omv-diz",
"Ethi, Latn",
"Tiếng Dizi",
"Dizi",
}
m["mdy"] = {
"tiếng Maale",
795327,
"omv-ome",
"Ethi",
"Tiếng Maale",
"Maale",
}
m["mdz"] = {
"Suruí Do Pará",
10322149,
"tup-gua",
"Latn",
}
m["mea"] = {
"Menka",
36078,
"nic-grs",
"Latn",
}
m["meb"] = {
"Ikobi-Mena",
11732241,
"ngf",
"Latn",
}
m["mec"] = {
"Mara",
6772774,
}
m["med"] = {
"tiếng Melpa",
36166,
nil,
"Latn",
"Tiếng Melpa",
"Melpa",
}
m["mee"] = {
"Mengen",
3305831,
"poz-ocw",
}
m["mef"] = {
"Megam",
6808589,
}
m["meg"] = {
"Mea",
12952836,
"poz-cln",
}
m["meh"] = {
"Southwestern Tlaxiaco Mixtec",
7070686,
"omq-mxt",
"Latn",
}
m["mei"] = {
"Midob",
36007,
"nub",
"Latn",
}
m["mej"] = {
"Meyah",
11732436,
"paa-wpa",
}
m["mek"] = {
"Mekeo",
3304803,
"poz-ocw",
}
m["mel"] = {
"Central Melanau",
18638319,
"poz-swa",
"Latn",
}
m["mem"] = {
"Mangala",
6748664,
}
m["men"] = {
"tiếng Mende",
1478672,
"dmn-msw",
"Latn, Mend",
"Tiếng Mende",
"Mende",
}
m["meo"] = {
"tiếng Mã Lai Kedah",
4925684,
"poz-mly",
"Latn, ms-Arab, Thai",
"Tiếng Mã Lai Kedah",
"Mã Lai Kedah",
entry_name = {
from = {u(0xF70F)},
to = {"ญ"}
},
sort_key = {Thai = "Thai-sortkey"},
}
m["mep"] = {
"Miriwung",
3111847,
}
m["meq"] = {
"Merey",
3502314,
"cdc-cbm",
"Latn",
}
m["mer"] = {
"Meru",
13313,
"bnt-kka",
"Latn",
}
m["mes"] = {
"Masmaje",
3440448,
}
m["met"] = {
"Mato",
3299190,
"poz-ocw",
"Latn",
}
m["meu"] = {
"tiếng Motu",
33516,
"poz-ocw",
"Latn",
"Tiếng Motu",
"Motu",
}
m["mev"] = {
"tiếng Mano",
3913286,
"dmn-mda",
"Latn",
"Tiếng Mano",
"Mano",
}
m["mew"] = {
"tiếng Maaka",
3438764,
"cdc-wst",
"Latn",
"Tiếng Maaka",
"Maaka",
}
m["mey"] = {
"tiếng Ả Rập Hassaniya",
56231,
"sem-arb",
"Arab",
"Tiếng Ả Rập Hassaniya",
"Ả Rập Hassaniya",
}
m["mez"] = {
"tiếng Menominee",
13363,
"alg",
"Latn",
"Tiếng Menominee",
"Menominee",
sort_key = {remove_diacritics = "·"},
}
m["mfa"] = {
"tiếng Mã Lai Pattani",
1199751,
"poz-mly",
"Latn, ms-Arab, Thai",
"Tiếng Mã Lai Pattani",
"Mã Lai Pattani",
entry_name = {
from = {u(0xF70F)},
to = {"ญ"}
},
sort_key = {Thai = "Thai-sortkey"},
}
m["mfb"] = {
"Bangka",
3258818,
}
m["mfc"] = {
"Mba",
4286464,
"nic-mbc",
"Latn",
}
m["mfd"] = {
"tiếng Mendankwe-Nkwen",
11129537,
"nic-nge",
"Latn",
"Tiếng Mendankwe-Nkwen",
"Mendankwe-Nkwen",
}
m["mfe"] = {
"tiếng Creole Mauritius",
33661,
"crp",
"Latn",
"Tiếng Creole Mauritius",
"Creole Mauritius",
ancestors = "fr",
sort_key = s["roa-oil-sortkey"],
}
m["mff"] = {
"Naki",
36083,
"nic-bbe",
"Latn",
}
m["mfg"] = {
"Mixifore",
3914478,
"dmn-mok",
}
m["mfh"] = {
"tiếng Matal",
3501751,
"cdc-cbm",
"Latn",
"Tiếng Matal",
"Matal",
}
m["mfi"] = {
"Wandala",
3441249,
"cdc-cbm",
"Latn",
}
m["mfj"] = {
"Mefele",
3501871,
"cdc-cbm",
}
m["mfk"] = {
"North Mofu",
56303,
"cdc-cbm",
}
m["mfl"] = {
"Putai",
56291,
}
m["mfm"] = {
"Marghi South",
56248,
}
m["mfn"] = {
"tiếng Mbembe sông Cross",
3915395,
"nic-uce",
"Latn",
"Tiếng Mbembe sông Cross",
"Mbembe sông Cross",
}
m["mfo"] = {
"Mbe",
36075,
"nic-eko",
"Latn",
}
m["mfp"] = {
"Makassar Malay",
12952776,
"qfa-mix",
"Latn",
}
m["mfq"] = {
"Moba",
19921578,
"nic-grm",
"Latn",
}
m["mfr"] = {
"Marrithiyel",
6773014,
"aus-dal",
"Latn",
}
m["mfs"] = {
"Mexican Sign Language",
3915511,
"sgn",
"Latn", -- when documented
}
m["mft"] = {
"Mokerang",
3319387,
"poz-aay",
"Latn",
}
m["mfu"] = {
"Mbwela",
11004988,
"bnt-clu",
ancestors = "lch",
}
m["mfv"] = {
"Mandjak",
35822,
"alv-pap",
}
m["mfw"] = {
"Mulaha",
6933720,
}
m["mfx"] = {
"tiếng Melo",
6813268,
"omv-nom",
"Latn, Ethi",
"Tiếng Melo",
"Melo",
}
m["mfy"] = {
"Mayo",
56729,
"azc-trc",
"Latn",
sort_key = {remove_diacritics = c.acute},
}
m["mfz"] = {
"tiếng Mabaan",
20526385,
"sdv",
"Latn",
"Tiếng Mabaan",
"Mabaan",
}
m["mga"] = {
"tiếng Ireland trung đại",
36116,
"cel-gae",
"Latn",
"Tiếng Ireland trung đại",
"Ireland trung đại",
ancestors = "sga",
entry_name = {remove_diacritics = c.dotabove .. c.diaer .. "·"},
sort_key = "mga-sortkey",
}
m["mgb"] = {
"Mararit",
56359,
"sdv-tmn",
}
m["mgc"] = {
"tiếng Morokodo",
6913216,
"csu-bbk",
"Latn",
"Tiếng Morokodo",
"Morokodo",
}
m["mgd"] = {
"Moru",
6915014,
"csu-mma",
}
m["mge"] = {
"tiếng Mango",
713659,
"csu-sar",
"Latn",
"Tiếng Mango",
"Mango",
}
m["mgf"] = {
"Maklew",
6739816,
}
m["mgg"] = {
"Mpongmpong",
35924,
"bnt-bek",
}
m["mgh"] = {
"Makhuwa-Meetto",
33604,
"bnt-mak",
"Latn",
ancestors = "vmw",
}
m["mgi"] = {
"Jili",
3914497,
"nic-pls",
}
m["mgj"] = {
"Abureni",
3441256,
"nic-cde",
"Latn",
}
m["mgk"] = {
"Mawes",
6794395,
"paa",
}
m["mgl"] = {
"Maleu-Kilenge",
3281884,
}
m["mgm"] = {
"Mambae",
35774,
"poz-tim",
"Latn",
}
m["mgn"] = {
"Mbangi",
11017443,
"nic-ngd",
"Latn",
}
m["mgo"] = {
"Meta'",
36054,
"nic-mom",
"Latn",
}
m["mgp"] = {
"tiếng Magar Đông",
12952758,
"sit-gma",
nil,
"Tiếng Magar Đông",
"Magar Đông",
}
m["mgq"] = {
"Malila",
6743679,
"bnt-mby",
"Latn",
}
m["mgr"] = {
"Mambwe-Lungu",
626210,
"bnt-mwi",
"Latn",
}
m["mgs"] = {
"Manda (Tanzania)",
16939267,
"bnt-bki",
}
m["mgt"] = {
"Mongol",
11260674,
"paa",
"Latn",
}
m["mgu"] = {
"Mailu",
3278246,
"ngf",
}
m["mgv"] = {
"Matengo",
6786446,
"bnt-mbi",
"Latn",
}
m["mgw"] = {
"Matumbi",
6791974,
"bnt-mbi",
"Latn",
}
m["mgy"] = {
"Mbunga",
6799817,
"bnt-kil",
}
m["mgz"] = {
"Mbugwe",
3426367,
"bnt-mra",
}
m["mha"] = {
"tiếng Manda (Ấn Độ)",
56760,
"dra-kki",
"Orya",
"Tiếng Manda (Ấn Độ)",
"Manda (Ấn Độ)",
translit = "kxv-translit",
}
m["mhb"] = {
"Mahongwe",
35816,
"bnt-kel",
}
m["mhc"] = {
"Mocho",
1941682,
"myn",
}
m["mhd"] = {
"Mbugu",
36152,
"qfa-mix",
"Latn",
ancestors = "asa",
}
m["mhe"] = {
"tiếng Mah Meri",
2742262,
"mkh-asl",
"Latn",
"Tiếng Mah Meri",
"Mah Meri"
}
m["mhf"] = {
"Mamaa",
6745346,
"ngf-fin",
"Latn",
}
m["mhg"] = {
"Marrgu",
6772812,
}
m["mhi"] = {
"Ma'di",
56670,
"csu-mma",
}
m["mhj"] = {
"tiếng Mogholi",
13336,
"xgn",
"fa-Arab, Latn",
"Tiếng Mogholi",
"Mogholi",
}
m["mhk"] = {
"Mungaka",
36068,
"nic-nun",
"Latn",
}
m["mhl"] = {
"Mauwake",
6794095,
"ngf-mad",
}
m["mhm"] = {
"Makhuwa-Moniga",
6900145,
"bnt-mak",
}
m["mhn"] = {
"tiếng Mòcheno",
268130,
"gmw-hgm",
"Latn",
"Tiếng Mòcheno",
"Mòcheno",
ancestors = "bar",
sort_key = {remove_diacritics = c.grave},
}
m["mho"] = {
"Mashi",
10962737,
"bnt-kav",
"Latn",
}
m["mhp"] = {
"Balinese Malay",
12473441,
"crp",
}
m["mhq"] = {
"Mandan",
1957120,
"sio",
}
m["mhr"] = {
"tiếng Mari Đông",
3906614,
"chm",
"Cyrl",
"Tiếng Mari Đông",
"Mari Đông",
translit = "chm-translit",
override_translit = true,
entry_name = {remove_diacritics = c.grave .. c.acute},
sort_key = {
from = {"ё", "ҥ", "ӧ", "ӱ"},
to = {"е" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1]}
}
}
m["mhs"] = {
"Buru (Indonesia)",
2928650,
"poz-cma",
}
m["mht"] = {
"tiếng Mandahuaca",
6747924,
"awd-nwk",
"Latn",
"Tiếng Mandahuaca",
"Mandahuaca",
}
m["mhu"] = {
"Taraon",
56400,
"sit-gsi",
"Latn",
}
m["mhw"] = {
"Mbukushu",
2691548,
}
m["mhx"] = {
"tiếng Lhao Vo",
11149315,
"tbq-brm",
"Latn",
"Tiếng Lhao Vo",
"Lhao Vo",
}
m["mhy"] = {
"tiếng Ma'anyan",
2328761,
"poz-bre",
nil,
"Tiếng Ma'anyan",
"Ma'anyan",
}
m["mhz"] = {
"Mor (Austronesian)",
2122792,
"poz-hce",
"Latn",
}
m["mia"] = {
"tiếng Miami",
56523,
"alg",
"Latn",
"Tiếng Miami",
"Miami",
}
m["mib"] = {
"Atatláhuca Mixtec",
32093046,
"omq-mxt",
"Latn",
}
m["mic"] = {
"tiếng Mi'kmaq",
13321,
"alg-eas",
"Latn",
"Tiếng Mi'kmaq",
"Mi'kmaq",
}
m["mid"] = {
"Mandaic",
6991742,
"sem-ase",
"Mand",
ancestors = "myz",
}
m["mie"] = {
"Ocotepec Mixtec",
25559575,
"omq-mxt",
"Latn",
}
m["mif"] = {
"Mofu-Gudur",
1365132,
"cdc-cbm",
"Latn",
}
m["mig"] = {
"San Miguel el Grande Mixtec",
12953719,
"omq-mxt",
"Latn",
}
m["mih"] = {
"tiếng Mixtec Chayuco",
13583510,
"omq-mxt",
"Latn",
"Tiếng Mixtec Chayuco",
"Mixtec Chayuco",
}
m["mii"] = {
"Chigmecatitlán Mixtec",
12953724,
"omq-mxt",
"Latn",
}
m["mij"] = {
"Mungbam",
34725,
"nic-beb",
"Latn",
}
m["mik"] = {
"Mikasuki",
13316,
"nai-mus",
"Latn",
}
m["mil"] = {
"Peñoles Mixtec",
42411307,
"omq-mxt",
"Latn",
}
m["mim"] = {
"Alacatlatzala Mixtec",
14697894,
"omq-mxt",
"Latn",
}
m["min"] = {
"tiếng Minangkabau",
13324,
"poz-mly",
"Latn, Arab",
"Tiếng Minangkabau",
"Minangkabau",
}
m["mio"] = {
"Pinotepa Nacional Mixtec",
7196415,
"omq-mxt",
"Latn",
}
m["mip"] = {
"Apasco-Apoala Mixtec",
13583505,
"omq-mxt",
"Latn",
}
m["miq"] = {
"tiếng Miskito",
1516803,
"nai-min",
"Latn",
"Tiếng Miskito",
"Miskito",
entry_name = {remove_diacritics = c.circ},
}
m["mir"] = {
"Isthmus Mixe",
6088873,
"nai-miz",
}
m["mit"] = {
"Southern Puebla Mixtec",
7570345,
"omq-mxt",
"Latn",
}
m["miu"] = {
"Cacaloxtepec Mixtec",
12953723,
"omq-mxt",
"Latn",
}
m["miw"] = {
"Akoye",
3327462,
"ngf",
"Latn",
}
m["mix"] = {
"Mixtepec Mixtec",
6884125,
"omq-mxt",
"Latn",
}
m["miy"] = {
"Ayutla Mixtec",
13583508,
"omq-mxt",
"Latn",
}
m["miz"] = {
"Coatzospan Mixtec",
3317290,
"omq-mxt",
"Latn",
}
m["mjb"] = {
"tiếng Makalero",
35729,
"paa-alp",
"Latn",
}
m["mjc"] = {
"San Juan Colorado Mixtec",
12953718,
"omq-mxt",
"Latn",
}
m["mjd"] = {
"Northwest Maidu",
3198700,
"nai-mdu",
"Latn",
}
m["mje"] = {
"Muskum",
3913334,
}
-- mjg "Monguor" is not recognized as a language, but it is a family code
m["mji"] = {
"tiếng Kim Môn",
1115317,
"hmx-mie",
"Latn",
"Tiếng Kim Môn",
"Kim Môn"
}
m["mjj"] = {
"Mawak",
11732427,
"ngf-mad",
}
m["mjk"] = {
"Matukar",
6791963,
"poz-ocw",
"Latn",
}
m["mjl"] = {
"tiếng Mandi",
6747931,
"him",
"Deva, Takr",
"Tiếng Mandi",
"Mandi",
translit = {Deva = "hi-translit"},
}
m["mjm"] = {
"Medebur",
6805227,
"poz-ocw",
"Latn",
}
m["mjn"] = {
"Mebu",
6804364,
"ngf-fin",
}
m["mjo"] = {
"tiếng Malankurava",
14916887,
"dra-mal",
"Mlym",
"Tiếng Malankurava",
"Malankurava",
translit = "ml-translit",
}
m["mjp"] = {
"tiếng Malapandaram",
10575729,
"dra-tam",
"Taml",
"Tiếng Malapandaram",
"Malapandaram",
translit = "ta-translit",
}
m["mjq"] = {
"tiếng Malarya",
12952773,
"dra-mal",
"Mlym",
"Tiếng Malarya",
"Malarya",
translit = "ml-translit",
}
m["mjr"] = {
"tiếng Malavedan",
12952775,
"dra-mal",
"Mlym",
"Tiếng Malavedan",
"Malavedan",
translit = "ml-translit",
}
m["mjs"] = {
"Miship",
3441264,
"cdc-wst",
"Latn",
}
m["mjt"] = {
"tiếng Paharia Sauria",
33907,
"dra-mlo",
"Beng, Deva",
"Tiếng Paharia Sauria",
"Paharia Sauria",
}
m["mju"] = {
"Manna-Dora",
10576453,
"dra-tel",
}
m["mjv"] = {
"tiếng Mannan",
3286037,
"dra-tam",
"Mlym, Taml",
"Tiếng Mannan",
"Mannan",
translit = {
Mlym = "ml-translit",
Taml = "ta-translit",
},
}
m["mjw"] = {
"tiếng Karbi",
56591,
"tbq-kuk",
"Latn, Beng",
"Tiếng Karbi",
"Karbi",
}
m["mjx"] = {
"tiếng Mahal",
12953686,
"mun",
"Olck, Deva, Beng, Orya",
"Tiếng Mahal",
"Mahal",
translit = {
Olck = "Olck-translit",
Deva = "hi-translit",
Beng = "bn-translit",
}
}
m["mjy"] = {
"Mahican",
3182562,
"alg-eas",
"Latn",
}
m["mjz"] = {
"Majhi",
6737786,
"inc-eas",
ancestors = "bh",
}
m["mka"] = {
"Mbre",
3450154,
"nic", --unclassified within niger-congo tho
}
m["mkb"] = {
"Mal Paharia",
6583595,
}
m["mkc"] = {
"Siliput",
7515090,
"qfa-tor",
"Latn",
}
m["mke"] = {
"Mawchi",
21403317,
}
m["mkf"] = {
"Miya",
43328,
"cdc-wst",
"Latn",
}
m["mkg"] = {
"Mak (China)",
3280623,
"qfa-kms",
}
m["mki"] = {
"tiếng Dhatki",
32480,
"inc-wes",
"Arab, Deva",
"Tiếng Dhatki",
"Dhatki",
ancestors = "mwr",
}
m["mkj"] = {
"tiếng Mokil",
2335528,
"poz-mic",
"Latn",
"Tiếng Mokil",
"Mokil",
}
m["mkk"] = {
"Byep",
35052,
"bnt-mka",
}
m["mkl"] = {
"Mokole",
36047,
}
m["mkm"] = {
"tiếng Moklen",
3319380,
"poz",
"Latn, Thai",
"Tiếng Moklen",
"Moklen"
}
m["mkn"] = {
"Kupang Malay",
18458203,
"crp",
}
m["mko"] = {
"Mingang Doso",
3915382,
"alv-bwj",
}
m["mkp"] = {
"Moikodi",
6894594,
"ngf",
}
m["mkq"] = {
"Bay Miwok",
3460957,
"nai-you",
"Latn",
}
m["mkr"] = {
"Malas",
11732402,
"ngf-mad",
}
m["mks"] = {
"Silacayoapan Mixtec",
7514027,
"omq-mxt",
"Latn",
}
m["mkt"] = {
"Vamale",
14916907,
"poz-cln",
"Latn",
}
m["mku"] = {
"Konyanka Maninka",
11163298,
"dmn-mnk",
}
m["mkv"] = {
"Mafea",
3073532,
"poz-vnc",
"Latn",
}
m["mkx"] = {
"Cinamiguin Manobo",
12953697,
"mno",
}
m["mky"] = {
"East Makian",
3512690,
"poz-hce",
"Latn",
}
m["mkz"] = {
"tiếng Makasae",
35782,
"paa-eti",
"Latn",
}
m["mla"] = {
"Tamambo",
1153276,
"poz-vnc",
"Latn",
}
m["mlb"] = {
"Mbule",
35843,
"nic-ymb",
"Latn",
}
m["mlc"] = {
"tiếng Sán Chay",
3446682,
"tai-cho",
"Latn, Hani",
"Tiếng Sán Chay",
"Sán Chay",
sort_key = {Hani = "Hani-sortkey"},
}
m["mle"] = {
"Manambu",
11732406,
"paa-spk",
"Latn",
}
m["mlf"] = {
"tiếng Mal",
3281057,
"mkh-khm",
"Thai",
"Tiếng Mal",
"Mal",
}
m["mlh"] = {
"Mape",
6753787,
}
m["mli"] = {
"Malimpung",
12473435,
}
m["mlj"] = {
"Miltu",
3441310,
}
m["mlk"] = {
"Ilwana",
6001357,
"bnt-sab",
}
m["mll"] = {
"Malua Bay",
6744946,
"poz-vnc",
"Latn",
}
m["mlm"] = {
"Mulam",
3092284,
"qfa-kms",
"Latn",
}
m["mln"] = {
"Malango",
3281522,
"poz-sls",
"Latn",
}
m["mlo"] = {
"Mlomp",
36009,
"alv-bak",
}
m["mlp"] = {
"Bargam",
4860543,
"ngf-mad",
"Latn",
}
m["mlq"] = {
"Western Maninkakan",
11028033,
"dmn-wmn",
}
m["mlr"] = {
"Vame",
3515088,
}
m["mls"] = {
"Masalit",
56557,
"ssa",
}
m["mlu"] = {
"To'abaita",
36645,
"poz-sls",
"Latn",
}
m["mlv"] = {
"tiếng Mwotlap",
2475538,
"poz-vnc",
"Latn",
"Tiếng Mwotlap",
"Mwotlap",
}
m["mlw"] = {
"Moloko",
1965222,
"cdc-cbm",
"Latn",
}
m["mlx"] = {
"Malfaxal",
2157421,
"poz-vnc",
"Latn",
}
m["mlz"] = {
"Malaynon",
18755512,
"phi",
}
m["mma"] = {
"Mama",
3913963,
"nic-jrn",
}
m["mmb"] = {
"Momina",
6897297,
}
m["mmc"] = {
"tiếng Mazahua Michoacán",
12953705,
"oto",
"Latn",
"Tiếng Mazahua Michoacán",
"Mazahua Michoacán",
}
m["mmd"] = {
"tiếng Mao Nam",
3092293,
"qfa-kms",
"Latn",
"Tiếng Mao Nam",
"Mao Nam",
}
m["mme"] = {
"Mae",
3276286,
"poz-vnc",
"Latn",
}
m["mmf"] = {
"Mundat",
56263,
"cdc-wst",
"Latn",
}
m["mmg"] = {
"North Ambrym",
2842468,
"poz-vnc",
"Latn",
}
m["mmh"] = {
"Mehináku",
3501838,
"awd",
"Latn",
}
m["mmi"] = {
"Musar",
6940113,
"ngf-mad",
}
m["mmj"] = {
"Majhwar",
6737795,
}
m["mmk"] = {
"Mukha-Dora",
6933447,
}
m["mml"] = {
"Man Met",
3194984,
"mkh-pal",
}
m["mmm"] = {
"Maii",
6735599,
"poz-vnc",
"Latn",
}
m["mmn"] = {
"Mamanwa",
3206623,
"phi",
"Latn",
}
m["mmo"] = {
"Mangga Buang",
12952294,
"poz-ocw",
"Latn",
}
m["mmp"] = {
"Musan",
2605703,
"paa-asa",
}
m["mmq"] = {
"Aisi",
6940074,
"ngf-mad",
"Latn",
}
m["mmr"] = {
"tiếng H'Mông Tương Tây Tây",
3307901,
"hmn",
nil,
"Tiếng H'Mông Tương Tây Tây",
"H'Mông Tương Tây Tây",
}
m["mmt"] = {
"Malalamai",
3281496,
"poz-ocw",
"Latn",
}
m["mmu"] = {
"Mmaala",
13123461,
"nic-ymb",
"Latn",
}
m["mmv"] = {
"Miriti",
6873567,
"sai-tuc",
"Latn",
}
m["mmw"] = {
"Emae",
3051961,
"poz-pnp",
"Latn",
}
m["mmx"] = {
"Madak",
3275205,
"poz-ocw",
"Latn",
}
m["mmy"] = {
"Migaama",
56259,
"cdc-est",
"Latn",
}
m["mmz"] = {
"Mabaale",
11003249,
"bnt-ngn",
}
m["mna"] = {
"Mbula",
3303572,
"poz-ocw",
"Latn",
}
m["mnb"] = {
"tiếng Muna",
6935584,
"poz-mun",
"Latn",
"Tiếng Muna",
"Muna",
}
m["mnc"] = {
"tiếng Mãn Châu",
33638,
"tuw-jrc",
"mnc-Mong, Latn",
"Tiếng Mãn Châu",
"Mãn Châu",
ancestors = "juc",
translit = "mnc-translit",
}
m["mnd"] = {
"Mondé",
6898840,
"tup",
"Latn",
}
m["mne"] = {
"Naba",
760732,
"csu-bgr",
}
m["mnf"] = {
"Mundani",
35839,
"nic-mom",
"Latn",
}
m["mng"] = {
"tiếng M'Nông Đông",
12953747,
"mkh-ban",
"Latn, Khmr",
"Tiếng M'Nông Đông",
"M'Nông Đông",
}
m["mnh"] = {
"Mono (Congo)",
33501,
"bad-cnt",
"Latn",
}
m["mni"] = {
"tiếng Manipur",
33868,
"sit",
"Mtei, Beng",
"Tiếng Manipur",
"Manipur",
ancestors = "omp",
translit = {Mtei = "Mtei-translit"},
}
m["mnj"] = {
"tiếng Munji",
33639,
"ira-mny",
"Arab",
"Tiếng Munji",
"Munji",
}
m["mnk"] = {
"tiếng Mandinka",
33678,
"dmn-wmn",
"Latn, Arab",
"Tiếng Mandinka",
"Mandinka",
}
m["mnl"] = {
"Tiale",
6744350,
"poz-vnc",
"Latn",
}
m["mnm"] = {
"Mapena",
11732415,
}
m["mnn"] = {
"tiếng M'Nông Nam",
23857582,
"mkh-ban",
nil,
"Tiếng M'Nông Nam",
"M'Nông Nam"
}
m["mnp"] = {
"tiếng Mân Bắc",
36457,
"zhx-inm",
"Hants",
"Tiếng Mân Bắc",
"Mân Bắc",
generate_forms = "zh-generateforms",
translit = "zh-translit",
sort_key = "Hani-sortkey",
}
m["mnq"] = {
"tiếng Minriq",
2742268,
"mkh-asl",
"Latn",
"Tiếng Minriq",
"Minriq"
}
m["mnr"] = {
"Mono (California)",
33591,
"azc-num",
"Latn",
}
m["mnt"] = {
"Maykulan",
3915696,
"aus-pam",
"Latn",
}
m["mnu"] = {
"Mer",
6817854,
}
m["mnv"] = {
"Rennellese",
3397346,
"poz-pnp",
"Latn",
}
m["mnw"] = {
"tiếng Môn",
13349,
"mkh-mnc",
"Mymr",
"Tiếng Môn",
"Môn",
ancestors = "mkh-mmn",
translit = "mnw-translit",
sort_key = {
from = {"ျ", "ြ", "ွ", "ှ", "ၞ", "ၟ", "ၠ", "ၚ", "ဿ"},
to = {"္ယ", "္ရ", "္ဝ", "္ဟ", "္န", "္မ", "္လ", "င", "သ္သ"}
},
}
m["mnx"] = {
"Manikion",
3507964,
"paa-wpa",
}
m["mny"] = {
"Manyawa",
11002622,
"bnt-mak",
ancestors = "vmw",
}
m["mnz"] = {
"Moni",
6899857,
}
m["moa"] = {
"tiếng Mwan",
3320111,
"dmn-nbe",
"Latn",
"Tiếng Mwan",
"Mwan",
}
m["moc"] = {
"Mocoví",
3027906,
"sai-guc",
"Latn",
}
m["mod"] = {
"Mobilian",
13333,
"crp",
"Latn",
ancestors = "cho, cic",
}
m["moe"] = {
"Montagnais",
13351,
"alg",
"Latn",
ancestors = "cr",
entry_name = {remove_diacritics = c.macron},
}
m["mog"] = {
"tiếng Mongondow",
3058458,
"phi",
"Latn",
"Tiếng Mongondow",
"Mongondow",
}
m["moh"] = {
"tiếng Mohawk",
13339,
"iro-nor",
"Latn",
"Tiếng Mohawk",
"Mohawk",
ancestors = "iro-omo",
}
m["moi"] = {
"Mboi",
3914417,
"alv-yun",
}
m["moj"] = {
"Monzombo",
11154772,
"nic-nkk",
"Latn",
}
m["mok"] = {
"Morori",
6913275,
}
m["mom"] = {
"Monimbo",
56542,
}
m["moo"] = {
"tiếng Mơ Nâm",
6901726,
"mkh-nbn",
"Latn",
"Tiếng Mơ Nâm",
"Mơ Nâm"
}
m["mop"] = {
"Mopan Maya",
36183,
"myn",
"Latn",
}
m["moq"] = {
"Mor (Papuan)",
11732468,
"paa",
}
m["mor"] = {
"tiếng Moro",
36172,
"alv-hei",
"Latn",
"Tiếng Moro",
"Moro",
}
m["mos"] = {
"tiếng Mooré",
36096,
"nic-mre",
"Latn",
"Tiếng Mooré",
"Mooré",
}
m["mot"] = {
"Barí",
2886281,
"cba",
"Latn",
}
m["mou"] = {
"Mogum",
3440473,
"cdc-est",
"Latn",
}
m["mov"] = {
"Mojave",
56510,
"nai-yuc",
"Latn",
}
m["mow"] = {
"Moi (Congo)",
11124792,
"bnt-bmo",
"Latn",
}
m["mox"] = {
"Molima",
3319495,
"poz-ocw",
"Latn",
}
m["moy"] = {
"tiếng Shekkacho",
56827,
"omv-gon",
"Ethi, Latn",
"Tiếng Shekkacho",
"Shekkacho",
}
m["moz"] = {
"Mukulu",
3440403,
"cdc-est",
}
m["mpa"] = {
"Mpoto",
6928303,
"bnt-mbi",
}
m["mpb"] = {
"Mullukmulluk",
6741120,
}
m["mpc"] = {
"Mangarayi",
6748829,
}
m["mpd"] = {
"Machinere",
12953681,
"awd",
"Latn",
}
m["mpe"] = {
"tiếng Majang",
56724,
"sdv",
"Ethi",
"Tiếng Majang",
"Majang",
}
m["mpg"] = {
"Marba",
56614,
"cdc-mas",
}
m["mph"] = {
"tiếng Maung",
6792550,
"aus-wdj",
"Latn",
}
m["mpi"] = {
"tiếng Mpade",
3280670,
"cdc-cbm",
"Latn",
"Tiếng Mpade",
"Mpade",
}
m["mpj"] = {
"Martu Wangka",
3295916,
"aus-pam",
"Latn",
}
m["mpk"] = {
"Mbara (Chad)",
3912770,
"cdc-cbm",
}
m["mpl"] = {
"Middle Watut",
15887910,
"poz-ocw",
"Latn",
}
m["mpm"] = {
"tiếng Mixtec Yosondúa",
12953741,
"omq-mxt",
"Latn",
"Tiếng Mixtec Yosondúa",
"Mixtec Yosondúa",
}
m["mpn"] = {
"Mindiri",
6863842,
"poz-ocw",
"Latn",
}
m["mpo"] = {
"Miu",
6883668,
"poz-ocw",
"Latn",
}
m["mpp"] = {
"Migabac",
11732448,
}
m["mpq"] = {
"Matís",
3299145,
"sai-pan",
"Latn",
}
m["mpr"] = {
"Vangunu",
3554582,
"poz-ocw",
"Latn",
}
m["mps"] = {
"tiếng Dadibi",
5208077,
"ngf",
"Latn",
"Tiếng Dadibi",
"Dadibi",
}
m["mpt"] = {
"Mian",
12952846,
"ngf-okk",
"Latn",
}
m["mpu"] = {
"Makuráp",
3281037,
"tup",
"Latn",
}
m["mpv"] = {
"Mungkip",
11732485,
"ngf-fin",
"Latn",
}
m["mpw"] = {
"Mapidian",
6753812,
"awd",
"Latn",
}
m["mpx"] = {
"Misima-Paneati",
6875666,
"poz-ocw",
"Latn",
}
m["mpy"] = {
"Mapia",
3287224,
"poz-mic",
"Latn",
}
m["mpz"] = {
"tiếng Mpi",
6928276,
"tbq-bka",
"Thai",
"Tiếng Mpi",
"Mpi",
}
m["mqa"] = {
"Maba",
3273750,
}
m["mqb"] = {
"Mbuko",
3502213,
"cdc-cbm",
"Latn",
}
m["mqc"] = {
"Mangole",
6749097,
"poz-cma",
"Latn",
}
m["mqe"] = {
"Matepi",
11732426,
"ngf-mad",
}
m["mqf"] = {
"Momuna",
6897518,
}
m["mqg"] = {
"Kota Bangun Kutai Malay",
12952778,
}
m["mqh"] = {
"Tlazoyaltepec Mixtec",
12953740,
"omq-mxt",
"Latn",
}
m["mqi"] = {
"Mariri",
6765544,
}
m["mqj"] = {
"Mamasa",
6745452,
"poz-ssw",
"Latn",
}
m["mqk"] = {
"Rajah Kabunsuwan Manobo",
12953700,
"mno",
}
m["mql"] = {
"tiếng Mbelime",
4286473,
"nic-eov",
"Latn",
"Tiếng Mbelime",
"Mbelime",
}
m["mqm"] = {
"tiếng Marquises Nam",
19694214,
"poz-pep",
"Latn",
"Tiếng Marquises Nam",
"Marquises Nam",
}
m["mqn"] = {
"Moronene",
642581,
"poz-btk",
"Latn",
}
m["mqo"] = {
"Modole",
11732457,
"paa-nha",
}
m["mqp"] = {
"Manipa",
6749799,
"poz-cma",
"Latn",
}
m["mqq"] = {
"Minokok",
18642293,
}
m["mqr"] = {
"Mander",
6747979,
"paa-tkw",
}
m["mqs"] = {
"tiếng Tây Makian",
3033575,
"paa-nha",
nil,
"Tiếng Tây Makian",
"Tây Makian",
}
m["mqt"] = {
"Mok",
13018559,
"mkh-pal",
}
m["mqu"] = {
"Mandari",
3285426,
"sdv-bri",
}
m["mqv"] = {
"Mosimo",
11732478,
"ngf-mad",
"Latn",
}
m["mqw"] = {
"Murupi",
11732486,
"ngf-mad",
"Latn",
}
m["mqx"] = {
"Mamuju",
6746004,
"poz-ssw",
"Latn",
}
m["mqy"] = {
"tiếng Manggarai",
3285748,
"poz-cet",
"Latn",
"Tiếng Manggarai",
"Manggarai",
}
m["mqz"] = {
"Malasanga",
14916889,
"poz-ocw",
"Latn",
}
m["mra"] = {
"tiếng Mlabri",
3073465,
"mkh-khm",
nil,
"Tiếng Mlabri",
"Mlabri"
}
m["mrb"] = {
"Marino",
3293299,
}
m["mrc"] = {
"tiếng Maricopa",
56386,
"nai-yuc",
"Latn",
"Tiếng Maricopa",
"Maricopa",
}
m["mrd"] = {
"tiếng Magar Tây",
22303263,
"sit-gma",
"Deva",
"Tiếng Magar Tây",
"Magar Tây",
}
m["mre"] = {
"Martha's Vineyard Sign Language",
33494,
"sgn",
"Latn, Sgnw",
}
m["mrf"] = {
"Elseng",
3915667,
"paa-brd",
}
m["mrg"] = {
"tiếng Mising",
3316328,
"sit-tan",
"Latn, Beng, Deva",
"Tiếng Mising",
"Mising",
ancestors = "adi",
}
m["mrh"] = {
"Mara Chin",
4175893,
"tbq-kuk",
"Latn",
}
m["mrj"] = {
"tiếng Mari Tây",
1776032,
"chm",
"Cyrl",
"Tiếng Mari Tây",
"Mari Tây",
translit = "chm-translit",
sort_key = "mrj-sortkey",
}
m["mrk"] = {
"Hmwaveke",
5873712,
"poz-cln",
"Latn",
}
m["mrl"] = {
"Mortlockese",
3324598,
"poz-mic",
"Latn",
}
m["mrm"] = {
"Merlav",
3331115,
"poz-vnc",
"Latn",
}
m["mrn"] = {
"Cheke Holo",
2962165,
"poz-ocw",
"Latn",
}
m["mro"] = {
"Mru",
1951521,
"sit-mru",
"Latn, Mroo",
}
m["mrp"] = {
"Morouas",
6913299,
"poz-vnc",
"Latn",
}
m["mrq"] = {
"tiếng Marquises Bắc",
2603808,
"poz-pep",
"Latn",
"Tiếng Marquises Bắc",
"Marquises Bắc",
}
m["mrr"] = {
"tiếng Maria (Ấn Độ)",
27602,
"dra-mdy",
"Deva",
"Tiếng Maria (Ấn Độ)",
"Maria (Ấn Độ)",
}
m["mrs"] = {
"Maragus",
6754640,
"poz-vnc",
"Latn",
}
m["mrt"] = {
"Margi",
56241,
"cdc-cbm",
"Latn",
}
m["mru"] = {
"Mono (Cameroon)",
11031964,
"alv-mbm",
"Latn",
}
m["mrv"] = {
"Mangarevan",
36237,
"poz-pep",
"Latn",
}
m["mrw"] = {
"tiếng Maranao",
33800,
"phi",
"Latn, Arab",
"Tiếng Maranao",
"Maranao",
}
m["mrx"] = {
"Dineor",
5278044,
"paa-tkw",
}
m["mry"] = {
"Karaga Mandaya",
6747925,
"phi",
}
m["mrz"] = {
"Marind",
6763970,
}
m["msb"] = {
"tiếng Masbatenyo",
33948,
"phi",
"Latn",
"Tiếng Masbatenyo",
"Masbatenyo",
}
m["msc"] = {
"Sankaran Maninka",
11155812,
"dmn-mnk",
}
m["msd"] = {
"Yucatec Maya Sign Language",
34281,
"sgn",
"Latn", -- when documented
}
m["mse"] = {
"Musey",
56328,
"cdc-mas",
}
m["msf"] = {
"Mekwei",
4544752,
"paa-nim",
"Latn",
}
m["msg"] = {
"Moraid",
6909020,
}
m["msi"] = {
"Sabah Malay",
10867404,
"crp",
}
m["msj"] = {
"Ma",
6720909,
"nic-mbc",
"Latn",
}
m["msk"] = {
"tiếng Mansaka",
12952800,
"phi",
"Latn",
"Tiếng Mansaka",
"Mansaka",
}
m["msl"] = {
"Molof",
4300950,
}
m["msm"] = {
"Agusan Manobo",
12953696,
"mno",
}
m["msn"] = {
"tiếng Vurës",
3563857,
"poz-vnc",
"Latn",
"Tiếng Vurës",
"Vurës",
}
m["mso"] = {
"Mombum",
6897079,
}
m["msp"] = {
"Maritsauá",
6765915,
"tup",
"Latn",
}
m["msq"] = {
"Caac",
2932212,
"poz-cln",
"Latn",
}
m["msr"] = {
"Mongolian Sign Language",
3915499,
"sgn",
}
m["mss"] = {
"West Masela",
12952816,
"poz-tim",
}
m["msu"] = {
"Musom",
6943041,
"poz-ocw",
"Latn",
}
m["msv"] = {
"Maslam",
3502273,
}
m["msw"] = {
"Mansoanka",
35814,
}
m["msx"] = {
"Moresada",
11732475,
}
m["msy"] = {
"Aruamu",
3501809,
"paa",
"Latn",
}
m["msz"] = {
"Momare",
6897030,
}
m["mta"] = {
"Cotabato Manobo",
12953698,
"mno",
}
m["mtb"] = {
"Anyin Morofo",
3502338,
"alv-ctn",
"Latn",
ancestors = "any",
}
m["mtc"] = {
"Munit",
11732482,
"ngf-mad",
}
m["mtd"] = {
"Mualang",
3073458,
"poz-mly",
}
m["mte"] = {
"Alu",
33503,
"poz-ocw",
"Latn",
}
m["mtf"] = {
"Murik (New Guinea)",
7050035,
"paa-lsp",
"Latn",
}
m["mtg"] = {
"Una",
5580728,
}
m["mth"] = {
"tiếng Munggui",
6936018,
"poz-hce",
"Latn",
}
m["mti"] = {
"Maiwa (New Guinea)",
6737223,
"ngf",
"Latn",
}
m["mtj"] = {
"Moskona",
11288953,
}
m["mtk"] = {
"Mbe'",
10964025,
"nic-nka",
"Latn",
}
m["mtl"] = {
"Montol",
3440457,
"cdc-wst",
"Latn",
}
m["mtm"] = {
"tiếng Mator",
20669419,
"syd",
"Cyrl",
"Tiếng Mator",
"Mator",
}
m["mtn"] = {
"Matagalpa",
3490756,
"nai-min",
}
m["mto"] = {
"Totontepec Mixe",
7828400,
"nai-miz",
}
m["mtp"] = {
"Wichí Lhamtés Nocten",
5908756,
"sai-wic",
"Latn",
}
m["mtq"] = {
"tiếng Mường",
3236789,
"mkh-vie",
"Latn",
"Tiếng Mường",
"Mường",
sort_key = "vi-sortkey",
}
m["mtr"] = {
"Mewari",
nil,
"inc-wes",
"Deva",
ancestors = "raj",
translit = "hi-translit", -- for now
}
m["mts"] = {
"Yora",
3572572,
"sai-pan",
"Latn",
}
m["mtt"] = {
"tiếng Mota",
3325052,
"poz-vnc",
"Latn",
"Tiếng Mota",
"Mota",
}
m["mtu"] = {
"Tututepec Mixtec",
7857069,
"omq-mxt",
"Latn",
}
m["mtv"] = {
"Asaro'o",
3503684,
"ngf-fin",
"Latn",
}
m["mtw"] = {
"Magahat",
6729600,
"phi",
}
m["mtx"] = {
"Tidaá Mixtec",
7800805,
"omq-mxt",
"Latn",
}
m["mty"] = {
"Nabi",
6956858,
"qfa-tor",
"Latn",
}
m["mua"] = {
"Mundang",
36032,
"alv-mbm",
}
m["mub"] = {
"Mubi",
3440518,
"cdc-est",
"Latn",
}
m["muc"] = {
"Mbu'",
35868,
"nic-beb",
"Latn",
}
m["mud"] = {
"Mednyj Aleut",
1977419,
"qfa-mix",
ancestors = "ale, ru"
}
m["mue"] = {
"tiếng Quichuañol",
36066,
"crp",
"Latn",
"Tiếng Quichuañol",
"Quichuañol",
ancestors = "es, qu",
}
m["mug"] = {
"Musgu",
3123545,
"cdc-cbm",
"Latn",
}
m["muh"] = {
"Mündü",
35981,
"nic-nke",
"Latn",
}
m["mui"] = {
"tiếng Musi",
615660,
"poz-mly",
"Latn",
}
m["muj"] = {
"Mabire",
3440437,
}
m["mul"] = {
"đa ngữ",
20923490,
"qfa-not",
"All",
"Đa ngữ",
"đa ngữ",
wikipedia_article = "Translingualism",
sort_key = {
Hani = "Hani-sortkey",
Jpan = "Jpan-sortkey",
Hrkt = "Hira-sortkey", -- Sort all kana as Hira.
Hira = "Hira-sortkey",
Kana = "Hira-sortkey",
},
standardChars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" .. c.punc,
}
m["mum"] = {
"Maiwala",
12952764,
"poz-ocw",
"Latn",
}
m["muo"] = {
"Nyong",
36373,
"alv-lek",
}
m["mup"] = {
"tiếng Malvi",
33413,
"inc-wes",
"Deva",
"Tiếng Malvi",
"Malvi",
ancestors = "raj",
translit = "hi-translit"
}
m["muq"] = {
"Eastern Xiangxi Miao",
27431376,
"hmn",
}
m["mur"] = {
"tiếng Murle",
56727,
"sdv",
"Latn",
"Tiếng Murle",
"Murle",
}
m["mus"] = {
"tiếng Muscogee",
523014,
"nai-mus",
"Latn",
"Tiếng Muscogee",
"Muscogee",
}
m["mut"] = {
"Western Muria",
12952886,
"dra-mur",
}
m["muu"] = {
"tiếng Yaaku",
34222,
"cus-eas",
"Latn",
"Tiếng Yaaku",
"Yaaku",
}
m["muv"] = {
"tiếng Muthuvan",
3327420,
"dra-tam",
"Mlym, Taml",
"Tiếng Muthuvan",
"Muthuvan",
translit = {
Mlym = "ml-translit",
Taml = "ta-translit",
},
}
m["mux"] = {
"Bo-Ung",
15831607,
}
m["muy"] = {
"Muyang",
3502301,
"cdc-cbm",
"Latn",
}
m["muz"] = {
"tiếng Mursi",
36013,
"sdv",
"Ethi, Latn",
"Tiếng Mursi",
"Mursi",
}
m["mva"] = {
"Manam",
6746851,
"poz-ocw",
"Latn",
}
m["mvb"] = {
"Mattole",
20824,
"ath-pco",
"Latn",
}
m["mvd"] = {
"Mamboru",
578815,
"poz",
}
m["mvg"] = {
"Yucuañe Mixtec",
25562736,
"omq-mxt",
"Latn",
}
m["mvh"] = {
"Mire",
3441359,
}
m["mvi"] = {
"tiếng Miyako",
36218,
"jpx-sry",
"Jpan",
"Tiếng Miyako",
"Miyako",
translit = s["Jpan-translit"],
sort_key = s["Jpan-sortkey"],
}
m["mvk"] = {
"Mekmek",
6810592,
"paa-yua",
}
m["mvl"] = {
"Mbara (Australia)",
6799620,
"aus-pam",
}
m["mvm"] = {
"Muya",
2422759,
"sit-qia",
}
m["mvn"] = {
"Minaveha",
6863278,
"poz-ocw",
"Latn",
}
m["mvo"] = {
"Marovo",
3294683,
"poz-ocw",
"Latn",
}
m["mvp"] = {
"Duri",
3915414,
"poz-ssw",
}
m["mvq"] = {
"Moere",
11732458,
"ngf-mad",
}
m["mvr"] = {
"tiếng Marau",
6755069,
"poz-hce",
"Latn",
}
m["mvs"] = {
"Massep",
3502895,
"paa-tkw",
}
m["mvt"] = {
"Mpotovoro",
6928305,
"poz-vnc",
"Latn",
}
m["mvu"] = {
"Marfa",
713633,
}
m["mvv"] = {
"tiếng Tagal Murut",
7675300,
"poz-san",
"Latn",
"Tiếng Tagal Murut",
"Tagal Murut",
}
m["mvw"] = {
"Machinga",
12952754,
"bnt-rvm",
}
m["mvx"] = {
"Meoswar",
6817777,
"poz-hce",
"Latn",
}
m["mvy"] = {
"tiếng Kohistan",
33399,
"inc-koh",
nil,
"Tiếng Kohistan",
"Kohistan",
}
m["mvz"] = {
"tiếng Mesqan",
6821677,
"sem-eth",
"Ethi",
"Tiếng Mesqan",
"Mesqan",
}
m["mwa"] = {
"Mwatebu",
14916896,
"poz-ocw",
"Latn",
}
m["mwb"] = {
"Juwal",
6319103,
"qfa-tor",
"Latn",
}
m["mwc"] = {
"Are",
29277,
"poz-ocw",
"Latn",
}
m["mwe"] = {
"Mwera",
6944725,
"bnt-rvm",
"Latn",
}
m["mwf"] = {
"Murrinh-Patha",
2980398,
"aus-dal",
"Latn",
}
m["mwg"] = {
"Aiklep",
3399652,
"poz-ocw",
"Latn",
}
m["mwh"] = {
"Mouk-Aria",
3325498,
"poz-ocw",
"Latn",
}
m["mwi"] = {
"Labo",
2157452,
"poz-vnc",
"Latn",
}
m["mwk"] = {
"Kita Maninkakan",
3015523,
"dmn-wmn",
}
m["mwl"] = {
"tiếng Miranda",
13330,
"roa-ibe",
"Latn",
"Tiếng Miranda",
"Miranda",
ancestors = "roa-ole",
}
m["mwm"] = {
"tiếng Sar",
56850,
"csu-sar",
"Latn",
"Tiếng Sar",
"Sar",
}
m["mwn"] = {
"Nyamwanga",
6944666,
"bnt-mwi",
}
m["mwo"] = {
"Central Maewo",
3276435,
}
m["mwp"] = {
"Kala Lagaw Ya",
2591262,
"aus-pam",
"Latn",
}
m["mwq"] = {
"Mün Chin",
331340,
"tbq-kuk",
}
m["mwr"] = {
"tiếng Marwar",
56312,
"inc-wes",
"Deva, Mahj",
"Tiếng Marwar",
"Marwar",
ancestors = "raj",
translit = {
Deva = "hi-translit", -- for now
Mahj = "Mahj-translit",
},
}
m["mws"] = {
"Mwimbi-Muthambi",
15632357,
"bnt-kka",
"Latn",
}
m["mwt"] = {
"tiếng Moken",
18648701,
"poz",
nil,
"Tiếng Moken",
"Moken"
}
m["mwu"] = {
"Mittu",
6883573,
"csu-bbk",
"Latn",
}
m["mwv"] = {
"tiếng Mentawai",
13365,
"poz-nws",
"Latn",
"Tiếng Mentawai",
"Mentawai",
}
m["mww"] = {
"tiếng Mông Trắng",
3138829,
"hmn",
"Latn, Hmng, Hmnp",
"Tiếng Mông Trắng",
"Mông Trắng",
}
m["mwz"] = {
"Moingi",
11011905,
}
m["mxa"] = {
"Northwest Oaxaca Mixtec",
12953739,
"omq-mxt",
"Latn",
}
m["mxb"] = {
"Tezoatlán Mixtec",
3317286,
"omq-mxt",
"Latn",
}
m["mxd"] = {
"Modang",
6888037,
"poz",
}
m["mxe"] = {
"Mele-Fila",
3305008,
"poz-pnp",
"Latn",
}
m["mxf"] = {
"Malgbe",
3502224,
}
m["mxg"] = {
"Mbangala",
6799612,
"bnt-yak",
}
m["mxh"] = {
"Mvuba",
6944591,
"csu-mle",
"Latn",
}
m["mxi"] = {
"tiếng Mozarab",
317044,
"roa-ibe",
"Arab, Hebr, Latn",
"Tiếng Mozarab",
"Mozarab",
translit = "mxi-translit",
}
m["mxj"] = {
"Miju",
56332,
"sit-mdz",
"Latn, Deva",
}
m["mxk"] = {
"Monumbo",
6906792,
"qfa-tor",
}
m["mxl"] = {
"Maxi Gbe",
35770,
"alv-gbe",
}
m["mxm"] = {
"Meramera",
6817936,
"poz-ocw",
"Latn",
}
m["mxn"] = {
"Moi (Indonesia)",
11732459,
"paa",
}
m["mxo"] = {
"Mbowe",
10962309,
"bnt-kav",
}
m["mxp"] = {
"Tlahuitoltepec Mixe",
7810697,
}
m["mxq"] = {
"Juquila Mixe",
25559721,
}
m["mxr"] = {
"Murik (Malaysia)",
3328150,
nil,
"Latn",
}
m["mxs"] = {
"Huitepec Mixtec",
12953729,
"omq-mxt",
"Latn",
}
m["mxt"] = {
"Jamiltepec Mixtec",
12953730,
"omq-mxt",
"Latn",
}
m["mxu"] = {
"Mada (Cameroon)",
3441206,
"cdc-cbm",
"Latn",
}
m["mxv"] = {
"Metlatónoc Mixtec",
36363,
"omq-mxt",
"Latn",
}
m["mxw"] = {
"Namo",
12952923,
}
m["mxx"] = {
"Mahou",
11004334,
"dmn-mnk",
}
m["mxy"] = {
"Southeastern Nochixtlán Mixtec",
7070684,
"omq-mxt",
"Latn",
}
m["mxz"] = {
"Central Masela",
42575433,
"poz-tim",
}
m["myb"] = {
"tiếng Mbay",
3033565,
"csu-sar",
"Latn",
"Tiếng Mbay",
"Mbay",
}
m["myc"] = {
"Mayeka",
11129517,
"bnt-boa",
}
m["mye"] = {
"tiếng Myene",
35832,
"bnt-tso",
"Latn",
"Tiếng Myene",
"Myene",
}
m["myf"] = {
"tiếng Bambassi",
56540,
"omv-mao",
nil,
"Tiếng Bambassi",
"Bambassi",
}
m["myg"] = {
"Manta",
35799,
"nic-mom",
"Latn",
}
m["myh"] = {
"Makah",
3280640,
"wak",
"Latn",
}
m["myj"] = {
"Mangayat",
35988,
"nic-ser",
}
m["myk"] = {
"tiếng Senoufo Mamara",
36187,
"alv-sma",
"Latn",
"Tiếng Senoufo Mamara",
"Senoufo Mamara",
}
m["myl"] = {
"Moma",
6897018,
"poz",
}
m["mym"] = {
"tiếng Me'en",
3408516,
"sdv",
"Ethi, Latn",
"Tiếng Me'en",
"Me'en",
}
m["myo"] = {
"Anfillo",
34928,
"omv-gon",
}
m["myp"] = {
"Pirahã",
33825,
"sai-mur",
"Latn",
}
m["myr"] = {
"Muniche",
3915654,
}
m["mys"] = {
"Mesmes",
3508617,
"sem-eth",
}
m["myu"] = {
"Mundurukú",
746723,
"tup",
"Latn",
}
m["myv"] = {
"tiếng Erzya",
29952,
"urj-mdv",
"Cyrl",
"Tiếng Erzya",
"Erzya",
translit = "myv-translit",
override_translit = true,
}
m["myw"] = {
"Muyuw",
3502878,
"poz-ocw",
"Latn",
}
m["myx"] = {
"Masaba",
12952814,
"bnt-msl",
"Latn",
}
m["myy"] = {
"Macuna",
3275059,
"sai-tuc",
"Latn",
}
m["myz"] = {
"Classical Mandaic",
25559314,
"sem-ase",
"Mand",
}
m["mza"] = {
"Santa María Zacatepec Mixtec",
8063756,
"omq-mxt",
"Latn",
}
m["mzb"] = {
"tiếng Berber Bắc Sahara",
11156769,
"ber",
nil,
"Tiếng Berber Bắc Sahara",
"Berber Bắc Sahara",
}
m["mzc"] = {
"Madagascar Sign Language",
12715020,
"sgn",
}
m["mzd"] = {
"Malimba",
35806,
"bnt-saw",
}
m["mze"] = {
"Morawa",
6909384,
}
m["mzg"] = {
"Monastic Sign Language",
3217333,
"sgn",
}
m["mzh"] = {
"Wichí Lhamtés Güisnay",
7998197,
"sai-wic",
"Latn",
}
m["mzi"] = {
"Ixcatlán Mazatec",
6101049,
"omq-maz",
"Latn",
}
m["mzj"] = {
"Manya",
11006832,
"dmn-mnk",
}
m["mzk"] = {
"Nigeria Mambila",
11004163,
"nic-mmb",
"Latn",
}
m["mzl"] = {
"Mazatlán Mixe",
25559728,
}
m["mzm"] = {
"Mumuye",
36021,
"alv-mum",
"Latn",
}
m["mzn"] = {
"tiếng Mazandaran",
13356,
"ira-msh",
"mzn-Arab",
"Tiếng Mazandaran",
"Mazandaran",
}
m["mzo"] = {
"Matipuhy",
6787588,
"sai-kui",
"Latn",
}
m["mzp"] = {
"Movima",
1659701,
"qfa-iso",
}
m["mzq"] = {
"Mori Atas",
3324070,
"poz-btk",
}
m["mzr"] = {
"Marúbo",
3296011,
"sai-pan",
"Latn",
}
m["mzs"] = {
"Macanese",
35785,
"crp",
"Latn",
ancestors = "pt",
sort_key = {Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.diaer .. c.cedilla}},
}
m["mzt"] = {
"tiếng Mintil",
6869641,
"mkh-asl",
nil,
"Tiếng Mintil",
"Mintil"
}
m["mzu"] = {
"Inapang",
6013569,
"paa",
"Latn",
}
m["mzv"] = {
"Manza",
36038,
"alv-gbf",
}
m["mzw"] = {
"Deg",
35183,
"nic-gnw",
"Latn",
}
m["mzx"] = {
"Mawayana",
6794377,
"awd",
}
m["mzy"] = {
"Mozambican Sign Language",
6927809,
"sgn",
}
m["mzz"] = {
"Maiadomu",
6735234,
"poz-ocw",
"Latn",
}
return require("Module:languages").finalizeData(m, "language")
csd39svra51vienbqkym4gkncetbk23
cổ ngữ
0
263937
2569540
2241102
2026-10-11T03:31:06Z
Hiyuune
50834
/* Tiếng Việt */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2569540
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|etym}}===
{{vi-etym-sino|古語}}.
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|n}}===
{{vi-noun}}
# {{nhãn|vi|literary}} [[Ngôn ngữ]] [[cổ]].
#: {{ux|vi|Cuốn sách viết bằng '''cổ ngữ''' Latin.}}
# {{nhãn|vi|literary}} [[cách ngôn|Cách ngôn]] [[lưu truyền]] lại từ [[thời]] cổ.
#: {{ux|vi|'''Cổ ngữ''' có câu "nước xa không cứu được lửa gần".}}
==={{ĐM|ref}}===
* {{R:Tratu}}
* {{R:vi:Hoàng Phê 2021|page=256}}
0d03vox0liftrqyhvnp4ctyybgeg6yc
astrotourism
0
265079
2569574
2053502
2026-10-11T10:38:46Z
Hiyuune
50834
2569574
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|etym}}===
Từ {{prefix|en|astro|tourism}}.
==={{section|pron}}===
* {{audio|en|LL-Q1860 (eng)-Vealhurl-astrotourism.wav|a=Southern England}}
==={{section|n}}===
{{en-noun|-}}
# [[du lịch|Du lịch]] [[thiên văn]].
{{C|en|Du lịch|Du hành vũ trụ}}
hbedo68jaaha5eqocch8heer6zxu64i
emperor penguin
0
266357
2569507
2058600
2026-10-10T22:58:59Z
TheHighFighter2
42988
/* */
2569507
wikitext
text/x-wiki
=={{langname|en}}==
{{wp|en:}}
==={{ĐM|pron}}===
* {{audio|en|LL-Q1860 (eng)-Flame, not lame-emperor penguin.wav|a=US}}
==={{ĐM|noun}}===
{{en-noun}}
# [[chim cánh cụt hoàng đế|Chim cánh cụt hoàng đế]].
l2ivvyisckz2xurgz6dcwijingatl2d
Wiktionary:GUS2Wiki
4
267278
2569506
2568016
2026-10-10T22:07:36Z
Alexis Jazz
41773
Updating gadget usage statistics from [[Special:GadgetUsage]] ([[phab:T121049]])
2569506
wikitext
text/x-wiki
{{#ifexist:Project:GUS2Wiki/top|{{/top}}|This page provides a historical record of [[Special:GadgetUsage]] through its page history. To get the data in CSV format, see wikitext. To customize this message or add categories, create [[/top]].}}
Dữ liệu dưới đây được đưa vào vùng nhớ đệm và được cập nhật lần cuối lúc 2026-10-10T10:05:01Z. Tối đa có sẵn {{PLURAL:5000|một kết quả|5000 kết quả}} trong vùng nhớ đệm.
{| class="sortable wikitable"
! Tiện ích !! data-sort-type="number" | Số người dùng !! data-sort-type="number" | Số thành viên tích cực
|-
|AcceleratedFormCreation || 7 || 4
|-
|AjaxEdit || 4 || 3
|-
|CommentsInLocalTime || 15 || 3
|-
|DejaVu Sans || 69 || 2
|-
|ShowIDs || 3 || 2
|-
|TabbedLanguages || 7 || 3
|-
|Twinkle || 8 || 3
|-
|UTCLiveClock || 12 || 2
|-
|hotcat || 75 || 6
|-
|linkify || 33 || 2
|-
|navpop || 64 || 0
|-
|purgetab || 68 || 4
|-
|removeAccessKeys || 15 || 0
|-
|tot || 5 || 0
|-
|wiked || 59 || 0
|}
* [[Đặc biệt:GadgetUsage]]
* [[m:Meta:GUS2Wiki/Script|GUS2Wiki]]
<!-- data in CSV format:
AcceleratedFormCreation,7,4
AjaxEdit,4,3
CommentsInLocalTime,15,3
DejaVu Sans,69,2
ShowIDs,3,2
TabbedLanguages,7,3
Twinkle,8,3
UTCLiveClock,12,2
hotcat,75,6
linkify,33,2
navpop,64,0
purgetab,68,4
removeAccessKeys,15,0
tot,5,0
wiked,59,0
-->
krk25hbpq5cacvbdx3wby6braku1qda
Thành viên:TheHighFighter2/Trang con 3
2
269152
2569560
2568362
2026-10-11T04:42:04Z
TheHighFighter2
42988
2569560
wikitext
text/x-wiki
<div style="text-align: center; font-size: 24px; font-weight: bold;">
Danh Sách Mục Từ Tiếng Việt Còn Thiếu
</div>
==A, Ă, Â==
[[AI tạo sinh]]; [[áo gấm về làng]]; [[áo giao lĩnh]]; [[anh em cây khế]]; [[áo tràng vạt]]; [[áo tràng]]; [[ăn của rừng rưng rưng nước mắt]]; [[ăn không nên đọi, nói không nên lời]]; [[ăn không ngon, ngủ không yên]]; [[ăn lồn]]; [[ăn ngon ngủ kĩ]]/[[ăn ngon ngủ kỹ]]; [[ăn ngon ngủ yên]]; [[ấm dâu]];
==B==
[[ba mươi chưa phải là Tết]]; [[bánh kẹo]]; [[bánh mì và rạp xiếc]]; [[băng gâu]]; [[bằng niềm tin]]; [[bề mặt tấn công]]; [[bỉ vỏ]]; [[bói Kiều]]; [[bồ côi bồ cút]]; [[bổ báo]]; [[bời rời]]; [[bụng ỏng đít beo]]; [[bức xạ kế]];
==C==
[[cạn cợt]]; [[ca nương]]; [[ca-pi-ten]]; [[cá sấu lên bờ]]; [[cha mẹ sinh con, trời sinh tính]]; [[cha nó lú, chú nó khôn]]; [[chảy máu chất xám]]; [[chất độc màu da cam]]; [[chém cha không bằng pha tiếng]]; [[chèo nhị thập tứ hiếu]]; [[chí chương]]; [[chị em cây khế]]; [[chim Lạc]]; [[chó cỏ]]; [[chửi cha không bằng pha tiếng]]; [[chữ như gà bới]]; [[cơm búng]]; [[cù lủ]]/[[cù lũ]]/[[cú lủ]];
==D, Đ==
[[dao tem]]; [[dép tổ ong]]; [[di biến động]]; [[đa đảng]]; [[đào hát]]; [[đặc miễn]]; [[đất lâm nghiệp]]; [[đầu buồi]]; [[đầu tro mặt muội]]; [[đầu trời cuối đất]]; [[đi C]]; [[điện não]]; [[điệp giấy]]; [[đi K]]; [[đòng đành]]; [[đồ bơi]]; [[đổ tháo]]; [[đu càng]]; [[đùm đề]]; [[đùm đùm đề đề]];
==E, Ê==
==G==
[[gái đứng đường]];
==H==
[[hài độc thoại]]; [[hạn lượng]]; [[hấp diêm]]; [[hậu COVID]]; [[hậu thực dân]]; [[học máy]]; [[hỏng hẻo]]; [[huyệt mả]];
==I==
==K==
[[khảo lược]]; [[khăn bàn lông]]; [[khét nắng]]; [[khét rẹt]];
==L==
[[lon chon]];
==M==
[[mã đáo thành công]]; [[máy bay bà già]]; [[mập cụi]]; [[móc nhách]]; [[mới cóng]]/[[mới coóng]];
==N==
[[ngạn giải]]; [[ngoại giao cây tre]]; [[ngục ngoặc]]; [[ngựa bà]]; [[ngựa cu]]; [[nhất quỷ nhì ma, thứ ba học trò]];
==O, Ô, Ơ==
[[ông kẹ]];
==P==
[[phân biệt vùng miền]]; [[phi công trẻ lái máy bay bà già]]; [[phong ba bão táp không bằng ngữ pháp Việt Nam]]; [[phở bò]];
==Q==
[[quá 180 phút]]; [[quan họ hiếu]]; [[quần sinh]];
==R==
==S==
[[sòng sành]]; [[so se]]; [[sò sè]]; [[sò sò]];
==T==
[[tai biến khí hậu]]; [[tẻn tẻn]]; [[Tết Độc lập]]; [[tháng cô hồn]]; [[thối não]]; [[thừu lựu]]; [[tiêu chuẩn kép]]; [[tiểu mộc]]; [[tình tệ]]; [[toàn đồ]]; [[trò Kiều]]; [[tù nhân lương tâm]];
==U, Ư==
[[u nguyên bào thần kinh đệm]];
==V==
[[vãi chài]]; [[Việt gian]]; [[Việt hóa]]/[[Việt hoá]]; [[Việt Nam hóa]]/[[Việt Nam hoá]]; [[vũ trang đến tận răng]];
==X==
[[xăng-căng]]/[[xăng căng]]; [[xanh lá]]; [[xanh lục]]; [[xanh nước biển]]; [[xanh xảnh]]; [[xăm hường]]; [[xe bồ câu]]; [[xuntan]]; [[xúp-lê]]/[[xúp lê]];
==Y==
7sojfr4yqflu7dhwz1ab7m3wltsbx8l
ül
0
280871
2569538
2235919
2026-10-11T03:29:25Z
Hiyuune
50834
2569538
wikitext
text/x-wiki
{{also|-ül|uel|Phụ lục:Biến thể của "ul"}}
=={{langname|trk-fyk}}==
==={{section|adj}}===
{{head|trk-fyk|Tính từ}}
# [[ướt|Ướt]].
74ertszkiuzwcf0ifw5ji9jpphkzkbs
Mô đun:pt-pronunc
828
281334
2569516
2300588
2026-10-11T01:49:19Z
Hiyuune
50834
2569516
Scribunto
text/plain
--[=[
This module implements the template {{pt-IPA}}.
Author: Benwing
-- FIXME:
1. Implement i^ not before vowel = epenthetic i or deleted epenthetic i in Brazil (in that order), and i^^ not before
vowel = opposite order. Epenthetic i should not affect stress but should otherwise be treated like a normal vowel.
Deleted epenthetic i should trigger palatalization of t/d but have no other effects. [DONE]
2. Implement i^ before vowel = i.V or yV (in that order), and i^^ before vowel = opposite order. [DONE]
3. Implement i* = mandatory epenthetic i in Brazil. [DONE]
4. Implement u^ = u. or w (in that order), and u^^ = opposite order. [DONE]
5. Implement e^ = e or i in Brazil (in that order), and e^^ = opposite order. [DONE]
6. Implement o^ = o or u in Brazil (in that order), and o^^ = opposite order. [DONE]
7. Implement ê* = ê in Brazil, é in Portugal (useful especially before nasal consonants). [DONE]
8. Implement ô* = ô in Brazil, ó in Portugal (useful especially before nasal consonants). [DONE]
9. Implement é* = é in Brazil, ê in Portugal (useful especially in -éi-). [DONE]
10. Implement ó* = ó in Brazil, ô in Portugal (useful especially in -ói-). [DONE]
11. Implement des^ at beginning of word = 'dis++' or 'des++' in Brazil (in that order), and des^^ = opposite order. [DONE]
12. In Portugal, before [ɫ], unstressed 'a' should be /a/; unstressed 'e' should be /ɛ/; and unstressed 'o' should be
either /o/ or /ɔ/ (in that order). [DONE]
13. Support qualifiers using <q:...>. [DONE]
14. Support references using <ref:...>. Syntax is the same as for IPA ref=. [DONE]
15. In Portugal, unstressed o in hiatus should be /w/, and unstressed e in hiatus should be /j/. [DONE]
16. Support - (hyphen) = left and right parts should be treated as distinct phonological words but written joined
together, and non-final primary stresses turn into secondary stresses. Word-initial and word-final behavior should
happen, e.g. Brazil epenthesis of (j) before word-final /s/ followed a stressed vowel, Brazil raising of esC- and
Portugal rendering of o- as ò-. [DONE]
17. Support : (colon), similar to hyphen but in non-final parts, final vowels aren't rendered as closed. [DONE]
18. Support + (plus sign), similar to colon but non-final primary stresses aren't displayed and syllable-division
ignores the plus sign. [DONE]
19. In Brazil, word-initial enC-, emC- should display as (careful pronunciation) ẽ-, (natural pronunciation) ĩ-. [DONE]
20. In Portugal, -sç- and -sc(e/i)- should show as (careful pronunciation) /ʃs/, (natural pronunciation) /ʃ/. Same for
-sz- ([[as]] [[zonas]]). [DONE] [FIXME: Verify this reduction in [[as]] [[zonas]].]
21. In Portugal, grave accent indicates unstressed open a/e/o and macron indicates unstressed closed a/e/o; both are
ignored in Brazil. [DONE]
22. In Portugal, iCi where the first i is before the stress should (maybe) show as iCi, (traditional pronunciation) ɨCi.
In iCiCi, both of the first two i's show as ɨ in the traditional pronunciation (FIXME: verify this). C should be
only a single consonant, hence not in [[piscina]] or [[distrito]] (FIXME: verify this). Does not apply if the first
i is stressed (e.g. [[mínimo]], [[tília]], [[pírico]], [[tísica]]) or if the stressed i is word-final ([[Mimi]],
[[Lili]], [[chichizinho]], [[piripiri]]), or in certain other words ([[felicíssimo]], [[filhinho]], [[estilista]],
[[pirite]]). Possibly this means it doesn't apply when the stressed i is in a suffix (-íssimo, -inho, -ista). We
can always disable the eCi spelling by adding an h in 'ihCi' to make it look like a cluster between the i's. NOTE:
It appears that iCi -> eCi should apply in [[dicionário]], meaning if we apply it at the end, we have to distinguish
between glides from original i and glides from e or y.
23. In Portugal and Brazil, stressed o in hiatus should automatically be ô (voo, Samoa, Alagoas, perdoe, abençoe). [DONE]
24. In Northern Portugal, stressed closed ô in hiatus (whether written explicitly as e.g. vôo, Côa or generated automatically)
should show as e.g. /ˈbo.(w)ɐ/. [DONE] [FIXME: Verify syllable division.]
25. Recognize -zinha like -zinho, -mente. Just use hyphen (-) to handle these. We don't recognize -zão, -zona, -zito,
-zita because of too many false positives; you can just write the hyphen explicitly before the suffix as needed.
Cf. among our current vocabulary we have 10 -zão augmentatives (animalzão, aviãozão, cipozão, cuzão, homenzão,
leãozão, paizão, pãozão, pezão, tatuzão), 2 -ão augmentatives after a word ending in -z (codornizão, felizão), and
7 non-augmentatives (alazão, coalizão, razão, rezão, sazão, sezão, vazão). Similarly for -zona: we have 5 -zona
augmentatives (boazona, cuzona, maçãzona, mãezona, mãozona) against 8 non-augmentatives (amazona, aminofenazona,
arilidrazona, Arizona, cronozona, ecozona, Eurozona, fenazona) and no -ona augmentatives after words ending in -z.
For -zito, we have 1 -ito diminutive after a word ending in -z (Queluzito), one non-diminutive (quartzito), and no
-zito diminutives. For -zita we have 1 -zita diminutive (maçãzita) and 4 non-diminutives (andaluzita, monazita,
pedzita, stolzita). [DONE]
26. Final 'r' isn't optional before -zinho, -zinha, -mente. [DONE]
27. Consider making secondary stress optional in cases like traduçãozinha where the stress is directly before the
primary stress.
28. In Brazil, unstressed final-syllable /a/ should be reduced before -r, cf. [[açúcar]]. [DONE]
29. Support + = pagename, and pagename= argument. [DONE]
30. Deduplicate final pronunciations without distinct qualifiers. [DONE]
31. Implement support for dot-under without accompanying quality diacritic. When attached to a/e/o, it defaults to acute
= open pronun, except in the following circumstances, where it defaults to circumflex: (1) in the diphthongs
ei/eu/oi/ou; (2) in a nasal vowel. [DONE]
32. Portugal final -e should show as optional (ɨ) unless there is a vowel-initial word following, in which case it
should not be displayed at all. [NOT DONE]
33. Syllabification: "Improper" clusters of non-sibiliant-obstruent + obstruent (pt, bt, bd, dk, kt; ps, bs, bv, bʒ, tz,
dv, ks; ft), non-sibiliant-obstruent + nasal (pn, bn, tm, tn, dm, dn, gm, gn), nasal + nasal (mn) are syllabified in
Portugal as .pt, .bv, .mn, etc. Note ʃ.t, ʃ.p, ʃ.k, etc. But in Brazil, all of these divide between the consonants
(p.t, b.v, ʃ.t, s.p, etc.). Particular case: [[ab-rogação]] divides as a.brr in Portugal but ab.rr in Brazil. [DONE]
34. -ão, -ãe, -õe should be recognized as nasal diphthongs with a circumflex added to force stress. [DONE]
35. Recognize obsolete -aõ, -aẽ, -oẽ as equivalent to -ão, -ãe, -õe.
36. In CluV, CruV, CliV, CriV, the 'u' and 'i' are vowels not glides in both Portugal and Brazil. [DONE]
37. Epenthesis of (j) before final stressed s in Brazil should not happen after i. [DONE]
38. Dialect markers such as "Brazil", "Portugal" should go at the beginning. [DONE]
39. Portugal exC, êxC should be rendered like eiʃC (FIXME: Does this apply to "Central Portugal" as well?). exs- needs
handling like eiʃs-/(i)ʃs- not like eiss-. [DONE]
40. Unstressed word-initial exC- should maybe have two pronunciations, one with eiʃC- and the other with (i)ʃC-.
(FIXME: Verify.)
41. -sj- (e.g. [[transgénico]]) should reduce to a single /ʒ/. [DONE]
42. [[transgredir]] should have /z/ (Brazil), /ʒ/ (Portugal) instead of /s/, /ʃ/. [DONE]
43. Unstressed -ie- in hiatus should automatically be -iè- in Portugal or maybe -iè-/-ié-? [DONE] (FIXME: Verify.)
44. Initial esC- in Brazil should be either isC- or esC-. [DONE]
45. Initial sC- in Portugal and maybe Brazil should be /s/ not /ʃ/. [DONE]
46. Deleted epenthetic /i/ should block conversion of syllable-final m/n into nasalization, cf. [[amnésia]] respelled
'ami^nési^a'. [DONE]
47. Portugal 'o', 'os' should be unstressed with /u/, not have /ɔ/. [DONE]
48. /s/ after nasal vowel before glide should not become voiced. [DONE]
49. [[arrozinho]] (which uses the + component divider) should have the IPA stress mark before the 'z' not after. [DONE]
50. Portugal final -ɨ should be suppressed before a vowel (with a tie sign), and made optional word-finally. [DONE]
51. Final -dor/-tor/-sor/-ssor + feminine and plural should have closed /o/. [DONE]
52. Final -oso should have closed /o/, but feminine and plural should have open /ɔ/. [DONE]
53. Hiatuses in Brazil involving 'i' should have two possibilities (full vowel or glide); likewise for 'u'. [DONE]
54. In Brazil phonetic representation, hiatuses involving 'i' should be [ɪ], and those involving 'u' should be [ʊ]. [DONE]
55. ui^ should convert to 'ui' in Portugal = /wi/, but to 'u.i' or 'uy' in Brazil. [DONE]
56. des^ should be 'des++' or 'dis++' (++ in both cases). [DONE]
57. Word-boundary special handling (e.g. des^, x-, -x, etc.) should also respect component boundaries e.g. in
[[aerodeslizador]], [[criptoxantina]]. [DONE]
58. Convert apostrophe to tie, and make tie transparent to syllabification. [DONE]
59. 'x' in -nx- should default to /ʃ/ ([[enxame]], [[enxugar]]). [DONE]
60. Final i^ should not be stressed. [DONE]
61. There should not be a comma between phonemic and phonetic representations. [DONE]
62. Final stressed -io in Brazil should be either i.u or iw. [DONE]
63. Unstressed final '-ax' has open /a/ including in Portugal. [DONE]
64. Clean up handling of qualifiers and fix bugs. [DONE]
65. Support i#, u# for i./y or u./w in both Brazil and Portugal. [DONE]
66. In Portugal, final unstressed -ar/-or should be pronounced open, but in Brazil, closed. [DONE]
67. Suppress initial e- in esC- in Portugal after /i/. [DONE]
68. In C[lr][iu], [iu] should be either full vowel or glide in Portugal. [DONE]
69. Support substitution notation. [DONE]
70. [[em]] by itself should be /ẽj̃/ or /ĩ/. [DONE]
71. Suffixes beginning with a vowel should act as if a pseudo-consonant precedes. [DONE]
72. Prefixes should change primary stress to secondary. [DONE]
73. -ing should be like -im in Brazil but -ingh in Portugal. [DONE]
74. Single 's' after colon should be /z/ not /s/, in keeping with normal spelling practices;
likewise for single 'r'. [NOT YET, FIRST NEED TO PUSH APPROPRIATE RESPELLING CHANGES]
75. Intertonic 'o' after stressed i/e/ɛ ([[período]], [[rubéola]]) in Brazil should be .u or w.
76. Don't display phonetic IPA if identical to phonemic IPA. [DONE]
77. Add "South Brazil" pronunciation. [DONE; SEE ISSUES BELOW]
78. -êm should be like -ém in Brazil but -ẽiem in Portugal. [DONE]
79. -õem should be like -õe in Brazil but -õeem in Portugal. [DONE]
80. -le in Portugal should split into two pronuns, one with vowel for -e, one without. [DONE]
81. Initial 'e' in Portugal after des^ should be /i/. [DONE]
NEW!!!!:
(There's a LOT of changes that need to be made, and in some cases, there's changes on top of other changes. It's been years since the last real update to the module, so
I wouldn't be surprised if this got confusing. Talk to User:MedK1 so we can coordinate changes properly and avoid any confusion.)
For Brazilian Portuguese
82. i^sV (and i*, i^^ alike) produce /izi/ rather than the correct /isi/. i.e. {{pt-IPA|pam-pi^siquismo}} shouldn't produce /izi/ [DONE]
82.1. A similar thing happens with epenthesis on g/c; faulty logic is making the module turn the consonants soft [DONE]
82.1.1. For some reason, gui^^ doesn't work the same as gi^^ and ghi^^. [DONE]
82.2. Epenthesis should actually be the default output in Brazil. Instead of having cluttered transcriptions (see pterodáctilo), it should transcribe
/ˌp(i)te.ɾoˈdak(i).t͡ʃi.lu/ by default instead and then have parameters that remove the epenthesis should that be needed — I don't think it will be used very much tho
83. -ia, -io endings shouldn't have two pronunciations. Keep only the 'faster' one, the one that matches Portugal. [DONE]
84. -ie is correct; do add parenthesis to the j though: "superfície"'s ending can be pronounced as both /si.i/ and /s(j)i/. [DONE]
85. -ea, -eo, -ee unstressed endings should work ''exactly'' like -ia and -io after the above changes. No more /e.u/; /ju/ only. [DONE]
86. The same goes for unstressed -oa (mágoa) and -ue (tênue); not "o.ɐ" and "u.i", but "wɐ" and "wi". [DONE]
88. Word-initial "NH" should be treated in narrow transcriptions like word-medial NH and be represented as a nasal j. [DONE]
89. Avoiding cluttered transcriptions: For a word like "emporcar", instead of "/ẽporka(ʁ)/ (careful pronunciation), /ĩporka(ʁ)/ (natural pronunciation)", have it show up
as "/ẽporka(ʁ)/, /ĩ-/". We do something like that for {{l|en|accent}}.
89.1. Hiatuses where the first vowel is an unstressed O/E should just be reduced (as if written with U/I) by default. /kade'adu/ is likely a very rare spelling
pronunciation.
89.2. "des^" should be the default behavior for "des-" as most words starting with that combination are prefixed with des-. It'd be better to manually specify non-des
prefixes than manually specify every des- prefix. Complete duplications should be avoided: Instead of /deˈzoj.tu/, /d͡ʒiˈzoj.tu/, just show /d͡ʒiˈzoj.tu/, /de-/.
This would invert markings so that "desenho" and "designar" no longer would use the 'default' transcription for the des- part, while the words that don't use it, would.
89.3. Essentially, I really don't like 'complete duplications' nor the "faster pronunciation" thing. Often (as in prédio), the 'slower' pronunciation is practically
unheard of, while in other cases (as in Iasmim), the 'faster' pronunciation is uncommon and shouldn't be the default. I'd like it if for mediana, for instance, it
displayed as /me.d͡ʒiˈɐ.nɐ/, /-ˈd͡ʒjɐ̃-/ instead of listing the whole thing twice. There's a lot of ca seswhere this 'complete' duplication occurs, and, ideally, all
of them should have the output shortened.
90. There's no difference between the E/I in padre, pista, fonte, hediondo and piá; there's no real reason to represent the last two as ɪ or ʊ. [DONE]
91. This feels nitpicky, but imo the way we use graves in the module is a little odd. If they were swapped with the dot under vowels, we could make them able to read
old spellings like [[òtimamente]] just fine. On letters w/o open-closed distinction (aka Is and Us), they could force a hiatus like "." preceding them does. This would
allow them to read [[faìscazinha]] if need be, and if the dieresis accent could do the same thing, the same would go for [[saüdade]].
91.1. The old graves have been partially replaced by the ''acute'' accent here too, which led [[protocooperação]] to have accidentally been left marked as some
preproparoxytone for a while. So yeah, this change would really make it feel more... 'accurate', I guess?
92. Words like "Émerson" result in a nasal open E. Maybe fix this by just making it so, at the end, if it sees there's an open vowel+nasal combination, it deletes the nasal? Of course, this is unless ã́ ẽ́ ṍ are used. [DONE]
..The appendix on Portuguese pronunciation stated that allophonic nasal vowels (as in "cabana", "pusilânime", "feno", "Bruno"; but NOT "antes", "porém", "onde")
aren't indicated. After talking it over with other editors, it might be best for learners if these nasals aren't indicated at a phonemic level, but as a narrow
transcription after the word. This would go for words like "treino" and "andaime" as well. Essentially, they should be handled (in broad transcription) like Portugal's
Should we add multiple pronunciations for Caipira outputs to account for rustic <l> /w/ > [ɻ] and <lh> > i?
For both varieties:
93. Stressed oxytone O/Es next to Ls should be presumed to be open O/Es. Like, say, "anel" or "anzol". They shouldn't need to be specified: note how the default plural
of stressed "-el" and "-ol" are "-éis", "-óis" in the pt-verb module. [DONE]
94. Would it be possible to track words that have 'specified spellings', so we can notice patterns for future optimizations more clearly? Nvm if it's too
hard to implement, but I thought it might be interesting.
95. Words like "boiuva", "feiura" and "ouija" generate impossible triphthongs; these spellings should result in a diphthong followed by a stressed vowel.
(i.e. same as if it were written boiúva, feiúra, ouíja) [DONE]
..Can we have rhyme support? Ideally, it'd be an English-like rhyming scheme that aims to maximize splits and only neglects extremely niche ones. Unstressed -e vs
unstressed -i would be seen as a merger in Brazil (and thus the rhyme page would have -ɨ), while -éi-/-ei- would be seen as a merger in Portugal (the rhyme page would
match Brazil).
other Brazilian mergers (where the rhyme would match Portugal) include word-final -m vs -n, coda L vs W and T/D affrication
other Portugal mergers (where the rhyme would match Brazil) include ãe vs ém
word-final S/Z should end in -s rather than ʃ
word-final R should end in -ɾ rather than -ʁ
..Making it so "impossible syllables" (not just unnatural ones like, say, "ap" and "ec", but ones that are altogether impossible such as consonant clusters with no
vowels) get parsed as individual letters would be nice. {{pt-IPA|pt ipa}} would generate /ˌpeˈte ˈipɐ/ for instance. (It'd just use the pronunciation of the actual
letters, with primary stress on the last letter)
---A factor that'd complicate this are alternative pronunciations for letters:
----The names of E and O can be open or closed.
----Portugal calls G,K,W "guê","capa","dâblio" not "gê","cá","dáblio"
For European Portuguese:
96. According to an Alentejano speaker in the talk page (Southern Portugal), the handling of "ei" is wrong and should be closer to how Brazil does it.
96.1. This includes -eia/-éia distinction.
97. B/D/G should also not undergo lenition in Southern Portugal. [DONE]
98. For Cambridge (respelled quê*mbridji*), the European Portuguese transcription incorrectly lenites the dj as [ðʒ]. [DONE]
99. -ene endings should default to -éne in Portugal. [DONE]
100. Syllabification is still a bit wonky in Portugal; the module places the syllable boundaries at the wrong spot and creates odd clusters at the start of syllables,
like in E.dgar (instead of Ed.gar), a.dvogado (instead of ad.vogado), a.pto (instead of ap.to), fa.cto (instead of fac.to), etc. {{pt-IPA|faccioso}} gets you
/fɐˈksjo.zu/ instead of /fakˈsjo.zu/ as in fast Brazil. [DONE]
101. Some dialects in Northern Portugal that separate X and CH also separate S/SS from Ç/Z, using apical consonants for terms spelled with Ss. They still differentiate
between voiced and unvoiced consonants, too, so "casa" uses /z̺/, "posso" uses /s̺/ and spellings with Ç/Z retain the laminal consonants. Note that coda S/Z as in
"funis" and "chafariz" are still /ʃ/. "Some" here refers to those north of Beira; the Beirão accent differentiates X from CH, but doesn't differentiate S/SS from Ç/Z
(speakers tend to use apicals s̺,z̺ for both)
102. There isn't a lot of support for epenthesis on PT-PT. I suggested making epenthesis the default for Brazil, but it seems to be far less regular for Portugal.
If the current (old) handling for Brazil's epenthesis could be done for Portugal, that'd be great! Though, since the epenthetic vowel is always /i/ in Brazil and
always /ɨ/ in Portugal, a hypothetical epenthesis on "cnidário" should probably be done with "c^nidário" rather than "ce^nidário" or "que^nidário".
103. Word-final -ie should NOT return /jɛ/; it should probably match Brazil instead. [DONE]
]=]
--[=[
Issues concerning Rio Grande do Sul/Gaúcho pronunciation:
1. Coda 'r': Mostly /ɻ/ but sometimes given as both /ɾ/ and /ɻ/ or occasionally /r/.
1.1. Wikipedia says it's usually /ɾ/ but might be /ɻ/ in eastern parts of the state. Which one do we use? Both?
2. Epenthetic 'i': Less common? E.g. [[dignidade]] given as just /ˌd͡ʒiɡ.ni.ˈda.de/, but [[digno]] as /ˈd͡ʒiɡ.no/|/ˈd͡ʒi.ɡi.no/.
3. Nasal vowels: Almost always as elsewhere, but occasionally e.g. [[a gente]] /a.ˈʒen.te/. Do we include that?
4. Does word-final <a> really not become ɐ? Gaúcho speakers I meet irl and online seem to pronounce it the same as everyone else.
5. Word-final e/o not reducing seems to be inconsistent. Should we implement a double pronunciation?
6. "Strong" R is stereotypically [r], but the current module says it's still /ʁ/ [h]. Which one's correct? Is the /r/ realization dated?
7. Several specified traits such as nasalization don't seem any different from standard Brazilian Portuguese;
the differences in transcription don't actually reflect any difference in pronunciation
Issues concerning Nordestino pronunciation:
1. There are multiple versions of it. Different areas have different criteria on when to realize /s/ as [ʃ].
2. How do pre-tonic open vowels work? Glossonauta says it's vowel harmonization, but that doesn't track with people saying COmer as /ku-/
]=]
local export = {}
local m_IPA = require("Module:IPA")
local m_table = require("Module:table")
local m_strutils = require("Module:string utilities")
local m_qual = require("Module:qualifier")
local lang = require("Module:languages").getByCode("pt")
local u = require("Module:string/char")
local rfind = mw.ustring.find
local rsubn = mw.ustring.gsub
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local ulower = mw.ustring.lower
local uupper = mw.ustring.upper
local usub = mw.ustring.sub
local ulen = mw.ustring.len
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local AC = u(0x0301) -- acute = ́
local GR = u(0x0300) -- grave = ̀ = open vowel quality without stress in Portugal only
local MACRON = u(0x0304) -- macron = ̄ = closed vowel quality without stress in Portugal only
local CFLEX = u(0x0302) -- circumflex = ̂
local TILDE = u(0x0303) -- tilde = ̃
local DIA = u(0x0308) -- diaeresis = ̈
local CEDILLA = u(0x0327) -- cedilla = ̧
local DOTOVER = u(0x0307) -- dot over = ̇
-- DOTUNDER indicates an explicitly unstressed syllable; useful when accompanied by a quality marker (acute or
-- circumflex), or by itself with a/e/o, where it defaults to acute (except in the following circumstances, where it
-- defaults to circumflex: (1) in the diphthongs ei/eu/oi/ou; (2) in a nasal vowel).
local DOTUNDER = u(0x0323) -- dot under = ̣
-- LINEUNDER indicates an explicit secondary stress; normally not necessary as primary stress is converted to secondary
-- stress if another primary stress follows, but can be used e.g. after a primary stress; can be accompanied by a
-- quality marker (acute or circumflex) with a/e/o; if not, defaults to acute (except in the same circumstances where
-- dot under defaults to circumflex).
local LINEUNDER = u(0x0331) -- line under = ̱
-- Serves to temorarily mark where a syllable division should not happen; temporarily substitutes for comma+space;
-- temporarily substitutes for #.
local TEMP1 = u(0xFFF0)
local SYLDIV = u(0xFFF1) -- used to represent a user-specific syllable divider (.) so we won't change it
local PSEUDOCONS = u(0xFFF2) -- pseudo-consonant at the edge of prefixes ending in a vowel and suffixes beginning with a vowel
local PREFIX_MARKER = u(0xFFF3) -- marker indicating a prefix so we can convert primary to secondary accents
local NOVOICE = u(0xFFF4) -- protects 's' after an epenthetic 'i' from intervocalic voicing
-- Since we convert all symbols at the beginning and decompose accented characters (except for ç and ü), we can later
-- use capital and/or accented letters to represent additional distinctions, typically in cases where we want to
-- remember the source of a given phoneme. By convention we use capital letters, optionally with accents.
-- Specifically:
-- * A/E/O represent written a/e/o where we don't yet know the vowel quality. Towards the beginning, we convert all
-- written a/e/o to A/E/O and later convert them to their final qualities (which might include /a/ /e/ /o/, so we
-- can't use those symbols directly for this purpose).
-- * Ẽ stands for a word-initial Brazilian sound that can be pronounced either /ẽ/ (in careful speech) or /ĩ/ (in
-- natural speech) and originates from en- or em- before a consonant. We distinguish this from written in-/im-,
-- which can be only /ĩ/, and written ehn-/ehm- (or similar), which can be only /ẽ/.
-- * I is used to represent epenthetic i in Brazilian variants (which should not affect stress assignment but is
-- otherwise treated as a normal sound), and Ɨ represents deleted epenthetic i (which still palatalizes /t/ and /d/).
-- I is also used to represent Brazil e or i from initial esC-, and Portugal (i) from initial esC-.
-- * Ì is used to represent either i. in hiatus or /j/ in Brazil; likewise for Ù representing u. in hiatus or /w/.
-- * Ɔ (capital version of ɔ) stands for a Portugal sound that can be pronounced either /o/ or /ɔ/ (depending on the
-- speaker), before syllable-final /l/.
-- * Ú is used word-finally after i to represent either .u in hiatus or /w/ in Brazil.
-- * L is used word-finally in Portugal to split words ending in -le into two pronuns due to the differing pronunciation
-- of /l/ in the two cases (coda or not).
local vowel = "aɐeɛiɨoɔuüAEẼIƗÌOƆÙÚ"
local V = "[" .. vowel .. "]"
local NV_NOT_SPACING_CFLEX = "[^" .. vowel .. "%^]"
local high_front_vocalic = "iIƗÌy"
local front_vocalic = "eɛɨẼ" .. high_front_vocalic
local FRONTV = "[" .. front_vocalic .. "]"
local front_vocalic_real = "eɛɨẼiÌy"
local FRONTV_REAL = "[" .. front_vocalic_real .. "]"
local glide = "yw"
local W = "[" .. glide .. "]" -- glide
local ipa_stress = "ˈˌ"
local ipa_stress_c = "[" .. ipa_stress .. "]"
local primary_quality = AC .. CFLEX
local primary_quality_c = "[" .. primary_quality .. "]"
local quality = AC .. CFLEX .. GR .. MACRON
local quality_c = "[" .. quality .. "]"
local stress = LINEUNDER .. DOTOVER .. DOTUNDER .. ipa_stress
local stress_c = "[" .. stress .. "]"
local non_primary_stress = LINEUNDER .. DOTUNDER .. "ˌ"
local non_primary_stress_c = "[" .. non_primary_stress .. "]"
local accent = quality .. stress .. TILDE
local accent_c = "[" .. accent .. "]"
-- Any component separator that should be "transparent" (i.e. ignored) during syllabification processes. This should
-- include a subset of the component_sep characters, currently + and * (which ++ is converted into).
local syl_transp_component_sep = "+*"
local syl_transp_component_sep_c = "[" .. syl_transp_component_sep .. "]"
-- Any character that should be "transparent" (i.e. ignored) during syllabification processes. This includes the
-- syllable-transparent component separators + and ++ (converted into *) as well as the tie character, which originates
-- from an apostrophe (e.g. [[barriga d'água]]).
local syl_transp = syl_transp_component_sep .. "‿"
local syl_transp_c = "[" .. syl_transp .. "]"
-- Zero or more syllable-transparent characters; used during syllabification.
local STC = syl_transp_c .. "*"
-- Component separators that are not transparent to syllabification. Includes colon (:), hyphen (-) and double hyphen
-- (--), which is converted internally to @.
local non_syl_transp_component_sep = ":@%-"
local non_syl_transp_component_sep_c = "[" .. non_syl_transp_component_sep .. "]"
-- "component_sep" means any symbol that may separate word components (not including #, which is added at a certain
-- point next to certain word components so that the adjacent characters are treated as if they are at word bounaries).
local component_sep = syl_transp_component_sep .. non_syl_transp_component_sep
local component_sep_c = "[" .. component_sep .. "]"
local word_or_component_sep_c = "[#" .. component_sep .. "]"
-- Syllable divider (auto-inserted or user-specified).
local syldiv = "." .. SYLDIV
local syldiv_c = "[" .. syldiv .. "]"
-- "charsep" means any symbol that may separate the individual characters that make up a word, and which should be
-- ignored for e.g. consonant-consonant assimilation processes. This currently includes accents and syllable dividers.
local charsep = accent .. syldiv
local charsep_c = "[" .. charsep .. "]"
-- Characters that may divide words, other than the tie (‿), which is transparent to syllabification.
local non_syl_transp_word_divider = " #"
-- All characters that may divide words.
local word_divider = non_syl_transp_word_divider .. "‿"
-- "wordsep_not_syl_transp" means the same as "wordsep" below but excludes syllable-transparent characters. It is used
-- in other collections of symbols (particularly when negated, so as to include syllable-transparent characters but
-- otherwise exclude word separators) rather than by itself.
local wordsep_not_syl_transp = charsep .. non_syl_transp_word_divider .. non_syl_transp_component_sep
-- "wordsep" means any symbol that may separate the individual characters that make up a word or may separate words or
-- components, and which should be ignored for e.g. consonant-consonant assimilation processes that operate across
-- words. This currently includes everything in "charsep" and "component_sep" plus symbols that may divide words.
local wordsep = wordsep_not_syl_transp .. syl_transp
local wordsep_c = "[" .. wordsep .. "]"
local C = "[^" .. vowel .. wordsep .. "_]" -- consonant
-- consonant or syllable-transparent component separator
local C_OR_SYL_TRANSP = "[^" .. vowel .. wordsep_not_syl_transp .. "_]"
local H_OR_SYL_TRANSP = "[h" .. syl_transp .. "]"
local H_GLIDE_OR_SYL_TRANSP = "[h" .. glide .. syl_transp .. "]"
local C_NOT_H_OR_GLIDE = "[^h" .. glide .. vowel .. wordsep .. "_]" -- consonant other than h, w or y
local C_OR_WORD_BOUNDARY = "[^" .. vowel .. charsep .. "_]" -- consonant or word boundary
local voiced_cons = "bdglʎmnɲŋrɾʁvzjʒʤ" -- voiced sound
-- Unstressed words with vowel reduction in Brazil and Portugal.
local unstressed_words = require("Module:table").listToSet({
"o", "os", -- definite articles
"me", "te", "se", "lhe", "lhes", "nos", "vos", -- unstressed object pronouns
-- See https://en.wikipedia.org/wiki/Personal_pronouns_in_Portuguese#Contractions_between_clitic_pronouns
"mo", "mos", "to", "tos", "lho", "lhos", -- object pronouns combined with articles
-- Allomorphs of articles after certain consonants
"lo", "los", "no", -- [[nos]] above as object pronoun
-- Allomorphs of object pronouns before other pronouns
"vo", -- [[no]] above as allomorph of article
"que", -- subordinating conjunctions
"e", -- coordinating conjunctions
"de", "do", "dos", "por", -- basic prepositions + combinations with articles; [[no]], [[nos]] above already
-- FIXME: Portugal pronun for pelos, pela, pelas given as if spelled pêlos, etc. with stress, but differently for pelo.
-- I am assuming the Portugal pronuns with stress are wrong.
"pelo", "pelos", "pela", "pelas" -- preposition + article combinations
})
-- Unstressed words with vowel reduction in Portugal only.
local unstressed_full_vowel_words_brazil = require("Module:table").listToSet({
"a", "as", -- definite articles
-- See https://en.wikipedia.org/wiki/Personal_pronouns_in_Portuguese#Contractions_between_clitic_pronouns
"ma", "mas", "ta", "tas", "lha", "lhas", -- object pronouns combined with articles
-- Allomorphs of articles after certain consonants
"la", "las", "na", "nas",
"da", "das", -- basic prepositions + combinations with articles; [[na]], [[nas]] above already
-- coordinating conjunctions; [[mas]] above already
"para", "pra", -- preposition; for the verb form use "pára" instead
})
-- Unstressed words without vowel reduction.
local unstressed_full_vowel_words = require("Module:table").listToSet({
"um", "uns", -- single-syllable indefinite articles
"meu", "teu", "seu", "meus", "teus", "seus", -- single-syllable possessives
"ou", -- coordinating conjunctions
-- Note that in order to match à and às we have to write them as below because at the point we are trying to
-- match them, all text has been converted to canonical decomposed Unicode form. Writing "à" and "às" directly
-- won't work even if you type in the text using decomposed Unicode characters because all page contents are
-- automatically converted to canonical composed form when saved.
"ao", "aos", "a" .. GR, "a" .. GR .. "s", -- basic prepositions + combinations with articles
"em", "com", -- other prepositions
})
-- Special-case pronunciations for certain unstressed words with irregular pronunciations. The left side is the
-- original spelling after DOTUNDER or DOTOVER has been added; which diacritic gets added depends on whether the word
-- has vowel reduction (DOTOVER) or no vowel reduction (DOTUNDER). The right side is the respelling. See comment just
-- above for why we write "a" .. GR instead of "à".
local unstressed_pronunciation_substitution = {
["a" .. DOTUNDER .. "o"] = "a" .. DOTUNDER .. "u",
["a" .. DOTUNDER .. "os"] = "a" .. DOTUNDER .. "us",
["a" .. GR .. DOTUNDER] = "a" .. DOTUNDER,
["a" .. GR .. DOTUNDER .. "s"] = "a" .. DOTUNDER .. "s",
["po" .. DOTOVER .. "r"] = "pu" .. DOTOVER .. "r",
}
-- Dialects and subdialects:
export.all_styles = {"gbr", "rio", "sp", "cpr", "sbr", "gpt", "cpt", "spt", "npt"}
export.all_style_groups = {
all = export.all_styles,
br = {"gbr", "rio", "sp", "cpr", "sbr"},
pt = {"gpt", "cpt", "spt", "npt"},
}
local style_to_style_group = {}
for group, styles in pairs(export.all_style_groups) do
if group ~= "all" then
for _, style in ipairs(styles) do
style_to_style_group[style] = group
end
end
end
export.all_style_descs = {
-- style groups
br = "[[w:Tiếng Bồ Đào Nha Brasil|Brasil]]",
pt = "[[w:Tiếng Bồ Đào Nha châu Âu|Bồ Đào Nha]]",
-- styles
gbr = "[[w:Tiếng Bồ Đào Nha Brasil|Brasil]]", -- "general" Brazil
rio = "[[w:en:Carioca#Sociolect|Rio de Janeiro]]", -- Carioca accent
sp = "[[w:en:Paulistano_dialect|São Paulo]]", -- Paulistano accent
cpr = "[[w:en:Caipira_dialect|Caipira]]", -- Caipira accent (for approximant coda R)
sbr = "[[w:en:Gaúcho_dialect|Gaúcho]]", -- Gaúcho accent, previously referred to as South(ern) Brazil
gpt = "[[w:Tiếng Bồ Đào Nha châu Âu|Bồ Đào Nha]]", -- "general" Portugal
-- lisbon = "Lisbon", -- (not added yet)
cpt = "[[w:en:Estremenho dialect|miền Trung Bồ Đào Nha]]", -- Central Portugal outside of Lisbon
spt = "miền Nam Bồ Đào Nha", -- Dialects of Alentejo and Algarve (West Algarve is a distinct subdialect)
npt = "[[w:en:Northern Portuguese|miền Bắc Bồ Đào Nha]]" -- Northern Portugal dialects (Porto/Minho and Transmontano are subdialects)
}
-- version of rsubn() that discards all but the first return value
local function rsub(term, foo, bar)
local retval = rsubn(term, foo, bar)
return retval
end
-- version of rsubn() that returns a 2nd argument boolean indicating whether
-- a substitution was made.
local function rsubb(term, foo, bar)
local retval, nsubs = rsubn(term, foo, bar)
return retval, nsubs > 0
end
-- apply rsub() repeatedly until no change
local function rsub_repeatedly(term, foo, bar)
while true do
local new_term = rsub(term, foo, bar)
if new_term == term then
return term
end
term = new_term
end
end
-- Flat-map a function `fun` over `items`. This is like `map` over a sequence followed by `flatten`, i.e. the function
-- must itself return a sequence and all of the returned sequences are flattened into a single sequence.
local function flatmap(items, fun)
local new = {}
for _, item in ipairs(items) do
local results = fun(item)
for _, result in ipairs(results) do
table.insert(new, result)
end
end
return new
end
-- Combine two sets of qualifiers, either of which may be nil or a list of qualifiers. Remove duplicate qualifiers.
-- Return value is nil or a list of qualifiers.
local function combine_qualifiers(qual1, qual2)
if not qual1 then
return qual2
end
if not qual2 then
return qual1
end
local qualifiers = m_table.deepCopy(qual1)
for _, qual in ipairs(qual2) do
m_table.insertIfNot(qualifiers, qual)
end
return qualifiers
end
-- Reorder the diacritics (accent marks) in `text` according to a canonical order. Specifically, there can conceivably
-- be up to three accents on a vowel: a quality mark (acute/circumflex/grave/macron); a mark indicating secondary stress
-- (lineunder), tertiary stress (dotunder; i.e. no stress but no vowel reduction) or forced vowel reduction (dotover);
-- and a nasalization mark (tilde). Order them as follows: quality - stress - nasalization. `err` is a function of one
-- argument (an error string) and should throw an error if called.
local function reorder_accents(text, err)
local function reorder_accent_string(accentstr)
local accents = rsplit(accentstr, "")
local accent_order = {
[AC] = 1,
[CFLEX] = 1,
[GR] = 1,
[MACRON] = 1,
[LINEUNDER] = 2,
[DOTUNDER] = 2,
[DOTOVER] = 2,
[TILDE] = 3,
}
table.sort(accents, function(ac1, ac2)
return accent_order[ac1] < accent_order[ac2]
end)
return table.concat(accents)
end
text = rsub(text, "(" .. accent_c .. "+)", reorder_accent_string)
-- Remove duplicate accents.
text = rsub_repeatedly(text, "(" .. accent_c .. ")%1", "%1")
-- Make sure we don't have more than one of a given class.
if rfind(text, quality_c .. quality_c) then
err("Two different quality diacritics cannot occur together")
end
if rfind(text, stress_c .. stress_c) then
err("Two different stress diacritics cannot occur together")
end
-- Only a/e/o can receive a circumflex, grave or macron.
if rfind(text, "[^aeo][" .. CFLEX .. GR .. MACRON .. "]") then
err("Only a/e/o can be followed by circumflex, grave or macron")
end
return text
end
-- Generate partial IPA for a single preprocessed term respelling `text` in the specified `style` ('gbr', 'rio', etc.;
-- see all_style_descs above). If `phonetic` is given, generate phonetic output, otherwise phonemic output. `err` is a
-- function of one argument (an error string) and should throw an error if called. This function is a subfunction of
-- `IPA` and cannot really be used by itself, because it generates output containing special symbols that need to be
-- postprocessed into multiple outputs (and in addition some other final postprocessing needs to happen, e.g. to get
-- stress marks in the right place). The function `IPA` is available be called externally.
local function one_term_ipa(text, style, phonetic, err)
local brazil = m_table.contains(export.all_style_groups.br, style) and true or false
local portugal = m_table.contains(export.all_style_groups.pt, style) and true or false
-- Initial x -> /ʃ/: [[xérox]], [[xilofone]], [[xadrez]], etc.
text = rsub(text, "(" .. word_or_component_sep_c .. ")x", "%1ʃ")
-- Final x -> /ks/ ([[clímax]], [[xérox]], [[córtex]], [[hélix]], [[durex]], [[lux]], etc.), but for now we map to
-- X because later on we open unstressed vowels before final x.
text = rsub(text, "x(" .. word_or_component_sep_c .. ")", "X%1")
-- x after certain dipthongs (ai, ei, oi, ou) and after -en- should be /ʃ/. Other diphthongs before x are rare
-- and mostly learned and we need to force explicit respelling.
text = rsub(text, "(([aeo])" .. charsep_c .. "*([iun])" .. charsep_c .. "*)x",
function(all, a, b)
local ab = a .. b
-- [[baixo]], [[peixe]], [[troixa]], [[frouxo]], [[enxame]], etc.
if ab == "ai" or ab == "ei" or ab == "oi" or ab == "ou" or ab == "en" then
return all .. "ʃ"
else
return all .. "x"
end
end)
-- -exC- should be pronounced like -esC- in Brazil but -eisC- in Portugal. Cf. excelente, experiência, têxtil,
-- êxtase. Not with other vowels (cf. [[Felixlândia]], [[Laxmi]], [[Oxford]]).
-- FIXME: Maybe this applies only to Lisbon and environs?
text = rsub(text, "(e" .. accent_c .. "*)x(" .. C .. ")", function(v, c)
if brazil then
return v .. "s" .. c
elseif c == "s" then
return v .. "isç"
else
return v .. "is" .. c
end
end)
if rfind(text, "x") then
err("x must be respelled z, sh, cs, ss or similar")
end
-- combinations with h; needs to precede handling of c and s, and needs to precede syllabification so that
-- the consonant isn't divided from the following h.
if style == "npt" then
-- In Northern Portugal the affricate tch is kept
text = rsub(text, "ch", "tʃ")
end
-- Else
text = rsub(text, "([sclnp])h", {["s"]="ʃ", ["c"]="ʃ", ["n"]="ɲ", ["l"]="ʎ", ["p"]="f" })
-- remove initial <h>
text = rsub(text, "(" .. word_or_component_sep_c .. ")h([^" .. accent .. "])", "%1%2")
--Fix for words like boiuva mistakenly producing triphthongs
text = rsub(text, "([aeo])([iu])([iu])(" .. C .. ")", "%1%2.%3%4")
-- Betacism
if style == "npt" then
-- In Northern Portugal, <v> is realized as <b>
text = rsub(text, "v", "b")
end
-- c, g, q
-- This should precede syllabification especially so that the latter isn't confused by gu, qu, gü, qü
-- also, c -> ç before front vowel ensures that cc e.g. in [[cóccix]], [[occitano]] isn't reduced to single c.
text = rsub(text, "c(" .. FRONTV_REAL .. ")", "ç%1")
text = rsub(text, "g(" .. FRONTV_REAL .. ")", "j%1")
text = rsub(text, "gu(" .. FRONTV .. ")", "g%1")
-- [[camping]], [[doping]], [[jogging]], [[Bangkok]], [[angstrom]], [[tungstênio]]
text = rsub(text, "ng([^" .. vowel .. glide .. "hlr])", brazil and "n%1" or "ngh%1")
text = rsub(text, "qu(" .. FRONTV .. ")", "k%1")
text = rsub(text, "ü", "u") -- [[agüentar]], [[freqüentemente]], [[Bündchen]], [[hübnerita]], etc.
text = rsub(text, "([gq])u(" .. V .. ")", "%1w%2") -- [[quando]], [[guarda]], etc.
text = rsub(text, "[cq]", "k") -- [[Qatar]], [[burqa]], [[Iraq]], etc.
-- y -> i between non-vowels, cf. [[Itamaraty]] /i.ta.ma.ɾa.ˈt(ʃ)i/, [[Sydney]] respelled 'Sýdjney' or similar
-- /ˈsid͡ʒ.nej/ (Brazilian). Most words with y need respelling in any case, but this may help.
text = rsub(text, "(" .. C_OR_WORD_BOUNDARY .. ")y(" .. accent_c .. "*" .. C_OR_WORD_BOUNDARY .. ")", "%1i%2")
-- Reduce double letters to single, except for rr, mm, nn and ss, which map to special single sounds. Do this
-- before syllabification so double letters don't get divided across syllables. The case of cci, cce is handled
-- above. nn always maps to /n/ and mm to /m/ and can be used to force a coda /n/ or /m/. As a result,
-- [[connosco]] will need respelling 'comnôsco', 'cõnôsco' or 'con.nôsco', and [[comummente]] will similarly
-- need respelling e.g. as 'comum.mente' or 'comũmente'. Examples of words with double letters (Brazilian
-- pronunciation):
-- * [[Accra]] no respelling needed /ˈa.kɾɐ/;
-- * [[Aleppo]] respelled 'Aléppo' /aˈlɛ.pu/;
-- * [[buffer]] respelled 'bâfferh' /ˈbɐ.feʁ/;
-- * [[cheddar]] respelled 'chéddarh' /ˈʃɛ.daʁ/;
-- * [[Hanna]] respelled 'Ranna' /ˈʁɐ̃.nɐ/;
-- * [[jazz]] respelled 'djézz' /ˈd͡ʒɛs/;
-- * [[Minnesota]] respelled 'Minnessôta' /mi.neˈso.tɐ/;
-- * [[nutella]] respelled 'nutélla' /nuˈtɛ.lɐ/;
-- * [[shopping]] respeled 'shópping' /ˈʃɔ.pĩ/ or 'shóppem' /ˈʃɔ.pẽj̃/;
-- * [[Stonehenge]] respelled 'Sto̱wnn.rrendj' /ˌstownˈʁẽd͡ʒ/;
-- * [[Yunnan]] no respelling needed /juˈnɐ̃/.
--
-- Note that further processing of r and s happens after syllabification and stress assignment, because we need
-- e.g. to know the distinction between final -s and -z to assign the stress properly.
text = rsub(text, "rr", "ʁ")
text = rsub(text, "nn", "N")
text = rsub(text, "mm", "M")
-- Deleted epenthetic /i/ should prevent preceding /m/, /n/ from being converted into nasalization.
text = rsub(text, "mƗ", "MƗ")
text = rsub(text, "nƗ", "NƗ")
-- Will map later to /s/; need to special case to support spellings like 'nóss' (= nós, plural of nó).
text = rsub(text, "ss", "S")
text = rsub(text, "(" .. C .. ")%1", "%1")
-- muit- is special and contains nasalization. Do before palatalization of t/d so [[muitíssimo]] works.
text = rsub(text, "(" .. word_or_component_sep_c .. "mu" .. stress_c .. "*)(it)", "%1" .. TILDE .. "%2")
-- Palatalize t/d + Ɨ -> affricates in Brazil. Use special unitary symbols, which we later convert to regular affricate
-- symbols, so we can distinguish palatalized d from written dj. We only do Ɨ now so we can delete it; we do another
-- palatalization round towards the end after raising e -> i.
local palatalize_td = {["t"] = "ʧ", ["d"] = "ʤ"}
if brazil then
text = rsub(text, "([td])(" .. word_or_component_sep_c .. "*Ɨ)",
function(td, high_vocalic) return palatalize_td[td] .. high_vocalic end)
-- Now delete the symbol for deleted epenthetic /i/; it still triggers palatalization of t and d.
text = rsub(text, "Ɨ", "")
end
-- Divide words into syllables.
-- First, change user-specified . into a special character so we won't move it around. We need to keep this
-- going forward until after we place the stress, so we can correctly handle initial i- + vowel, as in [[ia]],
-- [[iate]] and [[Iaundé]]. We need to divide [[ia]] as 'i.a' but [[iate]] as 'ia.te' and [[Iaundé]] as 'Ia.un.dé'.
-- In the former case, the stress goes on i but in the latter cases not; so we always divide <ia> as 'i.a',
-- and then after stress assignment remove the syllable divider if the <i> isn't stressed. The tricky thing is
-- that we want to allow the user to override this by explicitly adding a . between the <i> and <a>. So we need
-- to keep the distinction between user-specified . and auto-determined . until after stress assignment.
text = rsub(text, "%.", SYLDIV)
-- We have various characters indicating divisions between word components where we want to treat the components
-- more or less like separate words (e.g. -mente, -zinho/-zinha). Some such "characters" are digraphs, which we
-- convert internally to single characters to simplify the code. Here, -- separates off -mente/-zinho/-zinha and
-- ++ separates off prefixes. We want to ignore at least + and ++ (converted to *) for syllabification purposes.
text = rsub(text, "%-%-", "@")
text = rsub(text, "%+%+", "*")
-- Respell [[homenzinho]] as 'homemzinho' so it is stressed correctly.
text = rsub(text, "n(" .. SYLDIV .. "?ziɲos?" .. word_or_component_sep_c .. ")", "m%1")
-- Divide before the last consonant (possibly followed by a glide). We then move the syllable division marker
-- leftwards over clusters that can form onsets. Note that syllable-transparent component separators will always
-- be (and will continue to be) to the left of syllable dividers rather than to the right, so we don't need to
-- check for the latter situation.
text = rsub_repeatedly(text, "(" .. V .. accent_c .. "*" .. C_OR_SYL_TRANSP .. "-)(" .. C .. H_GLIDE_OR_SYL_TRANSP .. "*" .. V .. ")", "%1.%2")
text = rsub(text, "([pbtdkgfv]" .. H_OR_SYL_TRANSP .. "*)%.([lr])", ".%1%2")
if portugal then
-- "Improper" clusters of non-sibiliant-obstruent + obstruent (pt, bt, bd, dk, kt; ps, bs, bv, bʒ, tz, dv, ks;
-- ft), non-sibiliant-obstruent + nasal (pn, bn, tm, tn, dm, dn, gm, gn), nasal + nasal (mn) are syllabified in
-- Portugal as .pt, .bv, .mn, etc. Note ʃ.t, ʃ.p, ʃ.k, etc. But in Brazil, all of these divide between the
-- consonants (p.t, b.v, ʃ.t, s.p, etc.). Particular case: [[ab-rogação]] divides as a.brr in Portugal but ab.rr
-- in Brazil.
--text = rsub(text, "([pbtdkgfv]" .. H_OR_SYL_TRANSP .. "*)%.([pbtdkgfvsSçzʃʒjmMnNɲʎʁ])", ".%1%2")
--text = rsub(text, "([mM]" .. H_OR_SYL_TRANSP .. "*)%.([nN])", ".%1%2")
else
-- /tʃ/, /dʒ/ are normally single sounds, but adj- in [[adjetivo]], [[adjunto]] etc. should be 'ad.j'
text = rsub(text, "(t" .. STC .. ")%.(ʃ)", ".%1%2")
text = rsub(text, "(d" .. STC .. ")%.(j)", ".%1%2")
text = rsub(text, "(" .. word_or_component_sep_c .. "a" .. STC .. ")%.(d" .. STC .. ")(j)", "%1%2.%3")
end
-- All vowels should be separated from adjacent vowels by a syllable division except
-- (1) aeo + unstressed i/u, ([[saiba]], [[peixe]], [[noite]], [[Paulo]], [[deusa]], [[ouro]]), except when
-- followed by nh or m/n/r/l + (non-vowel or word end), e.g. Bom.ba.im, ra.i.nha, Co.im.bra, sa.ir, but Jai.me,
-- a.mai.nar, bai.le, ai.ro.so, quei.mar, bei.ra;
-- (2) iu(s), ui(s) at end of word, e.g. fui, Rui, a.zuis, pa.riu, viu, sa.iu;
-- (3) ão, ãe, õe.
--
-- The easiest way to handle this is to put a special symbol between vowels that should not have a syllable
-- division between them.
--
-- First, put a syllable divider between [aeo].[iu][mnlr], as in [[Bombaim]], [[Coimbra]], [[saindo]], [[sair]],
-- [[Iaundé]], [[Raul]]. Note that in cases like [[Jaime]], [[queimar]], [[fauna]], [[baile]], [[Paulo]], [[beira]],
-- where a vowel follows the m/n/l/r, there will already be a syllable division between i.m, u.n, etc., which will
-- block the following substitution.
text = rsub(text, "([aeo]" .. accent_c .. "*" .. STC .. ")([iu]" .. STC .. "[mnlr])", "%1.%2")
-- Also put a syllable divider between [aeo].[iu].ɲ coming from 'nh' ([[rainha]], [[moinho]]).
text = rsub(text, "([aeo]" .. accent_c .. "*" .. STC .. ")([iu]" .. STC .. "%.ɲ)", "%1.%2")
-- Prevent syllable division between final -ui(s), -iu(s). This should precede the following rule that prevents
-- syllable division between ai etc., so that [[saiu]] "he left" gets divided as sa.iu.
-- It doesn't make sense to have STC in the middle of a diphthong here.
text = rsub(text, "(u" .. accent_c .. "*)(is?" .. word_or_component_sep_c .. ")", "%1" .. TEMP1 .. "%2")
text = rsub(text, "(i" .. accent_c .. "*)(us?" .. word_or_component_sep_c .. ")", "%1" .. TEMP1 .. "%2")
-- Prevent syllable division between ai, ou, etc. unless either the second vowel is accented [[saído]]) or there's
-- a TEMP1 marker already after the second vowel (which will occur e.g. in [[saiu]] divided as 'sa.iu').
text = rsub_repeatedly(text, "([aeo]" .. accent_c .. "*)([iu][^" .. accent .. TEMP1 .. "])", "%1" .. TEMP1 .. "%2")
text = rsub_repeatedly(text, "(u" .. accent_c .. "*)(i[^" .. accent .. TEMP1 .. "])", "%1" .. TEMP1 .. "%2")
text = rsub_repeatedly(text, "(i" .. accent_c .. "*)(u[^" .. accent .. TEMP1 .. "])", "%1" .. TEMP1 .. "%2")
-- Prevent syllable division between nasal diphthongs unless somehow the second vowel is accented.
text = rsub_repeatedly(text, "(a" .. accent_c .. "*" .. TILDE .. ")([eo][^" .. accent .. "])", "%1" .. TEMP1 .. "%2")
text = rsub_repeatedly(text, "(o" .. accent_c .. "*" .. TILDE .. ")(e[^" .. accent .. "])", "%1" .. TEMP1 .. "%2")
text = rsub_repeatedly(text, "(u" .. accent_c .. "*" .. TILDE .. ")(i[^" .. accent .. "])", "%1" .. TEMP1 .. "%2")
-- All other sequences of vowels get divided.
text = rsub_repeatedly(text, "(" .. V .. accent_c .. "*" .. STC .. ")(" .. V .. ")", "%1.%2")
-- Remove the marker preventing syllable division.
text = rsub(text, TEMP1, "")
-- An acute or circumflex not followed by a stress marker has primary stress, so indicate it.
text = rsub_repeatedly(text, "(" .. V .. quality_c .. ")([^" .. stress .. "])", "%1ˈ%2")
-- Line-under indicates secondary stress.
text = rsub(text, LINEUNDER, "ˌ")
-- Add primary stress to the word if not already present.
local function accent_word(word)
-- Check if stress already marked. We check first for primary stress before checking for tilde in case both
-- primary stress and tilde occur, e.g. [[bênção]], [[órgão]], [[hétmã]], [[connosco]] respelled 'cõnôsco'.
if rfind(word, "ˈ") then
return word
end
-- Preserve the syllable divider, which may be auto-added or user-specified.
local syllables = m_strutils.capturing_split(word, "([." .. SYLDIV .. "])")
-- Check for nasal vowel marked with tilde and without non-primary stress; assign stress to the last such
-- syllable in case there's more than one tilde, e.g. [[pãozão]]. Note, this can happen in the part before
-- -mente, cf. [[anticristãmente]], and before -zinho, cf. [[coraçãozinho]].
for i = #syllables, 1, -2 do -- -2 because of the syllable dividers; see above.
local changed
syllables[i], changed = rsubb(syllables[i], "(" .. V .. quality_c .. "*)" .. TILDE, "%1ˈ" .. TILDE)
if changed then
return table.concat(syllables)
end
end
-- Apply the default stress rule.
local sylno
-- Prefixes ending in a vowel such as pseudo- have a PSEUDOCONS after the final vowel, but we don't want that to
-- interfere in the stress-assignment algorithm.
if #syllables > 1 and (rfind(word, "[aeo][s" .. PSEUDOCONS .. "]?$") or rfind(word, "[ae]m$") or rfind(word, "[ae]ns$")) then
-- Stress the last syllable but one. The -2 is because of the syllable dividers; see above.
sylno = #syllables - 2
else
sylno = #syllables
end
-- Don't put stress on epenthetic i; instead, we stress the preceding syllable, as if epenthetic i weren't
-- there.
while sylno > 1 and rfind(syllables[sylno], "I") do
sylno = sylno - 2
end
-- It is (vaguely) possible that we have a one-syllable word beginning with a complex cluster such as gn-
-- followed by a normally unstressed ending such as -em. In this case, we want the ending to be stressed.
while sylno < #syllables and rfind(syllables[sylno], "I") do
sylno = syno + 2
end
-- If we are on a syllable without a vowel (can happen if it's the last syllable in a non-final component of a
-- word, when using a component separator that is transparent to stress, such as in [[rapazinho]] respelled
-- 'rapaz+inho'), stress the syllable to the left.
while sylno > 1 and not rfind(syllables[sylno], V) do
sylno = sylno - 2
end
if rfind(syllables[sylno], stress_c) then
-- Don't do anything if stress mark already present. (Since we check for primary stress above, this check
-- specifically affects non-primary stress.)
return word
end
-- Add stress mark after first vowel (and any quality mark).
syllables[sylno] = rsub(syllables[sylno], "^(.-" .. V .. quality_c .. "*)", "%1ˈ")
return table.concat(syllables)
end
-- Split the text into words and the words into components so we can correctly add stress to components without it.
local words = rsplit(text, " ")
for j, word_with_boundary_markers in ipairs(words) do
-- Prefixes have a PREFIX_MARKER after the # at the end of the prefix; split it off.
local begin_marker, word, end_marker = rmatch(word_with_boundary_markers, "^(#*)(.-)([#" .. PREFIX_MARKER .. "]*)$")
-- Words ends in -mente, -zinho(s) or -zinha(s); add primary stress to the preceding portion as if stressed
-- (e.g. [[agitadamente]] -> 'agitádamente') unless already stressed (e.g. [[rapidamente]] respelled
-- 'rápidamente'). The primary stress will be converted to secondary stress further below. Essentially, we
-- rip the word apart into two words ('mente'/'zinho' and the preceding portion) and
-- stress each one independently. Note that the effect of adding a primary stress will also be to cause
-- an error if stressed 'e' or 'o' is not properly marked as é/ê or ó/ô; cf. [[certamente]], which must
-- be respelled 'cértamente', and [[posteriormente]], which must be respelled 'posteriôrmente', just as
-- with [[certa]] and [[posterior]]. To prevent this happening, you can add an accent to -mente or
-- -zinho, e.g. [[dormente]] respelled 'dormênte', [[vizinho]] respelled 'vizínho'.
if rfind(word, syldiv_c .. "men%.te$") then
word = rsub(word, syldiv_c .. "(men%.te)$", "@%1")
else
word = rsub(word, syldiv_c .. "(zi%.ɲ[oa]s?)$", "@%1")
end
-- Split on components; preserve the component divider.
local components = m_strutils.capturing_split(word, "(" .. component_sep_c .. syldiv_c .. "*)")
for k = 1, #components, 2 do -- 2 because of the component dividers.
-- Don't add stress to components followed by ++ (converted to *).
if k == #components or not rfind(components[k + 1], "%*") then
components[k] = accent_word(components[k])
end
end
-- Reconstruct the word.
words[j] = begin_marker .. table.concat(components, "") .. end_marker
end
-- Reconstruct the text from the words.
text = table.concat(words, " ")
-- Add word boundaries around component separators. We add them on both sides of - and -- (converted to @), which
-- behave mostly like a true word separator, but only on the right side of other component separators (which
-- corresponds to the beginning of the word following the separator). Note that some component separators (+ and ++
-- [converted to *]) are transparent to syllable boundaries, meaning that there may be a syllable divider directly
-- to the right of the component separator. To simplify the code below, we put the word boundary marker on the outside
-- of the syllable boundary marker.
text = rsub(text, "([%-@]" .. syldiv_c .. "?)", "#%1#")
text = rsub(text, "([+:*]" .. syldiv_c .. "?)", "%1#")
-- Protect Ss from becoming voiced as a result of epenthesis
text = rsub(text, "(I%.?" .. ipa_stress_c .. "*)s", "%1" .. NOVOICE)
-- I has served its purpose (not considered when accenting).
text = rsub(text, "I", "i")
-- Remove hiatus between initial <i> and following vowel ([[Iasmim]]) unless the <i> is stressed ([[ia]]) or the
-- user explicitly added a . (converted to SYLDIV above).
text = rsub(text, "#i%.(" .. V .. ")", "#y%1")
if brazil then
-- Unstressed word-final e/o immediately before a hiatus vowel reduces to i/u first, exactly as it would as
-- a full vowel, so it's picked up by the ordinary i/u hiatus rule just below rather than needing its own
-- handling
text = rsub(text, "(" .. C_OR_WORD_BOUNDARY .. ")e(%.[aeo]s?#)", "%1i%2")
text = rsub(text, "(" .. C_OR_WORD_BOUNDARY .. ")o(%.[aeo]s?#)", "%1u%2")
-- In Brazil, hiatuses involving i. or u. have two possibilities (full vowel or glide); represent using Ì. and Ù.,
-- which we later convert appropriately. Do this before eliminating SYLDIV so the user can force a hiatus using a
-- period.
local hiatus_to_optional_glide = {["i"] = "Ì", ["u"] = "Ù"}
text = rsub(text, "(" .. C_OR_WORD_BOUNDARY .. ")([iu])(%." .. V .. ")",
function(before, hiatus, after) return before .. hiatus_to_optional_glide[hiatus] .. after end)
-- In Brazil, hiatuses of the form í.o (e.g. [[rio]] "river", [[vazio]]; but not [[rio]] "I laugh") have two
-- possibilities (i.u or iw); represent using Ú, which we later convert appropriately. Do this before eliminating
-- SYLDIV so the user can force a hiatus using a period, as in [[rio]] "I laugh" respelled 'ri.o'.
text = rsub(text, "(i" .. ipa_stress_c .. "%.)o(s?#)", "%1Ú%2")
else
-- Outside of Brazil, e.i -> a.i, e.g. [[ateísta]], [[proteína]], [[proteinúrio]] respelled 'prote.inúrio'. But seems
-- not to happen in rei- ([[reincidente]], [[reiniciar]], [[reidratar]], etc.). Note, it does occur in [[reídeo]],
-- which needs respelling.
text = rsub(text, "(#re" .. syldiv_c .. ")(i)", "%1" .. TEMP1 .. "%2")
text = rsub(text, "e(" .. syldiv_c .. "i)", "a%1")
text = rsub(text, TEMP1, "")
-- Outside of Brazil, hiatuses involving 'e./i.' or 'o./u.' after obstruent + l/r preceding a vowel have two
-- possibilities (full vowel or glide), as in [[criança]], [[altruista]], etc. Represent using Ì. and Ù., which
-- we later convert appropriately. Do this before eliminating SYLDIV so the user can force a hiatus using a
-- period.
local hiatus_to_optional_glide = {["e"] = "Ì", ["i"] = "Ì", ["o"] = "Ù", ["u"] = "Ù"}
text = rsub(text, "([pbtdkgfv]" .. H_OR_SYL_TRANSP .. "*[lr])([eiou])(%." .. V .. ")",
function(before, hiatus, after) return before .. hiatus_to_optional_glide[hiatus] .. after end)
-- Outside of Brazil, remove hiatus more generally whenever 'e./i.' or 'o./u.' precedes a vowel. Do this before
-- eliminating SYLDIV so the user can force hiatus using a period.
local hiatus_to_glide = {["e."] = "y", ["i."] = "y", ["o."] = "w", ["u."] = "w"}
text = rsub(text, "(" .. C_OR_WORD_BOUNDARY .. ")([eiou]%.)(" .. V .. ")",
function(before, hiatus, after) return before .. hiatus_to_glide[hiatus] .. after end)
end
-- Convert user-specified syllable division back to period. See comment above when we add SYLDIV.
text = rsub(text, SYLDIV, ".")
-- Vowel quality handling. First convert all a -> A, e -> E, o -> O. We will then convert A -> a/ɐ, E -> e/ɛ/ɨ,
-- O -> o/ɔ/u depending on accent marks and context. Ultimately all vowels will be one of the nine qualities
-- aɐeɛiɨoɔu and following each vowel will either be nothing (no stress), an IPA primary stress mark (ˈ) or an
-- IPA secondary stress mark (ˌ), in turn possibly followed by a tilde (nasalization). After doing everything
-- that depends on the position of stress, we will move the IPA stress marks to the beginning of the syllable.
text = rsub(text, "[aeo]", {["a"] = "A", ["e"] = "E", ["o"] = "O"})
text = rsub(text, DOTOVER, "") -- eliminate DOTOVER; it served its purpose of preventing stress
-- Nasal vowel handling.
-- Final unstressed -am (in third-person plural verbs) pronounced like unstressed -ão.
text = rsub(text, "Am#", "A" .. TILDE .. "O#")
if portugal then
-- In Portugal, final -n is really /n/, and preceding unstressed e/o are open ([[cólon]], [[crípton]], [[éon]];
-- [[glúten]], [[hífen]], [[pólen]]).
text = rsub(text, "n#", "N#")
text = rsub(text, "([EO])(N#)", "%1" .. AC .. "%2")
end
if brazil then
-- In Brazil, [[põem]] is pronounced like 'põe'.
text = rsub(text, "(Oˈ" .. TILDE .. ")(Em#)", "%1E#")
else
-- In Portugal, circumflex accent on final -em ([[vêm]], [[mantêm]], etc.) indicates a special double nasal diphthong
-- pronunciation.
text = rsub(text, "E" .. CFLEX .. "ˈm#", "E" .. CFLEX .. "ˈ" .. TILDE .. "y" .. TILDE .. ".E" .. CFLEX .. "m#")
-- In Portugal, [[põem]] is pronounced like 'põeem'.
text = rsub(text, "(Oˈ" .. TILDE .. ")(Em#)", "%1E.%2")
end
-- Acute accent on final -em ([[além]], [[também]]) and final -ens ([[parabéns]]) does not indicate an open
-- pronunciation.
text = rsub(text, "E" .. AC .. "(ˈ[mn]s?#)", "E" .. CFLEX .. "%1")
-- Vowel + m/n within a syllable gets converted to tilde.
text = rsub(text, "(" .. V .. quality_c .. "*" .. stress_c .. "*)[mn]", "%1" .. TILDE)
-- Non-high vowel without quality mark + tilde needs to get the circumflex (possibly fed by the previous change).
text = rsub(text, "([AEO])(" .. stress_c .. "*)" .. TILDE, "%1" .. CFLEX .. "%2" .. TILDE)
-- Primary-stressed vowel without quality mark + m/n/nh across syllable boundary gets a circumflex, cf. [[cama]],
-- [[ano]], [[banho]] (excluding Northern Portugal)
-- Make an exception for -ene/-eme in Portugal, where it should be open by default
if style == "npt" then
-- Northern Portugal keeps the open "a" vowels
text = rsub(text, "(A)(ˈ%.[mnɲMN])", "%1" .. AC .. "%2")
end
if portugal then
text = rsub(text, "(E)(ˈ%.[mnMN]E#)", "%1" .. AC .. "%2")
end
text = rsub(text, "(" .. V .. ")(ˈ%.[mnɲMN])", "%1" .. CFLEX .. "%2")
if brazil then
if style ~= "sbr" then -- Seems this happens less or not at all in South Brazil.
-- Primary-stressed vowel + m/n across syllable boundary gets nasalized in Brazil, cf. [[cama]], [[ano]].
-- Doesn't happen with accented open vowels, as in [[Émerson]]
text = rsub(text, "(" .. V .. quality_c .. "*)(ˈ%.[mnMN])", function(v, after)
if v:find(AC, 1, true) and v:find("[EO]") then
return v .. after
end
return v .. TILDE .. after
end)
end
-- All vowels before nh (always across syllable boundary) get circumflexed and nasalized in Brazil,
-- cf. [[ganhar]]. I *think* the circumflexing but not nasalizing happens in South Brazil.
text = rsub(text, "(" .. V .. stress_c .. "*)(%.ɲ)", "%1" .. CFLEX .. "%2")
if style ~= "sbr" then -- I *think* this doesn't apply to South Brazil; need to verify.
text = rsub(text, "(" .. V .. quality_c .. "*" .. stress_c .. "*)(%.ɲ)", "%1" .. TILDE .. "%2")
end
-- Convert initial unstressed em-/en- before consonant to special symbol /Ẽ/, which later on is converted
-- to /e/ (careful pronunciation) or /i/ (natural pronunciation).
text = rsub(text, "(#E" .. CFLEX .. TILDE ..")(%." .. C ..")", "#Ẽ" .. TILDE .. "%2")
-- Same in [[em]] standing alone (which will have a DOTUNDER in it), and in [[em-]].
text = rsub(text, "(#E" .. CFLEX .. DOTUNDER .. "?" .. TILDE ..")(#)", "#Ẽ" .. TILDE .. "%2")
end
-- Nasal diphthongs.
local nasal_termination_to_glide = {["E"] = "y", ["O"] = "w"}
-- In ãe, ão, the second letter represents a glide.
text = rsub(text, "(A" .. CFLEX .. stress_c .. "*" .. TILDE .. ")([EO])",
function(v1, v2) return v1 .. nasal_termination_to_glide[v2] .. TILDE end)
-- Likewise for õe.
text = rsub(text, "(O" .. CFLEX .. stress_c .. "*" .. TILDE .. ")E", "%1y" .. TILDE)
-- Likewise for ũi (generated above from muit-).
text = rsub(text, "(u" .. stress_c .. "*" .. TILDE .. ")i", "%1y" .. TILDE)
-- Final -em and -ens (stressed or not) pronounced /ẽj̃(s)/. (Later converted to /ɐ̃j̃(s)/ in Portugal.)
text = rsub(text, "(E" .. CFLEX .. stress_c .. "*" .. TILDE .. ")(s?#)", "%1y" .. TILDE .. "%2")
-- Oral diphthongs.
-- ei, eu, oi, ou -> êi, êu, ôi, ôu
text = rsub(text, "([EO])(" .. stress_c .. "*[iuywY])", "%1" .. CFLEX .. "%2")
-- ai, au -> ái, áu
text = rsub(text, "(A)(" .. stress_c .. "*[iuywY])", "%1" .. AC .. "%2")
-- Convert A/E/O as appropriate when followed by a secondary or tertiary stress marker. If a quality is given,
-- it takes precedence; otherwise, act as if an acute accent were given.
text = rsub(text, "([AEO])(" .. non_primary_stress_c .. ")", "%1" .. AC .. "%2")
-- Stressed o in -dor, -dor, -sor ([[ganhador]], [[autor]], [[invasor]], [[agressor]], etc.) and feminines and plurals
-- is closed /o/.
text = rsub(text, "([dtsS])O(ˈr#)", "%1o%2")
text = rsub(text, "([dtsS])O(ˈ%.r[EA]s?#)", "%1o%2")
-- Stressed e and o in -el, -ol are open
text = rsub(text, "O(ˈl#)", "ɔ%1")
text = rsub(text, "E(ˈl#)", "ɛ%1")
-- Predictable metaphony:
-- Stressed o in -oso is closed /o/.
text = rsub(text, "O(ˈ%.sO#)", "o%1")
-- Stressed o in -osos, -osa(s) is open /ɔ/.
text = rsub(text, "O(ˈ%.s[OA]s?#)", "ɔ%1")
-- Stressed o in -posto is closed /o/.
text = rsub(text, "pO(ˈs%.tO#)", "po%1")
-- Stressed o in -postos, -posta(s) is open /ɔ/.
text = rsub(text, "pO(ˈs%.t[OA]s?#)", "pɔ%1")
-- Unstressed syllables.
-- Before final <x>, unstressed a/e/o are open, e.g. [[clímax]], [[córtex]], [[xérox]].
text = rsub(text, "([AEO])(X)", "%1" .. AC .. "%2")
-- Capital X has served its purpose, so replace it.
text = rsub(text, "X", "kç")
if brazil then
if style ~= "sbr" then
-- Final unstressed -e(s), -o(s) -> /i/ /u/ (including before -mente)
local brazil_final_vowel = {["E"] = "i", ["O"] = "u"}
text = rsub(text, "([EO])(s?#)", function(v, after) return brazil_final_vowel[v] .. after end)
-- Word-final unstressed -a(s) -> /ɐ/ (not before -mente)
text = rsub(text, "A(s?#[^@])", function(after) return "ɐ" .. after end)
-- Word-final unstressed -ar -> /ɐr/ (e.g. [[açúcar]])
text = rsub(text, "A(r#)", function(after) return "ɐ" .. after end)
end
-- Initial unmarked unstressed non-nasal e- + -sC- -> /i/ or /e/ ([[estar]], [[esmeralda]]). To defeat this,
-- explicitly mark the <e> e.g. as <ệ> or <eh>. We reuse the special symbol /I/ for this purpose, which later
-- on is converted to /i/ or /e/. In South Brazil, however, the raised /i/ variant doesn't seem to exist.
if not rfind(text, "#Es.ç") then
text = rsub(text, "#E(s" .. C .. "*%.)", style == "sbr" and "#e%1" or "#I%1")
end
-- Remaining unstressed a, e, o without quality mark -> /a/ /e/ /o/.
local brazil_unstressed_vowel = {["A"] = "a", ["E"] = "e", ["O"] = "o"}
text = rsub(text, "([AEO])([^" .. accent .. "])",
function(v, after) return brazil_unstressed_vowel[v] .. after end)
end
if portugal then
-- In Portugal, final unstressed -r opens preceding a/e/o ([[dólar]], [[líder]], [[júnior]], [[inter-]]
-- respelled 'ínter:...').
text = rsub(text, "([AEO])(r" .. word_or_component_sep_c .. ")", "%1" .. AC .. "%2")
-- In Portugal, unstressed a/e/o before coda l takes on an open quality. Note that any /l/ directly after a
-- vowel must be a coda /l/ because otherwise there would be a syllable boundary marker.
text = rsub(text, "([AEO])l", function(v)
-- The symbol Ɔ is later converted to /o/ or /ɔ/.
local vowel_to_before_l = {["A"] = "a", ["E"] = "ɛ", ["O"] = "Ɔ"}
return vowel_to_before_l[v] .. "l"
end)
-- Unstressed 'ie' -> /jɛ/, but not word-finally; there, the glide is optional and the E is /i/
-- It matches Brazil
text = rsub(text, "yE(s?#)", "(y)i%1")
text = rsub(text, "yE([^" .. accent .. "])", "yɛ%1")
-- Initial unmarked unstressed non-nasal e- + -sC- (seemingly also after des-, see Infopédia [[desestagnar]]) ->
-- temporary symbol I (later changed to /(i)/, except after a vowel, in which case it is deleted). Note that /s/
-- directly after a vowel must be a coda /s/ because otherwise there would be a syllable boundary marker.
text = rsub(text, "#Es", "#Is")
-- Initial unmarked unstressed non-nasal e- -> /i/, including after des-.
text = rsub(text, "#E([^" .. accent .. "])", "#i%1")
-- Initial unmarked unstressed non-nasal o- -> /ɔ/ if another vowel follows (not 'o', 'os' by themselves).
text = rsub(text, "(#O)(.-#)", function(o, rest)
if rfind(rest, "^[^" .. accent .. "]") and rfind(rest, V) then
return "#ɔ" .. rest
else
return o .. rest
end
end)
-- All other unmarked unstressed non-nasal e, o, a -> /ɨ/ /u/ /ɐ/
local portugal_unstressed_vowel = {["A"] = "ɐ", ["E"] = "ɨ", ["O"] = "u"}
text = rsub(text, "([AEO])([^" .. accent .. "])",
function(v, after) return portugal_unstressed_vowel[v] .. after end)
end
-- Remaining vowels.
-- All remaining a -> /a/ (should always be stressed).
text = rsub(text, "A([^" .. quality .. "])", "a%1")
-- Ignore quality markers on i, u; only one quality.
text = rsub(text, "([iu])" .. quality_c, "%1")
-- Convert a/e/o + quality marker appropriately.
local vowel_quality = {
["A" .. AC] = "a", ["A" .. CFLEX] = "ɐ",
["E" .. AC] = "ɛ", ["E" .. CFLEX] = "e",
["O" .. AC] = "ɔ", ["O" .. CFLEX] = "o",
}
text = rsub(text, "([AEO]" .. quality_c .. ")", vowel_quality)
-- Stressed o in hiatus ([[voo]], [[boa]], [[perdoe]], etc.) is closed /o/.
text = rsub(text, "O(ˈ%." .. V .. ")", "o%1")
-- Stressed closed /o/ in Northern Portugal has a following optional /w/.
if style=="npt" then
text = rsub(text, "o(ˈ%." .. V .. ")", "o(w)%1")
end
-- Any remaining E or O (always without quality marker) is an error.
if rfind(text, "[EO]") then
err("Stressed e or o not occurring nasalized or in a diphthong must be marked for quality using é/ê or ó/ô")
end
-- Finally, eliminate DOTUNDER, now that we have done all vowel reductions.
text = rsub(text, DOTUNDER, "")
if brazil then
-- Epenthesize /(j)/ in [[faz]], [[mas]], [[três]], [[dez]], [[feroz]], [[luz]], [[Jesus]], etc. Note, this only
-- triggers at actual word boundaries (not before -mente), and not on nasal vowels or diphthongs. To defeat this
-- (e.g. in plurals), respell using 'ss' or 'hs'.
text = rsub(text, "(" .. V .. "ˈ)([sz]#[^@])", "%1Y%2")
-- Also should happen at least before + (cf. [[rapazinho]] respelled 'rapaz+inho', [[vozinha]] respelled
-- 'vóz+inha').
text = rsub(text, "(" .. V .. "ˈ)(%.?[sz]%+)", "%1Y%2")
-- But should not happen after /i/.
text = rsub(text, "iˈY", "iˈ")
end
-- 'S' here represents earlier ss. Word-finally it is used to prevent epenthesis of (j) and should behave
-- like 's'. Elsewhere (between vowels) it should behave like 'ç'.
text = rsub(text, "S#", "s#")
text = rsub(text, "S", "ç")
-- s, z
-- s in trans + V -> z: [[transação]], [[intransigência]]
text = rsub(text, "(trɐ" .. stress_c .. "*" .. TILDE .. ".)s(" .. V .. ")", "%1z%2")
-- word final z -> s
text = rsub(text, "z#", "s#")
-- s is voiced between vowels (not nasalized) or between vowel and voiced consonant, including across word
-- boundaries; may be fed by previous rule. We have to split this into two rules before /s/ should not be voiced
-- between nasal vowel and another vowel ([[cansar]]) but should be voiced between nasal vowel and a voiced
-- consonant ([[transgredir]]). Note that almost all occurrences of nasal vowel + s + voiced consonant are in
-- trans- which potentially could be handled above, but there may be others, e.g. [[Flensburg]].
text = rsub(text, "(" .. V .. stress_c .. "*Y?%.?)s(" .. wordsep_c .. "*h?[" .. vowel .. glide .. "])", "%1z%2")
text = rsub(text, "(" .. V .. accent_c .. "*Y?%.?)s(" .. wordsep_c .. "*h?[" .. voiced_cons .. "])", "%1z%2")
-- z before voiceless consonant, e.g. [[Nazca]]; c and q already removed
text = rsub(text, "z(" .. wordsep_c .. "*[çfkpsʃt])", "s%1")
-- Coda /s,z/
if portugal or style == "rio" then
-- In General Portugal and Rio de Janeiro; s/z before consonant (including across word boundaries) or end of utterance -> ʃ/ʒ;
-- but not word-initially (e.g. [[stressado]]).
local sibilant = {["s"] = "ʃ", ["z"] = "j"}
text = rsub(text, "([sz])(##)", function(sz, after) return sibilant[sz] .. after end)
-- s/z are maintained word-initially. To implement this, insert TEMP1 directly before the s/z we want to preserve, then check for this
-- TEMP1 not being present when converting to shibilant, then remove TEMP1.
text = rsub(text, "([# %-]#)([sz])", "%1" .. TEMP1 .. "%2")
text = rsub_repeatedly(text, "([^" .. TEMP1 .. "])([sz])(" .. wordsep_c .. "*" .. C_NOT_H_OR_GLIDE .. ")",
function(before, sz, after) return before .. sibilant[sz] .. after end)
text = rsub(text, TEMP1, "")
end
text = rsub(text, "ç", "s")
text = rsub(text, "j", "ʒ")
-- Reduce identical sibilants, including across word boundaries.
text = rsub(text, "([szʃʒ])(" .. wordsep_c .. "*)(%1)", "%2%1")
if style == "rio" then
-- Also reduce sibilant ([[descer]], [[as]] [[zonas]]); not in Portugal, but in Portugal we later
-- generate two outputs in this case, either /ʃs/ and /ʒz/ (careful pronunciation) or /ʃ/ and /ʒ/ (natural
-- pronunciation). Note that the reduction of /ʃs/ to /ʃ/ in Portugal is different from the reduction of the
-- same to /s/ in Brazil (though it shouldn't be)
text = rsub(text, "ʃ(" .. wordsep_c .. "*s)", "%1")
text = rsub(text, "ʒ(" .. wordsep_c .. "*z)", "%1")
end
--Restore the protected S
text = rsub(text, NOVOICE, "s")
-- N/M from double n/m
text = rsub(text, "[NM]", {["N"] = "n", ["M"] = "m"})
if portugal then
--Drop unneeded 'h' in 'rh' respellings for European Portuguese
text = rsub(text, "rh","r")
if style=="spt" then
--Paragoge of i in word-final r/l in Southern Portugal
text = rsub(text, "ˈr#", "ˈ.ri#")
text = rsub(text, "ˈl#", "ˈ.li#")
end
end
-- r
-- Double rr -> ʁ already handled above.
-- Initial r or l/n/s/z + r -> strong r (ʁ).
text = rsub(text, "([#" .. TILDE .. "lszʃʒ]%.?)r", "%1ʁ")
if brazil then
-- Word-final r before vowel in verbs is /(ɾ)/.
text = rsub(text, "([aɛei]ˈ)r(#" .. wordsep_c .. "*h?" .. V .. ")", "%1(ɾ)%2")
-- Coda r before vowel is /ɾ/.
text = rsub(text, "r([.#]" .. wordsep_c .. "*h?" .. V .. ")", "ɾ%1")
end
-- Word-final r in Brazil in verbs (not [[pôr]]) is usually dropped. Use a spelling like 'marh' for [[mar]]
-- to prevent this. Make sure not to do this before -mente/-zinho ([[polegarzinha]], [[popularmente]]).
if brazil then
text = rsub(text, "([aɛei]ˈ)r(#[^@])",
"%1(" .. ((style == "sp" or style == "sbr") and "ɾ" or style == "cpr" and "ɻ" or "ʁ") .. ")%2")
if style ~= "sp" and style ~= "sbr" then
-- Coda r in Caipira accents is [ɻ], otherwise outside of São Paulo and Rio Grande do Sul is /ʁ/.
text = rsub(text, "r(" .. C .. "*[.#])", (style == "cpr" and "ɻ" or "ʁ") .. "%1")
end
end
-- All other r -> /ɾ/.
text = rsub(text, "r", "ɾ")
if brazil and phonetic then
-- "Strong" ʁ before voiced consonant is [ɦ] in much of Brazil, [ʁ] in Rio. Use R as a temporary symbol.
text = rsub(text, "ʁ(" .. wordsep_c .. "*[" .. voiced_cons .. "])", style == "rio" and "R%1" or "ɦ%1")
-- Other "strong" ʁ is [h] in much of Brazil, [χ] in Rio. Use H because later we remove all <h>.
text = rsub(text, "ʁ", style == "rio" and "χ" or "H")
text = rsub(text, "R", "ʁ")
end
-- Nasal Diphthong <ẽi> and <ɛi>
if portugal then
-- In Portugal, always lower e -> ɐ before j when nasalized.
text = rsub(text, "e(" .. accent_c .. TILDE .. "*%.?y)", "ɐ%1")
-- In Portugal, lower ɛ -> e before i in <ɛi> (the open pronunciation is dated)
text = rsub(text, "ɛ(" .. accent_c .. "*i)", "e%1")
end
-- Diphthong <ei> (if unchanged, it shall yield /ej/; this should be the case for African pronunciations)
if brazil then
-- In Brazil, add optional /j/ in <eir>, <eij>, <eig> and <eix> (as in [[cadeira]], [[beijo]], [[manteiga]] and
-- [[peixe]]).
text = rsub(text, "(e" .. accent_c .. "*)i(%.[ɾʒgʃ])", "%1(j)%2")
-- [In Brazil, add optional /j/ in <aix> (as in [[caixa]] and [[baixo]]).] -- This was added by an IP, see
-- [[Special:Contributions/186.212.6.138]]; this seems non-standard to me. If we are to include it, it should
-- not be done this way, but as two separate outputs with the one lacking the /j/ marked with a qualifier such
-- as "non-standard"; compare the way the initial enC- is handled (near the end of export.IPA()), where there
-- are two outputs, with /ẽC-/ marked as "careful pronunciation" and /ĩC-/ marked as "natural pronunciation".
-- (Benwing2)
-- text = rsub(text, "(a" .. accent_c .. "*)i(%.ʃ)", "%1(j)%2")
elseif style == "spt" then
-- In Southern Portugal, <ei> monophthongizes to <e>
text = rsub(text, "(e" .. accent_c .. "*)i", "%1")
elseif style == "gpt" then
-- In general Portugal, lower e -> ɐ before i in <ei>.
text = rsub(text, "e(" .. accent_c .. "*i)", "ɐ%1")
-- In general Portugal, lower e -> ɐ before j
text = rsub(text, "e(" .. accent_c .. "*%.?y)", "ɐ%1")
-- In general Portugal, lower e -> ɐ(j) before other palatals.
text = rsub(text, "e(" .. stress_c .. "*)(%.?[ʒʃɲʎ](" .. V .. "))", "ɐ%1(j)%2")
end
-- Diphthong <ou> (if unchanged, it shall yield /o(w)/)
if style == "spt" then
-- In Southern Portugal, <ou> always monophthongizes to <o>
text = rsub(text, "(o" .. accent_c .. "*)u", "%1")
elseif style == "npt" then
-- In Northern Portugal (and Galicia), <ou> is kept
text = rsub(text, "(o" .. accent_c .. "*)u", "%1w")
end
-- Else optional /w/ in <ou>
text = rsub(text, "(o" .. accent_c .. "*)u", "%1(w)")
-- Stop consonants.
if brazil then
-- Palatalize t/d + i/y -> affricates in Brazil.
text = rsub(text, "([td])(" .. word_or_component_sep_c .. "*[" .. high_front_vocalic .. "])",
function(td, high_vocalic) return palatalize_td[td] .. high_vocalic end)
elseif portugal and phonetic and style ~= "spt" then
-- Fricativize voiced stops in Portugal when not utterance-initial or after a nasal; also not in /ld/.
-- Easiest way to do this is to convert all voiced stops to fricative and then back to stop in the
-- appropriate contexts.
text = rsub(text, "d(ʒ)", TEMP1 .. "%1")
local fricativize_stop = { ["b"] = "β", ["d"] = "ð", ["g"] = "ɣ" }
local occlude_fricative = { ["β"] = "b", ["ð"] = "d", ["ɣ"] = "g" }
text = rsub(text, "[bdg]", fricativize_stop)
text = rsub(text, "##([βðɣ])", function(bdg) return "##" .. occlude_fricative[bdg] end)
text = rsub(text, "(" .. TILDE .. wordsep_c .. "*)([βðɣ])", function(before, bdg) return before .. occlude_fricative[bdg] end)
text = rsub(text, "(l" .. wordsep_c .. "*)ð", "%1d")
text = rsub(text, TEMP1, "d")
end
-- Glides and l. ou -> o(w) must precede coda l -> w in Brazil, because <ol> /ow/ cannot be reduced to /o/.
-- ou -> o(w) before conversion of remaining diphthongs to vowel-glide combinations so <ow> can be used to
-- indicate a non-reducible glide.
-- Handle coda /l/.
if brazil then
-- Coda l -> /w/ in Brazil.
text = rsub(text, "l(" .. C .. "*[.#])", "w%1")
elseif phonetic then
-- Coda l -> [ɫ] in Portugal (and Rio Grande do Sul, according to Cunha-Cintra)
text = rsub(text, "l(" .. C .. "*[.#])", "ɫ%1")
end
text = rsub(text, "y", "j")
if brazil then
text = rsub(text, "Y", "(j)") -- epenthesized in [[faz]], [[três]], etc.
else
-- 'I' in Portugal represents word-initial (i) before sC, except after /i/ (e.g. [[antiestático]]), in which
-- case it is elided. In the latter case, we need to elide the word/component separators, otherwise we end up
-- with an extra syllable divider: /ˌɐ̃.ti.ʃˈta.ti.ku/ instead of correct /ˌɐ̃.tiʃˈta.ti.ku/.
text = rsub(text, "(i" .. accent_c .. "*)" .. word_or_component_sep_c .. "*#I", "%1")
text = rsub(text, "I", "(i)")
end
local vowel_termination_to_glide = brazil and phonetic and
{["i"] = "ɪ̯", ["j"] = "ɪ̯", ["u"] = "ʊ̯", ["w"] = "ʊ̯"} or
{["i"] = "j", ["j"] = "j", ["u"] = "w", ["w"] = "w"}
-- i/u as second part of diphthong becomes glide.
text = rsub(text, "(" .. V .. accent_c .. "*" .. "%(?)([ijuw])",
function(v1, v2) return v1 .. vowel_termination_to_glide[v2] end)
-- nh
if brazil and phonetic then
-- [[unha]] pronounced [ˈũ.j̃ɐ]; nasalization of previous vowel handled above.
-- Unsure whether or not it happens in South Brazil.
text = rsub(text, "ɲ", "j" .. TILDE)
end
if portugal then
-- Suppress final -ɨ before a vowel
text = rsub(text, "ɨ#[ %-]#(" .. V .. ")", "‿%1")
--Make optional utterance-finally
-- text = rsub(text, "ɨ##", "(ɨ)##")
-- (ɨ) after l when suppressed should convert to coda ɫ, so split it later into two pronuns.
-- text = rsub(text, "l%(ɨ%)##", "L##")
-- (ɨ) after r when suppressed should also convert to coda
-- text = rsub(text, "ɾ%(ɨ%)##", "R##")
end
text = rsub(text, "g", "ɡ") -- U+0261 LATIN SMALL LETTER SCRIPT G
text = rsub(text, "[ʧʤ]", {["ʧ"] = "t͡ʃ", ["ʤ"] = "d͡ʒ"})
text = rsub(text, "tʃ", "t͡ʃ")
text = rsub(text, "dʒ", "d͡ʒ")
text = rsub(text, "h", "")
text = rsub(text, "H", "h")
return text
end
-- Generate the IPA for a single term respelling `text` in the specified `style` ('gbr', 'rio', etc.; see
-- all_style_descs above). Return value is a list of objects of the following form:
-- { phonemic = STRING, phonetic = STRING, q = {STRING, ...} }
-- Note that the returned qualifiers are only those generated automatically as a result of certain characteristics of
-- the respelling, e.g. in Brazil initial em-/en- + consonant has two outputs, one labeled "careful pronunciation" and
-- the other "natural pronunciation". User-specified qualifiers are added at the end by the caller of IPA(), and
-- prepended to the auto-generated qualifiers.
function export.IPA(text, style)
local brazil = m_table.contains(export.all_style_groups.br, style) and true or false
local portugal = m_table.contains(export.all_style_groups.pt, style) and true or false
local origtext = text
local function err(msg)
error(msg .. ": " .. origtext)
end
text = ulower(text)
-- decompose everything but ç and ü
text = mw.ustring.toNFD(text)
text = rsub(text, ".[" .. CEDILLA .. DIA .. "]", {
["c" .. CEDILLA] = "ç",
["u" .. DIA] = "ü",
})
text = reorder_accents(text, err)
-- convert commas and en/en dashes to IPA foot boundaries
text = rsub(text, "%s*[,–—]%s*", " | ")
-- question mark or exclamation point in the middle of a sentence -> IPA foot boundary
text = rsub(text, "([^%s])%s*[!?]%s*([^%s])", "%1 | %2")
-- canonicalize multiple spaces and remove leading and trailing spaces
local function canon_spaces(text)
text = rsub(text, "%s+", " ")
text = rsub(text, "^ ", "")
text = rsub(text, " $", "")
return text
end
text = canon_spaces(text)
local words = m_strutils.capturing_split(text, "([ %-]+)")
local function word_is_prefix(i)
-- Check for prefixes, either a final prefix (followed by "-" separator, then a blank word, then no more
-- words) or a non-final prefix (followed by "- " separator).
return i == #words - 2 and words[i + 1] == "-" and words[i + 2] == "" or i < #words and words[i + 1] == "- "
end
for i = 1, #words, 2 do
local word = words[i]
-- Make prefixes unstressed with vowel reduction unless they have an explicit stress marker;
-- likewise for certain monosyllabic words (e.g. [[o]], [[se]], [[de]], etc.; also [[a]], [[das]], etc.
-- in Portugal) without stress marks.
if word_is_prefix(i) and not rfind(words[i], accent_c) or unstressed_words[word] or
portugal and unstressed_full_vowel_words_brazil[word] then
-- add DOTOVER to the last vowel not the first one, or we will mess up 'que' by
-- adding the DOTOVER after the 'u'
word = rsub(word, "^(.*" .. V .. quality_c .. "*)", "%1" .. DOTOVER)
end
-- Make certain monosyllabic words (e.g. [[meu]], [[com]]; also [[a]], [[das]], etc. in Brazil)
-- without stress marks be unstressed without vowel reduction.
if unstressed_full_vowel_words[word] or brazil and unstressed_full_vowel_words_brazil[word] then
-- add DOTUNDER to the first vowel not the last one, or we will mess up 'meu' by
-- adding the DOTUNDER after the 'u'; add after a quality marker for à, às
word = rsub(word, "^(.-" .. V .. quality_c .. "*)", "%1" .. DOTUNDER)
end
-- Some unstressed words need special pronunciation.
word = unstressed_pronunciation_substitution[word] or word
words[i] = word
end
text = table.concat(words)
-- Now eliminate word-final question mark and exclamation point (converted to foot boundary above when word-medial).
text = rsub(text, "[!?]", "")
-- Apostrophe becomes tie (e.g. in [[barriga d'agua]]).
text = rsub(text, "'", "‿")
-- User-specified # as in i# (= i. or y) and u# (= u. or w) becomes TEMP1 so we can add # for word boundaries.
text = rsub(text, "#", TEMP1)
-- Put # at word beginning and end and double ## at text/foot boundary beginning/end.
text = rsub(text, " | ", "# | #")
text = "##" .. rsub(text, " ", "# #") .. "##"
-- Eliminate hyphens indicating prefixes/suffixes; but preserve a marker indicating prefixes, so we can later
-- convert primary to secondary stress.
text = rsub(text, "(" .. V .. charsep_c .. "*)(%-#)", "%1" .. PSEUDOCONS .. "%2")
text = rsub(text, "%-#", "#" .. PREFIX_MARKER)
text = rsub(text, "#%-(" .. V .. ")", "#" .. PSEUDOCONS .. "%1")
text = rsub(text, "#%-", "#")
local variants
-- Map over each element in `variants`. If `from` is found in the element, replace the element with two elements, one
-- obtained by replacing `from` with `to1` and the other by replacing `from` with `to2`. If `to2` is nil, only one
-- element replaces the original element.
local function flatmap_and_sub_pre(from, to1, qual1, to2, qual2)
variants = flatmap(variants, function(item)
if rfind(item.respelling, from) then
local retval = {
{
respelling = rsub(item.respelling, from, to1),
q = combine_qualifiers(item.q, qual1),
}
}
if to2 then
table.insert(retval,
{
respelling = rsub(item.respelling, from, to2),
q = combine_qualifiers(item.q, qual2),
}
)
end
return retval
else
return {item}
end
end)
end
if brazil then
-- Remove grave accents and macrons, which have special meaning only for Portugal. Do this before handling o^
-- and similar so we can write áutò^:... and have it correctly give 'autò-' in Portugal but 'áutu-,áuto-' in
-- Brazil.
text = rsub(text, "[" .. GR .. MACRON .. "]", "")
elseif portugal then
-- Convert grave accents and macrons to explicit dot-under + quality marker.
local grave_macron_to_quality = {
[GR] = AC,
[MACRON] = CFLEX,
}
text = rsub(text, "[" .. GR .. MACRON .. "]", function(acc) return grave_macron_to_quality[acc] .. DOTUNDER end)
-- ê*/ô* -> é/ó and é*/ó* -> ê/ô (reverse accents)
text = rsub(text, "([eo])([" .. AC .. CFLEX .. "])%*", function(eo, acc)
return eo .. (acc == CFLEX and AC or CFLEX) end)
-- Treat vowel after des- as word-initial, as in Brazil.
text = rsub(text, "(" .. word_or_component_sep_c .. ")des%^+", "%1des++")
-- Remove i*, i^ and i^^ not followed by a vowel (i.e. Brazilian epenthetic i), but not i^ and i^^ followed or
-- preceded by a vowel (which has a totally different meaning, i.e. i or y in Brazil).
-- Also remove all remaining ^.
text = rsub(text, "i%^+(" .. V .. ")", "i%1")
text = rsub(text, "(" .. V .. ")i%^+", "%1i")
text = rsub(text, "i?[*%^]+", "")
end
variants = {{respelling = text}}
if brazil then
-- Fix for gui^^
flatmap_and_sub_pre("([gq])u(i%^%^?)", "%1%2")
-- Handle i^ and i^^ before a vowel = /i/ or /j/.
flatmap_and_sub_pre("i%^%^(" .. V .. ")", "y%1", nil, "i.%1", nil)
flatmap_and_sub_pre("i%^(" .. V .. ")", "i.%1", nil, "y%1", nil)
-- Handle i^ and i^^ after a vowel = /i/ or /j/; mostly useful for ui^
flatmap_and_sub_pre("(" .. V .. ")i%^%^", "%1y", nil, "%1.i", nil)
flatmap_and_sub_pre("(" .. V .. ")i%^", "%1.i", nil, "%1y", nil)
-- Handle i^ and i^^ not before a vowel = optional epenthetic /i/.
if style == "sbr" then
-- Epenthetic /i/ seems less common in South Brazil. Make i^^ not epenthesize (but still palatalize /t/ and /d/),
-- and i^ epenthesize but not as the first option.
flatmap_and_sub_pre("i%^%^(" .. NV_NOT_SPACING_CFLEX .. ")", "Ɨ%1", nil)
flatmap_and_sub_pre("i%^(" .. NV_NOT_SPACING_CFLEX .. ")", "Ɨ%1", nil, "I%1", nil)
else
flatmap_and_sub_pre("i%^%^(" .. NV_NOT_SPACING_CFLEX .. ")", "Ɨ%1", nil, "I%1", nil)
flatmap_and_sub_pre("i%^(" .. NV_NOT_SPACING_CFLEX .. ")", "I%1", nil, "Ɨ%1", nil)
end
-- Handle i* = epenthetic /i/.
flatmap_and_sub_pre("i%*", "I", nil)
-- Handle u^ and u^^ = /u/ or /w/.
flatmap_and_sub_pre("u%^%^", "w", nil, "u.", nil)
flatmap_and_sub_pre("u%^", "u.", nil, "w", nil)
if style == "sbr" then
-- The raised variant apparently does not occur in South Brazil.
flatmap_and_sub_pre("([eo])%^+", "%1", nil)
else
-- Handle e^ and e^^ = /e/ or /i/; handle o^ and o^^ = /o/ or /u/.
-- Do e^ and o^ together so we get only two outputs, not four, if they cooccur.
-- Likewise for e^^ and o^^.
flatmap_and_sub_pre("([eo])%^%^",
function(eo) return eo == "e" and "i" or "u" end, nil,
"%1", nil)
flatmap_and_sub_pre("([eo])%^",
"%1", nil,
function(eo) return eo == "e" and "i" or "u" end, nil)
end
-- Handle ê*/ô*/é*/ó* = same as without asterisk.
flatmap_and_sub_pre("([eo][" .. AC .. CFLEX .. "])%*", "%1", nil)
-- Handle des^ at beginning of word or component = des++ or dis++, and des^^ = opposite order. But apparently
-- not in South Brazil, where the raised variant doesn't occur.
if style == "sbr" then
flatmap_and_sub_pre("(" .. word_or_component_sep_c .. ")des%^+", "%1des++", nil)
else
flatmap_and_sub_pre("(" .. word_or_component_sep_c .. ")des%^%^", "%1dis++", nil, "%1des++", nil)
flatmap_and_sub_pre("(" .. word_or_component_sep_c .. ")des%^", "%1des++", nil, "%1dis++", nil)
end
for _, variant in ipairs(variants) do
if rfind(variant.respelling, "[*%^]") then
err(("* or ^ remains after applying all known replacements involving these characters (result is '%s')")
:format(variant.respelling))
end
end
end
-- Replace i# and u# sequences (above we replaced # with TEMP1).
flatmap_and_sub_pre("i" .. TEMP1, "i.", nil, "y", {"phát âm nhanh hơn"}) --the latter used to say "faster pronunciation"
flatmap_and_sub_pre("u" .. TEMP1, "u.", nil, "w", {"phát âm nhanh hơn"}) --the latter used to say "faster pronunciation"
-- Given a single variant element representing a preprocessed respelling along with any qualifiers resulting from the
-- preprocessing, generate the phonemic and phonetic representations using one_term_ipa() and postprocess to get the
-- final IPA. The postprocessing is there in general to handle cases where a single respelling produces multiple
-- outputs, such as Brazil -io producing either /i.u/ or /iw/. Note that user-specified qualifiers are not yet present
-- at any stage of this IPA generation; they are added at the end by the caller of IPA().
local function call_one_term_ipa(variant)
local result = {{
phonemic = one_term_ipa(variant.respelling, style, false, err),
phonetic = one_term_ipa(variant.respelling, style, true, err),
q = variant.q,
}}
local function unpack_if_list(obj)
if type(obj) == "table" and #obj == 2 and obj[1] then
return unpack(obj)
else
return obj, obj
end
end
-- Map over each element in `result`. If `from` is found in the element, replace the element with two elements, one
-- obtained by replacing `from` with `to1` in both the phonemic and phonetic representations of the existing element,
-- and the other similarly by replacing `from` with `to2` in both the phonemic and phonetic representations. If `to2`
-- is nil, only one element replaces the original element. `qual1`, if non-nil, is a list of qualifiers to be added to
-- the new element associated with `to1` (appended to any existing qualifiers). Similarly, `qual2` is a list of
-- qualifiers to be added to the new element associated with `to2`. Normally, `to1` and `to2` can be anything that can
-- be used as the replacement argument to the Lua gsub() function, i.e. a string, a function or a table. However, if
-- `to1` or `to2` is a two-element list, it is unpacked into two separate substitution objects, respectively for the
-- phonemic and phonetic representations of the element being substituted. This is used, for example, when handling
-- Ú resulting from stressed final '-io(s)', so different phonemic vs. phonetic replacements can be used (/w/ vs [ʊ̯]).
local function flatmap_and_sub_post(from, to1, qual1, to2, qual2)
result = flatmap(result, function(item)
if rfind(item.phonemic, from) or rfind(item.phonetic, from) then
local to1_phonemic, to1_phonetic = unpack_if_list(to1)
local retval = {
{
phonemic = rsub(item.phonemic, from, to1_phonemic),
phonetic = rsub(item.phonetic, from, to1_phonetic),
q = combine_qualifiers(item.q, qual1),
}
}
if to2 then
local to2_phonemic, to2_phonetic = unpack_if_list(to2)
table.insert(retval,
{
phonemic = rsub(item.phonemic, from, to2_phonemic),
phonetic = rsub(item.phonetic, from, to2_phonetic),
q = combine_qualifiers(item.q, qual2),
}
)
end
return retval
else
return {item}
end
end)
end
if brazil then
-- Convert Ẽ from initial [[em]] as a word by itself to either /ẽj̃/ and /ĩ/.
flatmap_and_sub_post("Ẽ" .. TILDE .. "#", "e" .. TILDE .. "j" .. TILDE .. "#", {"careful"},
"i" .. TILDE .. "#", nil)
-- Convert Ẽ from initial em-/en- + consonant to either /ẽ/ and /ĩ/.
flatmap_and_sub_post("Ẽ", "e", {"careful"}, "i", nil)
flatmap_and_sub_post("I", "i", nil, "e", nil)
-- Convert Ú resulting from stressed final '-io(s)'.
flatmap_and_sub_post("%.Ú", ".u", nil, {"w", "ʊ̯"}, nil)
-- Word-final unstressed hiatus collapses to a single "faster" pronunciation only, matching Portugal
-- -ie and -uo might instead have two pronunciations, incl. an optional glide
flatmap_and_sub_post("Ì%.([aɐou]s?#)", "j%1", nil)
flatmap_and_sub_post("Ù%.([aɐei]s?#)", "w%1", nil)
flatmap_and_sub_post("Ù%.([ou]s?#)", "(w)%1")
flatmap_and_sub_post("Ì%.([ei]s?#)", "(j)%1")
elseif portugal then
flatmap_and_sub_post("ʃ(" .. wordsep_c .. "*)s",
"ʃ%1s", {"careful"}, "%1ʃ", nil)
flatmap_and_sub_post("ʒ(" .. wordsep_c .. "*)z",
"ʒ%1z", {"careful"}, "%1ʒ", nil)
flatmap_and_sub_post("Ɔ", "o", nil, "ɔ", nil)
--Split (ɨ) after l or r into two pronuns, one with ɨ and the other without it (with one fewer syllables and coda).
--flatmap_and_sub_post("%.([^.# ]-)L#", ".%1lɨ#", nil, {"%1l#", "%1ɫ#"}, nil)
--flatmap_and_sub_post("%.([^.# ]-)R#", ".%1ɾɨ#", nil, {"%1ɾ#", "%1ɾ#"}, nil)
end
flatmap_and_sub_post("([ÌÙ])%.",
function(iu) return iu == "Ì" and "i." or "u." end, nil,
function(iu) return iu == "Ì" and "j" or "w" end, {"phát âm nhanh hơn"}) --the latter used to say {"faster pronunciation"}
return result
end
-- Final changes to the generated IPA to produce what's shown to the user. We used to do this at the end of
-- one_term_ipa() but the stuff below needs to happen after the expansion of Ì. and Ù. in Brazil to either i./u.
-- or j/w, because the latter transformation involves removing a syllable boundary, which will cause a stress mark
-- on the following syllable to retract to the beginning of the newly combined syllable. To avoid lots of hassle,
-- we postpone this stress mark movement till now.
local function finalize_ipa(text, phonetic)
-- Stress marks and syllable dividers.
-- Component separators that aren't transparent to syllabification need to be made into syllable dividers.
text = rsub(text, non_syl_transp_component_sep_c, ".")
-- IPA stress marks in components followed by + should be removed.
text = rsub(text, ipa_stress_c .. "([^" .. word_divider .. component_sep .. "]*%+)", "%1")
-- Component separators that are transparent to syllabification need to be removed now, before moving IPA stress marks
-- to the beginning of the syllable, so they don't interfere in this process.
text = rsub(text, syl_transp_component_sep_c .. "#?", "")
-- Move IPA stress marks to the beginning of the syllable.
text = rsub_repeatedly(text, "([#.])([^#.]*)(" .. ipa_stress_c .. ")", "%1%3%2")
-- Suppress syllable divider before IPA stress indicator.
text = rsub(text, "%.(#?" .. ipa_stress_c .. ")", "%1")
-- Make all primary stresses but the last one in a given word be secondary. May be fed by the first rule above.
text = rsub_repeatedly(text, "ˈ([^ ]+)ˈ", "ˌ%1ˈ")
-- Make primary stresses in prefixes become secondary.
text = rsub_repeatedly(text, "ˈ([^#]*#" .. PREFIX_MARKER .. ")", "ˌ%1")
-- Remove # symbols at word/text boundaries, as well as _ (which forces separate interpretation), pseudo-consonant
-- markers (at edges of some prefixes/suffixes), and prefix markers, and recompose.
text = rsub(text, "[#_" .. PSEUDOCONS .. PREFIX_MARKER .. "]", "")
text = mw.ustring.toNFC(text)
return text
end
variants = flatmap(variants, call_one_term_ipa)
for i, variant in ipairs(variants) do
variants[i].phonemic = finalize_ipa(variants[i].phonemic, false)
variants[i].phonetic = finalize_ipa(variants[i].phonetic, true)
end
return variants
end
-- For bot usage; {{#invoke:pt-pronunc|IPA_json|SPELLING|style=STYLE}}
-- where
--
-- 1. SPELLING is the word or respelling to generate pronunciation for;
-- 2. required parameter style= indicates the pronunciation style to generate
-- (e.g. "rio" for Rio/Carioca pronunciation, "lisbon" for Lisbon pronunciation;
-- see the comment above export.IPA() above for the full list);
-- 3. phonetic=1 specifies to generate the phonetic rather than phonemic pronunciation;
function export.IPA_json(frame)
local iparams = {
[1] = {},
["style"] = {required = true},
}
local iargs = require("Module:parameters").process(frame.args, iparams)
local pronuns = export.IPA(iargs[1], iargs.style)
return require("Module:JSON").toJSON(pronuns)
end
-- "Canonicalize" a single respelling (after splitting multiple respellings on comma and parsing off inline
-- modifiers). This currently handles '+' and substitution notation.
function export.canonicalize_respelling(text, pagename)
if not text or text == "+" then
text = pagename
end
-- No such substitutions currently.
-- text = rsub(text, "%[([hHxXjJ])%]", function(sound)
-- return explicit_sound_to_substitution[ulower(sound)]
-- end)
-- Implement substitution notation.
if rfind(text, "^%[.*%]$") then
local subs = rsplit(rmatch(text, "^%[(.*)%]$"), ";")
text = pagename
for _, sub in ipairs(subs) do
local fromto = rsplit(sub, ":")
if #fromto < 2 then
error("Bad substitution spec " .. sub .. " in {{pt-IPA}}, should have a colon in it")
end
local from, to
if #fromto == 2 then
from, to = fromto[1], fromto[2]
else
from = fromto[1]
table.remove(fromto, 1)
to = table.concat(fromto, ":")
end
local newtext = text
if rfind(from, "^%^") then
-- whole-word match
from = rmatch(from, "^%^(.*)$")
newtext = rsub(text, "%f[%a]" .. require("Module:string utilities").pattern_escape(from) .. "%f[%A]", to)
else
newtext = rsub(text, require("Module:string utilities").pattern_escape(from), to)
end
if from ~= to and newtext == text then
error("Substitution spec " .. sub .. " didn't match respelling '" .. text .. "'")
end
text = newtext
end
end
return text
end
function export.express_styles(inputs, args_style, pagename)
local pronuns_by_style = {}
local expressed_styles = {}
local function dostyle(style)
pronuns_by_style[style] = {}
for _, val in ipairs(inputs[style].terms) do
local respelling = val.term
respelling = export.canonicalize_respelling(respelling, pagename)
local refs
if #val.ref == 0 then
refs = nil
else
refs = {}
for _, refspec in ipairs(val.ref) do
local this_refs = require("Module:references").parse_references(refspec)
for _, this_ref in ipairs(this_refs) do
table.insert(refs, this_ref)
end
end
end
local pronuns = export.IPA(respelling, style)
for _, pronun in ipairs(pronuns) do
local qualifiers = m_table.deepCopy(val.q)
if pronun.q then
for _, qual in ipairs(pronun.q) do
m_table.insertIfNot(qualifiers, qual)
end
end
pronun.q = #qualifiers > 0 and qualifiers or nil
pronun.refs = refs
m_table.insertIfNot(pronuns_by_style[style], pronun)
end
end
end
local function all_available(styles)
local available_styles = {}
for _, style in ipairs(styles) do
if pronuns_by_style[style] then
table.insert(available_styles, style)
end
end
return available_styles
end
local function express_style(styles, indent)
local hidden_tag, tag
indent = indent or 1
if type(styles) == "string" then
styles = {styles}
tag = export.all_style_descs[styles[1]]
hidden_tag = export.all_style_descs[style_to_style_group[styles[1]]]
else
tag = false
hidden_tag = false
end
styles = all_available(styles)
if #styles == 0 then
return
end
local style = styles[1]
-- If style specified, make sure it matches the requested style.
local style_matches
if not args_style then
style_matches = true
else
local or_styles = rsplit(args_style, "%s*,%s*")
for _, or_style in ipairs(or_styles) do
local and_styles = rsplit(or_style, "%s*%+%s*")
local and_matches = true
for _, and_style in ipairs(and_styles) do
local negate
if and_style:find("^%-") then
and_style = and_style:gsub("^%-", "")
negate = true
end
local this_style_matches = false
for _, part in ipairs(styles) do
if part == and_style then
this_style_matches = true
break
end
end
if negate then
this_style_matches = not this_style_matches
end
if not this_style_matches then
and_matches = false
end
end
if and_matches then
style_matches = true
break
end
end
end
if not style_matches then
return
end
local new_style = {
tag = tag,
represented_styles = styles,
pronuns = pronuns_by_style[style],
indent = indent,
bullets = inputs[style].bullets,
pre = inputs[style].pre,
post = inputs[style].post,
}
for _, hidden_tag_style in ipairs(expressed_styles) do
if hidden_tag_style.tag == hidden_tag then
table.insert(hidden_tag_style.styles, new_style)
return
end
end
table.insert(expressed_styles, {
tag = hidden_tag,
styles = {new_style},
})
end
for style, _ in pairs(inputs) do
dostyle(style)
end
local function diff(style1, style2)
if not pronuns_by_style[style1] or not pronuns_by_style[style2] then
return true
end
return not m_table.deepEquals(pronuns_by_style[style1], pronuns_by_style[style2])
end
local gbr_sp_different = diff("gbr", "sp")
local gbr_rio_different = diff("gbr", "rio")
local gbr_cpr_different = diff("gbr", "cpr")
local gbr_sbr_different = diff("gbr", "sbr")
local gpt_cpt_different = diff("gpt", "cpt")
local gpt_spt_different = diff("gpt", "spt")
local gpt_npt_different = diff("gpt", "npt")
local gbr_gpt_different = diff("gbr", "gpt") -- general differences between BP and EP
if not gbr_sp_different and not gbr_rio_different and gbr_cpr_different and
not gbr_sbr_different and not gpt_cpt_different and
not gpt_spt_different and not gpt_npt_different and
not gbr_gpt_different then
-- All the same
express_style(export.all_styles)
else
-- Within Brazil
express_style("gbr")
if gbr_sp_different then
express_style("sp", 2)
end
if gbr_rio_different then
express_style("rio", 2)
end
if gbr_cpr_different then
express_style("cpr", 2)
end
--Gaúcho accent needs work
--if gbr_sbr_different then
--express_style("sbr", 2)
--end
-- Within Portugal
express_style("gpt")
if gpt_npt_different then
express_style("npt", 2)
end
if gpt_cpt_different then
express_style("cpt", 2)
end
if gpt_spt_different then
express_style("spt", 2)
end
end
return expressed_styles
end
function export.show(frame)
-- Create parameter specs
local params = {
[1] = {}, -- this replaces style group 'all'
["style"] = {},
["pagename"] = {},
}
for group, _ in pairs(export.all_style_groups) do
if group ~= "all" then
params[group] = {}
end
end
for _, style in ipairs(export.all_styles) do
params[style] = {}
end
-- Parse arguments
local parargs = frame:getParent().args
local args = require("Module:parameters").process(parargs, params)
local pagename = args.pagename or mw.loadData("Module:headword/data").pagename
-- Set inputs
local inputs = {}
-- If 1= specified, do all styles.
if args[1] then
for _, style in ipairs(export.all_styles) do
inputs[style] = args[1]
end
end
-- Then do remaining style groups other than 'all', overriding 1= if given.
for group, styles in pairs(export.all_style_groups) do
if group ~= "all" and args[group] then
for _, style in ipairs(styles) do
inputs[style] = args[group]
end
end
end
-- Then do individual style settings.
for _, style in ipairs(export.all_styles) do
if args[style] then
inputs[style] = args[style]
end
end
-- If no inputs given, set all styles based on current pagename.
if not next(inputs) then
for _, style in ipairs(export.all_styles) do
inputs[style] = "+"
end
end
-- Parse the arguments.
local put
for style, input in pairs(inputs) do
if input:find("[<%[]") then
local function parse_err(msg)
error(msg .. ": " .. style .. "=" .. input)
end
if not put then
put = require("Module:parse utilities")
end
-- We don't want to split off a comma followed by a space, as in [[rei morto, rei posto]], so replace
-- comma+space with a special character that we later undo.
input = rsub(input, ", ", TEMP1)
-- Parse balanced segment runs involving either [...] (substitution notation) or <...> (inline modifiers). We do this
-- because we don't want commas inside of square or angle brackets to count as respelling delimiters. However, we
-- need to rejoin square-bracketed segments with nearby ones after splitting alternating runs on comma. For example,
-- if we are given "a[x]a<q:learned>,[vol:vôl;ei:éi,ei]<q:nonstandard>", after calling
-- parse_multi_delimiter_balanced_segment_run() we get the following output:
--
-- {"a", "[x]", "a", "<q:learned>", ",", "[vol:vôl;ei:éi,ei]", "", "<q:nonstandard>", ""}
--
-- After calling split_alternating_runs(), we get the following:
--
-- {{"a", "[x]", "a", "<q:learned>", ""}, {"", "[vol:vôl;ei:éi,ei]", "", "<q:nonstandard>", ""}}
--
-- We need to rejoin stuff on either side of the square-bracketed portions.
local segments = put.parse_multi_delimiter_balanced_segment_run(input, {{"<", ">"}, {"[", "]"}})
-- Not with spaces around the comma; see above for why we don't want to split off comma followed by space.
local comma_separated_groups = put.split_alternating_runs(segments, ",")
local parsed = {terms = {}}
for i, group in ipairs(comma_separated_groups) do
-- Rejoin bracketed segments with nearby ones, as described above.
local j = 2
while j <= #group do
if group[j]:find("^%[") then
group[j - 1] = group[j - 1] .. group[j] .. group[j + 1]
table.remove(group, j)
table.remove(group, j)
else
j = j + 2
end
end
for j, segment in ipairs(group) do
group[j] = rsub(segment, TEMP1, ", ")
end
local term = {term = group[1], ref = {}, q = {}}
for j = 2, #group - 1, 2 do
if group[j + 1] ~= "" then
parse_err("Extraneous text '" .. group[j + 1] .. "' after modifier")
end
local modtext = group[j]:match("^<(.*)>$")
if not modtext then
parse_err("Internal error: Modifier '" .. group[j] .. "' isn't surrounded by angle brackets")
end
local prefix, arg = modtext:match("^([a-z]+):(.*)$")
if not prefix then
parse_err("Modifier " .. group[j] .. " lacks a prefix, should begin with one of " ..
"'pre:', 'post:', 'ref:', 'bullets:' or 'q:'")
end
if prefix == "ref" or prefix == "q" then
table.insert(term[prefix], arg)
elseif prefix == "pre" or prefix == "post" or prefix == "bullets" then
if i < #comma_separated_groups then
parse_err("Modifier '" .. prefix .. "' should occur after the last comma-separated term")
end
if parsed[prefix] then
parse_err("Modifier '" .. prefix .. "' occurs twice, second occurrence " .. group[j])
end
if prefix == "bullets" then
if not arg:find("^[0-9]+$") then
parse_err("Modifier 'bullets' should have a number as argument")
end
parsed.bullets = tonumber(arg)
else
parsed[prefix] = arg
end
else
parse_err("Unrecognized prefix '" .. prefix .. "' in modifier " .. group[j]
.. ", should be one of 'pre', 'post', 'ref', 'bullets' or 'q'")
end
end
table.insert(parsed.terms, term)
end
if not parsed.bullets then
parsed.bullets = 1
end
inputs[style] = parsed
else
local terms = {}
-- We don't want to split on comma+space, which should become a foot boundary as in
-- [[rei morto, rei posto]].
local subbed_input = rsub(input, ", ", TEMP1)
for _, term in ipairs(rsplit(subbed_input, ",")) do
term = rsub(term, TEMP1, ", ")
table.insert(terms, {term = term, ref = {}, q = {}})
end
inputs[style] = {
terms = terms,
bullets = 1,
}
end
end
local expressed_styles = export.express_styles(inputs, args.style, pagename)
local lines = {}
local function format_style(tag, expressed_style, is_first)
local pronunciations = {}
local formatted_pronuns = {}
-- Loop through each pronunciation. For each one, add the phonemic and (if different) phonetic versions to
-- `pronunciations`, for formatting by [[Module:IPA]], and also create an approximation of the formatted
-- version so that we can compute the appropriate width of the HTML switcher div box that holds the different
-- per-dialect variants.
for i, pronun in ipairs(expressed_style.pronuns) do
table.insert(pronunciations, {
pron = "/" .. pronun.phonemic .. "/",
q = pronun.q,
separator = i > 1 and ", " or nil,
})
local formatted_phonemic = "/" .. pronun.phonemic .. "/"
if pronun.q then
formatted_phonemic = "(" .. table.concat(pronun.q, ", ") .. ") " .. formatted_phonemic
end
if i > 1 then
formatted_phonemic = ", " .. formatted_phonemic
end
table.insert(formatted_pronuns, formatted_phonemic)
-- Check if phonetic and phonemic are the same. If so, we skip displaying the phonetic version; but in this
-- case, we need to attach any references to the phonemic version.
if pronun.phonetic == pronun.phonemic then
pronunciations[#pronunciations].refs = pronun.refs
else
table.insert(pronunciations, {
pron = "[" .. pronun.phonetic .. "]",
refs = pronun.refs,
separator = " ",
})
local reftext = ""
if pronun.refs then
reftext = string.rep("[1]", #pronun.refs)
end
table.insert(formatted_pronuns, " [" .. pronun.phonetic .. "]" .. reftext)
end
end
-- Number of bullets: When indent = 1, we want the number of bullets given by `expressed_style.bullets`,
-- and when indent = 2, we want `expressed_style.bullets + 1`, hence we subtract 1.
local bullet = string.rep("*", expressed_style.bullets + expressed_style.indent - 1) .. " "
-- Here we construct the formatted line in `formatted`, and also try to construct the equivalent without HTML
-- and wiki markup in `formatted_for_len`, so we can compute the approximate textual length for use in sizing
-- the toggle box with the "more" button on the right.
local pre = is_first and expressed_style.pre and expressed_style.pre .. " " or ""
pre = pre .. (tag and m_qual.format_qualifier(tag) .. " " or "")
local post = is_first and (expressed_style.post and " " .. expressed_style.post or "") or ""
local formatted = bullet .. pre .. m_IPA.format_IPA_full { lang = lang, items = pronunciations, separator = "" } .. post
local formatted_for_len = bullet .. pre .. "IPA(key): " .. table.concat(formatted_pronuns) .. post
return formatted, formatted_for_len
end
for i, style_group in ipairs(expressed_styles) do
if #style_group.styles == 1 then
style_group.formatted, style_group.formatted_for_len =
format_style(style_group.styles[1].tag, style_group.styles[1], i == 1)
else
style_group.formatted, style_group.formatted_for_len =
format_style(style_group.tag, style_group.styles[1], i == 1)
for j, style in ipairs(style_group.styles) do
style.formatted, style.formatted_for_len =
format_style(style.tag, style, i == 1 and j == 1)
end
end
end
-- Remove any HTML from the formatted text, since it doesn't contribute to the textual length, and return the
-- resulting length in characters.
local function textual_len(text)
text = rsub(text, "<.->", "")
return ulen(text)
end
local maxlen = 0
for i, style_group in ipairs(expressed_styles) do
local this_len = textual_len(style_group.formatted_for_len)
if #style_group.styles > 1 then
for _, style in ipairs(style_group.styles) do
this_len = math.max(this_len, textual_len(style.formatted_for_len))
end
end
maxlen = math.max(maxlen, this_len)
end
for i, style_group in ipairs(expressed_styles) do
if #style_group.styles == 1 then
table.insert(lines, "<div>\n" .. style_group.formatted .. "</div>")
else
local inline = '\n<div class="vsShow" style="display:none">\n' .. style_group.formatted .. "</div>"
local full_prons = {}
for _, style in ipairs(style_group.styles) do
table.insert(full_prons, style.formatted)
end
local full = '\n<div class="vsHide">\n' .. table.concat(full_prons, "\n") .. "</div>"
local em_length = math.floor(maxlen * 0.68) -- from [[Module:grc-pronunciation]]
table.insert(lines, '<div class="vsSwitcher" data-toggle-category="cách phát âm" style="width: ' .. em_length .. 'em; max-width:100%;"><span class="vsToggleElement" style="float: right;"> </span>' .. inline .. full .. "</div>")
end
end
-- major hack to get bullets working on the next line
return table.concat(lines, "\n") .. "\n<span></span>"
end
return export
bb3xwa4clkftt7rbrystmfa5bx012oi
Mô đun:crk-IPA
828
289122
2569502
2160785
2026-10-10T15:55:23Z
Hiyuune
50834
2569502
Scribunto
text/plain
local export = {}
local m_IPA = require("Module:IPA")
local lang = require("Module:languages").getByCode("crk")
local rsub = mw.ustring.gsub
local rlower = mw.ustring.lower
local rlen = mw.ustring.len
local rlast = require("Module:string/replace last").replace_last
local rfind = mw.ustring.find
local V = "[aioâîôê]"
local C = "[ptckwyhsmn^]"
local phon = {
["p"]="p", ["t"]="t", ["k"]="k", ["c"]="ts",
["w"]="w", ["y"]="j", ["h"]="h", ["s"]="s",
["m"]="m", ["n"]="n",
["a"]="a", ["i"]="i", ["o"]="o",
["â"]="aː", ["î"]="iː", ["ô"]="oː", ["ê"]="eː"
}
local function phonetic(text)
text = rlower(text)
-- stress
local n
n = rsub(text, C, "")
n = rlen(n)
local i = 1
while i <= n do
if i == 3 then
text = rlast(text, "(" .. C .. ")(" .. V .. ")", "%1ˈ%2", 1)
elseif i % 2 ~= 0 then
text = rlast(text, "(" .. C .. ")(" .. V .. ")", "%1ˌ%2", 1)
else
text = rlast(text, "(" .. C .. ")(" .. V .. ")", "%1.%2", 1)
end
if i == n and i % 2 ~= 0 then
if i ==3 then text = rsub(text, "^(" .. V .. ")", "ˈ%1")
else text = rsub(text, "^(" .. V .. ")", "ˌ%1") end
end
i = i + 1
end
if rfind(text, "ˈ") == nil then
text = rsub(text, "ˌ", "ˈ")
end
text = rsub(text, "(" .. C .. ")([ˈˌ])", ".%2%1")
text = rsub(text, "(" .. C .. ")%.(" .. V .. ")", ".%1%2")
text = rsub(text, "^%.", "")
-- stops
text = rsub(text, "([aio])(%.?[ˈˌ]?)([ptk])([aio])", "%1%3%2%3%4")
text = rsub(text, "([ptk])%1", "%1ː")
-- general phonology
text = rsub(text, ".", phon)
-- vowels
text = rsub(text, "i", "ɪ")
text = rsub(text, "ɪ(%.?[ˈˌ]?[wj])", "i%1")
text = rsub(text, "ɪː", "iː")
text = rsub(text, "o", "ʊ")
text = rsub(text, "ʊː", "oː")
text = rsub(text, "a", "ʌ")
text = rsub(text, "ʌː", "ɑː")
-- fricatives
text = rsub(text, "h$", "")
-- labialisation and aspiration
text = rsub(text, "^([ptkm]s?)(%.?[ˈˌ]?)w", "%2%1ʷ")
text = rsub(text, "([ptkhsmnj]s?)(%.?[ˈˌ]?)w", "%2%1ʷ")
text = rsub(text, "h([ptk]s?)$", "ʰ%1")
text = rsub(text, "t%.s", ".ts")
text = rsub(text, "ts", "t͡s")
-- stylistic thingies
text = rsub(text, "s", "s̠")
text = rsub(text, "%.([ˈˌ])", "%1")
text = rsub(text, "%.%.", ".")
return text
end
function export.IPA(frame)
local words = {}
for _, word in ipairs(frame:getParent().args) do
table.insert(words, word)
end
if #words == 0 then
words = {mw.loadData("Module:headword/data").pagename}
end
local IPA_results = {}
for _, word in ipairs(words) do
table.insert(IPA_results, { pron = "[" .. phonetic(word) .. "]" })
end
return m_IPA.format_IPA_full { lang = lang, items = IPA_results }
end
return export
hlixt1pwcll5i0kqp1bua54aa7dmy4o
Bản mẫu:el-conjug-sub1
10
291048
2569598
2126475
2026-10-11T11:16:45Z
Hiyuune
50834
Hiyuune đã đổi [[Bản mẫu:ell-conjug-sub1]] thành [[Bản mẫu:el-conjug-sub1]] qua đổi hướng
2126474
wikitext
text/x-wiki
<includeonly>{{#if:{{{alt|}}}<!--
-->| {{#ifeq:{{{alt|}}}| - <!--
-->| — <!--
-->|[[{{{alt|}}}]]<!--
-->}}<!--
-->|[[{{{def|}}}]]<!--
-->}}</includeonly><noinclude>{{documentation}}</noinclude>
itokb6relfeihea6ru0am0v71aq4w18
Bản mẫu:el-conjug-sub4
10
291056
2569596
2126518
2026-10-11T11:16:28Z
Hiyuune
50834
Hiyuune đã đổi [[Bản mẫu:ell-conjug-sub4]] thành [[Bản mẫu:el-conjug-sub4]] qua đổi hướng
2126517
wikitext
text/x-wiki
<includeonly>{{#if:{{{2|}}}<!--
-->|{{#ifeq:{{{2|}}}| - <!--
-->|<!--
-->|{{{3|}}}[[{{{2|}}}]], ‑η, ‑ο<!--
-->}}<!--
-->|{{#if:{{{1|}}}<!--
-->|{{{3|}}}[[{{{1|}}}{{{4|}}}]], ‑η, ‑ο<!--
-->}}<!--
-->}}</includeonly><noinclude>{{documentation}}</noinclude>
2k68mn8xcj1rcph9ej7hez36z5g7q6z
Bản mẫu:el-nF-α-ες-2a
10
292993
2569504
2233580
2026-10-10T17:03:55Z
Hiyuune
50834
Hiyuune đã đổi [[Bản mẫu:ell-nF-α-ες-2a]] thành [[Bản mẫu:el-nF-α-ες-2a]] qua đổi hướng
2233580
wikitext
text/x-wiki
<includeonly>{{el-decl-noun
|1={{{1}}}α
|2={{{1}}}ες
|3={{{1}}}ας
|4={{{1}}}ων
|5={{{1}}}α
|6={{{1}}}ες
|7={{{1}}}α
|8={{{1}}}ες
|note={{{note|}}}
}}{{#if:{{NAMESPACE}}||[[Thể loại:Danh từ tiếng Hy Lạp có biến cách như 'ασπίδα']]}}</includeonly><noinclude>
Bản mẫu bảng biến tố cho những danh từ tiếng Hy Lạp có biến cách như '''{{mention|el|ασπίδα}}'''. Các ví dụ khác có thể được tìm thấy trong [[:Thể loại:Danh từ tiếng Hy Lạp có biến cách như 'ασπίδα']].
Cú pháp <code><nowiki>{{el-nF-α-ες-2a|ασπίδ}}</nowiki></code> xuất ra bảng:
{{el-nF-α-ες-2a|ασπίδ}}
Danh sách đầy đủ của bản mẫu bảng biến cách khác với một dấu hiệu ngắn gọn của việc sử dụng có thể tìm thấy tại '''[[Wiktionary:Bản mẫu bảng biến tố danh từ tiếng Hy Lạp]]'''.
[[Thể loại:Bản mẫu bảng biến tố danh từ tiếng Hy Lạp]]
</noinclude>
fevseiyd25ruq4ffpct8vl0p9vhrdfe
Bản mẫu:nv-prefix
10
303062
2569566
2321236
2026-10-11T07:28:32Z
TheHighFighter2
42988
/* */
2569566
wikitext
text/x-wiki
{{#invoke:checkparams|error}}<!-- Validate template parameters
--><noinclude>{{documentation}}
</noinclude><includeonly>{{#switch: {{{1}}}
<!-- ######################## -->
<!-- PERSON -->
| 3s = {{m|nv|{{#if:{{{2|}}}||}}∅-|pos=tiền tố sở hữu ngôi thứ ba}}
| 3o = {{#if:{{{2|}}}||-}}{{m|nv|y-|pos=tiền tố tân ngữ ngôi thứ ba}}{{cln|nv|Từ có tiền tố y- (tân ngữ)}}
| 4i = {{#if:{{{2|}}}||-}}{{m|nv|ʼa-|pos=tiền tố chủ ngữ ngôi không xác định}} {{cln|nv|Từ có tiền tố ʼa- (chủ ngữ)}}
| b = {{#if:{{{2|}}}||-}}{{m|nv|b-|id=chủ đề|pos=chủ đề}}{{cln|nv|Từ có tiền tố b- (chủ đề)}}
| bi = {{#if:{{{2|}}}||-}}{{m|nv|bi-|id=tân ngữ gián tiếp|pos=tiền tố tân ngữ hậu giới từ/tân ngữ gián tiếp ngô thứ ba}}{{cln|nv|Từ có tiền tố bi- (tân ngữ gián tiếp)}}
| yi-obv = {{#if:{{{2|}}}||-}}{{m|nv|yi-|id=hình thái ngôi thứ tư|pos=tiền tố tân ngữ hậu giới từ/tân ngữ gián tiếp ngô thứ ba, dùng khi chủ ngữ ở ngôi thứ ba}}{{cln|nv|Từ có tiền tố yi- (hình thái ngôi thứ tư)}}
| a = {{#if:{{{2|}}}||-}}{{m|nv|ʼa-|pos=tiền tố tân ngữ ngôi không xác định}} {{cln|nv|Từ có tiền tố ʼa- (tân ngữ)}}
| ho = {{#if:{{{2|}}}||-}}{{m|nv|ho-||không gian, khu vực, vạn vật}}{{cln|nv|Từ có tiền tố ho-}}
| ha-areal = {{#if:{{{2|}}}||-}}{{m|nv|ha-||không gian, khu vực, vạn vật}}{{cln|nv|Từ có tiền tố ha- (khu vực)}}
| adi = {{#if:{{{2|}}}||-}}{{m|nv|ʼadi-|pos=tân ngữ bị động tác cách}}{{cln|nv|Từ có tiền tố ʼadi-}}
| ádi = {{#if:{{{2|}}}||-}}{{m|nv|ʼádi-|pos=phản thân}}{{cln|nv|Từ có tiền tố ʼádi- (tân ngữ)}}{{cln|nv|Động từ phản thân}}
| di-obj = {{#if:{{{2|}}}||-}}{{m|nv|ʼadi-|pos=tân ngữ bị động tác cách}}{{cln|nv|Từ có tiền tố ʼadi-}}
| ah = {{#if:{{{2|}}}||-}}{{m|nv|ʼah-|pos=tương hỗ}}{{cln|nv|Từ có tiền tố ʼahi- (tân ngữ)}}
| ah-disj = {{#if:{{{2|}}}||-}}{{m|nv|ʼah-|pos=tương hỗ}}{{cln|nv|Từ có tiền tố ʼahi- (tân ngữ gián tiếp)}}
| ał = {{#if:{{{2|}}}||-}}{{m|nv|ʼał-|pos=tương hỗ}}{{cln|nv|Từ có tiền tố ʼał- (tân ngữ gián tiếp)}}
| y-peg = {{#if:{{{2|}}}||-}}{{m|nv|y-|pos=[[peg element|tiền tố chêm âm]]}}{{cln|nv|Từ có tiền tố yi- (peg element)}}
| w-peg = {{#if:{{{2|}}}||-}}{{m|nv|w-|pos=[[peg element|tiền tố chêm âm]]}}{{cln|nv|Từ có tiền tố w- (peg element)}}
<!-- ######################## -->
<!-- CLASSIFIERS -->
| ∅ = {{#if:{{{2|}}}||-}}{{m|nv|∅-|pos=loại từ}}{{cln|nv|Từ có tiền tố ∅- (loại từ)}}
| - = {{#if:{{{2|}}}||-}}{{m|nv|∅-|pos=loại từ}}{{cln|nv|Từ có tiền tố ∅- (loại từ)}}
| d = {{#if:{{{2|}}}||-}}{{m|nv|d-|pos=loại từ}}{{cln|nv|Từ có tiền tố d- (loại từ)}}
| d-them = {{#if:{{{2|}}}||-}}{{m|nv|d-|pos=loại từ, chủ đề}}{{cln|nv|Từ có tiền tố d- (loại từ)}}
| d-pass = {{#if:{{{2|}}}||-}}{{m|nv|d-|pos=loại từ, bị động}}{{cln|nv|Từ có tiền tố d- (loại từ)|Động từ bị động}}
| d-med = {{#if:{{{2|}}}||-}}{{m|nv|d-|pos=loại từ, bị động trung dung}}{{cln|nv|Từ có tiền tố d- (loại từ)}}
| d-detrans = {{#if:{{{2|}}}||-}}{{m|nv|d-|pos=loại từ, detransitive/anticausative}}{{cln|nv|Từ có tiền tố d- (loại từ)}}
| d-refl = {{#if:{{{2|}}}||-}}{{m|nv|d-|pos=loại từ, phản thân}}{{cln|nv|Từ có tiền tố d- (loại từ)|Động từ phản thân}}
| d-rec = {{#if:{{{2|}}}||-}}{{m|nv|d-|pos=loại từ, tương hỗ}}{{cln|nv|Từ có tiền tố d- (loại từ)}}
| d-shift= {{#if:{{{2|}}}||-}}{{m|nv|d-|pos=loại từ, chuyển biến do ''ná-'' gây nên}}{{cln|nv|Từ có tiền tố d- (loại từ)}}
| l = {{#if:{{{2|}}}||-}}{{m|nv|l-|pos=loại từ}}{{cln|nv|Từ có tiền tố l- (loại từ)}}
| l-them = {{#if:{{{2|}}}||-}}{{m|nv|l-|pos=loại từ, chủ đề}}{{cln|nv|Từ có tiền tố l- (loại từ)}}
| l-pass = {{#if:{{{2|}}}||-}}{{m|nv|l-|pos=loại từ, bị động}}{{cln|nv|Từ có tiền tố l- (loại từ)|Động từ bị động}}
| l-passcaus = {{#if:{{{2|}}}||-}}{{m|nv|l-|pos=loại từ, bị động-gây khiến}}{{cln|nv|Từ có tiền tố l- (loại từ)|Động từ bị động}}
| l-med = {{#if:{{{2|}}}||-}}{{m|nv|l-|pos=loại từ, bị động trung dung}}{{cln|nv|Từ có tiền tố l- (loại từ)}}
| l-detrans = {{#if:{{{2|}}}||-}}{{m|nv|l-|pos=loại từ, detransitive/anticausative}}{{cln|nv|Từ có tiền tố l- (loại từ)}}
| l-refl = {{#if:{{{2|}}}||-}}{{m|nv|l-|pos=loại từ, phản thân}}{{cln|nv|Từ có tiền tố l- (loại từ)|Động từ phản thân}}
| l-rec = {{#if:{{{2|}}}||-}}{{m|nv|l-|pos=phản thân, tương hỗ}}{{cln|nv|Từ có tiền tố l- (loại từ)}}
| ł = {{#if:{{{2|}}}||-}}{{m|nv|ł-|pos=loại từ}}{{cln|nv|Từ có tiền tố ł- (loại từ)}}
| ł-them = {{#if:{{{2|}}}||-}}{{m|nv|ł-|pos=loại từ, chủ đề}}{{cln|nv|Từ có tiền tố ł- (loại từ)}}
| ł-caus = {{#if:{{{2|}}}||-}}{{m|nv|ł-|pos=loại từ, gây khiến}}{{cln|nv|Từ có tiền tố ł- (loại từ)|Động từ gây khiến}}
| L = {{#if:{{{2|}}}||-}}{{m|nv|ł-|pos=loại từ}}{{cln|nv|Từ có tiền tố ł- (loại từ)}}
<!-- ######################## -->
<!-- POSITION VI -->
| adi-usitative = {{#if:{{{2|}}}||-}}{{m|nv|ʼadi-|pos=usitative|}}{{cln|nv|terms prefixed with ʼadi- (usitative)}}
| di = {{#if:{{{2|}}}||-}}{{m|nv|di-|pos=thematic|}}{{cln|nv|terms prefixed with di- (thematic)}}
| di-adj = {{#if:{{{2|}}}||-}}{{m|nv|di-|pos=adjectival|}}{{cln|nv|terms prefixed with di- (adjectival)}}
| di-color= {{#if:{{{2|}}}||-}}{{m|nv|di-||color}}{{cln|nv|terms prefixed with di- (color)}}
| di-ext = {{#if:{{{2|}}}||-}}{{m|nv|di-|pos=extension|}}{{cln|nv|terms prefixed with di- (extension)}}
| di-inceptive = {{#if:{{{2|}}}||-}}{{m|nv|di-|pos=inceptive|}}{{cln|nv|terms prefixed with di- (inceptive)}}
| di-them = {{#if:{{{2|}}}||-}}{{m|nv|di-|pos=thematic|}}{{cln|nv|terms prefixed with di- (thematic)}}
| di-oral = {{#if:{{{2|}}}||-}}{{m|nv|di-||oral}}{{cln|nv|terms prefixed with di- (oral)}}
| di-fire = {{#if:{{{2|}}}||-}}{{m|nv|di-||fire}}{{cln|nv|terms prefixed with di- (fire)}}
| di-sense= {{#if:{{{2|}}}||-}}{{m|nv|di-||sensory}}{{cln|nv|terms prefixed with di- (sensory)}}
| di-legs = {{#if:{{{2|}}}||-}}{{m|nv|di-||arms, legs}}{{cln|nv|terms prefixed with di- (legs)}}
| di-holy = {{#if:{{{2|}}}||-}}{{m|nv|di-||sanctity}}{{cln|nv|terms prefixed with di- (holy)}}
| di-relinquish = {{#if:{{{2|}}}||-}}{{m|nv|di-||relinquish}}{{cln|nv|terms prefixed with di- (relinquish)}}
| dí-disabled = {{#if:{{{2|}}}||-}}{{m|nv|dí-||disablement}}{{cln|nv|terms prefixed with dí- (disablement)}}
| dí-hang = {{#if:{{{2|}}}||-}}{{m|nv|dí-||hang, be suspended}}{{cln|nv|terms prefixed with dí- (hang)}}
| dí-slant = {{#if:{{{2|}}}||-}}{{m|nv|dí-||slanting, sloped}}{{cln|nv|terms prefixed with dí- (slant)}}
| díní = {{#if:{{{2|}}}||-}}{{m|nv|díní-|pos=prolongative}}{{cln|nv|terms prefixed with díní-}}
| dini = {{#if:{{{2|}}}||-}}{{m|nv|dini-||approximate color}}{{cln|nv|terms prefixed with dini-}}
| dini-prolongative = {{#if:{{{2|}}}||-}}{{m|nv|dini-||prolongative}}{{cln|nv|terms prefixed with dini- (prolongative)}}
| dzi = {{#if:{{{2|}}}||-}}{{m|nv|dzi-||away into distance}}{{cln|nv|terms prefixed with dzi-}}
| hi = {{#if:{{{2|}}}||-}}{{m|nv|hi-|pos=seriative}}{{cln|nv|terms prefixed with hi- (seriative)}}
| hi-them = {{#if:{{{2|}}}||-}}{{m|nv|hi-|pos=thematic}}{{cln|nv|terms prefixed with hi- (thematic)}}
| hidíní = {{#if:{{{2|}}}||-}}{{m|nv|hidíní-|pos=dangling, hanging}}{{cln|nv|terms prefixed with hidíní-}}
| hí = {{#if:{{{2|}}}||-}}{{m|nv|hí-|pos=extending}}{{cln|nv|terms prefixed with hí-}}
| ji = {{#if:{{{2|}}}||-}}{{m|nv|ji-||emotion}}{{cln|nv|terms prefixed with ji-}}
| łi = {{#if:{{{2|}}}||-}} {{m|nv|łi-|pos=adjectival}}{{cln|nv|terms prefixed with łi-}}
| ni-adj = {{#if:{{{2|}}}||-}}{{m|nv|ni-|pos=adjectival}}{{cln|nv|terms prefixed with ni- (adjectival)}}
| ni-inceptive = {{#if:{{{2|}}}||-}}{{m|nv|ni-|pos=inceptive|id=inceptive}}{{cln|nv|terms prefixed with ni- (inceptive)}}
| ni-mental= {{#if:{{{2|}}}||-}}{{m|nv|ni-|pos=relates to the mind }}{{cln|nv|terms prefixed with ni- (mental)}}
| ni-round= {{#if:{{{2|}}}||-}}{{m|nv|ni-||round shape }}{{cln|nv|terms prefixed with ni- (round)}}
| ni-term = {{#if:{{{2|}}}||-}}{{m|nv|ni-|pos=terminative|id=terminative}}{{cln|nv|terms prefixed with ni- (terminative)}}
| ni-them = {{#if:{{{2|}}}||-}}{{m|nv|ni-|pos=thematic}}{{cln|nv|terms prefixed with ni- (thematic)}}
| ní-comp = {{#if:{{{2|}}}||-}}{{m|nv|ní-|pos=comparative}}{{cln|nv|terms prefixed with ní- (comparative)}}
| ní-them = {{#if:{{{2|}}}||-}}{{m|nv|ní-|pos=thematic}}{{cln|nv|terms prefixed with ní- (thematic)}}
| nó = {{#if:{{{2|}}}||-}}{{m|nv|nó-|pos=thematic}}{{cln|nv|terms prefixed with nó-}}
| ʼnii = {{#if:{{{2|}}}||-}}{{m|nv|ʼnii-|pos=inchoative}}{{cln|nv|terms prefixed with ʼnii-}}
| tao = {{#if:{{{2|}}}||-}}{{m|nv|tao-||mixed, dispersed}}{{cln|nv|terms prefixed with tao-}}
| sh = {{#if:{{{2|}}}||-}}{{m|nv|sh-||angry}}{{cln|nv|terms prefixed with sh-}}
| si-death= {{#if:{{{2|}}}||-}}{{m|nv|si-||death}}{{cln|nv|terms prefixed with si- (death)}}
| si-them= {{#if:{{{2|}}}||-}}{{m|nv|si-||pos=thematic, meaning unclear}}{{cln|nv|terms prefixed with si- (thematic)}}
| si-unknown= {{#if:{{{2|}}}||-}}{{m|nv|si-|pos=meaning unclear}}{{cln|nv|terms prefixed with si-}}
| yi-them = {{#if:{{{2|}}}||-}}{{m|nv|yi-|pos=thematic}}{{cln|nv|terms prefixed with yi- (thematic)}}
| yi-night= {{#if:{{{2|}}}||-}}{{m|nv|yi-||night passes}}{{cln|nv|terms prefixed with yi-}}
| yi-color= {{#if:{{{2|}}}||-}}{{m|nv|yi-|pos=relates to color}}{{cln|nv|terms prefixed with yi- (color)}}
| yí = {{#if:{{{2|}}}||-}}{{m|nv|yí-|pos=thematic, meaning unclear}}{{cln|nv|terms prefixed with yí-}}
| yíní = {{#if:{{{2|}}}||-}}{{m|nv|yíní-||directed at}}{{cln|nv|terms prefixed with yíní-}}
| yini = {{#if:{{{2|}}}||-}}{{m|nv|yini-|pos=meaning unclear}}{{cln|nv|terms prefixed with yini-}}
<!-- ######################## -->
<!-- POSITION VII (mode) -->
| ni = {{#if:{{{2|}}}||-}}{{m|nv|ni-|pos=modal}}{{cln|nv|terms prefixed with ni- (modal)}}
| ni-3s-∅ = {{#if:{{{2|}}}||-}}{{m|nv|∅-}} ({{m|nv|ni-}}modal 3rd person subject prefix){{cln|nv|terms prefixed with ni- (modal)}}
| ni-3s-í = {{#if:{{{2|}}}||-}}{{l|nv|◌́}}- ({{m|nv|ni-}}modal 3rd person subject prefix){{cln|nv|terms prefixed with ni- (modal)}}
| ni-3s-ee = {{#if:{{{2|}}}||-}}{{m|nv|ee-}} ({{m|nv|ni-}}modal 3rd person subject prefix){{cln|nv|terms prefixed with ni- (modal)}}
| ni-3s-ní = {{#if:{{{2|}}}||-}}{{m|nv|ní-}} ({{m|nv|ni-}}perfective 3rd person subject prefix){{cln|nv|terms prefixed with ni- (modal)}}
| si = {{#if:{{{2|}}}||-}}{{m|nv|si-|pos=modal}}{{cln|nv|terms prefixed with si- (modal)}}
| si-3s-z = {{#if:{{{2|}}}||-}}{{m|nv|z-|pos={{m|nv|si-}}perfective 3rd person subject prefix}}{{cln|nv|terms prefixed with si- (perfective)}}
| si-3s-zh = {{#if:{{{2|}}}||-}}{{m|nv|zh-|pos={{m|nv|si-}}perfective 3rd person subject prefix, with palatal assimilation}}{{cln|nv|terms prefixed with si- (perfective)}}
| si-3s-s = {{#if:{{{2|}}}||-}}{{m|nv|s-|pos={{m|nv|si-}}perfective 3rd person subject prefix}}{{cln|nv|terms prefixed with si- (perfective)}}
| si-3s-sh = {{#if:{{{2|}}}||-}}{{m|nv|sh-|pos={{m|nv|si-}}perfective 3rd person subject prefix, with palatal assimilation}}{{cln|nv|terms prefixed with si- (perfective)}}
| si-3s-eez= {{#if:{{{2|}}}||-}}{{m|nv|z-|pos={{m|nv|si-}}perfective 3rd person subject prefix, with preceding ''i'' lengthened to ''ee''}}{{cln|nv|terms prefixed with si- (perfective)}}
| si-3s-eezh= {{#if:{{{2|}}}||-}}{{m|nv|z-|pos={{m|nv|si-}}perfective 3rd person subject prefix, with preceding ''i'' lengthened to ''ee'' and palatal assimilation}}{{cln|nv|terms prefixed with si- (perfective)}}
| si-3s-ees= {{#if:{{{2|}}}||-}}{{m|nv|s-|pos={{m|nv|si-}}perfective 3rd person subject prefix, with preceding ''i'' lengthened to ''ee''}}{{cln|nv|terms prefixed with si- (perfective)}}
| si-3s-eezh= {{#if:{{{2|}}}||-}}{{m|nv|z-|pos={{m|nv|si-}}perfective 3rd person subject prefix, with preceding ''i'' lengthened to ''ee'' and palatal assimilation}}{{cln|nv|terms prefixed with si- (perfective)}}
|yi-trans = {{#if:{{{2|}}}||-}}{{m|nv|yi-|pos=transitional|id=transitional}}{{cln|nv|terms prefixed with yi- (transitional)}}
|yi-semel = {{#if:{{{2|}}}||-}}{{m|nv|yi-|pos=semelfactive, punctual}}{{cln|nv|terms prefixed with yi- (semelfactive)}}
|yi-prog = {{#if:{{{2|}}}||-}}{{m|nv|yi-|pos=progressive}}{{cln|nv|terms prefixed with yi- (progressive)}}|
|yi-prog-oo= {{#if:{{{2|}}}||-}}{{m|nv|oo-|pos=yi-progressive 3rd person subject prefix}}{{cln|nv|terms prefixed with yi- (progressive)}}
|yi = {{#if:{{{2|}}}||-}}{{m|nv|yi-|pos=modal}}{{cln|nv|terms prefixed with yi- (modal)}}
|yi-3s-oo = {{#if:{{{2|}}}||-}}{{m|nv|oo-}} ({{m|nv|yi-}}perfective 3rd person subject prefix){{cln|nv|terms prefixed with yi- (modal)}}
|yi-3s-íí = {{#if:{{{2|}}}||-}}{{l|nv|◌́◌́}}- ({{m|nv|yi-}}perfective 3rd person subject prefix){{cln|nv|terms prefixed with yi- (modal)}}
|yi-3s-í = {{#if:{{{2|}}}||-}}{{l|nv|◌́}}- ({{m|nv|yi-}}perfective 3rd person subject prefix){{cln|nv|terms prefixed with yi- (modal)}}
|yi-undef-oo= {{#if:{{{2|}}}||-}}{{m|nv|oo-}} (combining form of an unidentified {{m|nv|yi-}} prefix){{cln|nv|terms prefixed with yi-}}
|yini-3s-oo = {{#if:{{{2|}}}||-}}{{m|nv|oo-}} (meaning unclear, combining form of {{m|nv|yini-}} in the 3rd person){{cln|nv|terms prefixed with yini-}}
|yíní-3s-ó = {{#if:{{{2|}}}||-}}{{m|nv|ó-}} (“directed at”, combining form of {{m|nv|yíní-}} in the 3rd person){{cln|nv|terms prefixed with yíní-}}
|yíní-3s-yí = {{#if:{{{2|}}}||-}}{{m|nv|yí-}} (“directed at”, combining form of {{m|nv|yíní-}} in the 3rd person){{cln|nv|terms prefixed with yíní-}}
|yíní-3s-ní = {{#if:{{{2|}}}||-}}{{m|nv|ní-}} (“directed at”, combining form of {{m|nv|yíní-}} in the 3rd person){{cln|nv|terms prefixed with yíní-}}
<!-- ######################## -->
<!-- POSITION II (iterative) -->
| ná-iter = {{#if:{{{2|}}}||-}}{{m|nv|ná-|pos=iterative}}{{cln|nv|terms prefixed with ná- (iterative)}}
<!-- ######################## -->
<!-- POSITION I (thematic) -->
| á-comp = {{#if:{{{2|}}}||-}}{{m|nv|ʼá-|pos=comparative}}{{cln|nv|terms prefixed with ʼá- (comparative)}}
| á-them = {{#if:{{{2|}}}||-}}{{m|nv|ʼá-|pos=thematic}}{{cln|nv|terms prefixed with ʼá- (thematic)}}
| á-thus = {{#if:{{{2|}}}||-}}{{m|nv|ʼá-||thus}}{{cln|nv|terms prefixed with ʼá- (thus)}}
| á-do = {{#if:{{{2|}}}||-}}{{m|nv|ʼá-||do}}{{cln|nv|terms prefixed with ʼá- (do)}}
| a-them = {{#if:{{{2|}}}||-}}{{m|nv|ʼa-|pos=thematic}}{{cln|nv|terms prefixed with ʼa- (disjunct)}}
| a-away = {{#if:{{{2|}}}||-}}{{m|nv|ʼa-||away}}{{cln|nv|terms prefixed with ʼa- (disjunct)}}
| ahee = {{#if:{{{2|}}}||-}}{{m|nv|ahee-||equally}}{{cln|nv|terms prefixed with ahee-}}
| ahéé = {{#if:{{{2|}}}||-}}{{m|nv|ahéé-||in a circle}}{{cln|nv|terms prefixed with ahéé-}}
| atsí = {{#if:{{{2|}}}||-}}{{m|nv|tsí-|atsí|mental}} {{cln|nv|terms prefixed with tsí- (disjunct)}}
| cha-dark = {{#if:{{{2|}}}||-}}{{m|nv|cha-||darkness}}{{cln|nv|terms prefixed with cha- (disjunct)}}
| cho = {{#if:{{{2|}}}||-}}{{m|nv|cho-|pos=relates to usefulness}}{{cln|nv|terms prefixed with cho-}}
| chʼí = {{#if:{{{2|}}}||-}}{{m|nv|chʼí-||out horizontally}}{{cln|nv|terms prefixed with chʼí- (disjunct)}}
| da = {{#if:{{{2|}}}||-}}{{m|nv|da-|pos=plural}}{{cln|nv|terms prefixed with da- (plural)}}
| da-death = {{#if:{{{2|}}}||-}}{{m|nv|da-|pos=disjunct prefix||death}}{{cln|nv|terms prefixed with da- (disjunct)}}
| dá = {{#if:{{{2|}}}||-}}{{m|nv|dá-||blocking}}{{cln|nv|terms prefixed with dá-}}
| di-disj = {{#if:{{{2|}}}||-}}{{m|nv|di-|pos=disjunct prefix||into fire}}{{cln|nv|terms prefixed with di- (disjunct)}}
| dzídza = {{#if:{{{2|}}}||-}}{{m|nv|dzídza-||into fire}}{{cln|nv|terms prefixed with dzídza- (disjunct)}}
| ha = {{#if:{{{2|}}}||-}}{{m|nv|ha-||up out}}{{cln|nv|terms prefixed with ha- (up out)}}
| ha-up = {{#if:{{{2|}}}||-}}{{m|nv|ha-||climbing up}}{{cln|nv|terms prefixed with ha- (climbing up)}}
| ha-them = {{#if:{{{2|}}}||-}}{{m|nv|ha-|pos=thematic}}{{cln|nv|terms prefixed with ha- (thematic)}}
| ha-search= {{#if:{{{2|}}}||-}}{{m|nv|ha-||searching for}}{{cln|nv|terms prefixed with ha- (searching)}}
| ha-aging = {{#if:{{{2|}}}||-}}{{m|nv|ha-||aging}}{{cln|nv|terms prefixed with ha- (aging)}}
| ha-complete = {{#if:{{{2|}}}||-}}{{m|nv|ha-||completeness}}{{cln|nv|terms prefixed with ha- (complete)}}
| há = {{#if:{{{2|}}}||-}}{{m|nv|há|pos=alternative form of {{m|nv|ha-||following, searching for}}}}{{cln|nv|terms prefixed with ha- (searching)}}
| kéé = {{#if:{{{2|}}}||-}}{{m|nv|kéé-||live, reside}}{{cln|nv|terms prefixed with kéé- (disjunct)}}
| kʼi-plant= {{#if:{{{2|}}}||-}}{{m|nv|kʼi-||plant}}{{cln|nv|terms prefixed with kʼi- (disjunct)}}
| kʼí = {{#if:{{{2|}}}||-}}{{m|nv|kʼí-||straight}}{{cln|nv|terms prefixed with kʼí- (straight)}}
| kʼí-tip = {{#if:{{{2|}}}||-}}{{m|nv|kʼí-||tipped}}{{cln|nv|terms prefixed with kʼí- (tipped)}}
| kó = {{#if:{{{2|}}}||-}}{{m|nv|kó-||thus}}{{cln|nv|terms prefixed with kó- (disjunct)}}
| łe = {{#if:{{{2|}}}||-}}{{m|nv|łe-|pos=from {{m|nv|łeeh}}, contraction of {{m|nv|łeezh}} "ground" + {{m|nv|biih|-iih}} "into" ||into the ground}} {{cln|nv|terms prefixed with łe- (disjunct)}}
| łí = {{#if:{{{2|}}}||-}}{{m|nv|łí-||extort}}{{cln|nv|terms prefixed with łí- (disjunct)}}
| na = {{#if:{{{2|}}}||-}}{{m|nv|na-|pos=atelic, circuital}}{{cln|nv|terms prefixed with na- (disjunct)}}
| na-across= {{#if:{{{2|}}}||-}}{{m|nv|na-||across}}{{cln|nv|terms prefixed with na- (across)}}
| na-down = {{#if:{{{2|}}}||-}}{{m|nv|na-||downward}}{{cln|nv|terms prefixed with na- (downward)}}
| ná-rev = {{#if:{{{2|}}}||-}}{{m|nv|ná-|pos=reversionary||back}}{{cln|nv|terms prefixed with ná- (reversionary)}}
| ná-around= {{#if:{{{2|}}}||-}}{{m|nv|ná-|id=around||around}}{{cln|nv|terms prefixed with ná- (around)}}
| ná-up = {{#if:{{{2|}}}||-}}{{m|nv|ná-||upward}}{{cln|nv|terms prefixed with ná- (upward)}}
| ná-them = {{#if:{{{2|}}}||-}}{{m|nv|ná-|pos=thematic}}{{cln|nv|terms prefixed with ná- (thematic)}}
| náá = {{#if:{{{2|}}}||-}}{{m|nv|náá-|pos=semeliterative||once again}}{{cln|nv|terms prefixed with náá- (disjunct)}}
| nááná = {{#if:{{{2|}}}||-}}{{m|nv|nááná-|pos=semeliterative||once again}}{{cln|nv|terms prefixed with náá- (disjunct)}}
| ni-disj = {{#if:{{{2|}}}||-}}{{m|nv|ni-|pos=terminative, disjunct}}{{cln|nv|terms prefixed with ni- (disjunct)}}
| níkʼí- = {{#if:{{{2|}}}||-}}{{m|nv|níkʼí-|t=packed down, compressed}}{{cln|nv|terms prefixed with níkʼí-}}
| so = {{#if:{{{2|}}}||-}}{{m|nv|so-|pos=thematic}}{{cln|nv|terms prefixed with so- (disjunct)}}
| shó = {{#if:{{{2|}}}||-}}{{m|nv|shó-|pos=extremely}}{{cln|nv|terms prefixed with shó-}}
| tá= {{#if:{{{2|}}}||-}}{{m|nv|tá-||here and there}} {{cln|nv|terms prefixed with tá- (disjunct)}}
| tá-water = {{#if:{{{2|}}}||-}}{{m|nv|tá-||water}} {{cln|nv|terms prefixed with tá- (water)}}
| tah = {{#if:{{{2|}}}||-}}{{m|nv|tah-||pos=comitative}} {{cln|nv|terms prefixed with tah- (disjunct)}}
| tí-wound = {{#if:{{{2|}}}||-}}{{m|nv|tí-||injury, wound}} {{cln|nv|terms prefixed with tí- (disjunct)}}
| tsí-mental= {{#if:{{{2|}}}||-}}{{m|nv|tsí-||mental}} {{cln|nv|terms prefixed with tsí- (disjunct)}}
| wóʼą = {{#if:{{{2|}}}||-}}{{m|nv|wóʼą-||over an edge}}{{cln|nv|terms prefixed with wóʼą- (disjunct)}}{{cln|nv|terms prefixed with ą- (postpositional)}}
| ya = {{#if:{{{2|}}}||-}}{{m|nv|ya-||up or down, vertically}}{{cln|nv|terms prefixed with ya- (disjunct)}}
| yá = {{#if:{{{2|}}}||-}}{{m|nv|yá-|pos=thematic}}{{cln|nv|terms prefixed with yá- (disjunct)}}
| yá-up = {{#if:{{{2|}}}||-}}{{m|nv|yá-||up into the air}}{{cln|nv|terms prefixed with yá- (disjunct)}}
| yisdá = {{#if:{{{2|}}}||-}}{{m|nv|yisdá-||to safety}}{{cln|nv|terms prefixed with yisdá- (disjunct)}}
<!-- ######################## -->
<!-- POSITION I (postpositional) -->
| -aʼ = {{#if:{{{2|}}}||-}}{{m|nv|aʼ-||lending to}}{{cln|nv|terms prefixed with aʼ- (postpositional)}}
| -ą = {{#if:{{{2|}}}||-}}{{m|nv|ą-||beyond, over}}{{cln|nv|terms prefixed with ą- (postpositional)}}
| ada = {{#if:{{{2|}}}||-}}{{m|nv|ada-||downward}}{{cln|nv|terms prefixed with ada-}}
| ahá = {{#if:{{{2|}}}||-}}{{m|nv|ahá-||apart, in two}}{{cln|nv|terms prefixed with ahá-}}
| -ą́ = {{#if:{{{2|}}}||-}}{{m|nv|ą́-||passing by, alongside}}{{cln|nv|terms prefixed with ą́- (postpositional)}}
| -ba = {{#if:{{{2|}}}||-}}{{m|nv|ba-||use up, exhaust}}{{cln|nv|terms prefixed with ba- (postpositional)}}
| bighá = {{#if:{{{2|}}}||-}}{{m|nv|bighá-|id=through|pos=through it}}{{cln|nv|terms prefixed with bighá- (through)}}
| biní = {{#if:{{{2|}}}||-}}{{m|nv|biní-|pos=into it}}{{cln|nv|terms prefixed with biní-}}
| bitsʼá = {{#if:{{{2|}}}||-}}{{m|nv|bitsʼá-|id=away|pos=away from it}}{{cln|nv|terms prefixed with bitsʼá-}}
| biníká = {{#if:{{{2|}}}||-}}{{m|nv|biníká-|pos=through, penetrating, perforating it}}{{cln|nv|terms prefixed with biníká-}}
| chʼo = {{#if:{{{2|}}}||-}}{{m|nv|chʼo-|pos=meaning obscure}}{{cln|nv|terms prefixed with chʼo-}}
| -é = {{#if:{{{2|}}}||-}}{{m|nv|é-||about}}{{cln|nv|terms prefixed with é- (postpositional)}}
| -ee = {{#if:{{{2|}}}||-}}{{m|nv|ee-||with}}{{cln|nv|terms prefixed with ee- (postpositional)}}
| -ghá = {{#if:{{{2|}}}||-}}{{m|nv|ghá-||through}}{{cln|nv|terms prefixed with ghá- (postpositional)}}
| -í = {{#if:{{{2|}}}||-}}{{m|nv|í-||against, reaching}}{{cln|nv|terms prefixed with í- (postpositional)}}
| í = {{#if:{{{2|}}}||-}}{{m|nv|í-||against, reaching}}{{cln|nv|terms prefixed with í- (postpositional)}}
| kí = {{#if:{{{2|}}}||-}}{{m|nv|kí-||slanting}}{{cln|nv|terms prefixed with kí-}}
| kʼi- = {{#if:{{{2|}}}||-}}{{m|nv|kʼi-||on top of}}{{cln|nv|terms prefixed with kʼi- (postpositional)}}
| kʼi = {{#if:{{{2|}}}||-}}{{m|nv|kʼi-||on top of}}{{cln|nv|terms prefixed with kʼi- (postpositional)}}
| kʼí- = {{#if:{{{2|}}}||-}}{{m|nv|kʼí-||onto}}{{cln|nv|terms prefixed with kʼí- (postpositional)}}
| kʼí-apart = {{#if:{{{2|}}}||-}}{{m|nv|kʼí-||apart, in two}}{{cln|nv|terms prefixed with kʼí- (apart)}}
| naani = {{#if:{{{2|}}}||-}}{{m|nv|naani-|pos=crosswise}}{{cln|nv|terms prefixed with naani-}}
| niki = {{#if:{{{2|}}}||-}}{{m|nv|niki-|pos=to a surface}}{{cln|nv|terms prefixed with niki-}}
| taa = {{#if:{{{2|}}}||-}}{{m|nv|taa-|pos=among}}{{cln|nv|terms prefixed with taa-}}
| tsiʼ = {{#if:{{{2|}}}||-}}{{m|nv|tsiʼ-|t=aimlessly}}{{cln|nv|terms prefixed with tsiʼ-}}
| tsʼá = {{#if:{{{2|}}}||-}}{{m|nv|tsʼá-|id=away|pos=away}}{{cln|nv|terms prefixed with tsʼá-}}
<!-- ######################## -->
<!-- DEFAULT -->
| {{#if:{{{2|}}}||-}}{{m|nv|{{{1}}}-|pos=thematic}}{{cln|nv|terms prefixed with {{{1}}}-}}{{cln|nv|terms with uncategorized prefix}}
}}</includeonly><noinclude>[[Thể loại:Bản mẫu tiếng Navajo|*]]</noinclude>
a0j3t7wq16i0ra9mx7p5gt785c0j8j6
2569567
2569566
2026-10-11T08:50:44Z
TheHighFighter2
42988
2569567
wikitext
text/x-wiki
{{#invoke:checkparams|error}}<!-- Validate template parameters
--><noinclude>{{documentation}}
</noinclude><includeonly>{{#switch: {{{1}}}
<!-- ######################## -->
<!-- PERSON -->
| 3s = {{m|nv|{{#if:{{{2|}}}||}}∅-|pos=tiền tố sở hữu ngôi thứ ba}}
| 3o = {{#if:{{{2|}}}||-}}{{m|nv|y-|pos=tiền tố tân ngữ ngôi thứ ba}}{{cln|nv|Từ có tiền tố y- (tân ngữ)}}
| 4i = {{#if:{{{2|}}}||-}}{{m|nv|ʼa-|pos=tiền tố chủ ngữ ngôi không xác định}} {{cln|nv|Từ có tiền tố ʼa- (chủ ngữ)}}
| b = {{#if:{{{2|}}}||-}}{{m|nv|b-|id=chủ đề|pos=chủ đề}}{{cln|nv|Từ có tiền tố b- (chủ đề)}}
| bi = {{#if:{{{2|}}}||-}}{{m|nv|bi-|id=tân ngữ gián tiếp|pos=tiền tố tân ngữ hậu giới từ/tân ngữ gián tiếp ngô thứ ba}}{{cln|nv|Từ có tiền tố bi- (tân ngữ gián tiếp)}}
| yi-obv = {{#if:{{{2|}}}||-}}{{m|nv|yi-|id=hình thái ngôi thứ tư|pos=tiền tố tân ngữ hậu giới từ/tân ngữ gián tiếp ngô thứ ba, dùng khi chủ ngữ ở ngôi thứ ba}}{{cln|nv|Từ có tiền tố yi- (hình thái ngôi thứ tư)}}
| a = {{#if:{{{2|}}}||-}}{{m|nv|ʼa-|pos=tiền tố tân ngữ ngôi không xác định}} {{cln|nv|Từ có tiền tố ʼa- (tân ngữ)}}
| ho = {{#if:{{{2|}}}||-}}{{m|nv|ho-||không gian, khu vực, vạn vật}}{{cln|nv|Từ có tiền tố ho-}}
| ha-areal = {{#if:{{{2|}}}||-}}{{m|nv|ha-||không gian, khu vực, vạn vật}}{{cln|nv|Từ có tiền tố ha- (khu vực)}}
| adi = {{#if:{{{2|}}}||-}}{{m|nv|ʼadi-|pos=tân ngữ bị động tác cách}}{{cln|nv|Từ có tiền tố ʼadi-}}
| ádi = {{#if:{{{2|}}}||-}}{{m|nv|ʼádi-|pos=phản thân}}{{cln|nv|Từ có tiền tố ʼádi- (tân ngữ)}}{{cln|nv|Động từ phản thân}}
| di-obj = {{#if:{{{2|}}}||-}}{{m|nv|ʼadi-|pos=tân ngữ bị động tác cách}}{{cln|nv|Từ có tiền tố ʼadi-}}
| ah = {{#if:{{{2|}}}||-}}{{m|nv|ʼah-|pos=tương hỗ}}{{cln|nv|Từ có tiền tố ʼahi- (tân ngữ)}}
| ah-disj = {{#if:{{{2|}}}||-}}{{m|nv|ʼah-|pos=tương hỗ}}{{cln|nv|Từ có tiền tố ʼahi- (tân ngữ gián tiếp)}}
| ał = {{#if:{{{2|}}}||-}}{{m|nv|ʼał-|pos=tương hỗ}}{{cln|nv|Từ có tiền tố ʼał- (tân ngữ gián tiếp)}}
| y-peg = {{#if:{{{2|}}}||-}}{{m|nv|y-|pos=[[peg element|tiền tố chêm âm]]}}{{cln|nv|Từ có tiền tố yi- (peg element)}}
| w-peg = {{#if:{{{2|}}}||-}}{{m|nv|w-|pos=[[peg element|tiền tố chêm âm]]}}{{cln|nv|Từ có tiền tố w- (peg element)}}
<!-- ######################## -->
<!-- CLASSIFIERS -->
| ∅ = {{#if:{{{2|}}}||-}}{{m|nv|∅-|pos=loại từ}}{{cln|nv|Từ có tiền tố ∅- (loại từ)}}
| - = {{#if:{{{2|}}}||-}}{{m|nv|∅-|pos=loại từ}}{{cln|nv|Từ có tiền tố ∅- (loại từ)}}
| d = {{#if:{{{2|}}}||-}}{{m|nv|d-|pos=loại từ}}{{cln|nv|Từ có tiền tố d- (loại từ)}}
| d-them = {{#if:{{{2|}}}||-}}{{m|nv|d-|pos=loại từ, chủ đề}}{{cln|nv|Từ có tiền tố d- (loại từ)}}
| d-pass = {{#if:{{{2|}}}||-}}{{m|nv|d-|pos=loại từ, bị động}}{{cln|nv|Từ có tiền tố d- (loại từ)|Động từ bị động}}
| d-med = {{#if:{{{2|}}}||-}}{{m|nv|d-|pos=loại từ, bị động trung dung}}{{cln|nv|Từ có tiền tố d- (loại từ)}}
| d-detrans = {{#if:{{{2|}}}||-}}{{m|nv|d-|pos=loại từ, detransitive/anticausative}}{{cln|nv|Từ có tiền tố d- (loại từ)}}
| d-refl = {{#if:{{{2|}}}||-}}{{m|nv|d-|pos=loại từ, phản thân}}{{cln|nv|Từ có tiền tố d- (loại từ)|Động từ phản thân}}
| d-rec = {{#if:{{{2|}}}||-}}{{m|nv|d-|pos=loại từ, tương hỗ}}{{cln|nv|Từ có tiền tố d- (loại từ)}}
| d-shift= {{#if:{{{2|}}}||-}}{{m|nv|d-|pos=loại từ, chuyển biến do ''ná-'' gây nên}}{{cln|nv|Từ có tiền tố d- (loại từ)}}
| l = {{#if:{{{2|}}}||-}}{{m|nv|l-|pos=loại từ}}{{cln|nv|Từ có tiền tố l- (loại từ)}}
| l-them = {{#if:{{{2|}}}||-}}{{m|nv|l-|pos=loại từ, chủ đề}}{{cln|nv|Từ có tiền tố l- (loại từ)}}
| l-pass = {{#if:{{{2|}}}||-}}{{m|nv|l-|pos=loại từ, bị động}}{{cln|nv|Từ có tiền tố l- (loại từ)|Động từ bị động}}
| l-passcaus = {{#if:{{{2|}}}||-}}{{m|nv|l-|pos=loại từ, bị động-gây khiến}}{{cln|nv|Từ có tiền tố l- (loại từ)|Động từ bị động}}
| l-med = {{#if:{{{2|}}}||-}}{{m|nv|l-|pos=loại từ, bị động trung dung}}{{cln|nv|Từ có tiền tố l- (loại từ)}}
| l-detrans = {{#if:{{{2|}}}||-}}{{m|nv|l-|pos=loại từ, detransitive/anticausative}}{{cln|nv|Từ có tiền tố l- (loại từ)}}
| l-refl = {{#if:{{{2|}}}||-}}{{m|nv|l-|pos=loại từ, phản thân}}{{cln|nv|Từ có tiền tố l- (loại từ)|Động từ phản thân}}
| l-rec = {{#if:{{{2|}}}||-}}{{m|nv|l-|pos=phản thân, tương hỗ}}{{cln|nv|Từ có tiền tố l- (loại từ)}}
| ł = {{#if:{{{2|}}}||-}}{{m|nv|ł-|pos=loại từ}}{{cln|nv|Từ có tiền tố ł- (loại từ)}}
| ł-them = {{#if:{{{2|}}}||-}}{{m|nv|ł-|pos=loại từ, chủ đề}}{{cln|nv|Từ có tiền tố ł- (loại từ)}}
| ł-caus = {{#if:{{{2|}}}||-}}{{m|nv|ł-|pos=loại từ, gây khiến}}{{cln|nv|Từ có tiền tố ł- (loại từ)|Động từ gây khiến}}
| L = {{#if:{{{2|}}}||-}}{{m|nv|ł-|pos=loại từ}}{{cln|nv|Từ có tiền tố ł- (loại từ)}}
<!-- ######################## -->
<!-- POSITION VI -->
| adi-usitative = {{#if:{{{2|}}}||-}}{{m|nv|ʼadi-|pos=[[usitative]]|}}{{cln|nv|Từ có tiền tố ʼadi- (usitative)}}
| di = {{#if:{{{2|}}}||-}}{{m|nv|di-|pos=chủ đề|}}{{cln|nv|Từ có tiền tố di- (chủ đề)}}
| di-adj = {{#if:{{{2|}}}||-}}{{m|nv|di-|pos=có tính chất tính từ|}}{{cln|nv|Từ có tiền tố di- (tính chất tính từ)}}
| di-color= {{#if:{{{2|}}}||-}}{{m|nv|di-||màu sắc}}{{cln|nv|Từ có tiền tố di- (màu sắc)}}
| di-ext = {{#if:{{{2|}}}||-}}{{m|nv|di-|pos=mở rộng|}}{{cln|nv|Từ có tiền tố di- (mở rộng)}}
| di-inceptive = {{#if:{{{2|}}}||-}}{{m|nv|di-|pos=khởi phát|}}{{cln|nv|Từ có tiền tố di- (khởi phát)}}
| di-them = {{#if:{{{2|}}}||-}}{{m|nv|di-|pos=chủ đề|}}{{cln|nv|Từ có tiền tố di- (chủ đề)}}
| di-oral = {{#if:{{{2|}}}||-}}{{m|nv|di-||miệng}}{{cln|nv|Từ có tiền tố di- (miệng)}}
| di-fire = {{#if:{{{2|}}}||-}}{{m|nv|di-||lửa}}{{cln|nv|Từ có tiền tố di- (lửa)}}
| di-sense= {{#if:{{{2|}}}||-}}{{m|nv|di-||giác quan}}{{cln|nv|Từ có tiền tố di- (giác quan)}}
| di-legs = {{#if:{{{2|}}}||-}}{{m|nv|di-||tay, chân}}{{cln|nv|Từ có tiền tố di- (chân)}}
| di-holy = {{#if:{{{2|}}}||-}}{{m|nv|di-||tính thiêng liêng}}{{cln|nv|Từ có tiền tố di- (linh thiêng)}}
| di-relinquish = {{#if:{{{2|}}}||-}}{{m|nv|di-||bỏ}}{{cln|nv|Từ có tiền tố di- (bỏ)}}
| dí-disabled = {{#if:{{{2|}}}||-}}{{m|nv|dí-||disablement}}{{cln|nv|terms prefixed with dí- (disablement)}}
| dí-hang = {{#if:{{{2|}}}||-}}{{m|nv|dí-||hang, be suspended}}{{cln|nv|terms prefixed with dí- (hang)}}
| dí-slant = {{#if:{{{2|}}}||-}}{{m|nv|dí-||slanting, sloped}}{{cln|nv|terms prefixed with dí- (slant)}}
| díní = {{#if:{{{2|}}}||-}}{{m|nv|díní-|pos=prolongative}}{{cln|nv|terms prefixed with díní-}}
| dini = {{#if:{{{2|}}}||-}}{{m|nv|dini-||approximate color}}{{cln|nv|terms prefixed with dini-}}
| dini-prolongative = {{#if:{{{2|}}}||-}}{{m|nv|dini-||prolongative}}{{cln|nv|terms prefixed with dini- (prolongative)}}
| dzi = {{#if:{{{2|}}}||-}}{{m|nv|dzi-||away into distance}}{{cln|nv|terms prefixed with dzi-}}
| hi = {{#if:{{{2|}}}||-}}{{m|nv|hi-|pos=seriative}}{{cln|nv|terms prefixed with hi- (seriative)}}
| hi-them = {{#if:{{{2|}}}||-}}{{m|nv|hi-|pos=thematic}}{{cln|nv|terms prefixed with hi- (thematic)}}
| hidíní = {{#if:{{{2|}}}||-}}{{m|nv|hidíní-|pos=dangling, hanging}}{{cln|nv|terms prefixed with hidíní-}}
| hí = {{#if:{{{2|}}}||-}}{{m|nv|hí-|pos=extending}}{{cln|nv|terms prefixed with hí-}}
| ji = {{#if:{{{2|}}}||-}}{{m|nv|ji-||emotion}}{{cln|nv|terms prefixed with ji-}}
| łi = {{#if:{{{2|}}}||-}} {{m|nv|łi-|pos=adjectival}}{{cln|nv|terms prefixed with łi-}}
| ni-adj = {{#if:{{{2|}}}||-}}{{m|nv|ni-|pos=adjectival}}{{cln|nv|terms prefixed with ni- (adjectival)}}
| ni-inceptive = {{#if:{{{2|}}}||-}}{{m|nv|ni-|pos=inceptive|id=inceptive}}{{cln|nv|terms prefixed with ni- (inceptive)}}
| ni-mental= {{#if:{{{2|}}}||-}}{{m|nv|ni-|pos=relates to the mind }}{{cln|nv|terms prefixed with ni- (mental)}}
| ni-round= {{#if:{{{2|}}}||-}}{{m|nv|ni-||round shape }}{{cln|nv|terms prefixed with ni- (round)}}
| ni-term = {{#if:{{{2|}}}||-}}{{m|nv|ni-|pos=terminative|id=terminative}}{{cln|nv|terms prefixed with ni- (terminative)}}
| ni-them = {{#if:{{{2|}}}||-}}{{m|nv|ni-|pos=thematic}}{{cln|nv|terms prefixed with ni- (thematic)}}
| ní-comp = {{#if:{{{2|}}}||-}}{{m|nv|ní-|pos=comparative}}{{cln|nv|terms prefixed with ní- (comparative)}}
| ní-them = {{#if:{{{2|}}}||-}}{{m|nv|ní-|pos=thematic}}{{cln|nv|terms prefixed with ní- (thematic)}}
| nó = {{#if:{{{2|}}}||-}}{{m|nv|nó-|pos=thematic}}{{cln|nv|terms prefixed with nó-}}
| ʼnii = {{#if:{{{2|}}}||-}}{{m|nv|ʼnii-|pos=inchoative}}{{cln|nv|terms prefixed with ʼnii-}}
| tao = {{#if:{{{2|}}}||-}}{{m|nv|tao-||mixed, dispersed}}{{cln|nv|terms prefixed with tao-}}
| sh = {{#if:{{{2|}}}||-}}{{m|nv|sh-||angry}}{{cln|nv|terms prefixed with sh-}}
| si-death= {{#if:{{{2|}}}||-}}{{m|nv|si-||death}}{{cln|nv|terms prefixed with si- (death)}}
| si-them= {{#if:{{{2|}}}||-}}{{m|nv|si-||pos=thematic, meaning unclear}}{{cln|nv|terms prefixed with si- (thematic)}}
| si-unknown= {{#if:{{{2|}}}||-}}{{m|nv|si-|pos=meaning unclear}}{{cln|nv|terms prefixed with si-}}
| yi-them = {{#if:{{{2|}}}||-}}{{m|nv|yi-|pos=thematic}}{{cln|nv|terms prefixed with yi- (thematic)}}
| yi-night= {{#if:{{{2|}}}||-}}{{m|nv|yi-||night passes}}{{cln|nv|terms prefixed with yi-}}
| yi-color= {{#if:{{{2|}}}||-}}{{m|nv|yi-|pos=relates to color}}{{cln|nv|terms prefixed with yi- (color)}}
| yí = {{#if:{{{2|}}}||-}}{{m|nv|yí-|pos=thematic, meaning unclear}}{{cln|nv|terms prefixed with yí-}}
| yíní = {{#if:{{{2|}}}||-}}{{m|nv|yíní-||directed at}}{{cln|nv|terms prefixed with yíní-}}
| yini = {{#if:{{{2|}}}||-}}{{m|nv|yini-|pos=meaning unclear}}{{cln|nv|terms prefixed with yini-}}
<!-- ######################## -->
<!-- POSITION VII (mode) -->
| ni = {{#if:{{{2|}}}||-}}{{m|nv|ni-|pos=modal}}{{cln|nv|terms prefixed with ni- (modal)}}
| ni-3s-∅ = {{#if:{{{2|}}}||-}}{{m|nv|∅-}} (tiền tố chủ ngữ ngôi thứ ba thức {{m|nv|ni-}}){{cln|nv|Từ có tiền tố ni- (thức)}}
| ni-3s-í = {{#if:{{{2|}}}||-}}{{l|nv|◌́}}- (tiền tố chủ ngữ ngôi thứ ba thức {{m|nv|ni-}}){{cln|nv|Từ có tiền tố ni- (thức)}}
| ni-3s-ee = {{#if:{{{2|}}}||-}}{{m|nv|ee-}} (tiền tố chủ ngữ ngôi thứ ba thức {{m|nv|ni-}}){{cln|nv|Từ có tiền tố ni- (thức)}}
| ni-3s-ní = {{#if:{{{2|}}}||-}}{{m|nv|ní-}} ({{m|nv|ni-}}perfective 3rd person subject prefix){{cln|nv|terms prefixed with ni- (modal)}}
| si = {{#if:{{{2|}}}||-}}{{m|nv|si-|pos=modal}}{{cln|nv|terms prefixed with si- (modal)}}
| si-3s-z = {{#if:{{{2|}}}||-}}{{m|nv|z-|pos={{m|nv|si-}}perfective 3rd person subject prefix}}{{cln|nv|terms prefixed with si- (perfective)}}
| si-3s-zh = {{#if:{{{2|}}}||-}}{{m|nv|zh-|pos={{m|nv|si-}}perfective 3rd person subject prefix, with palatal assimilation}}{{cln|nv|terms prefixed with si- (perfective)}}
| si-3s-s = {{#if:{{{2|}}}||-}}{{m|nv|s-|pos={{m|nv|si-}}perfective 3rd person subject prefix}}{{cln|nv|terms prefixed with si- (perfective)}}
| si-3s-sh = {{#if:{{{2|}}}||-}}{{m|nv|sh-|pos={{m|nv|si-}}perfective 3rd person subject prefix, with palatal assimilation}}{{cln|nv|terms prefixed with si- (perfective)}}
| si-3s-eez= {{#if:{{{2|}}}||-}}{{m|nv|z-|pos={{m|nv|si-}}perfective 3rd person subject prefix, with preceding ''i'' lengthened to ''ee''}}{{cln|nv|terms prefixed with si- (perfective)}}
| si-3s-eezh= {{#if:{{{2|}}}||-}}{{m|nv|z-|pos={{m|nv|si-}}perfective 3rd person subject prefix, with preceding ''i'' lengthened to ''ee'' and palatal assimilation}}{{cln|nv|terms prefixed with si- (perfective)}}
| si-3s-ees= {{#if:{{{2|}}}||-}}{{m|nv|s-|pos={{m|nv|si-}}perfective 3rd person subject prefix, with preceding ''i'' lengthened to ''ee''}}{{cln|nv|terms prefixed with si- (perfective)}}
| si-3s-eezh= {{#if:{{{2|}}}||-}}{{m|nv|z-|pos={{m|nv|si-}}perfective 3rd person subject prefix, with preceding ''i'' lengthened to ''ee'' and palatal assimilation}}{{cln|nv|terms prefixed with si- (perfective)}}
|yi-trans = {{#if:{{{2|}}}||-}}{{m|nv|yi-|pos=transitional|id=transitional}}{{cln|nv|terms prefixed with yi- (transitional)}}
|yi-semel = {{#if:{{{2|}}}||-}}{{m|nv|yi-|pos=semelfactive, punctual}}{{cln|nv|terms prefixed with yi- (semelfactive)}}
|yi-prog = {{#if:{{{2|}}}||-}}{{m|nv|yi-|pos=progressive}}{{cln|nv|terms prefixed with yi- (progressive)}}|
|yi-prog-oo= {{#if:{{{2|}}}||-}}{{m|nv|oo-|pos=yi-progressive 3rd person subject prefix}}{{cln|nv|terms prefixed with yi- (progressive)}}
|yi = {{#if:{{{2|}}}||-}}{{m|nv|yi-|pos=modal}}{{cln|nv|terms prefixed with yi- (modal)}}
|yi-3s-oo = {{#if:{{{2|}}}||-}}{{m|nv|oo-}} ({{m|nv|yi-}}perfective 3rd person subject prefix){{cln|nv|terms prefixed with yi- (modal)}}
|yi-3s-íí = {{#if:{{{2|}}}||-}}{{l|nv|◌́◌́}}- ({{m|nv|yi-}}perfective 3rd person subject prefix){{cln|nv|terms prefixed with yi- (modal)}}
|yi-3s-í = {{#if:{{{2|}}}||-}}{{l|nv|◌́}}- ({{m|nv|yi-}}perfective 3rd person subject prefix){{cln|nv|terms prefixed with yi- (modal)}}
|yi-undef-oo= {{#if:{{{2|}}}||-}}{{m|nv|oo-}} (combining form of an unidentified {{m|nv|yi-}} prefix){{cln|nv|terms prefixed with yi-}}
|yini-3s-oo = {{#if:{{{2|}}}||-}}{{m|nv|oo-}} (meaning unclear, combining form of {{m|nv|yini-}} in the 3rd person){{cln|nv|terms prefixed with yini-}}
|yíní-3s-ó = {{#if:{{{2|}}}||-}}{{m|nv|ó-}} (“directed at”, combining form of {{m|nv|yíní-}} in the 3rd person){{cln|nv|terms prefixed with yíní-}}
|yíní-3s-yí = {{#if:{{{2|}}}||-}}{{m|nv|yí-}} (“directed at”, combining form of {{m|nv|yíní-}} in the 3rd person){{cln|nv|terms prefixed with yíní-}}
|yíní-3s-ní = {{#if:{{{2|}}}||-}}{{m|nv|ní-}} (“directed at”, combining form of {{m|nv|yíní-}} in the 3rd person){{cln|nv|terms prefixed with yíní-}}
<!-- ######################## -->
<!-- POSITION II (iterative) -->
| ná-iter = {{#if:{{{2|}}}||-}}{{m|nv|ná-|pos=iterative}}{{cln|nv|terms prefixed with ná- (iterative)}}
<!-- ######################## -->
<!-- POSITION I (thematic) -->
| á-comp = {{#if:{{{2|}}}||-}}{{m|nv|ʼá-|pos=comparative}}{{cln|nv|terms prefixed with ʼá- (comparative)}}
| á-them = {{#if:{{{2|}}}||-}}{{m|nv|ʼá-|pos=thematic}}{{cln|nv|terms prefixed with ʼá- (thematic)}}
| á-thus = {{#if:{{{2|}}}||-}}{{m|nv|ʼá-||thus}}{{cln|nv|terms prefixed with ʼá- (thus)}}
| á-do = {{#if:{{{2|}}}||-}}{{m|nv|ʼá-||do}}{{cln|nv|terms prefixed with ʼá- (do)}}
| a-them = {{#if:{{{2|}}}||-}}{{m|nv|ʼa-|pos=thematic}}{{cln|nv|terms prefixed with ʼa- (disjunct)}}
| a-away = {{#if:{{{2|}}}||-}}{{m|nv|ʼa-||away}}{{cln|nv|terms prefixed with ʼa- (disjunct)}}
| ahee = {{#if:{{{2|}}}||-}}{{m|nv|ahee-||equally}}{{cln|nv|terms prefixed with ahee-}}
| ahéé = {{#if:{{{2|}}}||-}}{{m|nv|ahéé-||in a circle}}{{cln|nv|terms prefixed with ahéé-}}
| atsí = {{#if:{{{2|}}}||-}}{{m|nv|tsí-|atsí|mental}} {{cln|nv|terms prefixed with tsí- (disjunct)}}
| cha-dark = {{#if:{{{2|}}}||-}}{{m|nv|cha-||darkness}}{{cln|nv|terms prefixed with cha- (disjunct)}}
| cho = {{#if:{{{2|}}}||-}}{{m|nv|cho-|pos=relates to usefulness}}{{cln|nv|terms prefixed with cho-}}
| chʼí = {{#if:{{{2|}}}||-}}{{m|nv|chʼí-||hướng ra theo chiều ngang}}{{cln|nv|Từ có tiền tố chʼí- (tách rời)}}
| da = {{#if:{{{2|}}}||-}}{{m|nv|da-|pos=số nhiều}}{{cln|nv|Từ có tiền tố da- (số nhiều)}}
| da-death = {{#if:{{{2|}}}||-}}{{m|nv|da-|pos=disjunct prefix||death}}{{cln|nv|terms prefixed with da- (disjunct)}}
| dá = {{#if:{{{2|}}}||-}}{{m|nv|dá-||blocking}}{{cln|nv|terms prefixed with dá-}}
| di-disj = {{#if:{{{2|}}}||-}}{{m|nv|di-|pos=disjunct prefix||into fire}}{{cln|nv|terms prefixed with di- (disjunct)}}
| dzídza = {{#if:{{{2|}}}||-}}{{m|nv|dzídza-||into fire}}{{cln|nv|terms prefixed with dzídza- (disjunct)}}
| ha = {{#if:{{{2|}}}||-}}{{m|nv|ha-||up out}}{{cln|nv|terms prefixed with ha- (up out)}}
| ha-up = {{#if:{{{2|}}}||-}}{{m|nv|ha-||climbing up}}{{cln|nv|terms prefixed with ha- (climbing up)}}
| ha-them = {{#if:{{{2|}}}||-}}{{m|nv|ha-|pos=thematic}}{{cln|nv|terms prefixed with ha- (thematic)}}
| ha-search= {{#if:{{{2|}}}||-}}{{m|nv|ha-||searching for}}{{cln|nv|terms prefixed with ha- (searching)}}
| ha-aging = {{#if:{{{2|}}}||-}}{{m|nv|ha-||aging}}{{cln|nv|terms prefixed with ha- (aging)}}
| ha-complete = {{#if:{{{2|}}}||-}}{{m|nv|ha-||completeness}}{{cln|nv|terms prefixed with ha- (complete)}}
| há = {{#if:{{{2|}}}||-}}{{m|nv|há|pos=alternative form of {{m|nv|ha-||following, searching for}}}}{{cln|nv|terms prefixed with ha- (searching)}}
| kéé = {{#if:{{{2|}}}||-}}{{m|nv|kéé-||live, reside}}{{cln|nv|terms prefixed with kéé- (disjunct)}}
| kʼi-plant= {{#if:{{{2|}}}||-}}{{m|nv|kʼi-||plant}}{{cln|nv|terms prefixed with kʼi- (disjunct)}}
| kʼí = {{#if:{{{2|}}}||-}}{{m|nv|kʼí-||straight}}{{cln|nv|terms prefixed with kʼí- (straight)}}
| kʼí-tip = {{#if:{{{2|}}}||-}}{{m|nv|kʼí-||tipped}}{{cln|nv|terms prefixed with kʼí- (tipped)}}
| kó = {{#if:{{{2|}}}||-}}{{m|nv|kó-||thus}}{{cln|nv|terms prefixed with kó- (disjunct)}}
| łe = {{#if:{{{2|}}}||-}}{{m|nv|łe-|pos=from {{m|nv|łeeh}}, contraction of {{m|nv|łeezh}} "ground" + {{m|nv|biih|-iih}} "into" ||into the ground}} {{cln|nv|terms prefixed with łe- (disjunct)}}
| łí = {{#if:{{{2|}}}||-}}{{m|nv|łí-||extort}}{{cln|nv|terms prefixed with łí- (disjunct)}}
| na = {{#if:{{{2|}}}||-}}{{m|nv|na-|pos=atelic, circuital}}{{cln|nv|terms prefixed with na- (disjunct)}}
| na-across= {{#if:{{{2|}}}||-}}{{m|nv|na-||across}}{{cln|nv|terms prefixed with na- (across)}}
| na-down = {{#if:{{{2|}}}||-}}{{m|nv|na-||downward}}{{cln|nv|terms prefixed with na- (downward)}}
| ná-rev = {{#if:{{{2|}}}||-}}{{m|nv|ná-|pos=reversionary||back}}{{cln|nv|terms prefixed with ná- (reversionary)}}
| ná-around= {{#if:{{{2|}}}||-}}{{m|nv|ná-|id=around||around}}{{cln|nv|terms prefixed with ná- (around)}}
| ná-up = {{#if:{{{2|}}}||-}}{{m|nv|ná-||upward}}{{cln|nv|terms prefixed with ná- (upward)}}
| ná-them = {{#if:{{{2|}}}||-}}{{m|nv|ná-|pos=thematic}}{{cln|nv|terms prefixed with ná- (thematic)}}
| náá = {{#if:{{{2|}}}||-}}{{m|nv|náá-|pos=semeliterative||once again}}{{cln|nv|terms prefixed with náá- (disjunct)}}
| nááná = {{#if:{{{2|}}}||-}}{{m|nv|nááná-|pos=semeliterative||once again}}{{cln|nv|terms prefixed with náá- (disjunct)}}
| ni-disj = {{#if:{{{2|}}}||-}}{{m|nv|ni-|pos=terminative, disjunct}}{{cln|nv|terms prefixed with ni- (disjunct)}}
| níkʼí- = {{#if:{{{2|}}}||-}}{{m|nv|níkʼí-|t=packed down, compressed}}{{cln|nv|terms prefixed with níkʼí-}}
| so = {{#if:{{{2|}}}||-}}{{m|nv|so-|pos=thematic}}{{cln|nv|terms prefixed with so- (disjunct)}}
| shó = {{#if:{{{2|}}}||-}}{{m|nv|shó-|pos=extremely}}{{cln|nv|terms prefixed with shó-}}
| tá= {{#if:{{{2|}}}||-}}{{m|nv|tá-||here and there}} {{cln|nv|terms prefixed with tá- (disjunct)}}
| tá-water = {{#if:{{{2|}}}||-}}{{m|nv|tá-||water}} {{cln|nv|terms prefixed with tá- (water)}}
| tah = {{#if:{{{2|}}}||-}}{{m|nv|tah-||pos=comitative}} {{cln|nv|terms prefixed with tah- (disjunct)}}
| tí-wound = {{#if:{{{2|}}}||-}}{{m|nv|tí-||injury, wound}} {{cln|nv|terms prefixed with tí- (disjunct)}}
| tsí-mental= {{#if:{{{2|}}}||-}}{{m|nv|tsí-||mental}} {{cln|nv|terms prefixed with tsí- (disjunct)}}
| wóʼą = {{#if:{{{2|}}}||-}}{{m|nv|wóʼą-||over an edge}}{{cln|nv|terms prefixed with wóʼą- (disjunct)}}{{cln|nv|terms prefixed with ą- (postpositional)}}
| ya = {{#if:{{{2|}}}||-}}{{m|nv|ya-||up or down, vertically}}{{cln|nv|terms prefixed with ya- (disjunct)}}
| yá = {{#if:{{{2|}}}||-}}{{m|nv|yá-|pos=thematic}}{{cln|nv|terms prefixed with yá- (disjunct)}}
| yá-up = {{#if:{{{2|}}}||-}}{{m|nv|yá-||up into the air}}{{cln|nv|terms prefixed with yá- (disjunct)}}
| yisdá = {{#if:{{{2|}}}||-}}{{m|nv|yisdá-||to safety}}{{cln|nv|terms prefixed with yisdá- (disjunct)}}
<!-- ######################## -->
<!-- POSITION I (postpositional) -->
| -aʼ = {{#if:{{{2|}}}||-}}{{m|nv|aʼ-||lending to}}{{cln|nv|terms prefixed with aʼ- (postpositional)}}
| -ą = {{#if:{{{2|}}}||-}}{{m|nv|ą-||beyond, over}}{{cln|nv|terms prefixed with ą- (postpositional)}}
| ada = {{#if:{{{2|}}}||-}}{{m|nv|ada-||downward}}{{cln|nv|terms prefixed with ada-}}
| ahá = {{#if:{{{2|}}}||-}}{{m|nv|ahá-||apart, in two}}{{cln|nv|terms prefixed with ahá-}}
| -ą́ = {{#if:{{{2|}}}||-}}{{m|nv|ą́-||passing by, alongside}}{{cln|nv|terms prefixed with ą́- (postpositional)}}
| -ba = {{#if:{{{2|}}}||-}}{{m|nv|ba-||use up, exhaust}}{{cln|nv|terms prefixed with ba- (postpositional)}}
| bighá = {{#if:{{{2|}}}||-}}{{m|nv|bighá-|id=through|pos=through it}}{{cln|nv|terms prefixed with bighá- (through)}}
| biní = {{#if:{{{2|}}}||-}}{{m|nv|biní-|pos=into it}}{{cln|nv|terms prefixed with biní-}}
| bitsʼá = {{#if:{{{2|}}}||-}}{{m|nv|bitsʼá-|id=away|pos=away from it}}{{cln|nv|terms prefixed with bitsʼá-}}
| biníká = {{#if:{{{2|}}}||-}}{{m|nv|biníká-|pos=through, penetrating, perforating it}}{{cln|nv|terms prefixed with biníká-}}
| chʼo = {{#if:{{{2|}}}||-}}{{m|nv|chʼo-|pos=meaning obscure}}{{cln|nv|terms prefixed with chʼo-}}
| -é = {{#if:{{{2|}}}||-}}{{m|nv|é-||about}}{{cln|nv|terms prefixed with é- (postpositional)}}
| -ee = {{#if:{{{2|}}}||-}}{{m|nv|ee-||with}}{{cln|nv|terms prefixed with ee- (postpositional)}}
| -ghá = {{#if:{{{2|}}}||-}}{{m|nv|ghá-||through}}{{cln|nv|terms prefixed with ghá- (postpositional)}}
| -í = {{#if:{{{2|}}}||-}}{{m|nv|í-||against, reaching}}{{cln|nv|terms prefixed with í- (postpositional)}}
| í = {{#if:{{{2|}}}||-}}{{m|nv|í-||against, reaching}}{{cln|nv|terms prefixed with í- (postpositional)}}
| kí = {{#if:{{{2|}}}||-}}{{m|nv|kí-||slanting}}{{cln|nv|terms prefixed with kí-}}
| kʼi- = {{#if:{{{2|}}}||-}}{{m|nv|kʼi-||on top of}}{{cln|nv|terms prefixed with kʼi- (postpositional)}}
| kʼi = {{#if:{{{2|}}}||-}}{{m|nv|kʼi-||on top of}}{{cln|nv|terms prefixed with kʼi- (postpositional)}}
| kʼí- = {{#if:{{{2|}}}||-}}{{m|nv|kʼí-||onto}}{{cln|nv|terms prefixed with kʼí- (postpositional)}}
| kʼí-apart = {{#if:{{{2|}}}||-}}{{m|nv|kʼí-||apart, in two}}{{cln|nv|terms prefixed with kʼí- (apart)}}
| naani = {{#if:{{{2|}}}||-}}{{m|nv|naani-|pos=crosswise}}{{cln|nv|terms prefixed with naani-}}
| niki = {{#if:{{{2|}}}||-}}{{m|nv|niki-|pos=to a surface}}{{cln|nv|terms prefixed with niki-}}
| taa = {{#if:{{{2|}}}||-}}{{m|nv|taa-|pos=among}}{{cln|nv|terms prefixed with taa-}}
| tsiʼ = {{#if:{{{2|}}}||-}}{{m|nv|tsiʼ-|t=aimlessly}}{{cln|nv|terms prefixed with tsiʼ-}}
| tsʼá = {{#if:{{{2|}}}||-}}{{m|nv|tsʼá-|id=away|pos=away}}{{cln|nv|terms prefixed with tsʼá-}}
<!-- ######################## -->
<!-- DEFAULT -->
| {{#if:{{{2|}}}||-}}{{m|nv|{{{1}}}-|pos=chủ đề}}{{cln|nv|Từ có tiền tố {{{1}}}-}}{{cln|nv|Từ có tiền tố chưa phân loại}}
}}</includeonly><noinclude>[[Thể loại:Bản mẫu tiếng Navajo|*]]</noinclude>
1t66eeb7aqj0w2wr4zmc7r2vw52rgj0
Bản mẫu:nv-paradigm
10
303070
2569563
2321233
2026-10-11T05:41:51Z
TheHighFighter2
42988
/* */
2569563
wikitext
text/x-wiki
<u>Mẫu hình</u>: {{ucfirst:{{{1}}}}}{{#if:{{{2|}}} | ({{{2}}})|}}{{#if:{{{3|}}} |{{nv-paradigm-attribute|{{{3}}}}}|}}{{#if:{{{4|}}} |{{nv-paradigm-attribute|{{{4}}}}}|}}{{#if:{{{5|}}} |{{nv-paradigm-attribute|{{{5}}}}}|}}[[Thể loại:Động từ thể {{lc:{{{1}}}}} {{#if:{{{2|}}} |({{{2}}})|}} tiếng Navajo]]<noinclude>[[Thể loại:Bản mẫu tiếng Navajo|*]]</noinclude>
1rno7fcxy35bezv5qvg0nazoz9m8fj3
Thể loại:Mục từ tiếng Tavoy
14
305755
2569564
2161853
2026-10-11T05:57:29Z
Hiyuune
50834
/* */
2569564
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
cố công
0
306266
2569549
2164505
2026-10-11T03:40:38Z
Hiyuune
50834
2569549
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|v}}===
{{vi-verb}}
# Bỏ [[công sức]] nhiều hơn [[bình thường]] để làm việc gì cho kì được
#:{{ux|vi|'''Cố công''' làm việc.}}
#:{{ux|vi|'''Cố công''' học tập.}}
==={{ĐM|ref}}===
* {{R:vi:Hoàng Phê 2021|page=257}}
8w6ak3kgg9olvimimyq2t72nnm69046
2569550
2569549
2026-10-11T03:41:04Z
Hiyuune
50834
2569550
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|etym}}===
{{com|vi|cố|công}}.
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|v}}===
{{vi-verb}}
# Bỏ [[công sức]] nhiều hơn [[bình thường]] để làm việc gì cho kì được
#:{{ux|vi|'''Cố công''' làm việc.}}
#:{{ux|vi|'''Cố công''' học tập.}}
==={{ĐM|ref}}===
* {{R:vi:Hoàng Phê 2021|page=257}}
g3kxrzym2y0ail56tgc0o3i39uucnvi
2569551
2569550
2026-10-11T03:41:44Z
Hiyuune
50834
2569551
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|etym}}===
{{com|vi|cố|công}}.
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|v}}===
{{vi-verb}}
# Bỏ [[công sức]] nhiều hơn [[bình thường]] để làm việc gì cho kì được
#:{{ux|vi|'''Cố công''' làm việc.}}
#:{{ux|vi|'''Cố công''' học tập.}}
==={{ĐM|ref}}===
* {{R:vi:Hoàng Phê 2021|page=257}}
nxbhfwu5j24j4zfkhbbm6gu3d2ynkj0
astrolog
0
306387
2569500
2165158
2026-10-10T15:52:34Z
Hiyuune
50834
2569500
wikitext
text/x-wiki
=={{langname|tr}}==
==={{section|etym}}===
{{ety|tr|:bor|fr:astrologue|text=+|tree=1}}
==={{section|pron}}===
* {{tr-IPA|astrol*og}}
* {{hyph|tr|as|tro|log}}
==={{section|n}}===
{{tr-noun|u|lar}}
# [[nhà|Nhà]] [[chiêm tinh học]].
#: {{syn|tr|müneccim|yıldız falcısı}}
===={{section|decl}}====
{{tr-infl-noun-c|u|pred=1|poss=1}}
===={{section|rel}}====
{{col|tr|astroloji}}
==={{section|further}}===
* {{R:tr:TDK}}
* {{R:lugatim}}
* {{R:tr:Nishanyan}}
=={{langname|uz}}==
==={{section|etym}}===
Có thể từ {{bor|uz|ru|астролог}}.
==={{section|n}}===
{{uz-noun}}
# [[nhà|Nhà]] [[chiêm tinh học]].
6045z25ybx96lrdnjcz61n5j9jkb57v
愛知県
0
308951
2569521
2207331
2026-10-11T01:57:13Z
Hiyuune
50834
2569521
wikitext
text/x-wiki
=={{langname|ja}}==
<div style="float:right;">
{{wp|ja:}}
{{wp|Aichi}}
</div>
{{ja-kanjitab|yomi=o2,kanon|あい|ち|けん}}
==={{ĐM|etym}}===
Từ {{ja-com|愛知|^あいち|t1=[[Aichi]]|県|-けん|t2=[[tỉnh]]}}.
==={{ĐM|pron}}===
{{ja-pron|あいちけん|acc=3|acc_ref=NHK}}
==={{ĐM|pr-noun}}===
{{ja-pos|proper|^あいち-けん}}
# {{place|ja|tỉnh|t=Aichi|c/Nhật Bản}}
===={{ĐM|see}}====
{{list:tỉnh của Nhật Bản/ja}}
* {{ja-r|尾%張|^お%わり}}
* {{ja-r|三%河|^み%かわ}}
==={{ĐM|ref}}===
{{reflist}}
{{C|ja|Tỉnh của Nhật Bản}}
tpzxcf8hxu2xuynaq0r89hon49nbl73
cố chết
0
330580
2569548
2214280
2026-10-11T03:39:14Z
Hiyuune
50834
/* Tiếng Việt */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2569548
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|verb}}===
{{vi-verb}}
# Cố sức đến mức [[liều mạng]], không kể gì [[nguy hiểm]].
#:{{ux|vi|'''Cố chết''' để giữ thành}}
#:{{synonym|vi|cố sống cố chết}}
==={{ĐM|ref}}===
* {{R:Tratu}}
* {{R:vi:Hoàng Phê 2021|page=257}}
cf3j8qagg8g32covmxydi5robqwf98e
Thể loại:Tiếng Tavoy
14
331473
2569565
2215592
2026-10-11T05:58:12Z
Hiyuune
50834
/* */
2569565
wikitext
text/x-wiki
{{auto cat|Myanmar}}
egj58r1i16o1bn5odyr506mo2jnv25w
Mô đun:etymon
828
331836
2569554
2561508
2026-10-11T03:49:37Z
TheHighFighter2
42988
2569554
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.
Tác giả:
- Triển khai ban đầu: [[:en:User:Ioaxxere]]
- Tái cấu trúc lại mô đun (tháng 9 năm 2025): [[:en:User:Fenakhay]] ([[:en:Special:Diff/86717746]])
Modules:
- [[Module:etymon]]: main module handling parsing, validation, tree building, and page scraping
- [[Module:etymon/data]]: keyword definitions, configuration, and status constants
- [[Module:etymon/tree]]: etymology tree rendering
- [[Module:etymon/text]]: etymology text generation
- [[Module:etymon/categories]]: category generation logic
- [[Module:etymon/tracking]]: tracking
]=]
local export = {}
local __state = {
cached_etymon_args = {},
cached_etymon_pages = {},
cached_descendants_checks = {},
senseid_parent_etymon = {},
available_etymon_ids = {},
single_etymons = {},
entry_title = nil,
entry_lang_code = nil,
current_page_has_inline_etymology = false,
current_page_has_redundant_etymology = false,
used_idless_etymon = false,
toplevel_has_inline_etymology = false,
toplevel_redundant_etymology = false,
toplevel_idless_etymon = false,
has_mismatched_id = false,
linked_page_multiple_etymons_idless = false,
linked_page_partial_etymology_sections = false,
partial_etymology_targets = {},
skip_partial_etymology_category = false,
max_depth_reached = 0,
total_nodes = 0,
language_count = {},
toplevel_keyword_stats = {},
id_stats = nil,
warnings = {},
}
local M = require("Module:module loader").init({
require = {
data = "Module:etymon/data",
tree = "Module:etymon/tree",
text = "Module:etymon/text",
categories = "Module:etymon/categories",
tracking = "Module:etymon/tracking",
descendants = "Module:etymon/descendants",
anchors = "Module:anchors",
etydate = "Module:etydate",
etymology = "Module:etymology",
families = "Module:families",
languages = "Module:languages",
languages_errorgetby = "Module:languages/errorGetBy",
links = "Module:links",
pages = "Module:pages",
parameters = "Module:parameters",
string_utilities = "Module:string utilities",
template_parser = "Module:template parser",
utilities = "Module:utilities",
debug = "Module:debug",
en_utilities = "Module:en-utilities",
parse_utilities = "Module:parse utilities",
references = "Module:references",
template_styles = "Module:TemplateStyles",
script_utilities = "Module:script utilities",
JSON = "Module:JSON",
yesno = "Module:yesno",
},
loadData = {
headword_data = "Module:headword/data",
parameters_data = "Module:parameters/data",
text_allowed = "Module:etymon/data/text_allowed",
},
})
local ucfirst = require("Module:string utilities").ucfirst
local Util = {}
function Util.format_error(message, preview_only)
if preview_only and not M.pages.is_preview() then
return nil
end
return '<span class="error">' .. message .. '</span>'
end
function Util.add_warning(message, preview_only)
local formatted = Util.format_error(message, preview_only)
if formatted then
table.insert(__state.warnings, formatted)
end
end
function Util.is_text_param_allowed_for_lang(lang)
if not lang or type(lang) ~= "table" then
return false
end
local types = lang.getTypes and lang:getTypes()
if types and types.family then
local code = lang.getCode and lang:getCode()
return code and M.text_allowed.families[code] == true
end
local full_code = lang.getFullCode and lang:getFullCode()
if full_code and M.text_allowed.langs[full_code] then
return true
end
if lang.inFamily then
for family_code in pairs(M.text_allowed.families) do
if lang:inFamily(family_code) then
return true
end
end
end
return false
end
function Util.get_lang(code, no_error)
if no_error then
return M.languages.getByCode(code, nil, true)
end
return M.languages.getByCode(code, nil, true) or M.languages_errorgetby.code(code, true, true)
end
-- Match a term language against a text=:lang stop target (supports etymology-only codes).
function Util.lang_matches_stop_code(term_lang, stop_code)
if not term_lang or not stop_code or stop_code == "" then
return false
end
local stop_lang = Util.get_lang(stop_code, true)
if not stop_lang then
return false
end
if term_lang:getCode() == stop_lang:getCode() then
return true
end
if stop_lang:getFullCode() == stop_lang:getCode() then
return term_lang:getFullCode() == stop_lang:getCode()
end
return false
end
function Util.get_family(code)
return M.families.getByCode(code)
end
function Util.get_lang_exception(lang)
-- Families have no language-specific exceptions
if lang.getTypes and lang:getTypes().family then
return nil
end
local code = lang:getCode()
local lang_exceptions = M.data.config.lang_exceptions
if lang_exceptions[code] then
return lang_exceptions[code]
end
for norm_code, exc in pairs(lang_exceptions) do
if exc.normalize_to and code == exc.normalize_to then
return exc
end
if exc.normalize_from_families then
local should_normalize = false
for _, family in ipairs(exc.normalize_from_families) do
if lang:inFamily(family) then
should_normalize = true
break
end
end
if should_normalize and exc.normalize_exclude_families then
for _, family in ipairs(exc.normalize_exclude_families) do
if lang:inFamily(family) then
should_normalize = false
break
end
end
end
if should_normalize then
local ret = {}
for k, v in pairs(exc) do
ret[k] = v
end
ret.suppress_tr = nil
return ret
end
end
end
return nil
end
function Util.get_norm_lang(lang)
local exc = Util.get_lang_exception(lang)
if exc and exc.normalize_to then
return M.languages.getByCode(exc.normalize_to)
end
return lang
end
-- Add default values for boolean modifiers (e.g., <unc> becomes <unc:1>)
-- This is needed because Module:parse utilities expects boolean modifiers to have explicit values
function Util.add_boolean_defaults(str, param_mods)
local result = str
for name, spec in pairs(param_mods) do
if spec.type == "boolean" then
-- Replace <name> with <name:1> (but not <name:...> which already has a value)
result = result:gsub("<" .. name .. ">", "<" .. name .. ":1>")
end
end
return result
end
local REQUEST_TEMPLATE_PARAM_MODS = {
rfe = {
nocat = { type = "boolean" },
sort = {},
y = {},
m = {},
fragment = {},
section = {},
box = { type = "boolean" },
noes = { type = "boolean" },
},
etystub = {
nocat = { type = "boolean" },
sort = {},
nocap = { type = "boolean" },
nodot = { type = "boolean" },
},
}
function Util.expand_request_template(frame, template_name, param_value, lang_code)
local param_mods = REQUEST_TEMPLATE_PARAM_MODS[template_name]
local with_defaults = Util.add_boolean_defaults(param_value, param_mods)
local parsed = M.parse_utilities.parse_inline_modifiers(with_defaults, {
param_mods = param_mods,
generate_obj = function(text)
if M.yesno(text, false) then
return { is_boolean = true }
end
return { text = text }
end,
})
local template_args = { [1] = lang_code }
for name in pairs(param_mods) do
template_args[name] = parsed[name]
end
if not parsed.is_boolean then
template_args[2] = parsed.text
end
return " " .. frame:expandTemplate({
title = template_name,
args = template_args,
})
end
-- Centralized term formatting: handles suppress_term (-), unknown_term (empty/+), and regular terms
function Util.format_term(term, is_toplevel, opts)
opts = opts or {}
-- suppress_term (-) returns nil
if term.suppress_term then
return nil
end
local lang = term.lang
local exc = Util.get_lang_exception(lang)
if is_toplevel then
local display_text = term.alt or term.title or ""
local sc = term.sc or lang:findBestScript(display_text)
local bold_text = tostring(mw.html.create("strong")
:addClass("selflink")
:wikitext(display_text))
return M.script_utilities.tag_text(bold_text, lang, sc, "term")
end
local link_params = { lang = lang }
link_params.term = not term.unknown_term and term.title or nil
link_params.alt = term.alt
link_params.id = (not term.unknown_term and term.id and term.id ~= "") and term.id or nil
if not (exc and exc.suppress_tr) then
link_params.tr = term.tr
link_params.ts = term.ts
else
link_params.suppress_tr = true
end
link_params.lit = (opts.lit ~= "suppress") and term.lit or nil
if opts.gloss ~= "suppress" then
link_params.gloss = term.t
end
if term.g and term.g ~= "" then
local genders = M.string_utilities.split(term.g, ",")
for i = 1, #genders do
genders[i] = M.string_utilities.trim(genders[i])
end
link_params.genders = genders
end
if opts.pos ~= "suppress" then
link_params.pos = term.pos
link_params.ng = term.ng
end
if exc and exc.suppress_tr then
link_params.lit = nil
end
local show_qualifiers
if opts.tree_ql ~= "suppress" then
if term.q then
link_params.q = term.q
end
if term.qq then
link_params.qq = term.qq
end
if term.l then
link_params.l = term.l
end
if term.ll then
link_params.ll = term.ll
end
show_qualifiers = term.q or term.qq or term.l or term.ll
end
return M.links.full_link(link_params, "term", nil, show_qualifiers and true or nil)
end
local __is_content_page_cached
function Util.is_content_page()
if __is_content_page_cached == nil then
__is_content_page_cached = M.pages.is_content_page(mw.title.getCurrentTitle())
end
return __is_content_page_cached
end
local __page_data_cached
function Util.get_page_data()
if not __page_data_cached then
__page_data_cached = M.headword_data.page
end
return __page_data_cached
end
-- Extract base keyword from param (without modifiers)
local function get_keyword_base(param)
if type(param) ~= "string" then return nil end
local base = param:match("^:?([^<]+)") or param:gsub("^:", "")
return base
end
local function is_keyword(param, allow_colon_less)
if type(param) ~= "string" then return false end
local keywords = M.data.keywords
if param:sub(1, 1) == ":" then
local base = get_keyword_base(param)
return keywords[base] ~= nil
end
if allow_colon_less then
local base = get_keyword_base(param)
return keywords[base] ~= nil
end
return false
end
local function get_keyword(param, allow_colon_less)
if type(param) ~= "string" then return nil end
local keywords = M.data.keywords
if param:sub(1, 1) == ":" then
return get_keyword_base(param)
end
if allow_colon_less then
local base = get_keyword_base(param)
if keywords[base] then
return base
end
end
return nil
end
local function normalize_keyword(keyword)
if keyword:sub(1, 1) == ":" then
return keyword
end
return ":" .. keyword
end
-- Resolve keyword (possibly an alias) to its canonical form. Used only at input boundaries
local function get_canonical_keyword(keyword)
if not keyword then return keyword end
return M.data.keyword_canonical[keyword] or keyword
end
local function is_affix_group_keyword(keyword)
local config = keyword and M.data.keywords[keyword]
return config and config.affix_categories or false
end
local function reject_removed_surf_keyword(param)
local base = get_keyword_base(param)
if base == "surf" then
error("The `:surf` keyword has been removed. Use `<surf>` on a formation keyword instead (e.g. `:af<surf>`, `:bor<surf>`).")
end
end
local function copy_keyword_info(source)
local copy = {}
for k, v in pairs(source) do
copy[k] = v
end
return copy
end
local function lowercase_glossary_display(text)
return text:gsub("(%[%[Appendix:Glossary#[^|]+|)([^%]])([^%]]*)%]%]", function(prefix, first, rest)
return prefix .. mw.ustring.lower(first) .. rest .. "]]"
end)
end
local function surf_should_keep_formation_phrase(base)
if not base.phrase then
return false
end
if base.glossary then
return true
end
return not (base.phrase == "từ" and (base.text == "Từ" or base.text == "từ"))
end
-- Runtime overrides when <surf> is present on a keyword.
local function get_effective_keyword_info(keyword, modifiers)
local base = M.data.keywords[keyword]
if not base or not modifiers or not modifiers.surf then
return base
end
local effective = copy_keyword_info(base)
local surf_text = "Theo cách [[Phụ lục:Từ điển thuật ngữ#phân tích mặt chữ|phân tích mặt chữ]]:"
local surf_phrase = "theo cách phân tích mặt chữ:"
effective.new_sentence = true
effective.invisible = "tree"
if surf_should_keep_formation_phrase(base) then
effective.phrase = surf_phrase .. " " .. base.phrase
if base.text then
effective.text = surf_text .. " " .. lowercase_glossary_display(base.text)
else
effective.text = surf_text .. " " .. base.phrase
end
else
effective.text = surf_text
effective.phrase = surf_phrase
end
return effective
end
-- Build text/phrase for nominalization with <g:code> (uses data module for codes only).
local function get_nominalization_label_for_g(code)
if not code or code == "" then return nil end
local codes = M.data.nominalization_g_codes
local adj = codes[code]
if not adj and #code == 2 then
local gender_adj = codes[code:sub(1, 1)]
local number_adj = codes[code:sub(2, 2)]
if gender_adj and number_adj then
adj = gender_adj .. " " .. number_adj
end
end
if not adj then return nil end
local text = adj:gsub("^%l", function(c) return string.upper(c) end) .. " [[Phụ lục:Từ điển thuật ngữ#nominalization|nominalization]] of"
local phrase = M.en_utilities.add_indefinite_article(adj .. " [[Phụ lục:Từ điển thuật ngữ#nominalization|nominalization]] of", false)
return { text = text, phrase = phrase }
end
local EtymonParser = {}
-- Keyword modifier definitions
EtymonParser.keyword_param_mods = {
unc = { type = "boolean" },
ref = {},
text = { restrict = { keywords = { "from", "derived" } } },
lit = { restrict = { affix_group = true } },
conj = {}, -- conjunction for alternatives: "and", "or", "and/or", etc.
g = { restrict = { keywords = { "nominalization" } } },
surf = { type = "boolean" },
senseid = { restrict = { keywords = { "semantic loan" } } },
}
-- Term modifier definitions
EtymonParser.etymon_param_mods = {
id = {},
t = {},
tr = {},
ts = {},
q = {},
qq = {},
l = {},
ll = {},
pos = {},
ng = {},
alt = {},
g = {},
ety = {},
lit = {},
unc = { type = "boolean" },
ref = {},
aftype = { restrict = { affix_group = true } },
postype = {},
bor = { type = "boolean", restrict = { affix_group = true } },
slbor = { type = "boolean", restrict = { affix_group = true } },
lbor = { type = "boolean", restrict = { affix_group = true } },
}
local function get_clean_param_mods(param_mods)
local clean = {}
for mod_name, mod_def in pairs(param_mods) do
clean[mod_name] = {}
for key, value in pairs(mod_def) do
if key ~= "restrict" then
clean[mod_name][key] = value
end
end
end
return clean
end
function EtymonParser.check_modifier_restrictions(modifiers, current_keyword, param_mods)
for mod_name, mod_value in pairs(modifiers) do
-- Only check restrictions if the modifier has a non-false/nil value
if mod_value then
local mod_def = param_mods[mod_name]
if mod_def and mod_def.restrict then
if mod_def.restrict.affix_group then
if not is_affix_group_keyword(current_keyword) then
local mod_display = mod_value == true and "<" .. mod_name .. ">" or "<" .. mod_name .. ":" .. tostring(mod_value) .. ">"
error("The modifier `" .. mod_display .. "` is only allowed for affix-group keywords (e.g. `:af`, `:blend`, `:univ`).")
end
elseif mod_def.restrict.keywords then
local allowed_keywords = mod_def.restrict.keywords
local is_allowed = false
for _, allowed_keyword in ipairs(allowed_keywords) do
if current_keyword == allowed_keyword then
is_allowed = true
break
end
end
if not is_allowed then
local keyword_list = {}
for _, kw in ipairs(allowed_keywords) do
table.insert(keyword_list, ":" .. kw)
end
local keyword_str = table.concat(keyword_list, #keyword_list == 2 and " or " or ", ")
if #keyword_list > 2 then
-- Replace last comma with "or"
keyword_str = keyword_str:gsub(", ([^,]+)$", " or %1")
end
local mod_display = mod_value == true and "<" .. mod_name .. ">" or "<" .. mod_name .. ":" .. tostring(mod_value) .. ">"
error("The modifier `" .. mod_display .. "` is only allowed for the keyword" .. (#keyword_list > 1 and "s " or " ") .. keyword_str .. ".")
end
end
end
end
end
end
local TERM_RULE_DISALLOW = {
suppress = { field = "suppress_term", label = "suppressed" },
unknown = { field = "unknown_term", label = "unknown" },
family = { field = "is_family", label = "family" },
}
function EtymonParser.check_etymon_limits(count, limits, label, opts)
if not limits then
return
end
opts = opts or {}
local min_etymons = limits.min_etymons
if min_etymons == nil and not opts.skip_default_min then
min_etymons = 1
end
if min_etymons and count < min_etymons then
if min_etymons > 1 then
error("Detected " .. label .. " group with fewer than " .. min_etymons .. " etymons.")
else
error("Detected " .. label .. " with no etymons.")
end
end
if limits.max_etymons and count > limits.max_etymons then
local unit = (limits.max_etymons == 1) and "etymon" or "etymons"
error("Detected " .. label .. " with more than " .. limits.max_etymons .. " " .. unit .. ".")
end
end
function EtymonParser.check_term_rules(etymon_data, entry_lang, rules, label)
label = label or "term"
if rules and rules.disallow then
local disallowed = {}
for _, typ in ipairs(rules.disallow) do
local spec = TERM_RULE_DISALLOW[typ]
if spec and etymon_data[spec.field] then
table.insert(disallowed, spec.label)
end
end
if #disallowed > 0 then
error(label .. " does not support " ..
mw.text.listToText(disallowed, "hoặc") .. " etymons.")
end
end
if etymon_data.is_family then
if rules and rules.family == "disallowed" then
error(label .. " does not support family codes" .. (rules.family_suffix or "."))
elseif not etymon_data.suppress_term then
error("Family codes require suppressed term (use family:-).")
end
end
if rules then
if rules.require_term and (not etymon_data.term or etymon_data.term == "") then
error(label .. " requires a term for each listed form.")
end
if rules.entry_lang then
if Util.get_norm_lang(etymon_data.lang):getFullCode() ~=
Util.get_norm_lang(entry_lang):getFullCode() then
error(label .. " terms must be in the entry language (" ..
entry_lang:getFullCode() .. "), got '" .. etymon_data.lang:getFullCode() .. "'.")
end
end
if rules.ancestor_check then
M.etymology.check_ancestor(entry_lang, etymon_data.lang)
end
elseif etymon_data.is_family and not etymon_data.suppress_term then
error("Family codes require suppressed term (use family:-).")
end
end
function EtymonParser.check_keyword_term(etymon_data, entry_lang, keyword)
local config = M.data.keywords[keyword]
EtymonParser.check_term_rules(etymon_data, entry_lang, config and config.term_rules, "`:" .. keyword .. "`")
end
function EtymonParser.check_supplement_term(etymon_data, entry_lang, supplement_type)
local config = M.data.supplements[supplement_type]
EtymonParser.check_term_rules(etymon_data, entry_lang, config and config.term_rules, "|" .. supplement_type .. "=")
end
-- Parse keyword with modifiers (e.g., ":bor<unc>" or ":bor<ref:{{R:example}}>")
function EtymonParser.parse_keyword_modifiers(param)
if type(param) ~= "string" then return nil, {} end
local base_keyword = get_keyword_base(param)
if not base_keyword then return nil, {} end
local canonical_keyword = get_canonical_keyword(base_keyword)
-- Check if there are any modifiers
if not param:find("<", 1, true) then
return canonical_keyword, {}
end
-- Parse modifiers using the same mechanism as etymon parsing
local rest_with_defaults = Util.add_boolean_defaults(param, EtymonParser.keyword_param_mods)
local function generate_obj(ignored)
return {}
end
local parsed = M.parse_utilities.parse_inline_modifiers(rest_with_defaults:gsub("^:?[^<]+", ""),
{ param_mods = get_clean_param_mods(EtymonParser.keyword_param_mods), generate_obj = generate_obj })
local modifiers = {
unc = parsed.unc or false,
ref = parsed.ref,
text = parsed.text,
lit = parsed.lit,
conj = parsed.conj,
g = parsed.g,
surf = parsed.surf or false,
senseid = parsed.senseid,
}
-- Validate modifiers against restrictions
EtymonParser.check_modifier_restrictions(modifiers, canonical_keyword, EtymonParser.keyword_param_mods)
return canonical_keyword, modifiers
end
local function normalize_keyword_param(keyword_with_mods)
local trimmed = M.string_utilities.trim(keyword_with_mods)
reject_removed_surf_keyword(trimmed:match("^:") and trimmed or (":" .. trimmed))
local base = get_keyword_base(trimmed)
if not base or not M.data.keywords[base] then
error("Invalid keyword '" .. trimmed .. "' in inline etymology")
end
local canonical_base = get_canonical_keyword(base)
local without_colon = trimmed:gsub("^:", "")
local mods_part = without_colon:sub(#base + 1)
local kw_param = normalize_keyword(canonical_base .. mods_part)
EtymonParser.parse_keyword_modifiers(kw_param)
return kw_param
end
local function get_keyword_mod_names()
local names = {}
for mod_name in pairs(EtymonParser.keyword_param_mods) do
names[mod_name] = true
end
return names
end
local function parse_inline_ety_run(ety_string)
local body = ety_string or ""
if body == "" then
error("Empty inline etymology")
end
local keyword_mod_names = get_keyword_mod_names()
local pos = 1
local len = #body
local function parse_err(msg)
error(msg .. " in inline etymology: '" .. body .. "'")
end
local function peek_double()
return body:sub(pos, pos + 1) == "<<"
end
local function mod_name_from_unwrapped(unwrapped)
return unwrapped:match("^<([^:>]+)")
end
local function is_keyword_mod(unwrapped)
local name = mod_name_from_unwrapped(unwrapped)
return name and keyword_mod_names[name] or false
end
local function read_double_bracket()
if not peek_double() then
return nil
end
local start = pos
pos = pos + 2
while pos <= len - 1 do
if body:sub(pos, pos + 1) == ">>" then
local token = body:sub(start, pos + 1)
pos = pos + 2
return token, token:sub(2, -2)
end
pos = pos + 1
end
parse_err("Unmatched <<")
end
local function read_angle_cell()
if body:sub(pos, pos) ~= "<" or peek_double() then
return nil
end
local open = pos
pos = pos + 1
local depth = 1
local i = pos
while i <= len do
local ch = body:sub(i, i)
if ch == "<" then
depth = depth + 1
elseif ch == ">" then
depth = depth - 1
if depth == 0 then
local inner = body:sub(open + 1, i - 1)
pos = i + 1
return inner
end
end
i = i + 1
end
parse_err("Unmatched <")
end
local function read_bare_run()
local start = pos
while pos <= len and body:sub(pos, pos) ~= "<" do
pos = pos + 1
end
return body:sub(start, pos - 1)
end
local function absorb_double_keyword_mods(keyword_str)
while peek_double() do
local saved = pos
local _, unwrapped = read_double_bracket()
if is_keyword_mod(unwrapped) then
keyword_str = keyword_str .. unwrapped
else
pos = saved
break
end
end
return keyword_str
end
local kw_start = pos
while pos <= len and body:sub(pos, pos) ~= "<" do
pos = pos + 1
end
local keyword = body:sub(kw_start, pos - 1)
if keyword:match("^%s*$") then
parse_err("Missing keyword")
end
keyword = absorb_double_keyword_mods(keyword)
local cells = {}
while pos <= len do
if peek_double() then
local _, unwrapped = read_double_bracket()
if is_keyword_mod(unwrapped) then
parse_err("Unexpected keyword modifier " .. unwrapped .. " outside of a keyword")
end
table.insert(cells, "+" .. unwrapped)
elseif body:sub(pos, pos) == "<" then
local inner = read_angle_cell()
if inner ~= "" then
table.insert(cells, inner)
end
else
local bare = read_bare_run()
if bare ~= "" then
if bare:sub(1, 1) ~= ":" then
parse_err("Unexpected bare text '" .. bare .. "' (use :keyword for nested keywords in inline etymology)")
end
if not is_keyword(bare, true) then
parse_err("Invalid keyword '" .. bare .. "' in inline etymology")
end
table.insert(cells, absorb_double_keyword_mods(bare))
end
end
end
return {
keyword = keyword,
cells = cells,
}
end
function EtymonParser.inline_ety_to_pipe(ety_string)
local run = parse_inline_ety_run(ety_string)
if not run.keyword or run.keyword:match("^%s*$") then
return "|"
end
local pipe_parts = { normalize_keyword_param(M.string_utilities.trim(run.keyword)) }
for _, segment in ipairs(run.cells) do
if is_keyword(segment, true) then
table.insert(pipe_parts, normalize_keyword_param(segment))
else
table.insert(pipe_parts, segment)
end
end
return "|" .. table.concat(pipe_parts, "|") .. "|"
end
function EtymonParser.pipe_to_inline_ety(pipe_string)
local cells = {}
for cell in pipe_string:gmatch("([^|]+)") do
if cell ~= "" then
table.insert(cells, cell)
end
end
if #cells == 0 then
return ""
end
local inline_parts = {}
for index, cell in ipairs(cells) do
local base = get_keyword_base(cell)
if base and M.data.keywords[base] then
local without_colon = cell:gsub("^:", "")
local kw_base, mods = without_colon:match("^([^<]+)(.*)$")
local inline_kw = (kw_base or without_colon) .. (mods or ""):gsub("<([^>]+)>", "<<%1>>")
if index > 1 then
inline_kw = ":" .. inline_kw
end
table.insert(inline_parts, inline_kw)
elseif cell:sub(1, 1) == "+" then
local mod = cell:sub(2)
if mod:match("^<.->$") then
mod = mod:sub(2, -2)
end
table.insert(inline_parts, "<<" .. mod .. ">>")
else
table.insert(inline_parts, "<" .. cell .. ">")
end
end
return table.concat(inline_parts, "")
end
function EtymonParser.parse_inline_ety(ety_string, context_lang)
local run = parse_inline_ety_run(ety_string)
local keyword = M.string_utilities.trim(run.keyword)
reject_removed_surf_keyword(":" .. keyword)
if not is_keyword(keyword, true) then
error("Invalid keyword '" .. keyword .. "' in inline etymology <ety:" .. keyword .. "...>")
end
local args = { context_lang:getCode(), normalize_keyword_param(keyword) }
for _, segment in ipairs(run.cells) do
if is_keyword(segment, true) then
table.insert(args, normalize_keyword_param(segment))
else
table.insert(args, segment)
end
end
return args
end
function EtymonParser.parse_etymon(param, context_lang)
if is_keyword(param) then
return nil
end
if type(param) ~= "string" then
return nil
end
local lang, rest
local is_family = false
local before_bracket = param:match("^([^<]*)") or param
local lang_code, rest_match = before_bracket:match("^([a-zA-Z][a-zA-Z0-9._-]*):(.*)$")
if lang_code then
local potential_lang = Util.get_lang(lang_code, true)
if potential_lang then
lang = potential_lang
rest = param:sub(#lang_code + 2)
else
local potential_family = Util.get_family(lang_code)
if potential_family then
lang = potential_family
rest = param:sub(#lang_code + 2)
is_family = true
else
lang = context_lang
rest = param
end
end
else
lang = context_lang
rest = param
end
M.tracking.track_term(rest)
if rest == "" or rest == "+" then
return {
lang = lang,
term = nil,
unknown_term = true,
is_family = is_family,
}
end
if rest == "-" then
return {
lang = lang,
term = nil,
suppress_term = true,
is_family = is_family,
}
end
if not rest:find("<", 1, true) then
return {
lang = lang,
term = M.string_utilities.trim(rest),
is_family = is_family,
}
end
local term_text = rest:match("^([^<]*)") or ""
local is_unknown = (term_text == "" or term_text == "+")
local is_suppress = (term_text == "-")
local function generate_obj(ignored_term)
return { term = (is_unknown or is_suppress) and nil or M.string_utilities.trim(term_text) }
end
local rest_with_defaults = Util.add_boolean_defaults(rest, EtymonParser.etymon_param_mods)
local parsed_obj = M.parse_utilities.parse_inline_modifiers(rest_with_defaults,
{ param_mods = get_clean_param_mods(EtymonParser.etymon_param_mods), generate_obj = generate_obj })
if parsed_obj.id and parsed_obj.id:match("^!") then
parsed_obj.id = parsed_obj.id:sub(2)
parsed_obj.override = true
end
parsed_obj.lang = lang
parsed_obj.is_family = is_family
if is_unknown then
parsed_obj.unknown_term = true
elseif is_suppress then
parsed_obj.suppress_term = true
end
return parsed_obj
end
function EtymonParser.validate(lang, args, id, title, pos, starts_with_lang_code)
-- id is now optional, so only validate if provided
if id then
if mw.ustring.len(id) < 2 then
error("The `id` parameter must have at least two characters.")
end
if id == title or id == Util.get_page_data().pagename then
error("The `id` parameter must not be the same as the page title.")
end
end
local valid_pos = { prefix = true, suffix = true, interfix = true, infix = true, root = true, word = true }
if pos and not valid_pos[pos] then
error("Unknown value provided for `pos`. Valid values: " .. table.concat(require("Module:table").keysToList(valid_pos), ", ") .. ".")
end
local current_keyword = "from"
local current_keyword_explicit = false
local keyword_etymons = {}
local keywords = M.data.keywords
local function checkKeyword()
local config = keywords[current_keyword]
if current_keyword == "from" and not current_keyword_explicit and #keyword_etymons == 0 then
keyword_etymons = {}
return
end
EtymonParser.check_etymon_limits(#keyword_etymons, config, "`:" .. current_keyword .. "`")
keyword_etymons = {}
end
local start_index = starts_with_lang_code and 2 or 1
for i = start_index, #args do
local param = args[i]
if type(param) ~= "string" then
elseif param:sub(1, 1) == ":" and not is_keyword(param) then
reject_removed_surf_keyword(param)
error("Invalid keyword '" .. param .. "'. Did you mean a valid keyword like ':bor', ':inh', etc.?")
elseif is_keyword(param) then
checkKeyword()
current_keyword = get_canonical_keyword(get_keyword(param))
current_keyword_explicit = true
else
local etymon_data = EtymonParser.parse_etymon(param, lang)
if etymon_data then
table.insert(keyword_etymons, param)
EtymonParser.check_keyword_term(etymon_data, lang, current_keyword)
-- Check modifier restrictions
EtymonParser.check_modifier_restrictions(etymon_data, current_keyword, EtymonParser.etymon_param_mods)
-- postype must be "root" or "word"
local VALID_POSTYPES = { root = true, word = true }
if etymon_data.postype and not VALID_POSTYPES[etymon_data.postype] then
error("Invalid <postype:" .. etymon_data.postype .. ">; must be \"root\" or \"word\".")
end
if etymon_data.ety then
local inline_args = EtymonParser.parse_inline_ety(etymon_data.ety, etymon_data.lang)
EtymonParser.validate(etymon_data.lang, inline_args, nil, nil, nil, true)
end
else
table.insert(keyword_etymons, param)
end
end
end
checkKeyword()
end
local DataRetriever = {}
local function format_etymon_id_hint(id_data, idx)
local id = type(id_data) == "table" and id_data.id or id_data
local pos = type(id_data) == "table" and id_data.pos
if id and id ~= "" and id ~= "*" then
return '"' .. id .. '"'
end
if pos and pos ~= "" then
return "unnamed (|pos=" .. pos .. "|)"
end
return "etymon #" .. idx .. " (no |id= on page)"
end
local function etymon_target_page_link(page, norm_lang)
return M.links.full_link({
term = page,
lang = norm_lang,
no_generate_forms = true,
}, "term")
end
-- Summarize {{etymon}} id slots on a linked page for preview warnings.
local function summarize_available_etymon_ids(ids)
local id_list = {}
local all_idless = true
local target_has_idless = false
local any_pos = false
for i, id_data in ipairs(ids) do
local id = type(id_data) == "table" and id_data.id or id_data
local pos = type(id_data) == "table" and id_data.pos
if id and id ~= "" and id ~= "*" then
all_idless = false
else
target_has_idless = true
end
if pos and pos ~= "" then
any_pos = true
end
table.insert(id_list, format_etymon_id_hint(id_data, i))
end
return {
id_list = id_list,
all_idless = all_idless,
target_has_idless = target_has_idless,
any_pos = any_pos,
count = #ids,
options_text = mw.text.listToText(id_list),
}
end
local function ambiguous_etymon_suggestion(page_link, summary)
if summary.all_idless then
if summary.any_pos then
return " None set `|id=` yet; add a unique `|id=` to each on " .. page_link
.. ", then `<id:identifier>` after the term here. Section order / hints: "
.. summary.options_text .. "."
end
return " None set `|id=` yet; add a unique `|id=` to each {{etymon}} in that section from top to bottom, then `<id:identifier>` after the term here (same value as `|id=`)."
end
return " Specify which one with `<id:identifier>` after the term. Options: " .. summary.options_text .. "."
end
local function warn_ambiguous_etymon_link(page, norm_lang, ids, is_toplevel)
local page_link = etymon_target_page_link(page, norm_lang)
local summary = summarize_available_etymon_ids(ids)
if is_toplevel and summary.target_has_idless then
__state.linked_page_multiple_etymons_idless = true
end
local lang_name = norm_lang:getCanonicalName()
local lead = "Etymology link to " .. page_link .. " is ambiguous (" .. summary.count
.. " {{etymon}} templates for " .. lang_name .. ")."
Util.add_warning(lead .. ambiguous_etymon_suggestion(page_link, summary), true)
end
local function is_mismatched_explicit_id(base_key, cached_args, parent_etymon)
return cached_args == M.data.STATUS.MISSING and not parent_etymon
and #(__state.available_etymon_ids[base_key] or {}) > 0
end
local function maybe_flag_partial_etymology_reference(base_key, etymon_data, cached_args, is_toplevel)
if not is_toplevel or __state.skip_partial_etymology_category then
return
end
if not __state.partial_etymology_targets[base_key] then
return
end
if etymon_data.id and type(cached_args) == "table" then
return
end
__state.linked_page_partial_etymology_sections = true
end
local function is_nonlemma_etymon_template(template_args)
return template_args and M.yesno(template_args.nl, false)
end
local function warn_mismatched_explicit_id(page, norm_lang, base_key, etymon_id)
local page_link = etymon_target_page_link(page, norm_lang)
local summary = summarize_available_etymon_ids(__state.available_etymon_ids[base_key] or {})
local lang_name = norm_lang:getCanonicalName()
local lead = "Etymology link to " .. page_link .. " uses `<id:" .. etymon_id
.. ">`, but no {{etymon}} on that page has `|id=" .. etymon_id .. "|` for " .. lang_name .. "."
Util.add_warning(lead .. " Valid IDs: " .. summary.options_text .. ".", true)
end
-- Given an etymon data, scrape its page and cache the result in the global state object.
function DataRetriever.cache_page_etymons(etymon_page, etymon_title, key, etymon_lang, etymon_id, redirected_from, descendants_is_toplevel)
local content = etymon_title:getContent()
if not content then
__state.cached_etymon_args[key] = M.data.STATUS.REDLINK
return
end
-- Check if the linked page is a redirect. If it is, the template parsing
-- code below will be effectively skipped, and `scrape_page` will be called
-- again on the redirect target (see the bottom of this function)
local lang_section_for_descendants = nil
local redirect_target = etymon_title.redirect_target
if not redirect_target then
content = M.pages.get_section(content, etymon_lang:getFullName(), 2)
if not content then
__state.cached_etymon_args[key] = M.data.STATUS.MISSING
return
end
lang_section_for_descendants = content
end
local etymon_lang_code = etymon_lang:getFullCode()
local lang_page_key = etymon_lang_code .. ":" .. etymon_page
local found_templates_for_lang = {}
local found_ids = {}
local get_node_class = M.template_parser.class_else_type
-- Look for all {{etymon}} templates within the page content using the template parser
-- This way the same page is never parsed more than once
-- Build a map from senseids to their parent etymonids.
local active_etymon_args = nil
local etymology_section_count = 0
local etymology_sections_with_etymon = 0
local current_etymology_has_etymon = false
local function finalize_current_etymology_section()
if etymology_section_count == 0 then
return
end
if current_etymology_has_etymon then
etymology_sections_with_etymon = etymology_sections_with_etymon + 1
end
current_etymology_has_etymon = false
end
for node in M.template_parser.parse(content):iterate_nodes() do
local node_class = get_node_class(node)
if node_class == "heading" then
-- A new L2 or etymology section acts as a barrier: an {{etymon}} usage
-- used previously cannot be the parent of any subsequent senseids.
-- Note that we don't have to check for L2s due to the usage of `M.pages.get_section` above.
if node:get_name():find("^Etymology") then
finalize_current_etymology_section()
etymology_section_count = etymology_section_count + 1
active_etymon_args = nil
end
elseif node_class == "template" then
local template_name = node:get_name()
if template_name == "etymon" then
local template_args = node:get_arguments()
-- Check if this etymon is for our language
if template_args[1] == etymon_lang_code and not is_nonlemma_etymon_template(template_args) then
if etymology_section_count > 0 then
current_etymology_has_etymon = true
end
table.insert(found_templates_for_lang, template_args)
if template_args.id then
local etymon_key = lang_page_key .. ":" .. template_args.id
__state.cached_etymon_args[etymon_key] = template_args
__state.cached_etymon_pages[etymon_key] = tostring(etymon_page)
table.insert(found_ids, template_args.id)
active_etymon_args = template_args
else
-- Store idless etymon with default key
local etymon_key = lang_page_key .. ":*"
__state.cached_etymon_args[etymon_key] = template_args
__state.cached_etymon_pages[etymon_key] = tostring(etymon_page)
table.insert(found_ids, "*")
active_etymon_args = template_args
end
end
elseif active_etymon_args and template_name == "senseid" then
local template_args = node:get_arguments()
-- This should always be true for proper usages of {{senseid}}.
if template_args[1] == etymon_lang_code and template_args[2] then
local sense_id_key = lang_page_key .. ":" .. template_args[2]
__state.senseid_parent_etymon[sense_id_key] = active_etymon_args
__state.cached_etymon_pages[sense_id_key] = tostring(etymon_page)
end
end
end
end
finalize_current_etymology_section()
if lang_section_for_descendants
and etymology_section_count > 1
and etymology_sections_with_etymon > 0
and etymology_sections_with_etymon < etymology_section_count
then
__state.partial_etymology_targets[lang_page_key] = true
end
if descendants_is_toplevel and lang_section_for_descendants and #found_templates_for_lang > 0 then
M.descendants.cache_page_checks({
lang_section = lang_section_for_descendants,
etymon_lang_code = etymon_lang_code,
found_templates_for_lang = found_templates_for_lang,
entry_title = __state.entry_title,
entry_lang_code = __state.entry_lang_code,
entry_lang = __state.entry_lang_code and Util.get_lang(__state.entry_lang_code, true) or nil,
cached_descendants_checks = __state.cached_descendants_checks,
lang_page_key = lang_page_key,
redirected_from = redirected_from,
})
end
local id_data_list = {}
for _, args in ipairs(found_templates_for_lang) do
local id = args.id or "*"
table.insert(id_data_list, { id = id, pos = args.pos })
end
__state.available_etymon_ids[lang_page_key] = id_data_list
if #found_templates_for_lang == 1 then
__state.single_etymons[lang_page_key] = found_templates_for_lang[1]
end
if redirected_from and __state.available_etymon_ids[lang_page_key] then
__state.available_etymon_ids[redirected_from] = __state.available_etymon_ids[redirected_from] or {}
for _, id_data in ipairs(__state.available_etymon_ids[lang_page_key]) do
table.insert(__state.available_etymon_ids[redirected_from], id_data)
end
end
if __state.cached_etymon_args[key] ~= nil or __state.senseid_parent_etymon[key] ~= nil then
-- All done!
return
elseif redirect_target and not redirected_from then
-- Try scraping the redirect.
etymon_page = redirect_target.prefixedText
DataRetriever.cache_page_etymons(etymon_page, redirect_target, lang_page_key .. ":" .. etymon_id, etymon_lang, etymon_id, lang_page_key, descendants_is_toplevel)
__state.cached_etymon_args[key] = __state.cached_etymon_args[etymon_lang_code .. ":" .. etymon_page .. ":" .. etymon_id]
else
__state.cached_etymon_args[key] = M.data.STATUS.MISSING
end
end
local function has_linkable_term(etymon_data)
if etymon_data.is_family or etymon_data.suppress_term or etymon_data.unknown_term then
return false
end
local term = etymon_data.term
if term == nil or term == "" then
return false
end
return M.string_utilities.trim(term) ~= ""
end
local function record_term_id_tracking(etymon_data)
if not has_linkable_term(etymon_data) then
return
end
local term_page = M.links.get_link_page(etymon_data.term, etymon_data.lang)
M.tracking.record_term_id_usage(__state.id_stats, etymon_data, term_page)
end
-- Given an etymon object, scrape its page (if necessary) and return its own etymon arguments as well as the page name.
function DataRetriever.get_etymon_args(etymon_data, is_toplevel)
if not has_linkable_term(etymon_data) then
return M.data.STATUS.MISSING, nil, nil, nil
end
local page = M.links.get_link_page(etymon_data.term, etymon_data.lang)
local norm_lang = Util.get_norm_lang(etymon_data.lang)
local base_key = norm_lang:getFullCode() .. ":" .. page
if etymon_data.id then
local key = base_key .. ":" .. etymon_data.id
local cached_args = __state.cached_etymon_args[key] or __state.senseid_parent_etymon[key]
if cached_args == nil then
local title = mw.title.new(page)
if not title then error('Invalid page title "' .. page .. '" encountered.') end
DataRetriever.cache_page_etymons(page, title, key, norm_lang, etymon_data.id, nil, is_toplevel)
end
cached_args = __state.cached_etymon_args[key] or __state.senseid_parent_etymon[key] -- refresh
-- Get etymon_id from parent if this was resolved via senseid
local parent_etymon = __state.senseid_parent_etymon[key]
local resolved_etymon_id = parent_etymon and parent_etymon.id
local descendants_check = M.descendants.get_lookup_check({
cached_descendants_checks = __state.cached_descendants_checks,
is_toplevel = is_toplevel,
base_key = base_key,
lookup = {
explicit_id = etymon_data.id,
parent_etymon = parent_etymon,
},
})
if is_toplevel and descendants_check == nil then
local title = mw.title.new(page)
if title then
DataRetriever.cache_page_etymons(page, title, key, norm_lang, etymon_data.id, nil, true)
descendants_check = M.descendants.get_lookup_check({
cached_descendants_checks = __state.cached_descendants_checks,
is_toplevel = true,
base_key = base_key,
lookup = {
explicit_id = etymon_data.id,
parent_etymon = parent_etymon,
},
})
end
end
local mismatched_id = is_mismatched_explicit_id(base_key, cached_args, parent_etymon)
if mismatched_id and is_toplevel then
__state.has_mismatched_id = true
M.tracking.record_mismatched_id_usage(__state.id_stats, norm_lang, page, etymon_data.id)
warn_mismatched_explicit_id(page, norm_lang, base_key, etymon_data.id)
end
maybe_flag_partial_etymology_reference(base_key, etymon_data, cached_args, is_toplevel)
return cached_args, __state.cached_etymon_pages[key], resolved_etymon_id, descendants_check
else
__state.used_idless_etymon = true
if is_toplevel then
__state.toplevel_idless_etymon = true
end
if __state.available_etymon_ids[base_key] == nil then
local title = mw.title.new(page)
if not title then error('Invalid page title "' .. page .. '" encountered.') end
DataRetriever.cache_page_etymons(page, title, base_key .. ":*", norm_lang, "*", nil, is_toplevel)
end
local ids = __state.available_etymon_ids[base_key] or {}
local count = #ids
-- Try to filter by postype if available and we have multiple candidates
if count > 1 and etymon_data.postype then
local matching_ids = {}
for _, id_data in ipairs(ids) do
if id_data.pos == etymon_data.postype then
table.insert(matching_ids, id_data)
end
end
if #matching_ids == 1 then
local matched_id = matching_ids[1].id
local matched_key = base_key .. ":" .. matched_id
M.tracking.record_idless_resolution(__state.id_stats, norm_lang, page, "postype")
local descendants_check = M.descendants.get_lookup_check({
cached_descendants_checks = __state.cached_descendants_checks,
is_toplevel = is_toplevel,
base_key = base_key,
lookup = { id = matched_id },
})
if is_toplevel and descendants_check == nil then
local title = mw.title.new(page)
if title then
DataRetriever.cache_page_etymons(page, title, base_key .. ":*", norm_lang, "*", nil, true)
descendants_check = M.descendants.get_lookup_check({
cached_descendants_checks = __state.cached_descendants_checks,
is_toplevel = true,
base_key = base_key,
lookup = { id = matched_id },
})
end
end
local matched_args = __state.cached_etymon_args[matched_key]
maybe_flag_partial_etymology_reference(base_key, etymon_data, matched_args, is_toplevel)
return matched_args, __state.cached_etymon_pages[matched_key], nil, descendants_check
end
end
if count == 1 then
local only_id_data = ids[1]
local only_id = (type(only_id_data) == "table" and only_id_data.id) or only_id_data or "*"
M.tracking.record_idless_resolution(__state.id_stats, norm_lang, page, "single")
local descendants_check = M.descendants.get_lookup_check({
cached_descendants_checks = __state.cached_descendants_checks,
is_toplevel = is_toplevel,
base_key = base_key,
lookup = { id_data = only_id_data },
})
if is_toplevel and descendants_check == nil then
local title = mw.title.new(page)
if title then
DataRetriever.cache_page_etymons(page, title, base_key .. ":*", norm_lang, "*", nil, true)
descendants_check = M.descendants.get_lookup_check({
cached_descendants_checks = __state.cached_descendants_checks,
is_toplevel = true,
base_key = base_key,
lookup = { id_data = only_id_data },
})
end
end
local single_args = __state.single_etymons[base_key]
maybe_flag_partial_etymology_reference(base_key, etymon_data, single_args, is_toplevel)
return single_args, __state.cached_etymon_pages[base_key .. ":" .. only_id], nil, descendants_check
elseif count > 1 then
M.tracking.record_idless_resolution(__state.id_stats, norm_lang, page, "ambiguous")
warn_ambiguous_etymon_link(page, norm_lang, ids, is_toplevel)
maybe_flag_partial_etymology_reference(base_key, etymon_data, M.data.STATUS.AMBIGUOUS, is_toplevel)
return M.data.STATUS.AMBIGUOUS, nil, nil, nil
else
M.tracking.record_idless_resolution(__state.id_stats, norm_lang, page, "missing")
maybe_flag_partial_etymology_reference(base_key, etymon_data, M.data.STATUS.MISSING, is_toplevel)
return M.data.STATUS.MISSING, nil, nil, nil
end
end
end
local function keyword_invisible_in_tree(keyword_info)
if not keyword_info then
return false
end
local inv = keyword_info.invisible
return inv == "all" or inv == true or inv == "tree"
end
-- True when the node has at least one top-level child container visible in the tree.
local function node_has_visible_tree_children(node)
for _, container in ipairs(node.children or {}) do
if not keyword_invisible_in_tree(container.keyword_info) then
return true
end
end
return false
end
-- Count visible term nodes in the tree.
local function get_visible_tree_depth(node, skip_child_rendering)
local max_depth = 1
if skip_child_rendering or not node then
return max_depth
end
for _, container in ipairs(node.children or {}) do
local keyword_info = container.keyword_info
if not keyword_invisible_in_tree(keyword_info) then
local skip_grandchildren = keyword_info and keyword_info.no_child_categories
for _, term in ipairs(container.terms or {}) do
if term.is_duplicate then
if term.original_has_children then
max_depth = math.max(max_depth, 2)
end
else
max_depth = math.max(max_depth, 1 + get_visible_tree_depth(term, skip_grandchildren))
end
end
end
end
return max_depth
end
local function as_param_list(val)
if val == nil then
return {}
end
if type(val) == "table" then
return val
end
if type(val) == "string" and val ~= "" then
return { val }
end
return {}
end
local TreeBuilder = {}
local function parse_etymon_references(refs_text)
if not refs_text or refs_text == "" then
return ""
end
return M.references.parse_references(refs_text)
end
local function parse_tree_references(node)
if node.ref then
node.parsed_ref = parse_etymon_references(node.ref)
end
if node.children then
for _, container in ipairs(node.children) do
if container.terms then
for _, term in ipairs(container.terms) do
parse_tree_references(term)
end
end
end
end
if node.supplements then
for _, supplement in ipairs(node.supplements) do
if supplement.terms then
for _, term in ipairs(supplement.terms) do
parse_tree_references(term)
end
end
end
end
end
-- Build a unique key for deduplication in the seen table
function TreeBuilder.build_key(lang, title, args)
local norm_lang_code = Util.get_norm_lang(lang):getFullCode()
local is_table = type(args) == "table"
local id = (is_table and args.id) or ""
if title then
return norm_lang_code .. ":" .. M.links.get_link_page(title, lang) .. ":" .. id
end
if is_table and args.status == M.data.STATUS.INLINE then
local content_parts = {}
for i = 1, #args do
content_parts[i] = tostring(args[i])
end
return norm_lang_code .. ":*:" .. id .. "\0" .. table.concat(content_parts, "\0")
end
return norm_lang_code .. ":*:" .. id
end
-- Copy parsed etymon modifiers onto a tree/supplement term node.
function TreeBuilder.apply_etymon_fields(term, etymon_data)
term.id = etymon_data.id
term.t = etymon_data.t
term.tr = etymon_data.tr
term.ts = etymon_data.ts
term.alt = etymon_data.alt
term.g = etymon_data.g
term.pos = etymon_data.pos
term.ng = etymon_data.ng
term.ref = etymon_data.ref
term.is_uncertain = etymon_data.unc
term.lit = etymon_data.lit
term.q = etymon_data.q
term.qq = etymon_data.qq
term.l = etymon_data.l
term.ll = etymon_data.ll
term.suppress_term = etymon_data.suppress_term
term.unknown_term = etymon_data.unknown_term
term.is_family = etymon_data.is_family
term.override = etymon_data.override
term.aftype = etymon_data.aftype
term.postype = etymon_data.postype
term.bor = etymon_data.bor
term.lbor = etymon_data.lbor
term.slbor = etymon_data.slbor
end
function TreeBuilder.build_supplement_term(etymon_data, entry_lang, supplement_type)
EtymonParser.check_supplement_term(etymon_data, entry_lang, supplement_type)
local term = {
lang = etymon_data.lang,
title = etymon_data.term,
children = {},
status = M.data.STATUS.OK,
}
TreeBuilder.apply_etymon_fields(term, etymon_data)
return term
end
function TreeBuilder.build_supplement_terms(entry_lang, supplement_type, param_value)
local terms = {}
for _, term_param in ipairs(as_param_list(param_value)) do
if type(term_param) == "string" and term_param ~= "" then
local etymon_data = EtymonParser.parse_etymon(term_param, entry_lang)
if etymon_data then
table.insert(terms, TreeBuilder.build_supplement_term(etymon_data, entry_lang, supplement_type))
end
end
end
return terms
end
-- Attach a |param= supplement defined in etymon_data.supplements (e.g. doublet=).
function TreeBuilder.append_term_supplement(data_tree, entry_lang, supplement_type, param_value)
local config = M.data.supplements[supplement_type]
if not config then
error("Unknown supplement '" .. tostring(supplement_type) .. "'.")
end
local terms = TreeBuilder.build_supplement_terms(entry_lang, supplement_type, param_value)
if #terms == 0 then
return
end
data_tree.supplements = data_tree.supplements or {}
table.insert(data_tree.supplements, {
type = supplement_type,
config = config,
terms = terms,
})
M.tracking.record_keyword_usage(__state.toplevel_keyword_stats, supplement_type, entry_lang, entry_lang, true)
end
function TreeBuilder.build(lang, title, args, seen, depth, stop_recursion)
seen = seen or {}
depth = depth or 0
local is_toplevel = (depth == 0)
if depth > __state.max_depth_reached then
__state.max_depth_reached = depth
end
__state.total_nodes = __state.total_nodes + 1
local lang_code = lang:getCode()
__state.language_count[lang_code] = (__state.language_count[lang_code] or 0) + 1
local current_id = (type(args) == "table" and args.id) or ""
local key = TreeBuilder.build_key(lang, title, args)
local node = { lang = lang, title = title, id = current_id, args = args, children = {}, status = M.data.STATUS.OK }
if type(args) ~= "table" or seen[key] then
node.status = args or M.data.STATUS.MISSING
-- Mark as duplicate if we've seen this node before
if seen[key] then
node.is_duplicate = true
node.duplicate_key = key
local original_node = seen[key]
if type(original_node) == "table" and original_node.children and #original_node.children > 0 then
node.original_has_children = true
end
end
return node
end
node.status = args.status or M.data.STATUS.OK
seen[key] = node
-- If stop_recursion is set, skip parsing children but check for visible children
if stop_recursion then
local keywords = M.data.keywords
local has_visible_children = false
for i = 2, #args do
local param = args[i]
if type(param) == "string" then
local keyword_base = get_keyword_base(param)
if keyword_base and keywords[keyword_base] then
local _, kw_modifiers = EtymonParser.parse_keyword_modifiers(param:sub(1, 1) == ":" and param or (":" .. param))
if not keyword_invisible_in_tree(get_effective_keyword_info(keyword_base, kw_modifiers)) then
has_visible_children = true
break
end
elseif param:sub(1, 1) ~= ":" then
-- It's a term (not a keyword), so there are visible children
has_visible_children = true
break
end
end
end
node.has_visible_children = has_visible_children
return node
end
-- Parse args into keyword containers
local current_keyword = "from"
local current_keyword_modifiers = {}
local current_container = nil
local function ensure_container()
if not current_container or current_container.keyword ~= current_keyword then
local keyword_info = get_effective_keyword_info(current_keyword, current_keyword_modifiers)
current_container = {
keyword = current_keyword,
keyword_info = keyword_info,
keyword_modifiers = current_keyword_modifiers,
terms = {},
}
table.insert(node.children, current_container)
-- Override keyword text/phrase for nominalization with <g:code>
if current_keyword_modifiers.g and current_keyword == "nominalization" then
local labels = get_nominalization_label_for_g(current_keyword_modifiers.g)
if not labels then
local codes = {}
for c in pairs(M.data.nominalization_g_codes) do table.insert(codes, c) end
table.sort(codes)
error("Invalid <g:" .. tostring(current_keyword_modifiers.g) .. ">. Supported codes for nominalization: " .. table.concat(codes, ", "))
end
current_container.keyword_info = copy_keyword_info(keyword_info)
current_container.keyword_info.text = labels.text
current_container.keyword_info.phrase = labels.phrase
end
end
return current_container
end
for i = 2, #args do
local param = args[i]
if is_keyword(param) then
local keyword, modifiers = EtymonParser.parse_keyword_modifiers(param)
if not keyword then
error("Invalid keyword '" .. param .. "'.")
end
current_keyword = keyword
current_keyword_modifiers = modifiers
current_container = nil -- Force new container for new keyword
elseif type(param) == "string" and param:sub(1, 1) == ":" then
reject_removed_surf_keyword(param)
error("Invalid keyword '" .. param .. "'. Did you mean a valid keyword like ':bor', ':inh', etc.?")
elseif type(param) == "string" then
local etymon_data = EtymonParser.parse_etymon(param, lang)
if etymon_data then
-- Track keyword usage at top level
M.tracking.record_keyword_usage(__state.toplevel_keyword_stats, current_keyword, lang, etymon_data.lang, is_toplevel)
local term_node = {}
local container
-- Handle suppress_term (-) and unknown_term (empty or +) directly
if etymon_data.suppress_term or etymon_data.unknown_term then
container = ensure_container()
if etymon_data.ety then
local inline_args = EtymonParser.parse_inline_ety(etymon_data.ety, etymon_data.lang)
inline_args.id = etymon_data.id
inline_args.status = M.data.STATUS.INLINE
term_node = TreeBuilder.build(etymon_data.lang, nil, inline_args, seen, depth + 1)
else
term_node = {
lang = etymon_data.lang,
children = {},
status = M.data.STATUS.OK,
}
end
TreeBuilder.apply_etymon_fields(term_node, etymon_data)
else
-- Regular term: fetch arguments from page
record_term_id_tracking(etymon_data)
local etymon_args, page_of, resolved_etymon_id, descendants_check =
DataRetriever.get_etymon_args(etymon_data, is_toplevel)
-- Check for <ety> inline parameter doesn't override the scraped arguments, unless the latter are missing
if etymon_data.ety then
if etymon_args == M.data.STATUS.REDLINK or etymon_args == M.data.STATUS.MISSING then
__state.current_page_has_inline_etymology = true
if is_toplevel then
__state.toplevel_has_inline_etymology = true
end
local inline_args = EtymonParser.parse_inline_ety(etymon_data.ety, etymon_data.lang)
-- Track inline ety keywords too
local inline_keyword = get_keyword(inline_args[2], true)
if inline_keyword and #inline_args >= 3 then
local inline_etymon = EtymonParser.parse_etymon(inline_args[3], etymon_data.lang)
if inline_etymon then
M.tracking.record_keyword_usage(__state.toplevel_keyword_stats, inline_keyword, etymon_data.lang, inline_etymon.lang, is_toplevel)
end
end
inline_args.id = etymon_data.id
inline_args.status = M.data.STATUS.INLINE
etymon_args = inline_args
term_node.page_of = __state.cached_etymon_pages[key] -- term node is on the same page as the parent
else
-- Scraped arguments exist, <ety> is redundant and ignored
__state.current_page_has_redundant_etymology = true
if is_toplevel then
__state.toplevel_redundant_etymology = true
end
end
end
-- Ensure container exists before checking keyword info
container = ensure_container()
-- Check if current keyword has no_child_categories - if so, stop recursion
local keyword_info = container.keyword_info
local should_stop_recursion = (stop_recursion or (keyword_info and keyword_info.no_child_categories))
term_node = TreeBuilder.build(etymon_data.lang, etymon_data.term, etymon_args, seen, depth + 1, should_stop_recursion)
term_node.target_key = Util.get_norm_lang(etymon_data.lang):getFullCode() ..
":" .. M.links.get_link_page(etymon_data.term, etymon_data.lang)
term_node.etymon_id = resolved_etymon_id -- The actual etymon id when resolved via senseid
term_node.page_of = page_of
TreeBuilder.apply_etymon_fields(term_node, etymon_data)
term_node.missing_descendants_header, term_node.missing_descendants_entry =
M.descendants.get_term_sync_flags(current_keyword, term_node.status, descendants_check)
end
table.insert(container.terms, term_node)
end
end
end
return node
end
-- Convert etymology tree to JSON-serializable table
local function tree_to_json(node)
local obj = {
term = node.title,
lang = node.lang:getCode(),
lang_name = node.lang:getCanonicalName(),
id = (node.id and node.id ~= "") and node.id or nil,
status = node.status,
is_uncertain = node.is_uncertain or nil,
is_duplicate = node.is_duplicate or nil,
gloss = node.t,
transliteration = node.tr,
transcription = node.ts,
alt = node.alt,
g = node.g,
pos = node.pos,
ng = node.ng,
children = {},
}
for _, container in ipairs(node.children or {}) do
local keyword_info = container.keyword_info
if keyword_info then
local container_obj = {
keyword = container.keyword,
keyword_label = keyword_info.text,
keyword_abbrev = keyword_info.abbrev,
is_group = keyword_info.is_group or nil,
is_invisible = keyword_info.invisible or nil,
is_uncertain = (container.keyword_modifiers and container.keyword_modifiers.unc) or nil,
terms = {},
}
for _, term in ipairs(container.terms or {}) do
table.insert(container_obj.terms, tree_to_json(term))
end
table.insert(obj.children, container_obj)
end
end
return obj
end
-- Build and return the etymology data tree for a given term.
function export.get_tree(lang, title, args, options)
options = options or {}
__state.entry_title = title
__state.entry_lang_code = lang:getCode()
__state.id_stats = M.tracking.new_id_stats()
__state.skip_partial_etymology_category = options.skip_partial_etymology_category == true
if options.validate then
EtymonParser.validate(lang, args, options.id, title, options.pos, false)
end
local lang_code = lang:getCode()
local start_index = (args[1] == lang_code) and 2 or 1
local tree_args = { [1] = lang_code, id = options.id or args.id }
for i = start_index, #args do
table.insert(tree_args, args[i])
end
__state.cached_etymon_args[lang_code .. ":" .. title .. ":" .. (tree_args.id or "")] = tree_args
local ety_data_tree = TreeBuilder.build(lang, title, tree_args)
parse_tree_references(ety_data_tree)
if options.json then
return M.JSON.toJSON(tree_to_json(ety_data_tree))
end
return ety_data_tree
end
-- Given a language code, page name and optionally the id= parameter,
-- render the tree and only the etymology tree for the relevant page.
-- Fetches and parses the corresponding {{etymon}} from the requested page,
-- and any further pages needed to render the tree.
-- Parameters can be passed either through the #invoke or as
-- template parameters *through* an #invoke.
function export.render_tree_for_etymon_on_page(frame)
local frame_args = frame.args
local parent_args = frame:getParent().args
local langcode = frame_args[1] or parent_args[1]
local pagename = frame_args[2] or parent_args[2]
local id = frame_args["id"] or parent_args["id"]
local display_title = frame_args["title"] or parent_args["title"]
local parsed_title = mw.title.new(pagename, 0)
local title
if parsed_title.namespace == 0 then
title = M.pages.safe_page_name(parsed_title)
elseif parsed_title.namespace == 118 then
title = "*" .. M.pages.safe_page_name(parsed_title)
else
error("Unsupported namespace for render_tree_for_etymon_on_page: " .. parsed_title.namespace)
end
local lang = Util.get_lang(langcode)
-- Construct etymon_data for DataRetriever.get_args.
local etymon_data = {
lang = lang,
term = title,
id = id
}
local args, pagename = DataRetriever.get_etymon_args(etymon_data, true)
if args == M.data.STATUS.MISSING then
error("The etymon template was not found (language " ..
langcode ..
", title '" ..
title ..
"'" ..
(id and ", ID '" .. id .. "'" or ", no ID given") .. "). Page contents may have changed in the interim.")
end
local tree_title = display_title or title
if lang:stripDiacritics(M.links.remove_links(tree_title)) ~= lang:stripDiacritics(M.links.remove_links(title)) then
M.tracking.track_title_pagename_mismatch(lang)
end
local ety_data_tree = export.get_tree(lang, tree_title, args, {
validate = true,
id = id,
})
local output = {}
table.insert(output, M.template_styles("Module:etymon/styles.css"))
table.insert(output, M.tree.render({
data_tree = ety_data_tree,
format_term_func = function(term, is_toplevel)
return Util.format_term(term, is_toplevel, {
gloss = "suppress",
pos = "suppress",
lit = "suppress",
tree_ql = "suppress",
})
end,
}))
return table.concat(output)
end
function export.main(frame)
local parent_args = frame:getParent().args
local args = M.parameters.process(parent_args, M.parameters_data.etymon)
local lang = args[1]
local etymon_args = args[2]
local id = args.id
local title = args.title
local text = args.text
local tree = args.tree
local etydate = args.etydate
local doublet = args.doublet
local rfe = args.rfe
local etystub = args.etystub
local nl = args.nl
local page_data = Util.get_page_data()
if not title then
title = page_data.pagename
if page_data.namespace == "" then title = "*" .. title end
end
local entry_pagename = page_data.pagename
if page_data.namespace == "" then
entry_pagename = "*" .. entry_pagename
end
if lang:stripDiacritics(M.links.remove_links(title)) ~= lang:stripDiacritics(M.links.remove_links(entry_pagename)) then
M.tracking.track_title_pagename_mismatch(lang)
end
local current_L2 = M.pages.get_current_L2()
if current_L2 then
local norm_lang = Util.get_norm_lang(lang)
local norm_name = ucfirst(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("Ngôn ngữ '" .. lang_desc .. "' không khớp với đầu mục L2 (" .. 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,
skip_partial_etymology_category = nl and true or false,
})
if args.json then
return ety_data_tree
end
local output = {}
local text_allowlist_mode = M.text_allowed.default_mode or "off"
if text and text_allowlist_mode ~= "off" and not Util.is_text_param_allowed_for_lang(lang) then
local msg = "Etymology texts (parameter <code>text=</code>) are not allowed for " .. lang:getFullName() ..
"; see [[Template:etymon#Text allowlist|Template:etymon § Text allowlist]] for the list of languages that may use the <code>text=</code> parameter."
if text_allowlist_mode == "error" then
error(msg)
else
Util.add_warning(msg, true)
end
end
local lang_exc = Util.get_lang_exception(lang)
if lang_exc and lang_exc.disallow then
local disallow = lang_exc.disallow
local error_text = " for " .. lang:getFullName()
if disallow.ref then
error_text = error_text .. "; see " .. disallow.ref
else
error_text = error_text .. "."
end
if tree and disallow.tree then
error("Etymology trees are not allowed" .. error_text)
end
if text and disallow.text then
error("Etymology texts are not allowed" .. error_text)
end
end
if etydate then
local etydate_param_mods = {
ref = { list = true, type = "references", allow_holes = true },
refn = { list = true, allow_holes = true },
nocap = { type = "boolean" },
}
local function generate_etydate_obj(etydate_text)
local etydate_specs = {}
for spec in etydate_text:gmatch("[^,]+") do
table.insert(etydate_specs, mw.text.trim(spec))
end
return { [1] = etydate_specs }
end
local parsed_etydate = M.parse_utilities.parse_inline_modifiers(etydate, { param_mods = etydate_param_mods, generate_obj = generate_etydate_obj })
local etydate_args = {
[1] = parsed_etydate[1],
nocap = parsed_etydate.nocap or false,
}
ety_data_tree.supplements = ety_data_tree.supplements or {}
table.insert(ety_data_tree.supplements, {
type = "etydate",
etydate_text = M.etydate.format_etydate(etydate_args, { omit_refs = true }),
etydate_refs = (parsed_etydate.ref and #parsed_etydate.ref > 0) and parsed_etydate.ref or nil,
})
end
TreeBuilder.append_term_supplement(ety_data_tree, lang, "doublet", doublet)
if ety_data_tree.supplements then
parse_tree_references(ety_data_tree)
end
local has_visible_children = node_has_visible_tree_children(ety_data_tree)
-- Suppress trees for multiword entries and one-step chains
local visible_tree_depth = get_visible_tree_depth(ety_data_tree)
local is_trivial_tree = visible_tree_depth <= 2
local is_multiword = title:find("%s") ~= nil or title:find("_") ~= nil
if tree and (is_multiword or is_trivial_tree) then
tree = false
end
if tree then
table.insert(output, M.template_styles("Module:etymon/styles.css"))
table.insert(output, M.tree.render({
data_tree = ety_data_tree,
format_term_func = function(term, is_toplevel)
return Util.format_term(term, is_toplevel, {
gloss = "suppress",
pos = "suppress",
lit = "suppress",
tree_ql = "suppress",
})
end,
}))
end
local tree_disallowed = lang_exc and lang_exc.disallow and lang_exc.disallow.tree
local ety_tree_json = M.JSON.toJSON(tree_to_json(ety_data_tree))
local anchor = M.anchors.etymonid(lang, id, {
no_tree = args.notree,
title = title,
empty_tree = (not has_visible_children) or tree_disallowed,
ety_tree_json = ety_tree_json,
})
table.insert(output, anchor)
local text_stop_lang_missing = nil
if text then
local max_depth, stop_at_blue_link, stop_at_lang, stop_at_lang_or_bluelink
if text == "++" then
max_depth, stop_at_blue_link = false, false
elseif text == "+" then
max_depth, stop_at_blue_link = 1, false
elseif text == "*" then
max_depth, stop_at_blue_link = false, true
elseif text:match("^:[^*]+%*$") then
-- Stop at a specific language OR first bluelink after it, e.g., ":ota*"
-- If the target language is a redlink, continue to the first bluelink
local lang_code = text:match("^:([^*]+)%*$")
if lang_code and lang_code ~= "" then
local lang_obj = Util.get_lang(lang_code, true)
if lang_obj then
stop_at_lang_or_bluelink = lang_code
else
Util.add_warning('Invalid language code "' .. lang_code .. '" in text parameter. Showing full chain instead.')
max_depth, stop_at_blue_link = false, false
end
else
Util.add_warning('Empty language code in text parameter. Showing full chain instead.')
max_depth, stop_at_blue_link = false, false
end
elseif text:sub(1, 1) == ":" then
-- Stop at a specific language, e.g., ":ar" stops at first Arabic term
local lang_code = text:sub(2)
if lang_code ~= "" then
-- Validate the language code
local lang_obj = Util.get_lang(lang_code, true)
if lang_obj then
stop_at_lang = lang_code
else
Util.add_warning('Invalid language code "' .. lang_code .. '" in text parameter. Showing full chain instead.')
max_depth, stop_at_blue_link = false, false -- default to ++
end
else
Util.add_warning('Empty language code in text parameter. Showing full chain instead.')
max_depth, stop_at_blue_link = false, false -- default to ++
end
else
local num = tonumber(text)
if num and num >= 1 then
max_depth, stop_at_blue_link = num, false
else
error('Invalid text value "' ..
text .. '". Valid values are: "++" (full chain), "+" (first step only), "*" (until first blue link), a number (max steps), ":lang" (stop at language), or ":lang*" (stop at language or first bluelink if redlink)')
end
end
local text_output, text_render_meta = M.text.render({
data_tree = ety_data_tree,
format_term_func = Util.format_term,
lang_matches_stop_code = Util.lang_matches_stop_code,
max_depth = max_depth,
stop_at_blue_link = stop_at_blue_link,
curr_page = page_data.pagename,
nodot = args.nodot,
dot = args.dot,
stop_at_lang = stop_at_lang,
stop_at_lang_or_bluelink = stop_at_lang_or_bluelink,
})
table.insert(output, text_output)
if stop_at_lang and text_render_meta and not text_render_meta.stop_lang_reached then
M.tracking.track_text_stop_lang_missing(lang, stop_at_lang)
text_stop_lang_missing = stop_at_lang
end
end
if rfe then
table.insert(output, Util.expand_request_template(frame, "rfe", rfe, lang:getCode()))
end
if etystub then
table.insert(output, Util.expand_request_template(frame, "etystub", etystub, lang:getCode()))
end
if nl then
table.insert(output, " " .. frame:expandTemplate({
title = "nonlemma",
args = {},
}))
end
local categories = {}
if Util.is_content_page() then
M.tracking.track_tree_metrics({
max_depth_reached = __state.max_depth_reached,
total_nodes = __state.total_nodes,
language_count = __state.language_count,
lang = lang,
})
categories = M.categories.build({
data_tree = ety_data_tree,
page_lang = lang,
available_etymon_ids = __state.available_etymon_ids,
senseid_parent_etymon = __state.senseid_parent_etymon,
get_norm_lang_func = Util.get_norm_lang,
lang_exc = lang_exc,
suppress_categories = lang_exc and lang_exc.suppress_categories,
nocat = args.nocat,
tree = tree,
text = text,
exnihilo = args.exnihilo,
toplevel_has_inline_etymology = __state.toplevel_has_inline_etymology,
toplevel_redundant_etymology = __state.toplevel_redundant_etymology,
toplevel_idless_etymon = __state.toplevel_idless_etymon,
has_mismatched_id = __state.has_mismatched_id,
linked_page_multiple_etymons_idless = __state.linked_page_multiple_etymons_idless,
linked_page_partial_etymology_sections = __state.linked_page_partial_etymology_sections,
text_stop_lang_missing = text_stop_lang_missing,
})
M.tracking.track_keywords(__state.toplevel_keyword_stats, lang)
M.tracking.track_page_id(lang, id)
M.tracking.track_ids(__state.id_stats, lang)
end
if #categories > 0 then
table.insert(output, M.categories.format(categories, lang))
end
if __state.warnings then
for i, warning in ipairs(__state.warnings) do
table.insert(output, (i == 1 and "\n" or "") .. warning .. "\n")
end
end
return table.concat(output)
end
return export
te7juloxk77iut5q4x7a1hsj7rghr1k
Bản mẫu:R:sl:Fran
10
340428
2569503
2275867
2026-10-10T17:02:09Z
Hiyuune
50834
/* */
2569503
wikitext
text/x-wiki
{{#invoke:quote|call_template
|template=cite-web
|sl|entry={{lang|sl|{{{entrydisplay|{{{1|{{pagename}}}}}}}}}}|entryurl=https://fran.si/iskanje?View=1&Query={{urlencode:{{{entryquery|{{{1|{{pagename}}}}}}}}}}|work=Slovarji Inštituta za slovenski jezik Frana Ramovša ZRC SAZU|year=2014–{{CURRENTYEAR}}
|allowparams=entrydisplay,1,entryquery
}}<noinclude>{{refcat}}</noinclude>
felo1e3qipa0poqtcwjqahwqckqe811
vắt cổ chày ra nước
0
341546
2569558
2232514
2026-10-11T04:05:16Z
TheHighFighter2
42988
/* Tiếng Việt */
2569558
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|idiom}}===
{{vi-idiom|head=[[vắt]] [[cổ chày]] [[ra]] [[nước]]}}
# Ý [[châm biếm]] những [[người]] [[keo kiệt]], [[bủn xỉn]] [[quá mức]].
===={{ĐM|syn}}====
* {{l|vi|rán sành ra mỡ}}
==={{ĐM|ref}}===
* {{R:Tratu}}
9yjlyh2scp5lyjuw0ucyv2rg77bpbih
ក្រណៀះ
0
343505
2569539
2564025
2026-10-11T03:29:38Z
Hiyuune
50834
/* Tiếng Krung */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2569539
wikitext
text/x-wiki
=={{langname|krr}}==
==={{ĐM|pron}}===
* {{IPA|krr|/krəniɛh/}}
==={{ĐM|noun}}===
{{head|krr|Danh từ|tr=krəniɛh}}
# [[móng vuốt]].
{{c|krr|Bộ phận cơ thể}}
8d2q90jfoftlxkmknfxmnhi94lwpa5x
Mô đun:nn-noun-uncountable
828
352103
2569495
2568744
2026-10-10T15:13:44Z
Hiyuune
50834
2569495
Scribunto
text/plain
local export = {}
local lang = require("Module:languages").getByCode("nn")
function export.main(frame)
local word = mw.title.getCurrentTitle().text
local g1, g2, g3 = frame.args[1], frame.args[2], frame.args[3]
local args = frame:getParent().args
local length = word:len()
local root
if args['root'] and args['root'] ~= '' then
root = args['root']
elseif word:find('e$') then
root = word:sub(1, length-1)
else
root = word
end
if args['root2'] and args['root2'] ~= '' then
root2 = args['root2']
end
local data = {lang = lang, pos_category = "Danh từ", categories = "Danh từ " .. {lang:getCanonicalName() .. " không đếm được"}, inflections = {}}
if g3 and g3 ~= '' then
data.genders = {g1, g2, g3}
elseif g2 and g2 ~= '' then
data.genders = {g1, g2}
else
data.genders = {g1}
end
suffix = {["m"] = 'en', ["f"] = 'a', ["n"] = 'et', ["?"] = '?'}
local all_forms = { root .. suffix[g1] }
if g2 and g2 ~= '' then
table.insert(all_forms, root .. suffix[g2])
end
if g3 and g3 ~= '' then
table.insert(all_forms, root .. suffix[g3])
end
if root2 and root2 ~= '' then
table.insert(all_forms, root2 .. suffix[g1])
end
all_forms.label = 'definite singular'
table.insert(data.inflections, all_forms)
table.insert(data.inflections, { label = '[[Phụ lục:Từ điển thuật ngữ#Không đếm được|không đếm được]]' })
return require("Module:headword").full_headword(data)
end
return export
q5udgmdfuezq1907afzogogfxhe74zq
2569496
2569495
2026-10-10T15:16:42Z
Hiyuune
50834
2569496
Scribunto
text/plain
local export = {}
local lang = require("Module:languages").getByCode("nn")
function export.main(frame)
local word = mw.title.getCurrentTitle().text
local g1, g2, g3 = frame.args[1], frame.args[2], frame.args[3]
local args = frame:getParent().args
local length = word:len()
local root
if args['root'] and args['root'] ~= '' then
root = args['root']
elseif word:find('e$') then
root = word:sub(1, length-1)
else
root = word
end
if args['root2'] and args['root2'] ~= '' then
root2 = args['root2']
end
local data = {lang = lang, pos_category = "Danh từ", categories = {"Danh từ không đếm được " .. lang:getCanonicalName()}, inflections = {}}
if g3 and g3 ~= '' then
data.genders = {g1, g2, g3}
elseif g2 and g2 ~= '' then
data.genders = {g1, g2}
else
data.genders = {g1}
end
suffix = {["m"] = 'en', ["f"] = 'a', ["n"] = 'et', ["?"] = '?'}
local all_forms = { root .. suffix[g1] }
if g2 and g2 ~= '' then
table.insert(all_forms, root .. suffix[g2])
end
if g3 and g3 ~= '' then
table.insert(all_forms, root .. suffix[g3])
end
if root2 and root2 ~= '' then
table.insert(all_forms, root2 .. suffix[g1])
end
all_forms.label = 'xác định số ít'
table.insert(data.inflections, all_forms)
table.insert(data.inflections, { label = '[[Phụ lục:Từ điển thuật ngữ#Không đếm được|không đếm được]]' })
return require("Module:headword").full_headword(data)
end
return export
c5dwso9oqsq1keifcuvm2a7weul5rkr
ayoaq avia
0
366738
2569517
2292918
2026-10-11T01:50:03Z
Hiyuune
50834
/* Tiếng Bru */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2569517
wikitext
text/x-wiki
=={{langname|bru}}==
==={{ĐM|pron}}===
* {{IPA|bru|/ʔa.ja̤ːʔ ʔa.vi̤a/}}
==={{ĐM|noun}}===
{{head|bru|Danh từ}}
# [[bà lão]].
0ynoy5o50an152veiqn8dmz26o80elv
Mô đun:etymon/text
828
378446
2569555
2368894
2026-10-11T03:52:16Z
TheHighFighter2
42988
2569555
Scribunto
text/plain
local export = {}
local loader = require("Module:module loader")
local M = loader.init({
require = {
en_utilities = "Module:en-utilities",
references = "Module:references",
senseno = "Module:senseno",
},
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 and opts.nodot ~= "" and opts.nodot ~= "0"
local function explicit_dot_override()
if opts.dot == nil or opts.dot == false then
return nil
end
local d = mw.text.trim(tostring(opts.dot))
if d == "" or d == "." then
return nil
end
return d
end
local dot_override = explicit_dot_override()
local function find_deepest_last_part(tree)
if not tree or not tree.container_parts or #tree.container_parts == 0 then
return nil
end
local last_part = tree.container_parts[#tree.container_parts]
if last_part.continuation then
return find_deepest_last_part(last_part.continuation)
end
return last_part
end
local function apply_final_punctuation_override(tree, punct)
if not tree or punct == nil then
return
end
local last_part = find_deepest_last_part(tree)
if last_part then
last_part.punctuation = punct
end
end
local function apply_closing_punctuation_override(tree, is_last_segment)
if not is_last_segment then
return
end
local punct
if nodot then
punct = ""
elseif dot_override ~= nil then
punct = dot_override
else
return
end
apply_final_punctuation_override(tree, punct)
end
local function has_supplements()
return data_tree.supplements and #data_tree.supplements > 0
end
local stop_at_lang = opts.stop_at_lang
local stop_at_lang_or_bluelink = opts.stop_at_lang_or_bluelink
local lang_matches_stop_code = opts.lang_matches_stop_code
local stop_lang_reached = false
local function term_matches_stop_code(term_lang, stop_code)
if lang_matches_stop_code then
return lang_matches_stop_code(term_lang, stop_code)
end
return term_lang and term_lang:getCode() == stop_code
end
local children = data_tree.children
local function has_text_supplements()
if not data_tree.supplements then
return false
end
for _, supplement in ipairs(data_tree.supplements) do
if supplement.type == "doublet" and supplement.terms and #supplement.terms > 0 then
return true
end
if supplement.type == "etydate" and supplement.etydate_text and supplement.etydate_text ~= "" then
return true
end
end
return false
end
if (not children or #children == 0) and not has_text_supplements() then
if stop_at_lang then
return "", { stop_lang_reached = false }
end
return ""
end
local top_l2 = data_tree.lang:getFullCode() .. ":" .. curr_page
local entry_lang = data_tree.lang
local function lowercase_glossary_link_display(wikitext)
return wikitext:gsub("(%[%[Phụ lục:Từ điển thuật ngữ#[^|]+|)([^%]])([^%]]*)%]%]", function(prefix, first, rest)
return prefix .. mw.ustring.lower(first) .. rest .. "]]"
end)
end
local function format_sl_senseid_intro(senseid, keyword_text, keyword_phrase, capitalize_senseno, is_uncertain)
local senseids = mw.text.split(senseid, "!!", true)
local senseno_parts = {}
for i, id in ipairs(senseids) do
id = mw.text.trim(id)
if id ~= "" then
table.insert(senseno_parts, M.senseno.link_text(entry_lang:getCode(), { id }, {
title = curr_page,
uc = (i == 1 and capitalize_senseno) or nil,
}))
end
end
if #senseno_parts == 0 then
return keyword_text, keyword_phrase
end
local senseno_text = mw.text.listToText(senseno_parts)
local glossary_link = (keyword_text or ""):gsub(" from$", "")
local glossary_lower = lowercase_glossary_link_display(glossary_link)
if #senseno_parts > 1 then
local plural_link = glossary_lower:gsub("|semantic loan%]%]", "|semantic loans]]")
if is_uncertain then
return senseno_text .. " are possibly " .. plural_link .. " from",
senseno_text .. " are possibly semantic loans from"
end
return senseno_text .. " are " .. plural_link .. " from",
senseno_text .. " are semantic loans from"
end
if is_uncertain then
return senseno_text .. " is possibly a " .. glossary_lower .. " from",
senseno_text .. " is possibly a semantic loan from"
end
return senseno_text .. " is a " .. glossary_lower .. " from",
senseno_text .. " is a semantic loan from"
end
-- 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
local new_sentence = keyword_info.new_sentence or false
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)
if is_group and uncertain_count > 0 then
all_uncertain = true
end
local has_mixed_uncertainty = not all_uncertain and uncertain_count > 0
-- 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_matches_stop_code(term.lang, stop_at_lang) then
reached_stop_lang = true
stop_lang_reached = 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_matches_stop_code(term.lang, 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,
senseid = keyword_modifiers.senseid,
sl_keyword_text = keyword_modifiers.senseid and keyword_info.text or nil,
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 = new_sentence,
separate_clause = keyword_info.separate_clause or false,
conj = keyword_modifiers.conj or keyword_info.default_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 container_join_kind(part)
if part.type == "etydate" then
return nil
end
if part.new_sentence or part.separate_clause then
return "supplement"
end
return "or_join"
end
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
-- Or-join containers must precede any supplemental (calque-like / influence) containers.
local seen_supplement = false
for _, part in ipairs(parts) do
local kind = container_join_kind(part)
if kind == "supplement" then
seen_supplement = true
elseif kind == "or_join" and seen_supplement then
error(
"Cannot generate etymology text: a main derivation step cannot follow a calque, semantic loan, or influence clause in the same list.")
end
end
for _, part in ipairs(parts) do
if part.continuation then
check_complexity(part.continuation)
end
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
if part.term_parts then
-- 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 "hoặc" -- 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
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 at this level (may still continue in part.continuation)
part.punctuation = "."
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 "hoặc" -- 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_text = part.intro_text
local phrase = part.phrase
if part.senseid then
intro_text, phrase = format_sl_senseid_intro(
part.senseid,
part.sl_keyword_text,
part.phrase,
part.intro_capitalized,
part.is_uncertain
)
end
local intro
if part.use_full_intro then
if part.is_uncertain and not part.senseid then
intro = "Có thể " .. phrase
else
intro = intro_text
end
else
if part.is_uncertain and not part.senseid then
intro = "có thể " .. phrase
else
intro = 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 "có thể" prefix for uncertain terms when there's mixed uncertainty
if part.has_mixed_uncertainty and term_part.is_uncertain then
result = result .. "có thể "
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 .. ", nghĩa đen “" .. 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 .. ", nghĩa đen “" .. 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)
-- Supplements (doublets, etydate, …) are rendered outside the main derivation text tree.
local function assemble_supplements()
if not data_tree.supplements then
return ""
end
local chunks = {}
local pending_trees = {}
local function flush_pending_trees()
local num = #pending_trees
for i, supplement_tree in ipairs(pending_trees) do
analyze_punctuation(supplement_tree, true)
apply_closing_punctuation_override(supplement_tree, i == num)
local chunk = assemble_text(supplement_tree)
if chunk ~= "" then
table.insert(chunks, chunk)
end
end
pending_trees = {}
end
for _, supplement in ipairs(data_tree.supplements) do
local supplement_tree
if supplement.type == "doublet" and supplement.config
and supplement.terms and #supplement.terms > 0 then
local config = supplement.config
local term_parts = {}
for _, term in ipairs(supplement.terms) do
local term_part = build_term_part(term, entry_lang, 1)
if term_part.text ~= "" then
table.insert(term_parts, term_part)
end
end
if #term_parts == 0 then
supplement_tree = nil
else
supplement_tree = {
type = "tree",
container_parts = {
{
type = "doublet",
intro_text = config.text,
phrase = config.phrase,
term_parts = term_parts,
conj = config.default_conj or "and",
new_sentence = true,
},
},
depth = 1,
}
end
elseif supplement.type == "etydate" and supplement.etydate_text and supplement.etydate_text ~= "" then
supplement_tree = {
type = "tree",
container_parts = {
{
type = "etydate",
etydate_text = supplement.etydate_text,
etydate_refs = supplement.etydate_refs,
new_sentence = true,
},
},
depth = 1,
}
end
if supplement_tree then
table.insert(pending_trees, supplement_tree)
end
end
flush_pending_trees()
return table.concat(chunks, " ")
end
if not text_tree then
local supplement_text = assemble_supplements()
if supplement_text == "" then
if stop_at_lang then
return "", { stop_lang_reached = false }
end
return ""
end
if stop_at_lang then
return supplement_text, { stop_lang_reached = false }
end
return supplement_text
end
local rendered = ""
if text_tree then
check_complexity(text_tree)
analyze_punctuation(text_tree, true)
apply_closing_punctuation_override(text_tree, not has_supplements())
rendered = assemble_text(text_tree)
end
local supplement_text = assemble_supplements()
if supplement_text ~= "" then
if rendered ~= "" then
rendered = rendered .. " " .. supplement_text
else
rendered = supplement_text
end
end
if stop_at_lang then
return rendered, { stop_lang_reached = stop_lang_reached }
end
return rendered
end
return export
gce8gb0hp8xr33q1nc2w6veuc4k4qhe
cố đấm ăn xôi
0
383369
2569552
2327476
2026-10-11T03:42:19Z
Hiyuune
50834
/* Tham khảo */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2569552
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|idiom}}===
{{vi-idiom}}
# Cố [[nhẫn nhục]], [[chịu đựng]] để [[theo đuổi]], [[hi vọng]] điều gì.
==={{section|ref}}===
* {{R:Tratu}}
* {{R:vi:Hoàng Phê 2021|page=257}}
gwlb5myoyl4o3ygsc43xwlvapcik4h3
Struthio camelus
0
397839
2569508
2354462
2026-10-10T23:17:17Z
TheHighFighter2
42988
/* Đa ngữ */
2569508
wikitext
text/x-wiki
{{also|struthiocamelus}}
=={{langname|mul}}==
[[Image:Ostrich and chick.jpg|thumb|Đà điểu và chim con]]
==={{ĐM|pr-noun}}===
{{taxoninfl|head=[[Struthio]] {{epinew|camelus||la}}|i=i|g=m}}
# {{taxon|loài|họ|Struthionidae|{{vern|đà điểu châu Phi}}}}
===={{ĐM|hyper}}====
* {{sense|loài}} {{taxfmt|Struthioniformes|bộ}}{{--}} bộ; {{taxfmt|Struthionidae|họ}}{{--}} họ; {{taxfmt|Struthio|chi}}{{--}} chi
==={{ĐM|ref}}===
* {{pedia|i=1}}
* {{specieslite|i=1}}
* {{comcatlite|i=1}}
{{C|mul|Chim chạy}}
l0zqa70brteswyaib4of6b7vh9jda2v
Bản mẫu:mnc-conj-table
10
411986
2569499
2513660
2026-10-10T15:48:30Z
Hiyuune
50834
2569499
wikitext
text/x-wiki
{{inflection-table-top|title=Các dạng chọn lọc của động từ {{l|mnc||{{{title}}}}}{{#if:{{{type|}}}| ''(loại {{{type|}}})''|}}|palette=amber|tall=yes}}
|-
! colspan="8" class="outer" | Dạng cuối câu
|-
! rowspan="4" colspan="1" | Trần thuật
! colspan="1" |
! colspan="2" | Đơn
! colspan="2" | Tiếp diễn
! colspan="2" | Hoàn thành
|-
! colspan="1" | Hiện tại-tương lai
| colspan="2" | {{l|mnc|{{{1}}}}}
| colspan="2" | {{l|mnc|{{{2}}}}}
| colspan="2" | {{l|mnc|{{{3}}}}}
|-
! colspan="1" | Quá khứ
| colspan="2" | {{l|mnc|{{{4}}}}}
| colspan="2" | {{l|mnc|{{{5}}}}}
| colspan="2" | {{l|mnc|{{{6}}}}}
|-
! colspan="1" | Tương lai
| colspan="2" | {{l|mnc|{{{7}}}}}
| colspan="2" | —
| colspan="2" | —
|-
! rowspan="3" colspan="1" | Nghi vấn
! colspan="1" |
! colspan="3" | Khẳng định
! colspan="3" | Phủ định
|-
! colspan="1" | Phi quá khứ
| colspan="3" | {{l|mnc|{{{8}}}}}
| colspan="3" | {{l|mnc|{{{9}}}}}
|-
! colspan="1" | Quá khứ
| colspan="3" | {{l|mnc|{{{10}}}}}
| colspan="3" | {{l|mnc|{{{11}}}}}
|-
! colspan="2" |
! colspan="3" | Khẳng định
! colspan="3" | Phủ định
|-
! colspan="2" | Mệnh lệnh
| colspan="3" | {{l|mnc|{{{12}}}}}
| colspan="3" | {{l|mnc|{{{13}}}}}
|-
! colspan="2" |
! colspan="3" | Thường
! colspan="3" | Mạnh
|-
! colspan="2" | Desiderative
| colspan="3" | {{l|mnc|{{{14}}}}}
| colspan="3" | {{l|mnc|{{{15}}}}}
|-
! colspan="2" |
! colspan="3" | Thường
! colspan="3" | Lịch sự
|-
! colspan="2" | Ước vọng
| colspan="3" | {{l|mnc|{{{16}}}}},<br/>{{l|mnc|{{{17}}}}}
| colspan="3" | {{l|mnc|{{{18}}}}},<br/>{{l|mnc|{{{19}}}}}
|-
! colspan="8" class="outer" | Phó động từ
|-
! colspan="2" | Coordinative (Nguyên mẫu)
| colspan="6" | {{l|mnc|{{{20}}}}}
|-
! colspan="2" | Subordinative (Danh động từ quá khứ)
| colspan="6" | {{l|mnc|{{{21}}}}}
|-
! colspan="2" | Điều kiện
| colspan="6" | {{l|mnc|{{{22}}}}}
|-
! colspan="2" | Kéo dài
| colspan="6" | {{l|mnc|{{{23}}}}}
|-
! colspan="2" | Kết thúc
| colspan="6" | {{l|mnc|{{{24}}}}}
|-
! colspan="2" | Cách công cụ
| colspan="6" | {{l|mnc|{{{25}}}}}
|-
! colspan="2" | Preparative
| colspan="6" | {{l|mnc|{{{26}}}}}
|-
! colspan="2" | Nhượng bộ
| colspan="6" | {{l|mnc|{{{27}}}}}
|-
! colspan="2" | Phó động từ
| colspan="6" | {{l|mnc|{{{28}}}}}
|-
! colspan="8" class="outer" | Phân từ
|-
! colspan="2" |
! colspan="3" | Phi quá khứ
! colspan="3" | Quá khứ
|-
! colspan="2" | Khẳng định
| colspan="3" | {{l|mnc|{{{29}}}}}
| colspan="3" | {{l|mnc|{{{30}}}}}
|-
! colspan="2" | Phủ định
| colspan="3" | {{l|mnc|{{{31}}}}}
| colspan="3" | {{l|mnc|{{{32}}}}}
|-
! colspan="2" | Động danh từ
| colspan="3" | {{l|mnc|{{{33}}}}}
| colspan="3" | {{l|mnc|{{{34}}}}}
|-
{{inflection-table-bottom|notes='''Ghi chú:''' Một số dạng chỉ có thể là giả thuyết. Không phải dạng biến thể hình thái động từ nào cũng đều tồn tại.}}<noinclude>
{{documentation}}
{{tcat|conj:*}}
</noinclude>
puexxe0ahm5ponucory4t2wwi2jwby5
loa phóng thanh
0
419696
2569474
2569406
2026-10-10T14:16:12Z
TheHighFighter2
42988
/* Danh từ */
2569474
wikitext
text/x-wiki
=={{langname|vi}}==
{{wikipedia}}
==={{section|pron}}===
{{vi-pron}}
==={{section|n}}===
{{vi-noun|head=[[loa]] [[phóng thanh]]}}
# Loại [[loa]] chuyên dụng âm lượng lớn.
lqsogloiwwhyv4pscvon53ce9bqea54
phòng vệ chính đáng
0
419698
2569473
2569437
2026-10-10T14:11:17Z
TheHighFighter2
42988
/* Tiếng Việt */ "Phòng thân" không đồng nghĩa với từ này
2569473
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|v}}===
{{vi-verb|head=[[phòng vệ]] [[chính đáng]]}}
# [[hành động|Hành động]] chống trả mang tính [[thiết thực]], [[quyết liệt]] đối với người gây ảnh hưởng đến [[quyền lợi]], [[lợi ích]] [[hợp pháp]] của mình hay người dùng [[vũ lực]] [[đe dọa]] đến [[tính mạng]], người có hành động này thường được [[miễn trừ]] [[trách nhiệm]] [[hình sự]].
h75emvh5hjik1mnoctni952g2cfiiia
2569490
2569473
2026-10-10T14:55:40Z
TheHighFighter2
42988
2569490
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|v}}===
{{vi-verb|head=[[phòng vệ]] [[chính đáng]]}}
# {{nhãn|vi|luật}} [[hành động|Hành động]] chống trả mang tính [[thiết thực]], [[quyết liệt]] đối với người gây ảnh hưởng đến [[quyền lợi]], [[lợi ích]] [[hợp pháp]] của mình hay người dùng [[vũ lực]] [[đe dọa]] đến [[tính mạng]], người có hành động này thường được [[miễn trừ]] [[trách nhiệm]] [[hình sự]].
5u0bsvse1185zrg4nhn48vgcxudzt3z
tình thế cấp thiết
0
419701
2569482
2569436
2026-10-10T14:43:33Z
TheHighFighter2
42988
/* Tiếng Việt */ Viết lại nghĩa theo [[s:Bộ luật Hình sự nước Cộng hòa xã hội chủ nghĩa Việt Nam 2015 (sửa đổi, bổ sung 2017)/Phần thứ nhất/Chương IV]]
2569482
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|etym}}===
Từ {{ghép|vi|tình thế|cấp thiết}}.
==={{section|pron}}===
{{vi-pron}}
==={{section|n}}===
{{vi-noun|head=[[tình thế]] [[cấp thiết]]}}
# {{nhãn|vi|luật}} Tình thế của người vì muốn [[ngăn chặn]] một [[nguy cơ]] thực tế đang [[đe dọa]] [[quyền]] và [[lợi ích]] [[hợp pháp]] của mình, của người khác hay của tổ chức mà không còn cách nào khác là phải có hành vi gây một [[thiệt hại]] nhỏ hơn thiệt hại cần ngăn chặn.
n9untzsz5ro86cibwqd1oz9m8mx1cig
xung đột lợi ích
0
419702
2569470
2569434
2026-10-10T13:59:56Z
TheHighFighter2
42988
/* Tiếng Việt */ Viết lại nghĩa theo [[s:Luật Phòng, chống tham nhũng nước Cộng hòa xã hội chủ nghĩa Việt Nam 2018/Chương I]]
2569470
wikitext
text/x-wiki
=={{langname|vi}}==
{{wikipedia}}
==={{section|etym}}===
Từ {{ghép|vi|xung đột|lợi ích}}.
==={{section|pron}}===
{{vi-pron}}
==={{section|n}}===
{{vi-noun|head=[[xung đột]] [[lợi ích]]}}
# Tình huống mà trong đó [[lợi ích]] của người có [[chức vụ]], [[quyền hạn]] hoặc người [[thân thích]] của họ gây [[ảnh hưởng]] hoặc có nguy cơ làm [[sai lệch]] việc thực hiện [[nhiệm vụ]], [[công vụ]].
m8ugrdierb7keoe31q5g8jou3gj18h3
2569483
2569470
2026-10-10T14:46:05Z
TheHighFighter2
42988
/* Danh từ */
2569483
wikitext
text/x-wiki
=={{langname|vi}}==
{{wikipedia}}
==={{section|etym}}===
Từ {{ghép|vi|xung đột|lợi ích}}.
==={{section|pron}}===
{{vi-pron}}
==={{section|n}}===
{{vi-noun|head=[[xung đột]] [[lợi ích]]}}
# {{nhãn|vi|luật}} Tình huống mà trong đó [[lợi ích]] của người có [[chức vụ]], [[quyền hạn]] hoặc người [[thân thích]] của họ gây [[ảnh hưởng]] hoặc có nguy cơ làm [[sai lệch]] việc thực hiện [[nhiệm vụ]], [[công vụ]].
mkj3qt6sr0ifanu0s4h7ri7gpctwipn
nói cà lăm
0
419725
2569463
2026-10-10T11:59:09Z
TienMinh-mun6xnChing
57893
/* */
2569463
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|v}}===
{{vi-verb}}
# {{like-entry|nói lắp}}.
42uj8kigimtxu9l3zr2sxafrouz95vt
2569464
2569463
2026-10-10T12:01:04Z
TienMinh-mun6xnChing
57893
/* Tiếng Việt */
2569464
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|v}}===
{{vi-verb|head=[[nói]] [[cà lăm]]}}
# {{like-entry|nói lắp}}.
7owbbhyt2sx19vsxe3kd4k3xxo43085
2569472
2569464
2026-10-10T14:03:35Z
TheHighFighter2
42988
Đổi hướng đến [[cà lăm]]
2569472
wikitext
text/x-wiki
#đổi [[cà lăm]]
5taidlnddkes6otz9eq01srvl26ezuw
góa phụ
0
419726
2569465
2026-10-10T12:06:57Z
TienMinh-mun6xnChing
57893
/* */
2569465
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|n}}===
{{vi-noun}}
# Người [[phụ nữ]] có chồng đã mất.
chfhw6q4t0sfoho6z26py3in0nv4jmi
2569466
2569465
2026-10-10T12:08:24Z
TienMinh-mun6xnChing
57893
2569466
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|n}}===
{{vi-noun}}
# Người [[phụ nữ]] có chồng đã mất.
#: {{syn|sương phụ}}
9zhhp9wnapdxteb7i6guwthg0x3jg0d
2569467
2569466
2026-10-10T12:08:33Z
TienMinh-mun6xnChing
57893
2569467
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|n}}===
{{vi-noun}}
# Người [[phụ nữ]] có chồng đã mất.
#: {{syn|vi|sương phụ}}
rqdt9bqfaprjr427ytjmbpmjb8i0h35
goá phụ
0
419727
2569468
2026-10-10T12:09:36Z
TienMinh-mun6xnChing
57893
Trang mới: “=={{langname|vi}}== ==={{section|pron}}=== {{vi-pron}} ==={{section|n}}=== {{vi-noun}} # {{alternative spelling of|vi|góa phụ}}.”
2569468
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|n}}===
{{vi-noun}}
# {{alternative spelling of|vi|góa phụ}}.
6x05klz2bmxmswkhvboumtfwdf6mb67
ɔ̀
0
419728
2569471
2026-10-10T14:00:02Z
Lcsnes
40261
Trang mới: “{{minitoc}} {{-Latn-}} ==={{ĐM|desction}}=== {{mul-letter}} #[[chữ|Chữ]] '''[[ɔ]] viết thường''' với dấu huyền ([[grave]]). ==={{ĐM|see}}=== {{Latn-script}} =={{langname|ajg}}== ==={{ĐM|letter}}=== {{letter|ajg}} #Chữ cái '''{{l|ajg|ɔ}} viết thường''' với dấu thanh thấp ([[◌̀]]). #:{{ux|ajg|c'''ɔ̀'''|[[đợi]]|inline=1}} ==={{ĐM|see}}=== *{{letters|lang=ajg|sc=Latn|qual=Bảng chữ cái Latinh tiếng Adja|Aa|An/an|Bb|Cc|Dd|Ɖɖ|…”
2569471
wikitext
text/x-wiki
{{minitoc}}
{{-Latn-}}
==={{ĐM|desction}}===
{{mul-letter}}
#[[chữ|Chữ]] '''[[ɔ]] viết thường''' với dấu huyền ([[grave]]).
==={{ĐM|see}}===
{{Latn-script}}
=={{langname|ajg}}==
==={{ĐM|letter}}===
{{letter|ajg}}
#Chữ cái '''{{l|ajg|ɔ}} viết thường''' với dấu thanh thấp ([[◌̀]]).
#:{{ux|ajg|c'''ɔ̀'''|[[đợi]]|inline=1}}
==={{ĐM|see}}===
*{{letters|lang=ajg|sc=Latn|qual=Bảng chữ cái Latinh tiếng Adja|Aa|An/an|Bb|Cc|Dd|Ɖɖ|Ee|Ɛɛ|Ɛn/ɛn|Ff|Gg|Gb/gb|Ɣɣ|Hh|Ii|In/in|Jj|Kk|Kp/kp|Ll|Mm|Nn|Ny/ny|Ŋŋ|Oo|Ɔɔ|Ɔn/ɔn|Pp|Rr|Ss|Sh/sh|Tt|Uu|Un/un|Vv|Ww|Xx|Yy|Zz|Ʒʒ}}
==={{ĐM|ref}}===
*{{Chú thích web|entryurl=https://www.webonary.org/ajagbe/en/?s=c%C9%94%CC%80%E2%82%82&partialsearch=1|entry=cɔ̀₂|editor=Nancy & Terry Sullivan|work=Ajagbe – French-English Dictionary|publisher=SIL International|year=2015}}
=={{langname|agq}}==
==={{ĐM|letter}}===
{{letter|agq}}
#Chữ cái '''{{l|agq|ɔ}} viết thường''' với dấu thanh thấp ([[◌̀]]).
#:{{quote|agq|Waazə̂ ghaʼa ghò; ghàʼ kwo nû enyəa Zə̀ kə mò ləgha tsughu ghɛ, kə n shìaa k'''ɔ̀'''ʼ ghɛ enyəa ghɛ̀ e lo ghî a wə̄n gho.|hỡi anh em được Đức Chúa Trời yêu-dấu, chúng tôi biết anh em là kẻ được lựa-chọn. ([[s:I Tê-sa-lô-ni-ca/1#1:4|I Tê-sa-lô-ni-ca 1:4]])}}
==={{ĐM|see}}===
*{{letters|lang=agq|sc=Latn|qual=Bảng chữ cái Latinh tiếng Aghem|Aa|(Àà)|(Āā)|(Ââ)|(Ǎǎ)|Bb|Bv/bv|Ch/ch|Dd|Dz/dz|Ee|(Èè)|(Ēē)|(Êê)|(Ěě)|Ɛɛ|(Ɛ̀/ɛ̀)|(Ɛ̄/ɛ̄)|(Ɛ̂/ɛ̂)|(Ɛ̌/ɛ̌)|Ff|Gg|Gb/gb|Gh/gh|Hh|Ii|(Ìì)|(Īī)|(Îî)|(Ǐǐ)|Ɨɨ|(Ɨ̀/ɨ̀)|(Ɨ̄/ɨ̄)|(Ɨ̂/ɨ̂)|(Ɨ̌/ɨ̌)|Kk|Kp/kp|ʼ|Ll|Mm|(M̀/m̀)|Nn|(Ǹ/ǹ)|Ŋŋ|Oo|(Òò)|(Ōō)|(Ôô)|(Ǒǒ)|Ɔɔ|(Ɔ̀/ɔ̀)|(Ɔ̄/ɔ̄)|(Ɔ̂/ɔ̂)|(Ɔ̌/ɔ̌)|Pp|Pf/pf|Ss|Sh/sh|Tt|Ts/ts|Uu|(Ùù)|(Ūū)|(Ûû)|(Ǔǔ)|Uw/uw|Ʉʉ|(Ʉ̀/ʉ̀)|(Ʉ̄/ʉ̄)|(Ʉ̂/ʉ̂)|(Ʉ̌/ʉ̌)|Vv|Ww|Yy|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|agq|work=To kə Kəzə̀ kə̀ Fughu ko|author=Cameroon Association for Bible Translation and Literacy|year=2024|entryurl=https://www.bible.com/bible/2620/1TH.1.AGQ|entry=1 Tɛ̀sàlonìan 1}}
=={{langname|bax}}==
==={{ĐM|letter}}===
{{letter|bax}}
#Chữ '''{{l|bax|ɔ}} viết thường''' với dấu thanh thấp.
==={{ĐM|see}}===
*{{letters|lang=bax|sc=Latn|qual=Bảng chữ cái Latinh tiếng Bamum|Aa|(Áá)|(Àà)|(Ǎǎ)|(Āā)|(Ââ)|Bb|Ɓɓ|Dd|Gb/gb|Mb/mb|Ee|(Éé)|(Èè)|(Ěě)|(Ēē)|(Êê)|Ɛɛ|(Ɛ́/ɛ́)|(Ɛ̀/ɛ̀)|(Ɛ̌/ɛ̌)|(Ɛ̄/ɛ̄)|(Ɛ̂/ɛ̂)|Əə|(Ə́/ə́)|(Ə̀/ə̀)|(Ə̌/ə̌)|(Ə̄/ə̄)|(Ə̂/ə̂)|Ff|Gg|Ɣɣ|Ii|(Íí)|(Ìì)|(Ǐǐ)|(Īī)|(Îî)|Jj|Kk|Kp/kp|Ll|Mm|Ŋŋ|Nn|Ny/ny|Oo|(Óó)|(Òò)|(Ǒǒ)|(Ōō)|(Ôô)|Ɔɔ|(Ɔ́/ɔ́)|(Ɔ̀/ɔ̀)|(Ɔ̌/ɔ̌)|(Ɔ̄/ɔ̄)|(Ɔ̂/ɔ̂)|Pp|Rr|Ss|ʃ/sh|Tt|Uu|(Úú)|(Ùù)|(Ǔǔ)|(Ūū)|(Ûû)|Üü|(Ǘǘ)|(Ǜǜ)|(Ǚǚ)|(Ǖǖ)|(Ü̂/ü̂)|Ʉʉ|(Ʉ́/ʉ́)|(Ʉ̀/ʉ̀)|(Ʉ̌/ʉ̌)|(Ʉ̄/ʉ̄)(Ʉ̂/ʉ̂)|Vv|Ww|Yy|Zz|ʼ}}
=={{langname|bsq}}==
==={{ĐM|letter}}===
{{letter|bsq}}
#Chữ '''{{l|bsq|ɔ}} viết thường''' với dấu thanh điệu ◌̀ .
#:{{ux|bsq|N'''ɔ̀'''ɓà|[[s:Dân số Ký|Dân số Ký]]|inline=1}}
==={{ĐM|see}}===
*{{letters|lang=bsq|sc=Latn|qual=Bảng chữ cái Latinh tiếng Bassa|Aa|(Áá)|(Àà)|(Ǎǎ)|(Ââ)|(Ãã)|Bb|Ɓɓ|Cc|Dd|Ɖɖ|Dy/dy|Ɛɛ|(Ɛ́/ɛ́)|(Ɛ̀/ɛ̀)|(Ɛ̌/ɛ̌)|(Ɛ̂/ɛ̂)|(Ɛ̃/ɛ̃)|Ee|(Éé)|(Èè)|(Ěě)|(Êê)|Ff|Gg|Gb/gb|Gm/gm|Hh|Hw/hw|Ii|(Íí)|(Ìì)|(Ǐǐ)|(Îî)|(Ĩĩ)|Jj|Kk|Kp/kp|Mm|Nn|Ny/ny|Ɔɔ|(Ɔ́/ɔ́)|(Ɔ̀/ɔ̀)|(Ɔ̌/ɔ̌)|(Ɔ̂/ɔ̂)|(Ɔ̃/ɔ̃)|Oo|(Óó)|(Òò)|(Ǒǒ)|(Ôô)|Pp|Ss|Tt|Uu|(Úú)|(Ùù)|(Ǔǔ)|(Ûû)|(Ũũ)|Vv|Ww|Xw/xw|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|en|work=Bassa-English Dictionary|author=CEFL|year=2025|entryurl=https://cefliberia.org/bassa/bassa-dictionary/o2/|entry=Ɔ}}
*{{Chú thích web|bsq|work=Ɓǎsɔ́ɔ̀ Báɓòɔ̀|author=Bible Society in Liberia|year=2025|entryurl=https://www.bible.com/bible/2826/NUM.1.%C6%81B02|entry=Nɔ̀ɓà 1}}
=={{langname|bqc}}==
==={{ĐM|letter}}===
{{letter|bqc}}
#Chữ '''{{l|bqc|ɔ}} viết thường''' với dấu thanh thấp.
#:{{quote|bqc|Dii Lua tò lí bui pii b'''ɔ̀'''lɛ tɔɔlɛ. Lípiɔ kɛfɛũ, mɛ́ an bɛ blea na. Lí wɛ̃nide ku lupi guo, mɛ́ lí pɔ ì to wà maa ń vãio dɔ̃ ku we lɔ.|Giê-hô-va Đức Chúa Trời khiến đất mọc lên các thứ cây đẹp mắt, và trái thì ăn ngon; giữa vườn lại có cây sự sống cùng cây biết đều thiện và đều ác. ([[s:Sáng thế Ký/2#2:9|Sáng thế Ký 2:9]])}}
==={{ĐM|see}}===
*{{letters|lang=bqc|sc=Latn|qual=Bảng chữ cái Latinh tiếng Boko|Aa|Bb|Dd|Ee|Ɛɛ|Ff|Gg|Gb/gb|Ii|Kk|Kp/kp|Ll|Mm|Nn|Oo|Ɔɔ|Pp|Rr|Ss|Tt|Uu|Vv|Ww|Yy|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|bqc|work=Boko Bible|author=SIM International|year=2024|entryurl=https://www.bible.com/bible/1155/GEN.2.BOO2024|entry=Daa 2}}
=={{langname|bus}}==
==={{ĐM|letter}}===
{{letter|bus}}
#Chữ '''{{l|bus|ɔ}} viết thường''' với dấu thanh điệu ◌̀ .
#:{{quote|bus|Èe a bɛgɛ kɛɛ a píngi, bensↄ̃ à n'''ɔ̀'''sɛ yàka, kɛ̀ a à gyãkɛna baaru mà yãnzi.|Vì người rất ước-ao thấy anh em hết thảy, và đã lo về anh em nghe mình bị đau-ốm. ([[s:Phi-líp/2#2:26|Phi-líp 2:26]])}}
==={{ĐM|see}}===
*{{letters|lang=bus|sc=Latn|qual=Bảng chữ cái Latinh tiếng Bokobaru|Aa|Aa/aa|Ãã|Ãa/ãa|Bb|Dd|Ee|Ee/ee|Ẽẽ|Ẽe/ẽe|Ɛɛ|Ɛɛ/ɛɛ|Ɛ̃/ɛ̃|Ɛ̃ɛ/ɛ̃ɛ|Ff|Gg|Gb/gb|Hh|Ii|Ii/ii|Ĩĩ|Ĩi/ĩi|Kk|Kp/kp|Ll|Mm|Nn|Oo|Oo/oo|Õõ|Õo/õo|Ɔɔ|Ɔɔ/ɔɔ|Ɔ̃/ɔ̃|Ɔ̃ɔ/ɔ̃ɔ|Pp|Rr|Ss|Tt|Uu|Uu/uu|Ũũ|Ũu/ũu|Vv|Ww|Yy|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|bus|author=SIM International|entryurl=https://www.bible.com/bible/3085/PHP.2.BBB|entry=FILIPIDEENƆ 2|year=2024|work=Bokobaru Bible}}
=={{langname|bqp}}==
==={{ĐM|letter}}===
{{letter|bqp}}
#Chữ '''{{l|bqp|ɔ}} viết thường''' với dấu thanh thấp.
#:{{quote|bqp|Lɛn má de z'''ɔ̀''' ũ Luda dokanɛ ma laasun gũn lɛ, akũsɔ̃ má de z'''ɔ̀''' ũ durunna ikoonɛ ma dàa gũn.|Như vậy, thì chính mình tôi lấy trí-khôn phục luật-pháp của Đức Chúa Trời, nhưng lấy xác-thịt phục luật-pháp của tội-lỗi. ([[s:Rô-ma/7#7:25|Rô-ma 7:25]])}}
==={{ĐM|see}}===
*{{letters|lang=bqp|sc=Latn|qual=Bảng chữ cái Latinh tiếng Busa|Aa||Aa/aa|Ãã|Ãa/ãa|Bb|Dd|Ee|Ee/ee|Ẽẽ|Ẽe/ẽe|Ɛɛ|Ɛɛ/ɛɛ|Ɛ̃/ɛ̃|Ɛ̃ɛ/ɛ̃ɛ|Ff|Gg|Gb/gb|Hh|Ii|Ii/ii|Ĩĩ|Ĩi/ĩi|Kk|Kp/kp|Ll|Mm|Nn|Oo|Oo/oo|Õõ|Õo/õo|Ɔɔ|Ɔɔ/ɔɔ|Ɔ̃/ɔ̃|Ɔ̃ɔ/ɔ̃ɔ|Pp|Rr|Ss|Tt|Uu|Uu/uu|Ũũ|Ũu/ũu|Vv|Ww|Yy|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|bqp|author=SIM International|entryurl=https://www.bible.com/bible/3084/ROM.7.BB2005|entry=ROMUDENƆ 7|year=2005|work=Bisã Bible}}
=={{langname|dnj}}==
==={{ĐM|letter}}===
{{letter|dnj}}
#Chữ '''{{l|dnj|ɔ}} viết thường''' với dấu thanh cực thấp.
#:{{ux|dnj|Aà lɛ̀ Yàwɛ g'''ɔ̀'''.|Tôi đã cầu-xin nó nơi Đức Giê-hô-va. ([[s:I Sa-mu-ên/1#1:20|I Sa-mu-ên 1:20]])}}
==={{ĐM|see}}===
*{{letters|lang=dnj|sc=Latn|qual=Bảng chữ cái Latinh tiếng Dan ở Liberia|Aa|Bb|Ɓɓ|Dd|Ɗɗ|Ee|Ɛɛ|Ff|Gg|GB/gb|Hh|Ii|Kk|KP/kp|KW/kw|Ll|Mm|Nn|NW/nw|NY/ny|Ŋŋ|Oo|Ɔɔ|Əə|Ɵɵ|Pp|Rr|Ss|Tt|Uu|Ɥɥ|Vv|Ww|Xx|Yy|Zz}}
*{{letters|lang=dnj|sc=Latn|qual=Bảng chữ cái Latinh tiếng Dan Tây ở Bờ Biển Ngà|Aa|AƆ/aɔ|Bb|BH/bh|Dd|DH/dh|Ee|Ɛɛ|Ëë|ƐA/ɛa|Ff|Gg|GB/gb|GW/gw|Ii|Kk|KP/kp|KW/kw|Ll|Mm|Nn|NG/ng|Oo|Ɔɔ|Öö|Pp|Rr|Ss|Tt|Uu|Üü|Vv|Ww|Yy|Zz}}
*{{letters|lang=dnj|sc=Latn|qual=Bảng chữ cái Latinh tiếng Dan Đông ở Bờ Biển Ngà|Aa|Œœ|Bb|BH/bh|Dd|DH/dh|Ee|Ʌʌ|Ɛɛ|Ææ|Ff|Gg|GB/gb|GW/gw|Hh|Ii|Ɩɩ|Kk|KP/kp|KW/kw|Ll|Mm|Nn|Oo|ɤ|Ɔɔ|Pp|Rr|Ss|Tt|Uu|Ɯɯ|Ʋʋ|Vv|Ww|Yy|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|dnj|author=Bible Society in Liberia|entryurl=https://www.bible.com/bible/2828/1SA.1.DHB|entry=1 Sámìɔ̀ 1|year=2025|work=Aaɓi Kwì}}
*{{Chú thích web|dnj|author=Wycliffe Bible Translators|entryurl=https://www.bible.com/bible/1831/EPH.1.DNJBL|entry=Efɛzö 1|year=1991|work=Dan Blowo (Yacouba) Nouveau Testament}}
=={{langname|daa}}==
==={{ĐM|letter}}===
{{letter|daa}}
#Chữ '''{{l|daa|ɔ}} viết thường''' với dấu thanh thấp.
#:{{ux|daa|'''ɔ̀ɔ̀'''lìnkàw|bệnh [[cảm lạnh]]|inline=1}}
==={{ĐM|see}}===
*{{letters|lang=daa|sc=Latn|qual=Bảng chữ cái Latinh tiếng Dangaléat|Aa|Bb|Ɓɓ|Cc|Dd|Ɗɗ|Ee|Ɛɛ|Gg|Hh|Ii|Jj|Kk|Ll|Mm|Nn|Ŋŋ|N̰/n̰|Oo|Ɔɔ|Pp|Rr|Ss|Tt|Uu|Ww|Yy|Ƴƴ|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|fr|author=Association pour la Promotion de la Langue Dangaléat®|year=2016|entryurl=https://www.webonary.org/dangla/browse/?key=daa&letter=%C9%94&lang=en|entry=ɔ|publisher=SIL Internationa|work=Dangaleat - French Dictionary}}
=={{langname|dur}}==
==={{ĐM|letter}}===
{{letter|dur}}
#Chữ '''{{l|dur|ɔ}} viết thường''' với dấu thanh thấp.
#:{{ux|dur|b'''ɔ̀'''g|[[thấm]]|inline=1}}
==={{ĐM|see}}===
*{{letters|lang=dur|sc=Latn|qual=Bảng chữ cái Latinh tiếng Dii|Aa|Bb|Ɓɓ|Dd|Ee|Ɛɛ|Əə|Ff|Gg|Gb/gb|Hh|Ii|Ɨɨ|Ll|Mm|ʼM/ʼm|Mb/mb|Mgb/mgb|Nn|ʼN/ʼn|Nd/nd|Nz/nz|Ŋŋ|Ŋg/ŋg|Oo|Ɔɔ|Rr|Ss|Uu|Ʉʉ|Vv|Vb/vb|Ww|ʼW/ʼw|Yy|ʼY/ʼy|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|fr|editor=Lee E. Bohnhoff|work= Dii (duru) dictionary|year=2018|entry=bɔ̀g|entryurl=https://www.webonary.org/dii/en/ga2660d8d-8794-4ef9-97dd-83346b56b7ef/|location=Equipe de Littérature Dii, Mbé par Ngaoundéré, Cameroun|publisher=SIL International}}
=={{langname|gej}}==
==={{ĐM|letter}}===
{{letter|gej}}
#Chữ '''{{l|gej|ɔ}} viết thường''' với dấu thanh điệu ◌̀ .
#:{{quote|gej|Mia Tɔhon'''ɔ̀''' Yesù Kristò be màje ne n'''ɔ̀''' ku mì.|Nguyền xin ân-điển của Đức Chúa Jêsus-Christ ở với tâm-thần anh em! ([[s:Phi-lê-môn#25|Phi-lê-môn 1:25]])}}
==={{ĐM|see}}===
*{{letters|lang=gej|sc=Latn|qual=Bảng chữ cái Latinh tiếng Gen|Aa|Bb|Cc|Dd|Ɖɖ|Ee|Ɛɛ|Ff|Gg|GB/gb|Ɣɣ|Hh|Xx|Ii|Jj|Kk|KP/kp|Ll|Mm|Nn|NY/ny|Ŋŋ|Ɔɔ|Pp|Ss|Tt|Uu|Ʋʋ|Vv|Ww|Yy|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|gej|author=Bible Society of Togo|work=GƐ̃GBE BIBLIA 2014|entry=Filemɔ̀n 1|entryurl=https://www.bible.com/bible/2236/PHM.1.GEN|year=2014}}
=={{langname|bbj}}==
==={{ĐM|letter}}===
{{letter|bbj}}
#Chữ '''{{l|bbj|ɔ}} viết thường''' với dấu thanh thấp.
#:{{quote|bbj|Nwə kɑ́ tá yɔ pu a pɑ kwi shw'''ɔ̀'''p ba mghɛ mhɔ pəmtə dzʉ́ywə?|Làm sao thầy các ngươi ngồi ăn chung với người thâu thuế và kẻ xấu nết vậy? ([[s:Ma-thi-ơ/9#9:11|Ma-thi-ơ 9:11]])}}
===={{ĐM|see}}====
*{{letters|lang=bbj|sc=Latn|qual=Bảng chữ cái Latinh tiếng Ghomálá'|Aa|(Áá)|(Àà)|(Ǎǎ)|(Ââ)|Bb|Bv/bv|Cc|Dd|Dz/dz|Ee|(Éé)|(Èè)|(Ěě)|(Êê)|Əə|(Ə́/ə́)|(Ə̀/ə̀)|(Ə̌/ə̌)|(Ə̂/ə̂)|Aə/aə|(Aə́/aə́)|(Aə̀/aə̀)|(Aə̌/aə̌)|(Aə̂/aə̂)|Ɛɛ|(Ɛ́/ɛ́)|(Ɛ̀/ɛ̀)|(Ɛ̌/ɛ̌)|(Ɛ̂/ɛ̂)|Ff|Gg|Gh/gh|Hh|Ii|(Íí)|(Ìì)|(Ǐǐ)|(Îî)|Jj|Kk|Ll|Mm|Nn|Ny/ny|Nt/nt|Ŋŋ|Ŋk/ŋk|Oo|(Óó)|(Òò)|(Ǒǒ)|(Ôô)|Ɔɔ|(Ɔ́/ɔ́)|(Ɔ̀/ɔ̀)|(Ɔ̌/ɔ̌)|(Ɔ̂/ɔ̂)|Pp|Pf/pf|Mpf/mpf|Rr|Ss|Sh/sh|Tt|Ts/ts|Uu|(Úú)|(Ùù)|(Ǔǔ)|(Ûû)|Ʉʉ|(Ʉ́/ʉ́)|(Ʉ̀/ʉ̀)|(Ʉ̌/ʉ̌)|(Ʉ̂/ʉ̂)|Vv|Zz|Zh/zh|ʼ}}
==={{ĐM|ref}}===
*{{Chú thích web|bbj|work=Ghomala New Testament|author=Bible Society of Cameroon|year=2025|entryurl=https://www.bible.com/bible/907/MAT.9.NTGOMALA|entry=Matio 9}}
=={{langname|ife}}==
==={{ĐM|letter}}===
{{letter|ife}}
#Chữ '''{{l|ife|ɔ}} viết thường''' với dấu thanh thấp.
#:{{ux|ife|'''ɔ̀'''bɔ́|[[gốc]]|inline=1}}
==={{ĐM|see}}===
*{{letters|lang=ife|sc=Latn|qual=Bảng chữ cái Latinh tiếng Ifè|Aa|Ãã|Bb|Ɖɖ|Dz/dz|Ee|Ɛɛ|Ɛ̃/ɛ̃|Ff|Gg|Gb/gb|Hh|Ii|Ĩĩ|Kk|Kp/kp|Ll|Mm|Nn|Ny/ny|Ŋŋ|Oo|Ɔɔ|Ɔ̃/ɔ̃|Rr|Ss|Tt|Ts/ts|Uu|Ũũ|Ww|Yy}}
==={{ĐM|ref}}===
*{{Chú thích web|editor=Mary Gardner & Elizabeth Graveling|entryurl=https://www.webonary.org/ife/en/browse/browse-vernacular-french/?key=ife&letter=%C9%94|entry=ɔ|year=2016|work=Ife–French-English Dictionary|publisher=SIL International}}
=={{langname|ken}}==
==={{ĐM|letter}}===
{{letter|ken}}
#Chữ '''{{l|ken|ɔ}} viết thường''' với dấu thanh thấp.
==={{ĐM|see}}===
*{{letters|lang=ken|sc=Latn|qual=Bảng chữ cái Latinh tiếng Kenyang|Aa|(Áá)|(Àà)|(Ǎǎ)|Bb|Bh/bh|Ch/ch|Dd|Ee|(Éé)|(Èè)|(Ěě)|Ɛɛ|(Ɛ́/ɛ́)|(Ɛ̀/ɛ̀)|(Ɛ̌/ɛ̌)|Ff|Gg|Gb/gb|Gh/gh|Ii|(Íí)|(Ìì)|(Ǐǐ)|Ɨɨ|(Ɨ́/ɨ́)|(Ɨ̀/ɨ̀)|(Ɨ̌/ɨ̌)|Jj|Kk|Kp/kp|Mm|Nn|Ŋŋ|Ny/ny|Oo|(Óó)|(Òò)|(Ǒǒ)|Ɔɔ|(Ɔ́/ɔ́)|(Ɔ̀/ɔ̀)|(Ɔ̌/ɔ̌)|Pp|Rr|Ss|Tt|Uu|(Úú)|(Ùù)|(Ǔǔ)|Ʉʉ|(Ʉ́/ʉ́)|(Ʉ̀/ʉ̀)|(Ʉ̌/ʉ̌)|Ww|Yy}}
==={{ĐM|ref}}===
*{{Chú thích sách|en|author=Mbuagbaw, Tanyi Eyong|year=1999|title=[https://www.sil.org/system/files/reapdata/60/11/80/60118082817094669796762830775247314820/kenorth1.pdf Kenyang orthography guide]|publisher=Cameroon Association for Bible Translation and Literacy (CABTAL)|location=Yaoundé, Cameroon|page=9}}
*{{Chú thích web|ken|work=Kenyang|author=Cameroon Association for Bible Translation and Literacy|year=2010|entryurl=https://www.bible.com/bible/388/ACT.2.KEN|entry=Ɛkáti Bɛtɨk Bǒnto 2}}
=={{langname|gkp}}==
==={{ĐM|letter}}===
{{letter|gkp}}
#Chữ '''{{l|gkp|ɔ}} viết thường''' với dấu thanh thấp.
#:{{ux|gkp|Dí g'''ɔ̀'''lɔŋ a gɛɛ dí kpɔŋ mâa nuu da fé kɛ́ ní ŋɔ́nɔ naa.|Linh-hồn bèn nao-sờn trong mình họ. ([[s:Thi thiên/107#107:5|Thi thiên 107:5]])}}
==={{ĐM|see}}===
*{{letters|lang=gkp|sc=Latn|qual=Bảng chữ cái năm 1989|a|(á)|(à)|(à)|(â)|(ã)|b|ɓ|d|e|(é)|(è)|(ê)|ə|ɛ|(ɛ́)|(ɛ̀)|(ɛ̂)|(ɛ̃)|f|g|ɠ|gb|gw|h|hw|i|(í)|(ì)|(î)|(ĩ)|j|k|kp|kw|l|m|n|nw|ɲ|ŋ|o|(ó)|(ò)|(ô)|ɔ|(ɔ́)|(ɔ̀)|(ɔ̂)|(ɔ̃)|p|r|s|t|u|(ú)|(ù)|(û)|(ũ)|v|w|y}}
==={{ĐM|ref}}===
*{{Chú thích web|gkp|author=Bible Society in Liberia|work=Bible|year=2012|entry=Wule-woo-ŋa 107|entryurl=https://www.bible.com/bible/500/PSA.107.KWB}}
=={{langname|blh}}==
==={{ĐM|letter}}===
{{letter|blh}}
#Chữ '''{{l|blh|ɔ}} viết thường''' với dấu thanh thấp.
#:{{quote|blh|W'''ɔ̀''' j'''ɔ̀ɔ̀''' l'''ɔ̀'''ɔn fɔŋwúì dè ŋwɔn'''ɔ̀''' l'''ɔ̀'''ɔn fɔŋwu w'''ɔ̀'''lɔ́ èè nyìnìdí dí de m'''ɔ̀'''lì m'''ɔ̀'''líì wòlíì gbǐn bò.|Trong Ngài có sự sống, sự sống là sự sáng của loài người. ([[s:Giăng/1#1:4|Giăng 1:4]])}}
==={{ĐM|see}}===
*{{letters|lang=blh|sc=Latn|qual=Bảng chữ cái Latinh tiếng Kuwaa|a|b|d|e|ɛ|f|gb|ɣ|i|j|k|kp|kw|l|m|mb|n|nd|nj|ny|ŋ|ŋg|ŋgb|ŋw|o|ɔ|p|s|t|u|v|w|y}}
==={{ĐM|ref}}===
*{{Chú thích web|blh|author=Bible Society in Liberia |work=Bible.is|year=1988|entryurl=https://live.bible.is/bible/BLHLBT/JHN/1|entry=JƆ̀Ɔ́N Wɔ Tedí Kàí É Kàìn Jisɛ̀ Kolàì 1}}
=={{langname|knp}}==
==={{ĐM|letter}}===
{{letter|knp}}
#Chữ '''{{l|knp|ɔ}} viết thường''' với dấu thanh trung thấp.
#:{{quote|knp|mb'''ɔ̀ɔ̀'''rɨ̀|[[sôi]]|inline=1}}
==={{ĐM|see}}===
*{{letters|lang=knp|sc=Latn|qual=Bảng chữ cái Latinh tiếng Kwanja|Aa|(A̋/a̋)|(Áá)|(Àà)|(Ȁȁ)|(Ǎǎ)|(Ââ)|Bb|Cc|Dd|Ee|(E̋/e̋)|(Éé)|(Èè)|(Ȅȅ)|(Ěě)|(Êê)|Ɛɛ|(Ɛ̋/ɛ̋)|(Ɛ́/ɛ́)|(Ɛ̀/ɛ̀)|(Ɛ̏/ɛ̏)|(Ɛ̌/ɛ̌)|(Ɛ̂/ɛ̂)|Əə|(Ə̋/ə̋)|(Ə́/ə́)|(Ə̀/ə̀)|(Ə̏/ə̏)|(Ə̌/ə̌)|(Ə̂/ə̂)|Ff|Gg|Gb/gb|Hh|Ii|(I̋/i̋)|(Íí)|(Ìì)|(Ȉȉ)|(Ǐǐ)|(Îî)|Ɨɨ|(Ɨ̋/ɨ̋)|(Ɨ́/ɨ́)|(Ɨ̀/ɨ̀)|(Ɨ̏/ɨ̏)|(Ɨ̌/ɨ̌)|(Ɨ̂/ɨ̂)|Jj|Kk|Kp/kp|Ll|Mm|Nn|Ny/ny|Ŋŋ|Oo|(Őő)|(Óó)|(Òò)|(Ȍȍ)|(Ǒǒ)|(Ôô)|Ɔɔ|(Ɔ̋/ɔ̋)|(Ɔ́/ɔ́)|(Ɔ̀/ɔ̀)|(Ɔ̏/ɔ̏)|(Ɔ̌/ɔ̌)|(Ɔ̂/ɔ̂)|Pp|Rr|Ss|Tt|Uu|(Űű)|(Úú)|(Ùù)|(Ȕȕ)|(Ǔǔ)|(Ûû)|Ʉʉ|(Ʉ̋/ʉ̋)|(Ʉ́/ʉ́)|(Ʉ̀/ʉ̀)|(Ʉ̏/ʉ̏)|(Ʉ̌/ʉ̌)|(Ʉ̂/ʉ̂)|Vv|Ww|Yy}}
==={{ĐM|ref}}===
*{{Chú thích sách|fr|author=Joan & Martin Weber|year=2008|title=[https://www.sil.org/system/files/reapdata/10/85/21/108521937454046977451763994759809460134/KwanjaOrthographyGuide2008_u.pdf Précis d'orthographe pour la langue kwanja (dialecte súndànɨ́)]|publisher=Eglise Evangélique Luthérienne du Cameroun, Association Nationale des Comités de Langues Camerounaises (ANACLAC)|location=Cameroun|page=3}}
*{{Chú thích web|knp|author=Wycliffe Associates|work=Ndung Regular Bible|publisher=Bible in Every Language|year=2022|entryurl=https://bibleineverylanguage.org/resources/languages/knp-x-ndung?resource-type=Ndung%20reg&book=RUT&chapter=1|entry=Derwa rúìt 1}}
=={{langname|bwj}}==
==={{ĐM|letter}}===
{{letter|bwj}}
#Chữ '''{{l|bwj|ɔ}} viết thường''' với dấu thanh thấp.
#:{{quote|bwj|Nín k'''ɔ̀''' fòoní k'''ɔ̀'''pe lɛ ɛ́ Dɔfĩn hiì ɛ́ wi l'''ɔ̀'''n. Ɲunsɔ Dɔfĩn ɛ́ wi àá kɔ.|Hỡi người được ơn, mừng cho ngươi; Chúa ở cùng ngươi. ([[s:Lu-ca/1#1:28|Lu-ca 1:28]])}}
==={{ĐM|see}}===
*{{letters|lang=bwj|sc=Latn|qual=Bảng chữ cái Latinh tiếng Láá Láá Bwamu|Aa|Bb|Ɓɓ|Cc|Dd|Ee|Ɛɛ|Ff|Hh|Ii|Kk|Kh/kh|Ll|Mm|Nn|Ɲɲ|Oo|Ɔɔ|Pp|Rr|Ss|Tt|Uu|Vv|Ww|Yy|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|bwj|author=L’Association Nationale pour la Traduction de la Bible et l’Alphabétisation|work=Buamu Laa|year=2023|entry=Liike 1|entryurl=https://www.bible.com/bible/3692/LUK.1.BWJ}}
=={{langname|mas}}==
==={{ĐM|letter}}===
{{letter|mas}}
#Chữ '''{{l|mas|ɔ}} viết thường''' với dấu thanh thấp.
==={{ĐM|see}}===
*{{letters|lang=mas|sc=Latn|qual=Bảng chữ cái Latinh tiếng Maasai|Aa|(Áá)|(Àà)|(Ââ)|Bb|Cc|Dd|Ee|(Éé)|(Èè)|(Êê)|Ɛɛ|(Ɛ́/ɛ́)|(Ɛ̀/ɛ̀)|(Ɛ̂/ɛ̂)|Gg|Hh|Ii|(Íí)|(Ìì)|(Îî)|Ɨɨ|(Ɨ́/ɨ́)|(Ɨ̀/ɨ̀)|(Ɨ̂/ɨ̂)|Jj|Kk|Ll|Mm|Nn|Ny/ny|Ŋŋ|Oo|(Óó)|(Òò)|(Ôô)|Ɔɔ|(Ɔ́/ɔ́)|(Ɔ̀/ɔ̀)|(Ɔ̂/ɔ̂)|Pp|Rr|Rr/rr|Ss|Sh/sh|Tt|Uu|(Úú)|(Ùù)|(Ûû)|Ʉʉ|(Ʉ́/ʉ́)|(Ʉ̀/ʉ̀)|(Ʉ̂/ʉ̂)|Ww|Wu/wu|Yy|Yi/yi|'}}
==={{ĐM|ref}}===
*{{Chú thích web|author=Leonard Ole-Kotikash & Doris L. Payne|work=Maa dictionary|entry=Ɔ - ɔ|year=2008|url=https://pages.uoregon.edu/maasai/Maa%20Lexicon/lexicon/main.htm}}
=={{langname|mcu}}==
==={{ĐM|pron}}===
*{{IPA|mcu|[ɔ˨]}}
==={{ĐM|letter}}===
{{letter|mcu}}
#Chữ '''{{l|mcu|ɔ}} viết thường''' với dấu thanh thấp.
#:{{quote|mcu|B'''ɔ̀''' déì kem sue b'''ɔ̀''' seé b'''ɔ̀''' nùà koô doô yoòr, bɔ́ né bɔ́ selé, bɔ́ né bɔ́ wulá ndɔ.|còn những kẻ khác bắt đầy-tớ của vua, mắng-chưởi và giết đi. ([[s:Ma-thi-ơ/22#22:6|Ma-thi-ơ 22:6]])}}
===={{ĐM|see}}====
*{{letters|lang=mcu|sc=Latn|qual=Bảng chữ cái Latinh tiếng Mambila Cameroon|Aa|Bb|Ch/ch|Dd|Dz/dz|Ee|Ɛɛ|Ff|Gg|Hh|Ii|Ɨɨ|Jj|Kk|Ll|Mm|Nn|Ny/ny|Ŋŋ|Oo|Ɔɔ|Pp|Ss|Sh/sh|Tt|Ts/ts|Uu|Ʉʉ|Vv|Ww|Yy|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|mcu|entryurl=https://www.bible.com/bible/2226/MAT.22.MCU|entry=Matíô 22|work=Mambilla NT (Cameroon)|year=2001|author=Wycliffe Bible Translators, Inc.}}
=={{langname|ntm}}==
==={{ĐM|letter}}===
{{letter|ntm}}
#Chữ '''{{l|ntm|ɔ}} viết thường''' với dấu huyền (grave).
#:{{ux|ntm|Fìdèmɔ́'''ɔ̀'''|[[s:Phi-lê-môn|Phi-lê-môn]]|inline=1}}
===={{ĐM|see}}====
*{{letters|lang=ntm|sc=Latn|qual=Bảng chữ cái Latinh tiếng Nateni|a|a̰|ā|á|b|c|d|e|ḛ|ē|é|ɛ|ɛ̰|ɛ̄|ɛ́|f|g|h|i|ḭ|ī|í|j|k|l|m|n|o|o̰|ō|ó|ɔ|ɔ̰|ɔ̄|ɔ́|p|q|r|s|t|u|ṵ|ū|ú|v|w|x|y|z}}
==={{ĐM|ref}}===
*{{Chú thích web|entryurl=https://www.webonary.org/nateni/en/browse/browse-vernacular-english/?key=ntm&letter=%C9%94|entry=ɔ|work=Nateni – English Dictionary|year=2019|publisher=SIL International®|editor=Esaïe Winrikou}}
*{{Chú thích web|ntm|entryurl=https://live.bible.is/bible/NTMWBT/PHM/1|entry=FÌDÈMƆ́Ɔ̀ 1|work=Bible.is|year=2018|author=Wycliffe Bible Translators, Inc.}}
=={{langname|nga}}==
==={{ĐM|letter}}===
{{letter|nga}}
#Chữ '''{{l|nga|ɔ}} viết thường''' với dấu thanh thấp.
#:{{ux|nga|'''ɔ̀'''ì|[[giấc ngủ]]|inline=1}}
===={{ĐM|see}}====
*{{letters|lang=nga|sc=Latn|qual=Bảng chữ cái Latinh tiếng Ngbaka|Aa|Bb|ʼB/ʼb|Dd|ʼD/ʼd|Ee|Ɛɛ|Ff|Gg|Gb/gb|Hh|Ii|Kk|Kp/kp|Ll|Mm|Nn|Ng/ng|Ngg/ngg|Oo|Ɔɔ|Ss|Tt|Uu|Vv|Ww|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|fr|editor=Marcel Henrix|work=Ngbaka – French Dictionary|year=2020|entry=ɔ|entryurl=https://www.webonary.org/ngbaka/en/browse/browse-vernacular-french/?key=nga&letter=%C9%94}}
*{{Chú thích web|nga|author=Bible Society of the Democratic Republic of Congo|work=WE NU GALE|year=1995|entry=GBA WENƆ 26|entryurl=https://www.bible.com/bible/2920/PRO.26.NGB}}
=={{langname|niy}}==
==={{ĐM|letter}}===
{{letter|niy}}
#Chữ '''{{l|niy|ɔ}} viết thường''' với dấu thanh thấp.
#:{{ux|niy|Ɛ̀fɛs'''ɔ̀'''|[[s:Ê-phê-sô|Ê-phê-sô]]|inline=1}}
===={{ĐM|see}}====
*{{letters|lang=niy|sc=Latn|qual=Bảng chữ cái Latinh tiếng Ngiti|a|b|bh|d|dh|dr|dy|dz|e|ɛ|f|g|gb|gy|h|i|ɨ|k|kp|ky|l|m|mb|mv|n|nd|ndr|ng|ngb|ngy|ny|nz|o|ɔ|p|pb|pf|r|s|t|td|tdy|tr|ts|u|ʉ|v|vh|w|y|z}}
==={{ĐM|ref}}===
*{{Chú thích web|niy|author=Wycliffe Bible Translators, Inc.|work=UNGBÒTA-ƆWɄ́TÁ TƆ́ BHǓKÙ|year=2015|entry=Ɛ̀fɛsɔ̀ 1|entryurl=https://www.bible.com/bible/1431/EPH.1.NIY}}
=={{langname|bud}}==
==={{ĐM|pron}}===
*{{IPA|bud|/ɔ̀/}}
==={{ĐM|letter}}===
{{letter|bud}}
#Chữ '''{{l|bud|ɔ}} viết thường''' với dấu thanh thấp.
#:{{ux|bud|c'''ɔ̀'''tī|bị [[ỉa chảy]]|inline=1}}
===={{ĐM|see}}====
*{{letters|lang=bud|sc=Latn|qual=Bảng chữ cái Latinh tiếng Ntcham|Aa|(Áá)|(Àà)|Bb|(B́/b́)|Cc|Dd|Ee/ee|(Ée/ée)|Èe/èe|Ff|Gg|Gb/gb|Ii|(Íí)|(Ìì)|Jj|Kk|Kp/kp|Ll|(Ĺĺ)|Mm|(Ḿḿ)|Nn|(Ńń)|Ny/ny|Ŋŋ|Ŋm/ŋm|Oo/oo|(Óo/óo)|(Òo/òo)|Ɔɔ|(Ɔ́/ɔ́)|(Ɔ̀/ɔ̀)|Pp|Ss|Tt|Uu|(Úú)|(Ùù)|Ww|Yy}}
==={{ĐM|ref}}===
*{{Chú thích web|entry=cɔ̀tī, cɔ̀tī, cɔ̄tì|entryurl=https://www.webonary.org/ntcham/en/g9ce7cc96-ffbd-4036-bcef-844331ab3fa0/|editor=Samuel Kpagheri|work=Ntcham – English Dictionary|year=2019|publisher=SIL International}}
=={{langname|sbd}}==
==={{ĐM|letter}}===
{{letter|sbd}}
#Chữ '''{{l|sbd|ɔ}} viết thường''' với dấu thanh thấp.
#:{{ux|sbd|d'''ɔ̀'''ɔ̃|[[lưng]]|inline=1}}
===={{ĐM|see}}====
*{{letters|lang=sbd|sc=Latn|qual=Bảng chữ cái Latinh tiếng Samo Nam|Aa|Bb|Dd|Ff|Gg|Hh|Ii|Kk|Ll|Mm|Nn|Pp|Rr|Ss|Tt|Ww|Yy|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|entry=dɔ̀ɔ̃|entryurl=https://www.webonary.org/san-sud/en/ge23d1271-2f6c-476f-be40-f947088b4e84/|author=Urs Niggli|work=Southern San - French - English Dictionary|year=2021|publisher=SIL International}}
*{{Chú thích web|sbd|entryurl=https://www.bible.com/bible/3059/GEN.1.SBPE2011|entry=SGK 1|work=LAWA A BOO SONBORE|year=2011|author=Bible Society of Burkina Faso}}
=={{langname|sev}}==
==={{ĐM|letter}}===
{{letter|sev}}
#Chữ '''{{l|sev|ɔ}} viết thường''' với dấu thanh thấp.
#:{{quote|sev|Mi 'f'''ɔ̀'''li ki nɛ̄, puʔɔ ma cìile.|Ta khứng, hãy sạch đi. ([[s:Mác/1#1:41|Mác 1:41]])}}
==={{ĐM|see}}===
*{{letters|lang=sev|sc=Latn|qual=Bảng chữ cái Latinh tiếng Senoufo Nyarafolo|Aa|Ââ|Ǎǎ|Bb|Cc|Dd|Ee|Êê|Ěě|Ēē|Ɛɛ|Ɛ̂/ɛ̂|Ɛ̌/ɛ̌|Ɛ̄/ɛ̄|Ff|Gg|ʔ/ʔ|Hh|Ii|Îî|Ǐǐ|Īī|Jj|Kk|Ll|Mm|Nn|Ŋŋ|Oo|Ɔɔ|Ɔ̌/ɔ̌|Pp|Rr|Ss|Tt|Uu|Vv|Ww|Yy|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|sev|author=Wycliffe Bible Translators, Inc.|entryurl=https://www.bible.com/bible/2990/MRK.1.SEV|entry=Mariki 1|year=2024|work=Sénoufo, Nyarafolo}}
=={{langname|tbz}}==
==={{ĐM|letter}}===
{{letter|tbz}}
#Chữ '''{{l|tbz|ɔ}} viết thường''' với dấu thanh thấp.
#:{{quote|tbz|ti kó kɛtenkɛ̀ dɛtie mpòrímu, iyiɛ nkó dim'''ɔ̀'''nnì diì tù'''ɔ̀'''kɛ, kɛ̀ ti yo tɛnɔ́nkpetɛ dɑbònnì ti ɛì miɛkɛ.|Bóng hoa nở ra trên đất;<br>Mùa hát-xướng đã đến nơi,<br>Và tiếng chim cu nghe trong xứ; ([[s:Nhã ca/2#2:12|Nhã ca 2:12]])}}
==={{ĐM|see}}===
*{{letters|lang=tbz|sc=Latn|qual=Bảng chữ cái Latinh tiếng Tammari|Aa|(Àà)|(Áá)|(Ãã)|(Ã̀/ã̀)|(Ã́/ã́)|Bb|Cc|Dd|Ee|(Èè)|(Éé)|Ɛɛ|(Ɛ̀/ɛ̀)|(Ɛ́/ɛ́)|(Ɛ̃/ɛ̃)|(Ɛ̃̀/ɛ̃̀)|(Ɛ̃́/ɛ̃́)|Ff|Hh|Ii|(Ìì)|(Íí)|(Ĩĩ)|(Ĩ̀/ĩ̀)|(Ĩ́/ĩ́)|Kk|Kp/kp|Mm|(Ḿḿ)|(M̀/m̀)|Nn|(Ńń)|(Ǹǹ)|Oo|(Òò)|(Óó)|Ɔɔ|(Ɔ̀/ɔ̀)|(Ɔ́/ɔ́)|(Ɔ̃/ɔ̃)|(Ɔ̃̀/ɔ̃̀)|(Ɔ̃́/ɔ̃́)|Pp|Rr|Ss|Tt|Uu|(Ùù)|(Úú)|(Ũũ)|(Ũ̀/ũ̀)|(Ṹ/ṹ)|Ww|Yy}}
==={{ĐM|ref}}===
*{{Chú thích sách|fr|author=Annelore Zürcher|title=[https://www.sil.org/system/files/reapdata/18/46/48/18464836488843238420469350815761768632/2725_Zurcher_Phonemes_ditammari_1983.pdf Les phonèmes segmentaux du ditammari: Rapport de recherches]|year=1983|publisher=Société Internationale de Linguistique|location=Lomé}}
*{{Chú thích web|tbz|author= L’Alliance Biblique du Bénin|entryurl=https://live.bible.is/bible/TBZBSB/SNG/21|entry=FƐCANYƐ̀NFƐ̀ 2|year=2001|work=Bibiri - Kuyie Nnaanti Patiri}}
=={{langname|yo}}==
==={{ĐM|pron}}===
*{{yor-IPA|ɔ̀}}
==={{ĐM|letter}}===
{{letter|yo}}
#{{lb|yo|Benin}} Chữ cái '''{{l|yo|ɔ}} viết thường''' với thanh thấp ([[◌̀]]).
#:{{syn|yo|:ọ̀}}
===={{ĐM|see}}====
*{{letters|lang=yo|sc=Latn|qual=Bảng chữ cái Latinh tiếng Yoruba tại Nigeria|native name=lẹ́tà|Aa|(Áá)|(Àà)|(Āā)|Bb|Dd|Ee|(Éé)|(Èè)|(Ēē)|Ẹẹ|(Ẹ́/ẹ́)|(Ẹ̀/ẹ̀)|(Ẹ̄/ẹ̄)|Ff|Gg|Gb/gb|Hh|Ii|(Íí)|(Ìì)|(Īī)|Jj|Kk|Ll|Mm|(Ḿ/ḿ)|(M̀/m̀)|(M̄/m̄)|Nn|(Ń/ń)|(Ǹ/ǹ)|(N̄/n̄)|Oo|(Óó)|(Òò)|(Ōō)|Ọọ|(Ọ́/ọ́)|(Ọ̀/ọ̀)|(Ọ̄/ọ̄)|Pp|Rr|Ss|Ṣṣ|Tt|Uu|(Úú)|(Ùù)|(Ūū)|Ww|Yy}}
*{{letters|lang=yo|sc=Latn|qual=Bảng chữ cái Latinh tiếng Yoruba tại Benin|lɛ́tà|Aa|Bb|Dd|Ee|Ɛɛ|Ff|Gg|Gb/gb|Hh|Ii|Jj|Kk|Kp/kp|Ll|Mm|Nn|Oo|Ɔɔ|Pp|Rr|Ss|Sh/sh|Tt|Uu|Ww|Yy}}
==={{ĐM|ref}}===
*{{Chú thích sách|en|title=Dictionary of the Yoruba language|author=Thomas Jefferson Bowen|year=1858|location=Washington|publisher=Smithsonian Institution|page=[https://archive.org/details/grammardictionar00bowerich/page/31 31]|}}
axe8yvwvd6u4g7py0jtut025fo8redn
2569485
2569471
2026-10-10T14:49:41Z
Hiyuune
50834
2569485
wikitext
text/x-wiki
{{minitoc}}
=={{langname|mul}}==
==={{ĐM|desction}}===
{{mul-letter}}
#[[chữ|Chữ]] '''[[ɔ]] viết thường''' với dấu huyền ([[grave]]).
==={{ĐM|see}}===
{{Latn-script}}
=={{langname|ajg}}==
==={{ĐM|letter}}===
{{letter|ajg}}
#Chữ cái '''{{l|ajg|ɔ}} viết thường''' với dấu thanh thấp ([[◌̀]]).
#:{{ux|ajg|c'''ɔ̀'''|[[đợi]]|inline=1}}
==={{ĐM|see}}===
*{{letters|lang=ajg|sc=Latn|qual=Bảng chữ cái Latinh tiếng Adja|Aa|An/an|Bb|Cc|Dd|Ɖɖ|Ee|Ɛɛ|Ɛn/ɛn|Ff|Gg|Gb/gb|Ɣɣ|Hh|Ii|In/in|Jj|Kk|Kp/kp|Ll|Mm|Nn|Ny/ny|Ŋŋ|Oo|Ɔɔ|Ɔn/ɔn|Pp|Rr|Ss|Sh/sh|Tt|Uu|Un/un|Vv|Ww|Xx|Yy|Zz|Ʒʒ}}
==={{ĐM|ref}}===
*{{Chú thích web|entryurl=https://www.webonary.org/ajagbe/en/?s=c%C9%94%CC%80%E2%82%82&partialsearch=1|entry=cɔ̀₂|editor=Nancy & Terry Sullivan|work=Ajagbe – French-English Dictionary|publisher=SIL International|year=2015}}
=={{langname|agq}}==
==={{ĐM|letter}}===
{{letter|agq}}
#Chữ cái '''{{l|agq|ɔ}} viết thường''' với dấu thanh thấp ([[◌̀]]).
#:{{quote|agq|Waazə̂ ghaʼa ghò; ghàʼ kwo nû enyəa Zə̀ kə mò ləgha tsughu ghɛ, kə n shìaa k'''ɔ̀'''ʼ ghɛ enyəa ghɛ̀ e lo ghî a wə̄n gho.|hỡi anh em được Đức Chúa Trời yêu-dấu, chúng tôi biết anh em là kẻ được lựa-chọn. ([[s:I Tê-sa-lô-ni-ca/1#1:4|I Tê-sa-lô-ni-ca 1:4]])}}
==={{ĐM|see}}===
*{{letters|lang=agq|sc=Latn|qual=Bảng chữ cái Latinh tiếng Aghem|Aa|(Àà)|(Āā)|(Ââ)|(Ǎǎ)|Bb|Bv/bv|Ch/ch|Dd|Dz/dz|Ee|(Èè)|(Ēē)|(Êê)|(Ěě)|Ɛɛ|(Ɛ̀/ɛ̀)|(Ɛ̄/ɛ̄)|(Ɛ̂/ɛ̂)|(Ɛ̌/ɛ̌)|Ff|Gg|Gb/gb|Gh/gh|Hh|Ii|(Ìì)|(Īī)|(Îî)|(Ǐǐ)|Ɨɨ|(Ɨ̀/ɨ̀)|(Ɨ̄/ɨ̄)|(Ɨ̂/ɨ̂)|(Ɨ̌/ɨ̌)|Kk|Kp/kp|ʼ|Ll|Mm|(M̀/m̀)|Nn|(Ǹ/ǹ)|Ŋŋ|Oo|(Òò)|(Ōō)|(Ôô)|(Ǒǒ)|Ɔɔ|(Ɔ̀/ɔ̀)|(Ɔ̄/ɔ̄)|(Ɔ̂/ɔ̂)|(Ɔ̌/ɔ̌)|Pp|Pf/pf|Ss|Sh/sh|Tt|Ts/ts|Uu|(Ùù)|(Ūū)|(Ûû)|(Ǔǔ)|Uw/uw|Ʉʉ|(Ʉ̀/ʉ̀)|(Ʉ̄/ʉ̄)|(Ʉ̂/ʉ̂)|(Ʉ̌/ʉ̌)|Vv|Ww|Yy|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|agq|work=To kə Kəzə̀ kə̀ Fughu ko|author=Cameroon Association for Bible Translation and Literacy|year=2024|entryurl=https://www.bible.com/bible/2620/1TH.1.AGQ|entry=1 Tɛ̀sàlonìan 1}}
=={{langname|bax}}==
==={{ĐM|letter}}===
{{letter|bax}}
#Chữ '''{{l|bax|ɔ}} viết thường''' với dấu thanh thấp.
==={{ĐM|see}}===
*{{letters|lang=bax|sc=Latn|qual=Bảng chữ cái Latinh tiếng Bamum|Aa|(Áá)|(Àà)|(Ǎǎ)|(Āā)|(Ââ)|Bb|Ɓɓ|Dd|Gb/gb|Mb/mb|Ee|(Éé)|(Èè)|(Ěě)|(Ēē)|(Êê)|Ɛɛ|(Ɛ́/ɛ́)|(Ɛ̀/ɛ̀)|(Ɛ̌/ɛ̌)|(Ɛ̄/ɛ̄)|(Ɛ̂/ɛ̂)|Əə|(Ə́/ə́)|(Ə̀/ə̀)|(Ə̌/ə̌)|(Ə̄/ə̄)|(Ə̂/ə̂)|Ff|Gg|Ɣɣ|Ii|(Íí)|(Ìì)|(Ǐǐ)|(Īī)|(Îî)|Jj|Kk|Kp/kp|Ll|Mm|Ŋŋ|Nn|Ny/ny|Oo|(Óó)|(Òò)|(Ǒǒ)|(Ōō)|(Ôô)|Ɔɔ|(Ɔ́/ɔ́)|(Ɔ̀/ɔ̀)|(Ɔ̌/ɔ̌)|(Ɔ̄/ɔ̄)|(Ɔ̂/ɔ̂)|Pp|Rr|Ss|ʃ/sh|Tt|Uu|(Úú)|(Ùù)|(Ǔǔ)|(Ūū)|(Ûû)|Üü|(Ǘǘ)|(Ǜǜ)|(Ǚǚ)|(Ǖǖ)|(Ü̂/ü̂)|Ʉʉ|(Ʉ́/ʉ́)|(Ʉ̀/ʉ̀)|(Ʉ̌/ʉ̌)|(Ʉ̄/ʉ̄)(Ʉ̂/ʉ̂)|Vv|Ww|Yy|Zz|ʼ}}
=={{langname|bsq}}==
==={{ĐM|letter}}===
{{letter|bsq}}
#Chữ '''{{l|bsq|ɔ}} viết thường''' với dấu thanh điệu ◌̀ .
#:{{ux|bsq|N'''ɔ̀'''ɓà|[[s:Dân số Ký|Dân số Ký]]|inline=1}}
==={{ĐM|see}}===
*{{letters|lang=bsq|sc=Latn|qual=Bảng chữ cái Latinh tiếng Bassa|Aa|(Áá)|(Àà)|(Ǎǎ)|(Ââ)|(Ãã)|Bb|Ɓɓ|Cc|Dd|Ɖɖ|Dy/dy|Ɛɛ|(Ɛ́/ɛ́)|(Ɛ̀/ɛ̀)|(Ɛ̌/ɛ̌)|(Ɛ̂/ɛ̂)|(Ɛ̃/ɛ̃)|Ee|(Éé)|(Èè)|(Ěě)|(Êê)|Ff|Gg|Gb/gb|Gm/gm|Hh|Hw/hw|Ii|(Íí)|(Ìì)|(Ǐǐ)|(Îî)|(Ĩĩ)|Jj|Kk|Kp/kp|Mm|Nn|Ny/ny|Ɔɔ|(Ɔ́/ɔ́)|(Ɔ̀/ɔ̀)|(Ɔ̌/ɔ̌)|(Ɔ̂/ɔ̂)|(Ɔ̃/ɔ̃)|Oo|(Óó)|(Òò)|(Ǒǒ)|(Ôô)|Pp|Ss|Tt|Uu|(Úú)|(Ùù)|(Ǔǔ)|(Ûû)|(Ũũ)|Vv|Ww|Xw/xw|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|en|work=Bassa-English Dictionary|author=CEFL|year=2025|entryurl=https://cefliberia.org/bassa/bassa-dictionary/o2/|entry=Ɔ}}
*{{Chú thích web|bsq|work=Ɓǎsɔ́ɔ̀ Báɓòɔ̀|author=Bible Society in Liberia|year=2025|entryurl=https://www.bible.com/bible/2826/NUM.1.%C6%81B02|entry=Nɔ̀ɓà 1}}
=={{langname|bqc}}==
==={{ĐM|letter}}===
{{letter|bqc}}
#Chữ '''{{l|bqc|ɔ}} viết thường''' với dấu thanh thấp.
#:{{quote|bqc|Dii Lua tò lí bui pii b'''ɔ̀'''lɛ tɔɔlɛ. Lípiɔ kɛfɛũ, mɛ́ an bɛ blea na. Lí wɛ̃nide ku lupi guo, mɛ́ lí pɔ ì to wà maa ń vãio dɔ̃ ku we lɔ.|Giê-hô-va Đức Chúa Trời khiến đất mọc lên các thứ cây đẹp mắt, và trái thì ăn ngon; giữa vườn lại có cây sự sống cùng cây biết đều thiện và đều ác. ([[s:Sáng thế Ký/2#2:9|Sáng thế Ký 2:9]])}}
==={{ĐM|see}}===
*{{letters|lang=bqc|sc=Latn|qual=Bảng chữ cái Latinh tiếng Boko|Aa|Bb|Dd|Ee|Ɛɛ|Ff|Gg|Gb/gb|Ii|Kk|Kp/kp|Ll|Mm|Nn|Oo|Ɔɔ|Pp|Rr|Ss|Tt|Uu|Vv|Ww|Yy|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|bqc|work=Boko Bible|author=SIM International|year=2024|entryurl=https://www.bible.com/bible/1155/GEN.2.BOO2024|entry=Daa 2}}
=={{langname|bus}}==
==={{ĐM|letter}}===
{{letter|bus}}
#Chữ '''{{l|bus|ɔ}} viết thường''' với dấu thanh điệu ◌̀ .
#:{{quote|bus|Èe a bɛgɛ kɛɛ a píngi, bensↄ̃ à n'''ɔ̀'''sɛ yàka, kɛ̀ a à gyãkɛna baaru mà yãnzi.|Vì người rất ước-ao thấy anh em hết thảy, và đã lo về anh em nghe mình bị đau-ốm. ([[s:Phi-líp/2#2:26|Phi-líp 2:26]])}}
==={{ĐM|see}}===
*{{letters|lang=bus|sc=Latn|qual=Bảng chữ cái Latinh tiếng Bokobaru|Aa|Aa/aa|Ãã|Ãa/ãa|Bb|Dd|Ee|Ee/ee|Ẽẽ|Ẽe/ẽe|Ɛɛ|Ɛɛ/ɛɛ|Ɛ̃/ɛ̃|Ɛ̃ɛ/ɛ̃ɛ|Ff|Gg|Gb/gb|Hh|Ii|Ii/ii|Ĩĩ|Ĩi/ĩi|Kk|Kp/kp|Ll|Mm|Nn|Oo|Oo/oo|Õõ|Õo/õo|Ɔɔ|Ɔɔ/ɔɔ|Ɔ̃/ɔ̃|Ɔ̃ɔ/ɔ̃ɔ|Pp|Rr|Ss|Tt|Uu|Uu/uu|Ũũ|Ũu/ũu|Vv|Ww|Yy|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|bus|author=SIM International|entryurl=https://www.bible.com/bible/3085/PHP.2.BBB|entry=FILIPIDEENƆ 2|year=2024|work=Bokobaru Bible}}
=={{langname|bqp}}==
==={{ĐM|letter}}===
{{letter|bqp}}
#Chữ '''{{l|bqp|ɔ}} viết thường''' với dấu thanh thấp.
#:{{quote|bqp|Lɛn má de z'''ɔ̀''' ũ Luda dokanɛ ma laasun gũn lɛ, akũsɔ̃ má de z'''ɔ̀''' ũ durunna ikoonɛ ma dàa gũn.|Như vậy, thì chính mình tôi lấy trí-khôn phục luật-pháp của Đức Chúa Trời, nhưng lấy xác-thịt phục luật-pháp của tội-lỗi. ([[s:Rô-ma/7#7:25|Rô-ma 7:25]])}}
==={{ĐM|see}}===
*{{letters|lang=bqp|sc=Latn|qual=Bảng chữ cái Latinh tiếng Busa|Aa||Aa/aa|Ãã|Ãa/ãa|Bb|Dd|Ee|Ee/ee|Ẽẽ|Ẽe/ẽe|Ɛɛ|Ɛɛ/ɛɛ|Ɛ̃/ɛ̃|Ɛ̃ɛ/ɛ̃ɛ|Ff|Gg|Gb/gb|Hh|Ii|Ii/ii|Ĩĩ|Ĩi/ĩi|Kk|Kp/kp|Ll|Mm|Nn|Oo|Oo/oo|Õõ|Õo/õo|Ɔɔ|Ɔɔ/ɔɔ|Ɔ̃/ɔ̃|Ɔ̃ɔ/ɔ̃ɔ|Pp|Rr|Ss|Tt|Uu|Uu/uu|Ũũ|Ũu/ũu|Vv|Ww|Yy|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|bqp|author=SIM International|entryurl=https://www.bible.com/bible/3084/ROM.7.BB2005|entry=ROMUDENƆ 7|year=2005|work=Bisã Bible}}
=={{langname|dnj}}==
==={{ĐM|letter}}===
{{letter|dnj}}
#Chữ '''{{l|dnj|ɔ}} viết thường''' với dấu thanh cực thấp.
#:{{ux|dnj|Aà lɛ̀ Yàwɛ g'''ɔ̀'''.|Tôi đã cầu-xin nó nơi Đức Giê-hô-va. ([[s:I Sa-mu-ên/1#1:20|I Sa-mu-ên 1:20]])}}
==={{ĐM|see}}===
*{{letters|lang=dnj|sc=Latn|qual=Bảng chữ cái Latinh tiếng Dan ở Liberia|Aa|Bb|Ɓɓ|Dd|Ɗɗ|Ee|Ɛɛ|Ff|Gg|GB/gb|Hh|Ii|Kk|KP/kp|KW/kw|Ll|Mm|Nn|NW/nw|NY/ny|Ŋŋ|Oo|Ɔɔ|Əə|Ɵɵ|Pp|Rr|Ss|Tt|Uu|Ɥɥ|Vv|Ww|Xx|Yy|Zz}}
*{{letters|lang=dnj|sc=Latn|qual=Bảng chữ cái Latinh tiếng Dan Tây ở Bờ Biển Ngà|Aa|AƆ/aɔ|Bb|BH/bh|Dd|DH/dh|Ee|Ɛɛ|Ëë|ƐA/ɛa|Ff|Gg|GB/gb|GW/gw|Ii|Kk|KP/kp|KW/kw|Ll|Mm|Nn|NG/ng|Oo|Ɔɔ|Öö|Pp|Rr|Ss|Tt|Uu|Üü|Vv|Ww|Yy|Zz}}
*{{letters|lang=dnj|sc=Latn|qual=Bảng chữ cái Latinh tiếng Dan Đông ở Bờ Biển Ngà|Aa|Œœ|Bb|BH/bh|Dd|DH/dh|Ee|Ʌʌ|Ɛɛ|Ææ|Ff|Gg|GB/gb|GW/gw|Hh|Ii|Ɩɩ|Kk|KP/kp|KW/kw|Ll|Mm|Nn|Oo|ɤ|Ɔɔ|Pp|Rr|Ss|Tt|Uu|Ɯɯ|Ʋʋ|Vv|Ww|Yy|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|dnj|author=Bible Society in Liberia|entryurl=https://www.bible.com/bible/2828/1SA.1.DHB|entry=1 Sámìɔ̀ 1|year=2025|work=Aaɓi Kwì}}
*{{Chú thích web|dnj|author=Wycliffe Bible Translators|entryurl=https://www.bible.com/bible/1831/EPH.1.DNJBL|entry=Efɛzö 1|year=1991|work=Dan Blowo (Yacouba) Nouveau Testament}}
=={{langname|daa}}==
==={{ĐM|letter}}===
{{letter|daa}}
#Chữ '''{{l|daa|ɔ}} viết thường''' với dấu thanh thấp.
#:{{ux|daa|'''ɔ̀ɔ̀'''lìnkàw|bệnh [[cảm lạnh]]|inline=1}}
==={{ĐM|see}}===
*{{letters|lang=daa|sc=Latn|qual=Bảng chữ cái Latinh tiếng Dangaléat|Aa|Bb|Ɓɓ|Cc|Dd|Ɗɗ|Ee|Ɛɛ|Gg|Hh|Ii|Jj|Kk|Ll|Mm|Nn|Ŋŋ|N̰/n̰|Oo|Ɔɔ|Pp|Rr|Ss|Tt|Uu|Ww|Yy|Ƴƴ|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|fr|author=Association pour la Promotion de la Langue Dangaléat®|year=2016|entryurl=https://www.webonary.org/dangla/browse/?key=daa&letter=%C9%94&lang=en|entry=ɔ|publisher=SIL Internationa|work=Dangaleat - French Dictionary}}
=={{langname|dur}}==
==={{ĐM|letter}}===
{{letter|dur}}
#Chữ '''{{l|dur|ɔ}} viết thường''' với dấu thanh thấp.
#:{{ux|dur|b'''ɔ̀'''g|[[thấm]]|inline=1}}
==={{ĐM|see}}===
*{{letters|lang=dur|sc=Latn|qual=Bảng chữ cái Latinh tiếng Dii|Aa|Bb|Ɓɓ|Dd|Ee|Ɛɛ|Əə|Ff|Gg|Gb/gb|Hh|Ii|Ɨɨ|Ll|Mm|ʼM/ʼm|Mb/mb|Mgb/mgb|Nn|ʼN/ʼn|Nd/nd|Nz/nz|Ŋŋ|Ŋg/ŋg|Oo|Ɔɔ|Rr|Ss|Uu|Ʉʉ|Vv|Vb/vb|Ww|ʼW/ʼw|Yy|ʼY/ʼy|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|fr|editor=Lee E. Bohnhoff|work= Dii (duru) dictionary|year=2018|entry=bɔ̀g|entryurl=https://www.webonary.org/dii/en/ga2660d8d-8794-4ef9-97dd-83346b56b7ef/|location=Equipe de Littérature Dii, Mbé par Ngaoundéré, Cameroun|publisher=SIL International}}
=={{langname|gej}}==
==={{ĐM|letter}}===
{{letter|gej}}
#Chữ '''{{l|gej|ɔ}} viết thường''' với dấu thanh điệu ◌̀ .
#:{{quote|gej|Mia Tɔhon'''ɔ̀''' Yesù Kristò be màje ne n'''ɔ̀''' ku mì.|Nguyền xin ân-điển của Đức Chúa Jêsus-Christ ở với tâm-thần anh em! ([[s:Phi-lê-môn#25|Phi-lê-môn 1:25]])}}
==={{ĐM|see}}===
*{{letters|lang=gej|sc=Latn|qual=Bảng chữ cái Latinh tiếng Gen|Aa|Bb|Cc|Dd|Ɖɖ|Ee|Ɛɛ|Ff|Gg|GB/gb|Ɣɣ|Hh|Xx|Ii|Jj|Kk|KP/kp|Ll|Mm|Nn|NY/ny|Ŋŋ|Ɔɔ|Pp|Ss|Tt|Uu|Ʋʋ|Vv|Ww|Yy|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|gej|author=Bible Society of Togo|work=GƐ̃GBE BIBLIA 2014|entry=Filemɔ̀n 1|entryurl=https://www.bible.com/bible/2236/PHM.1.GEN|year=2014}}
=={{langname|bbj}}==
==={{ĐM|letter}}===
{{letter|bbj}}
#Chữ '''{{l|bbj|ɔ}} viết thường''' với dấu thanh thấp.
#:{{quote|bbj|Nwə kɑ́ tá yɔ pu a pɑ kwi shw'''ɔ̀'''p ba mghɛ mhɔ pəmtə dzʉ́ywə?|Làm sao thầy các ngươi ngồi ăn chung với người thâu thuế và kẻ xấu nết vậy? ([[s:Ma-thi-ơ/9#9:11|Ma-thi-ơ 9:11]])}}
===={{ĐM|see}}====
*{{letters|lang=bbj|sc=Latn|qual=Bảng chữ cái Latinh tiếng Ghomálá'|Aa|(Áá)|(Àà)|(Ǎǎ)|(Ââ)|Bb|Bv/bv|Cc|Dd|Dz/dz|Ee|(Éé)|(Èè)|(Ěě)|(Êê)|Əə|(Ə́/ə́)|(Ə̀/ə̀)|(Ə̌/ə̌)|(Ə̂/ə̂)|Aə/aə|(Aə́/aə́)|(Aə̀/aə̀)|(Aə̌/aə̌)|(Aə̂/aə̂)|Ɛɛ|(Ɛ́/ɛ́)|(Ɛ̀/ɛ̀)|(Ɛ̌/ɛ̌)|(Ɛ̂/ɛ̂)|Ff|Gg|Gh/gh|Hh|Ii|(Íí)|(Ìì)|(Ǐǐ)|(Îî)|Jj|Kk|Ll|Mm|Nn|Ny/ny|Nt/nt|Ŋŋ|Ŋk/ŋk|Oo|(Óó)|(Òò)|(Ǒǒ)|(Ôô)|Ɔɔ|(Ɔ́/ɔ́)|(Ɔ̀/ɔ̀)|(Ɔ̌/ɔ̌)|(Ɔ̂/ɔ̂)|Pp|Pf/pf|Mpf/mpf|Rr|Ss|Sh/sh|Tt|Ts/ts|Uu|(Úú)|(Ùù)|(Ǔǔ)|(Ûû)|Ʉʉ|(Ʉ́/ʉ́)|(Ʉ̀/ʉ̀)|(Ʉ̌/ʉ̌)|(Ʉ̂/ʉ̂)|Vv|Zz|Zh/zh|ʼ}}
==={{ĐM|ref}}===
*{{Chú thích web|bbj|work=Ghomala New Testament|author=Bible Society of Cameroon|year=2025|entryurl=https://www.bible.com/bible/907/MAT.9.NTGOMALA|entry=Matio 9}}
=={{langname|ife}}==
==={{ĐM|letter}}===
{{letter|ife}}
#Chữ '''{{l|ife|ɔ}} viết thường''' với dấu thanh thấp.
#:{{ux|ife|'''ɔ̀'''bɔ́|[[gốc]]|inline=1}}
==={{ĐM|see}}===
*{{letters|lang=ife|sc=Latn|qual=Bảng chữ cái Latinh tiếng Ifè|Aa|Ãã|Bb|Ɖɖ|Dz/dz|Ee|Ɛɛ|Ɛ̃/ɛ̃|Ff|Gg|Gb/gb|Hh|Ii|Ĩĩ|Kk|Kp/kp|Ll|Mm|Nn|Ny/ny|Ŋŋ|Oo|Ɔɔ|Ɔ̃/ɔ̃|Rr|Ss|Tt|Ts/ts|Uu|Ũũ|Ww|Yy}}
==={{ĐM|ref}}===
*{{Chú thích web|editor=Mary Gardner & Elizabeth Graveling|entryurl=https://www.webonary.org/ife/en/browse/browse-vernacular-french/?key=ife&letter=%C9%94|entry=ɔ|year=2016|work=Ife–French-English Dictionary|publisher=SIL International}}
=={{langname|ken}}==
==={{ĐM|letter}}===
{{letter|ken}}
#Chữ '''{{l|ken|ɔ}} viết thường''' với dấu thanh thấp.
==={{ĐM|see}}===
*{{letters|lang=ken|sc=Latn|qual=Bảng chữ cái Latinh tiếng Kenyang|Aa|(Áá)|(Àà)|(Ǎǎ)|Bb|Bh/bh|Ch/ch|Dd|Ee|(Éé)|(Èè)|(Ěě)|Ɛɛ|(Ɛ́/ɛ́)|(Ɛ̀/ɛ̀)|(Ɛ̌/ɛ̌)|Ff|Gg|Gb/gb|Gh/gh|Ii|(Íí)|(Ìì)|(Ǐǐ)|Ɨɨ|(Ɨ́/ɨ́)|(Ɨ̀/ɨ̀)|(Ɨ̌/ɨ̌)|Jj|Kk|Kp/kp|Mm|Nn|Ŋŋ|Ny/ny|Oo|(Óó)|(Òò)|(Ǒǒ)|Ɔɔ|(Ɔ́/ɔ́)|(Ɔ̀/ɔ̀)|(Ɔ̌/ɔ̌)|Pp|Rr|Ss|Tt|Uu|(Úú)|(Ùù)|(Ǔǔ)|Ʉʉ|(Ʉ́/ʉ́)|(Ʉ̀/ʉ̀)|(Ʉ̌/ʉ̌)|Ww|Yy}}
==={{ĐM|ref}}===
*{{Chú thích sách|en|author=Mbuagbaw, Tanyi Eyong|year=1999|title=[https://www.sil.org/system/files/reapdata/60/11/80/60118082817094669796762830775247314820/kenorth1.pdf Kenyang orthography guide]|publisher=Cameroon Association for Bible Translation and Literacy (CABTAL)|location=Yaoundé, Cameroon|page=9}}
*{{Chú thích web|ken|work=Kenyang|author=Cameroon Association for Bible Translation and Literacy|year=2010|entryurl=https://www.bible.com/bible/388/ACT.2.KEN|entry=Ɛkáti Bɛtɨk Bǒnto 2}}
=={{langname|gkp}}==
==={{ĐM|letter}}===
{{letter|gkp}}
#Chữ '''{{l|gkp|ɔ}} viết thường''' với dấu thanh thấp.
#:{{ux|gkp|Dí g'''ɔ̀'''lɔŋ a gɛɛ dí kpɔŋ mâa nuu da fé kɛ́ ní ŋɔ́nɔ naa.|Linh-hồn bèn nao-sờn trong mình họ. ([[s:Thi thiên/107#107:5|Thi thiên 107:5]])}}
==={{ĐM|see}}===
*{{letters|lang=gkp|sc=Latn|qual=Bảng chữ cái năm 1989|a|(á)|(à)|(à)|(â)|(ã)|b|ɓ|d|e|(é)|(è)|(ê)|ə|ɛ|(ɛ́)|(ɛ̀)|(ɛ̂)|(ɛ̃)|f|g|ɠ|gb|gw|h|hw|i|(í)|(ì)|(î)|(ĩ)|j|k|kp|kw|l|m|n|nw|ɲ|ŋ|o|(ó)|(ò)|(ô)|ɔ|(ɔ́)|(ɔ̀)|(ɔ̂)|(ɔ̃)|p|r|s|t|u|(ú)|(ù)|(û)|(ũ)|v|w|y}}
==={{ĐM|ref}}===
*{{Chú thích web|gkp|author=Bible Society in Liberia|work=Bible|year=2012|entry=Wule-woo-ŋa 107|entryurl=https://www.bible.com/bible/500/PSA.107.KWB}}
=={{langname|blh}}==
==={{ĐM|letter}}===
{{letter|blh}}
#Chữ '''{{l|blh|ɔ}} viết thường''' với dấu thanh thấp.
#:{{quote|blh|W'''ɔ̀''' j'''ɔ̀ɔ̀''' l'''ɔ̀'''ɔn fɔŋwúì dè ŋwɔn'''ɔ̀''' l'''ɔ̀'''ɔn fɔŋwu w'''ɔ̀'''lɔ́ èè nyìnìdí dí de m'''ɔ̀'''lì m'''ɔ̀'''líì wòlíì gbǐn bò.|Trong Ngài có sự sống, sự sống là sự sáng của loài người. ([[s:Giăng/1#1:4|Giăng 1:4]])}}
==={{ĐM|see}}===
*{{letters|lang=blh|sc=Latn|qual=Bảng chữ cái Latinh tiếng Kuwaa|a|b|d|e|ɛ|f|gb|ɣ|i|j|k|kp|kw|l|m|mb|n|nd|nj|ny|ŋ|ŋg|ŋgb|ŋw|o|ɔ|p|s|t|u|v|w|y}}
==={{ĐM|ref}}===
*{{Chú thích web|blh|author=Bible Society in Liberia |work=Bible.is|year=1988|entryurl=https://live.bible.is/bible/BLHLBT/JHN/1|entry=JƆ̀Ɔ́N Wɔ Tedí Kàí É Kàìn Jisɛ̀ Kolàì 1}}
=={{langname|knp}}==
==={{ĐM|letter}}===
{{letter|knp}}
#Chữ '''{{l|knp|ɔ}} viết thường''' với dấu thanh trung thấp.
#:{{quote|knp|mb'''ɔ̀ɔ̀'''rɨ̀|[[sôi]]|inline=1}}
==={{ĐM|see}}===
*{{letters|lang=knp|sc=Latn|qual=Bảng chữ cái Latinh tiếng Kwanja|Aa|(A̋/a̋)|(Áá)|(Àà)|(Ȁȁ)|(Ǎǎ)|(Ââ)|Bb|Cc|Dd|Ee|(E̋/e̋)|(Éé)|(Èè)|(Ȅȅ)|(Ěě)|(Êê)|Ɛɛ|(Ɛ̋/ɛ̋)|(Ɛ́/ɛ́)|(Ɛ̀/ɛ̀)|(Ɛ̏/ɛ̏)|(Ɛ̌/ɛ̌)|(Ɛ̂/ɛ̂)|Əə|(Ə̋/ə̋)|(Ə́/ə́)|(Ə̀/ə̀)|(Ə̏/ə̏)|(Ə̌/ə̌)|(Ə̂/ə̂)|Ff|Gg|Gb/gb|Hh|Ii|(I̋/i̋)|(Íí)|(Ìì)|(Ȉȉ)|(Ǐǐ)|(Îî)|Ɨɨ|(Ɨ̋/ɨ̋)|(Ɨ́/ɨ́)|(Ɨ̀/ɨ̀)|(Ɨ̏/ɨ̏)|(Ɨ̌/ɨ̌)|(Ɨ̂/ɨ̂)|Jj|Kk|Kp/kp|Ll|Mm|Nn|Ny/ny|Ŋŋ|Oo|(Őő)|(Óó)|(Òò)|(Ȍȍ)|(Ǒǒ)|(Ôô)|Ɔɔ|(Ɔ̋/ɔ̋)|(Ɔ́/ɔ́)|(Ɔ̀/ɔ̀)|(Ɔ̏/ɔ̏)|(Ɔ̌/ɔ̌)|(Ɔ̂/ɔ̂)|Pp|Rr|Ss|Tt|Uu|(Űű)|(Úú)|(Ùù)|(Ȕȕ)|(Ǔǔ)|(Ûû)|Ʉʉ|(Ʉ̋/ʉ̋)|(Ʉ́/ʉ́)|(Ʉ̀/ʉ̀)|(Ʉ̏/ʉ̏)|(Ʉ̌/ʉ̌)|(Ʉ̂/ʉ̂)|Vv|Ww|Yy}}
==={{ĐM|ref}}===
*{{Chú thích sách|fr|author=Joan & Martin Weber|year=2008|title=[https://www.sil.org/system/files/reapdata/10/85/21/108521937454046977451763994759809460134/KwanjaOrthographyGuide2008_u.pdf Précis d'orthographe pour la langue kwanja (dialecte súndànɨ́)]|publisher=Eglise Evangélique Luthérienne du Cameroun, Association Nationale des Comités de Langues Camerounaises (ANACLAC)|location=Cameroun|page=3}}
*{{Chú thích web|knp|author=Wycliffe Associates|work=Ndung Regular Bible|publisher=Bible in Every Language|year=2022|entryurl=https://bibleineverylanguage.org/resources/languages/knp-x-ndung?resource-type=Ndung%20reg&book=RUT&chapter=1|entry=Derwa rúìt 1}}
=={{langname|bwj}}==
==={{ĐM|letter}}===
{{letter|bwj}}
#Chữ '''{{l|bwj|ɔ}} viết thường''' với dấu thanh thấp.
#:{{quote|bwj|Nín k'''ɔ̀''' fòoní k'''ɔ̀'''pe lɛ ɛ́ Dɔfĩn hiì ɛ́ wi l'''ɔ̀'''n. Ɲunsɔ Dɔfĩn ɛ́ wi àá kɔ.|Hỡi người được ơn, mừng cho ngươi; Chúa ở cùng ngươi. ([[s:Lu-ca/1#1:28|Lu-ca 1:28]])}}
==={{ĐM|see}}===
*{{letters|lang=bwj|sc=Latn|qual=Bảng chữ cái Latinh tiếng Láá Láá Bwamu|Aa|Bb|Ɓɓ|Cc|Dd|Ee|Ɛɛ|Ff|Hh|Ii|Kk|Kh/kh|Ll|Mm|Nn|Ɲɲ|Oo|Ɔɔ|Pp|Rr|Ss|Tt|Uu|Vv|Ww|Yy|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|bwj|author=L’Association Nationale pour la Traduction de la Bible et l’Alphabétisation|work=Buamu Laa|year=2023|entry=Liike 1|entryurl=https://www.bible.com/bible/3692/LUK.1.BWJ}}
=={{langname|mas}}==
==={{ĐM|letter}}===
{{letter|mas}}
#Chữ '''{{l|mas|ɔ}} viết thường''' với dấu thanh thấp.
==={{ĐM|see}}===
*{{letters|lang=mas|sc=Latn|qual=Bảng chữ cái Latinh tiếng Maasai|Aa|(Áá)|(Àà)|(Ââ)|Bb|Cc|Dd|Ee|(Éé)|(Èè)|(Êê)|Ɛɛ|(Ɛ́/ɛ́)|(Ɛ̀/ɛ̀)|(Ɛ̂/ɛ̂)|Gg|Hh|Ii|(Íí)|(Ìì)|(Îî)|Ɨɨ|(Ɨ́/ɨ́)|(Ɨ̀/ɨ̀)|(Ɨ̂/ɨ̂)|Jj|Kk|Ll|Mm|Nn|Ny/ny|Ŋŋ|Oo|(Óó)|(Òò)|(Ôô)|Ɔɔ|(Ɔ́/ɔ́)|(Ɔ̀/ɔ̀)|(Ɔ̂/ɔ̂)|Pp|Rr|Rr/rr|Ss|Sh/sh|Tt|Uu|(Úú)|(Ùù)|(Ûû)|Ʉʉ|(Ʉ́/ʉ́)|(Ʉ̀/ʉ̀)|(Ʉ̂/ʉ̂)|Ww|Wu/wu|Yy|Yi/yi|'}}
==={{ĐM|ref}}===
*{{Chú thích web|author=Leonard Ole-Kotikash & Doris L. Payne|work=Maa dictionary|entry=Ɔ - ɔ|year=2008|url=https://pages.uoregon.edu/maasai/Maa%20Lexicon/lexicon/main.htm}}
=={{langname|mcu}}==
==={{ĐM|pron}}===
*{{IPA|mcu|[ɔ˨]}}
==={{ĐM|letter}}===
{{letter|mcu}}
#Chữ '''{{l|mcu|ɔ}} viết thường''' với dấu thanh thấp.
#:{{quote|mcu|B'''ɔ̀''' déì kem sue b'''ɔ̀''' seé b'''ɔ̀''' nùà koô doô yoòr, bɔ́ né bɔ́ selé, bɔ́ né bɔ́ wulá ndɔ.|còn những kẻ khác bắt đầy-tớ của vua, mắng-chưởi và giết đi. ([[s:Ma-thi-ơ/22#22:6|Ma-thi-ơ 22:6]])}}
===={{ĐM|see}}====
*{{letters|lang=mcu|sc=Latn|qual=Bảng chữ cái Latinh tiếng Mambila Cameroon|Aa|Bb|Ch/ch|Dd|Dz/dz|Ee|Ɛɛ|Ff|Gg|Hh|Ii|Ɨɨ|Jj|Kk|Ll|Mm|Nn|Ny/ny|Ŋŋ|Oo|Ɔɔ|Pp|Ss|Sh/sh|Tt|Ts/ts|Uu|Ʉʉ|Vv|Ww|Yy|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|mcu|entryurl=https://www.bible.com/bible/2226/MAT.22.MCU|entry=Matíô 22|work=Mambilla NT (Cameroon)|year=2001|author=Wycliffe Bible Translators, Inc.}}
=={{langname|ntm}}==
==={{ĐM|letter}}===
{{letter|ntm}}
#Chữ '''{{l|ntm|ɔ}} viết thường''' với dấu huyền (grave).
#:{{ux|ntm|Fìdèmɔ́'''ɔ̀'''|[[s:Phi-lê-môn|Phi-lê-môn]]|inline=1}}
===={{ĐM|see}}====
*{{letters|lang=ntm|sc=Latn|qual=Bảng chữ cái Latinh tiếng Nateni|a|a̰|ā|á|b|c|d|e|ḛ|ē|é|ɛ|ɛ̰|ɛ̄|ɛ́|f|g|h|i|ḭ|ī|í|j|k|l|m|n|o|o̰|ō|ó|ɔ|ɔ̰|ɔ̄|ɔ́|p|q|r|s|t|u|ṵ|ū|ú|v|w|x|y|z}}
==={{ĐM|ref}}===
*{{Chú thích web|entryurl=https://www.webonary.org/nateni/en/browse/browse-vernacular-english/?key=ntm&letter=%C9%94|entry=ɔ|work=Nateni – English Dictionary|year=2019|publisher=SIL International®|editor=Esaïe Winrikou}}
*{{Chú thích web|ntm|entryurl=https://live.bible.is/bible/NTMWBT/PHM/1|entry=FÌDÈMƆ́Ɔ̀ 1|work=Bible.is|year=2018|author=Wycliffe Bible Translators, Inc.}}
=={{langname|nga}}==
==={{ĐM|letter}}===
{{letter|nga}}
#Chữ '''{{l|nga|ɔ}} viết thường''' với dấu thanh thấp.
#:{{ux|nga|'''ɔ̀'''ì|[[giấc ngủ]]|inline=1}}
===={{ĐM|see}}====
*{{letters|lang=nga|sc=Latn|qual=Bảng chữ cái Latinh tiếng Ngbaka|Aa|Bb|ʼB/ʼb|Dd|ʼD/ʼd|Ee|Ɛɛ|Ff|Gg|Gb/gb|Hh|Ii|Kk|Kp/kp|Ll|Mm|Nn|Ng/ng|Ngg/ngg|Oo|Ɔɔ|Ss|Tt|Uu|Vv|Ww|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|fr|editor=Marcel Henrix|work=Ngbaka – French Dictionary|year=2020|entry=ɔ|entryurl=https://www.webonary.org/ngbaka/en/browse/browse-vernacular-french/?key=nga&letter=%C9%94}}
*{{Chú thích web|nga|author=Bible Society of the Democratic Republic of Congo|work=WE NU GALE|year=1995|entry=GBA WENƆ 26|entryurl=https://www.bible.com/bible/2920/PRO.26.NGB}}
=={{langname|niy}}==
==={{ĐM|letter}}===
{{letter|niy}}
#Chữ '''{{l|niy|ɔ}} viết thường''' với dấu thanh thấp.
#:{{ux|niy|Ɛ̀fɛs'''ɔ̀'''|[[s:Ê-phê-sô|Ê-phê-sô]]|inline=1}}
===={{ĐM|see}}====
*{{letters|lang=niy|sc=Latn|qual=Bảng chữ cái Latinh tiếng Ngiti|a|b|bh|d|dh|dr|dy|dz|e|ɛ|f|g|gb|gy|h|i|ɨ|k|kp|ky|l|m|mb|mv|n|nd|ndr|ng|ngb|ngy|ny|nz|o|ɔ|p|pb|pf|r|s|t|td|tdy|tr|ts|u|ʉ|v|vh|w|y|z}}
==={{ĐM|ref}}===
*{{Chú thích web|niy|author=Wycliffe Bible Translators, Inc.|work=UNGBÒTA-ƆWɄ́TÁ TƆ́ BHǓKÙ|year=2015|entry=Ɛ̀fɛsɔ̀ 1|entryurl=https://www.bible.com/bible/1431/EPH.1.NIY}}
=={{langname|bud}}==
==={{ĐM|pron}}===
*{{IPA|bud|/ɔ̀/}}
==={{ĐM|letter}}===
{{letter|bud}}
#Chữ '''{{l|bud|ɔ}} viết thường''' với dấu thanh thấp.
#:{{ux|bud|c'''ɔ̀'''tī|bị [[ỉa chảy]]|inline=1}}
===={{ĐM|see}}====
*{{letters|lang=bud|sc=Latn|qual=Bảng chữ cái Latinh tiếng Ntcham|Aa|(Áá)|(Àà)|Bb|(B́/b́)|Cc|Dd|Ee/ee|(Ée/ée)|Èe/èe|Ff|Gg|Gb/gb|Ii|(Íí)|(Ìì)|Jj|Kk|Kp/kp|Ll|(Ĺĺ)|Mm|(Ḿḿ)|Nn|(Ńń)|Ny/ny|Ŋŋ|Ŋm/ŋm|Oo/oo|(Óo/óo)|(Òo/òo)|Ɔɔ|(Ɔ́/ɔ́)|(Ɔ̀/ɔ̀)|Pp|Ss|Tt|Uu|(Úú)|(Ùù)|Ww|Yy}}
==={{ĐM|ref}}===
*{{Chú thích web|entry=cɔ̀tī, cɔ̀tī, cɔ̄tì|entryurl=https://www.webonary.org/ntcham/en/g9ce7cc96-ffbd-4036-bcef-844331ab3fa0/|editor=Samuel Kpagheri|work=Ntcham – English Dictionary|year=2019|publisher=SIL International}}
=={{langname|sbd}}==
==={{ĐM|letter}}===
{{letter|sbd}}
#Chữ '''{{l|sbd|ɔ}} viết thường''' với dấu thanh thấp.
#:{{ux|sbd|d'''ɔ̀'''ɔ̃|[[lưng]]|inline=1}}
===={{ĐM|see}}====
*{{letters|lang=sbd|sc=Latn|qual=Bảng chữ cái Latinh tiếng Samo Nam|Aa|Bb|Dd|Ff|Gg|Hh|Ii|Kk|Ll|Mm|Nn|Pp|Rr|Ss|Tt|Ww|Yy|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|entry=dɔ̀ɔ̃|entryurl=https://www.webonary.org/san-sud/en/ge23d1271-2f6c-476f-be40-f947088b4e84/|author=Urs Niggli|work=Southern San - French - English Dictionary|year=2021|publisher=SIL International}}
*{{Chú thích web|sbd|entryurl=https://www.bible.com/bible/3059/GEN.1.SBPE2011|entry=SGK 1|work=LAWA A BOO SONBORE|year=2011|author=Bible Society of Burkina Faso}}
=={{langname|sev}}==
==={{ĐM|letter}}===
{{letter|sev}}
#Chữ '''{{l|sev|ɔ}} viết thường''' với dấu thanh thấp.
#:{{quote|sev|Mi 'f'''ɔ̀'''li ki nɛ̄, puʔɔ ma cìile.|Ta khứng, hãy sạch đi. ([[s:Mác/1#1:41|Mác 1:41]])}}
==={{ĐM|see}}===
*{{letters|lang=sev|sc=Latn|qual=Bảng chữ cái Latinh tiếng Senoufo Nyarafolo|Aa|Ââ|Ǎǎ|Bb|Cc|Dd|Ee|Êê|Ěě|Ēē|Ɛɛ|Ɛ̂/ɛ̂|Ɛ̌/ɛ̌|Ɛ̄/ɛ̄|Ff|Gg|ʔ/ʔ|Hh|Ii|Îî|Ǐǐ|Īī|Jj|Kk|Ll|Mm|Nn|Ŋŋ|Oo|Ɔɔ|Ɔ̌/ɔ̌|Pp|Rr|Ss|Tt|Uu|Vv|Ww|Yy|Zz}}
==={{ĐM|ref}}===
*{{Chú thích web|sev|author=Wycliffe Bible Translators, Inc.|entryurl=https://www.bible.com/bible/2990/MRK.1.SEV|entry=Mariki 1|year=2024|work=Sénoufo, Nyarafolo}}
=={{langname|tbz}}==
==={{ĐM|letter}}===
{{letter|tbz}}
#Chữ '''{{l|tbz|ɔ}} viết thường''' với dấu thanh thấp.
#:{{quote|tbz|ti kó kɛtenkɛ̀ dɛtie mpòrímu, iyiɛ nkó dim'''ɔ̀'''nnì diì tù'''ɔ̀'''kɛ, kɛ̀ ti yo tɛnɔ́nkpetɛ dɑbònnì ti ɛì miɛkɛ.|Bóng hoa nở ra trên đất;<br>Mùa hát-xướng đã đến nơi,<br>Và tiếng chim cu nghe trong xứ; ([[s:Nhã ca/2#2:12|Nhã ca 2:12]])}}
==={{ĐM|see}}===
*{{letters|lang=tbz|sc=Latn|qual=Bảng chữ cái Latinh tiếng Tammari|Aa|(Àà)|(Áá)|(Ãã)|(Ã̀/ã̀)|(Ã́/ã́)|Bb|Cc|Dd|Ee|(Èè)|(Éé)|Ɛɛ|(Ɛ̀/ɛ̀)|(Ɛ́/ɛ́)|(Ɛ̃/ɛ̃)|(Ɛ̃̀/ɛ̃̀)|(Ɛ̃́/ɛ̃́)|Ff|Hh|Ii|(Ìì)|(Íí)|(Ĩĩ)|(Ĩ̀/ĩ̀)|(Ĩ́/ĩ́)|Kk|Kp/kp|Mm|(Ḿḿ)|(M̀/m̀)|Nn|(Ńń)|(Ǹǹ)|Oo|(Òò)|(Óó)|Ɔɔ|(Ɔ̀/ɔ̀)|(Ɔ́/ɔ́)|(Ɔ̃/ɔ̃)|(Ɔ̃̀/ɔ̃̀)|(Ɔ̃́/ɔ̃́)|Pp|Rr|Ss|Tt|Uu|(Ùù)|(Úú)|(Ũũ)|(Ũ̀/ũ̀)|(Ṹ/ṹ)|Ww|Yy}}
==={{ĐM|ref}}===
*{{Chú thích sách|fr|author=Annelore Zürcher|title=[https://www.sil.org/system/files/reapdata/18/46/48/18464836488843238420469350815761768632/2725_Zurcher_Phonemes_ditammari_1983.pdf Les phonèmes segmentaux du ditammari: Rapport de recherches]|year=1983|publisher=Société Internationale de Linguistique|location=Lomé}}
*{{Chú thích web|tbz|author= L’Alliance Biblique du Bénin|entryurl=https://live.bible.is/bible/TBZBSB/SNG/21|entry=FƐCANYƐ̀NFƐ̀ 2|year=2001|work=Bibiri - Kuyie Nnaanti Patiri}}
=={{langname|yo}}==
==={{ĐM|pron}}===
*{{yor-IPA|ɔ̀}}
==={{ĐM|letter}}===
{{letter|yo}}
#{{lb|yo|Benin}} Chữ cái '''{{l|yo|ɔ}} viết thường''' với thanh thấp ([[◌̀]]).
#:{{syn|yo|:ọ̀}}
===={{ĐM|see}}====
*{{letters|lang=yo|sc=Latn|qual=Bảng chữ cái Latinh tiếng Yoruba tại Nigeria|native name=lẹ́tà|Aa|(Áá)|(Àà)|(Āā)|Bb|Dd|Ee|(Éé)|(Èè)|(Ēē)|Ẹẹ|(Ẹ́/ẹ́)|(Ẹ̀/ẹ̀)|(Ẹ̄/ẹ̄)|Ff|Gg|Gb/gb|Hh|Ii|(Íí)|(Ìì)|(Īī)|Jj|Kk|Ll|Mm|(Ḿ/ḿ)|(M̀/m̀)|(M̄/m̄)|Nn|(Ń/ń)|(Ǹ/ǹ)|(N̄/n̄)|Oo|(Óó)|(Òò)|(Ōō)|Ọọ|(Ọ́/ọ́)|(Ọ̀/ọ̀)|(Ọ̄/ọ̄)|Pp|Rr|Ss|Ṣṣ|Tt|Uu|(Úú)|(Ùù)|(Ūū)|Ww|Yy}}
*{{letters|lang=yo|sc=Latn|qual=Bảng chữ cái Latinh tiếng Yoruba tại Benin|lɛ́tà|Aa|Bb|Dd|Ee|Ɛɛ|Ff|Gg|Gb/gb|Hh|Ii|Jj|Kk|Kp/kp|Ll|Mm|Nn|Oo|Ɔɔ|Pp|Rr|Ss|Sh/sh|Tt|Uu|Ww|Yy}}
==={{ĐM|ref}}===
*{{Chú thích sách|en|title=Dictionary of the Yoruba language|author=Thomas Jefferson Bowen|year=1858|location=Washington|publisher=Smithsonian Institution|page=[https://archive.org/details/grammardictionar00bowerich/page/31 31]|}}
3lmbtgubv5q197r4gmdokwldeqee4wf
arises
0
419729
2569478
2026-10-10T14:28:17Z
Hiyuune
50834
Trang mới: “{{also|arisés}} =={{langname|en}}== ==={{section|etym}} 1=== ===={{section|pron}}==== * {{IPA|en|/əˈɹaɪzɪz/}} * {{audio|en|en-us-arises.ogg|a=US}} ===={{section|v}}==== {{head|en|vf}} # {{infl of|en|arise||s-verb-form}} ===={{section|n}}==== {{head|en|nf}} # {{plural of|en|arise}} ==={{section|etym}} 2=== ===={{section|n}}==== {{head|en|nf}} # {{plural of|en|aris}} ==={{section|ana}}=== * {{anagrams|en|a=aeirss|Riases|serais|raises|resais|assier}} =={{lan…”
2569478
wikitext
text/x-wiki
{{also|arisés}}
=={{langname|en}}==
==={{section|etym}} 1===
===={{section|pron}}====
* {{IPA|en|/əˈɹaɪzɪz/}}
* {{audio|en|en-us-arises.ogg|a=US}}
===={{section|v}}====
{{head|en|vf}}
# {{infl of|en|arise||s-verb-form}}
===={{section|n}}====
{{head|en|nf}}
# {{plural of|en|arise}}
==={{section|etym}} 2===
===={{section|n}}====
{{head|en|nf}}
# {{plural of|en|aris}}
==={{section|ana}}===
* {{anagrams|en|a=aeirss|Riases|serais|raises|resais|assier}}
=={{langname|fr}}==
==={{section|pron}}===
* {{homophones|fr|arise|arisent}}
==={{section|v}}===
{{head|fr|vf}}
# {{inflection of|fr|ariser||ind//sub|pres|ở|2|s}}
6kpbasxm0se56b6p9qk9r820tj0aoww
arising
0
419730
2569480
2026-10-10T14:30:29Z
Hiyuune
50834
Trang mới: “=={{langname|en}}== ==={{section|pron}}=== * {{IPA|en|/əˈɹaɪzɪŋ/}} * {{audio|en|en-us-arising.ogg|a=US}} ==={{section|v}}=== {{head|en|vf}} # {{infl of|en|arise||ing-form}} ==={{section|ana}}=== * {{anagrams|en|a=agiinrs|air sign|airings|raising}}”
2569480
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|pron}}===
* {{IPA|en|/əˈɹaɪzɪŋ/}}
* {{audio|en|en-us-arising.ogg|a=US}}
==={{section|v}}===
{{head|en|vf}}
# {{infl of|en|arise||ing-form}}
==={{section|ana}}===
* {{anagrams|en|a=agiinrs|air sign|airings|raising}}
gx6423zd7312xuxf6enpqiat9hb6nve
arised
0
419731
2569484
2026-10-10T14:48:59Z
Hiyuune
50834
Trang mới: “=={{langname|en}}== ==={{section|pron}}=== * {{IPA|en|/əˈɹaɪzd/}} ==={{section|v}}=== {{head|en|Biến thể hình thái động từ}} # {{lb|en|nonstandard}} {{infl of|en|arise||ed-form}} ==={{section|ana}}=== * {{anagrams|en|a=adeirs|AIDSer|aiders|deairs|idears|irades|raised|redias|resaid|saried}}”
2569484
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|pron}}===
* {{IPA|en|/əˈɹaɪzd/}}
==={{section|v}}===
{{head|en|Biến thể hình thái động từ}}
# {{lb|en|nonstandard}} {{infl of|en|arise||ed-form}}
==={{section|ana}}===
* {{anagrams|en|a=adeirs|AIDSer|aiders|deairs|idears|irades|raised|redias|resaid|saried}}
axk2irjva4nmgg23b55muij998b2x0t
Thể loại:Vần:Tiếng Anh/aɪvɪŋ/3 âm tiết
14
419732
2569487
2026-10-10T14:50:50Z
Hiyuune
50834
Trang mới: “{{auto cat}}”
2569487
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:Vần:Tiếng Anh/aɪvɪŋ
14
419733
2569488
2026-10-10T14:51:47Z
Hiyuune
50834
Trang mới: “{{auto cat}}”
2569488
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
asterisms
0
419734
2569492
2026-10-10T15:00:26Z
Hiyuune
50834
Trang mới: “=={{langname|en}}== ==={{section|noun}}=== {{head|en|Biến thể hình thái danh từ}} # {{plural of|en|asterism}} ==={{section|anagrams}}=== * {{anagrams|en|a=aeimrssst|misassert|semistars}}”
2569492
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|noun}}===
{{head|en|Biến thể hình thái danh từ}}
# {{plural of|en|asterism}}
==={{section|anagrams}}===
* {{anagrams|en|a=aeimrssst|misassert|semistars}}
owwqmdt17f3qyy0nhwv935e9gyzwhpr
Bản mẫu:vro-verb
10
419735
2569493
2026-10-10T15:02:24Z
Hiyuune
50834
Trang mới: “{{head|vro|{{#if:{{{suff|}}}|Hậu tố|Động từ}}|cat2={{#if:{{{suff|}}}|Dạng hậu tố động từ}}|head={{{head|}}}<!-- -->|{{#ifeq:{{{1|}}}|-||nguyên mẫu da}}<!-- -->|{{{1|}}}<!-- -->|f1request=1<!-- -->|{{#if:{{{da2|}}}|hoặc}}<!-- -->|{{{da2|}}}<!-- -->|{{#ifeq:{{{1|}}}|-||ngôi thứ nhất số ít}}<!-- -->|{{{2|}}}<!-- -->|f3request=1<!-- -->|{{#if:{{{pres2|}}}|hoặc}}<!-- -->|{{{pres2|}}}<!-- -->}}<!-- --><noinclude>{{documentation}}</noinclude>”
2569493
wikitext
text/x-wiki
{{head|vro|{{#if:{{{suff|}}}|Hậu tố|Động từ}}|cat2={{#if:{{{suff|}}}|Dạng hậu tố động từ}}|head={{{head|}}}<!--
-->|{{#ifeq:{{{1|}}}|-||nguyên mẫu da}}<!--
-->|{{{1|}}}<!--
-->|f1request=1<!--
-->|{{#if:{{{da2|}}}|hoặc}}<!--
-->|{{{da2|}}}<!--
-->|{{#ifeq:{{{1|}}}|-||ngôi thứ nhất số ít}}<!--
-->|{{{2|}}}<!--
-->|f3request=1<!--
-->|{{#if:{{{pres2|}}}|hoặc}}<!--
-->|{{{pres2|}}}<!--
-->}}<!--
--><noinclude>{{documentation}}</noinclude>
r7jpx4fovaunb74oe26cuacxauklh9a
Bản mẫu:fo-decl-noun-f1-s
10
419736
2569494
2026-10-10T15:10:12Z
Hiyuune
50834
Trang mới: “{{#invoke:fo-noun|show|decl=f1-s}}<!-- --><noinclude>{{documentation}}</noinclude>”
2569494
wikitext
text/x-wiki
{{#invoke:fo-noun|show|decl=f1-s}}<!--
--><noinclude>{{documentation}}</noinclude>
gyx13pficeltfe9wn5icg5wfqh7j3bq
Bản mẫu:mnc-conj-ha
10
419737
2569498
2026-10-10T15:48:04Z
Hiyuune
50834
Trang mới: “<includeonly>{{mnc-conj-table |title={{{title|{{pagename}}}}} |type=ha-ra |{{{1}}}ᠮᠪᡳ |{{{1}}}ᠮᡝ ᠪᡳ |{{{1}}}ᡥᠠᠪᡳ |{{{1}}}ᡥᠠ |{{{1}}}ᠮᠪᡳᡥᡝ |{{{1}}}ᠮᠪᡳᡥᡝᠪᡳ |{{{1}}}ᡵᠠ |{{{1}}}ᠣ |{{{1}}}ᡵᠠᡴᡡᠨ |{{{1}}}ᡥᠠᠣ |{{{1}}}ᡥᠠᡴᡡᠨ |{{{1}}} |ᡠᠮᡝ {{{1}}}ᡵᠠ |{{{1}}}ᡴᡳ |{{{1}}}ᡴᡳ ᠰᡝᠮᠪᡳ |{{{1}}}ᡴᡳᠨᡳ |{{{1}}}ᡴᡳ |{{{1}}}ᡵᠠᠣ |{{{1}}}ᠴᡳᠨᠠ |{{{1}}}ᠮᡝ |{{{1}}}…”
2569498
wikitext
text/x-wiki
<includeonly>{{mnc-conj-table
|title={{{title|{{pagename}}}}}
|type=ha-ra
|{{{1}}}ᠮᠪᡳ
|{{{1}}}ᠮᡝ ᠪᡳ
|{{{1}}}ᡥᠠᠪᡳ
|{{{1}}}ᡥᠠ
|{{{1}}}ᠮᠪᡳᡥᡝ
|{{{1}}}ᠮᠪᡳᡥᡝᠪᡳ
|{{{1}}}ᡵᠠ
|{{{1}}}ᠣ
|{{{1}}}ᡵᠠᡴᡡᠨ
|{{{1}}}ᡥᠠᠣ
|{{{1}}}ᡥᠠᡴᡡᠨ
|{{{1}}}
|ᡠᠮᡝ {{{1}}}ᡵᠠ
|{{{1}}}ᡴᡳ
|{{{1}}}ᡴᡳ ᠰᡝᠮᠪᡳ
|{{{1}}}ᡴᡳᠨᡳ
|{{{1}}}ᡴᡳ
|{{{1}}}ᡵᠠᠣ
|{{{1}}}ᠴᡳᠨᠠ
|{{{1}}}ᠮᡝ
|{{{1}}}ᡶᡳ
|{{{1}}}ᠴᡳ
|{{{1}}}ᡥᠠᡳ
|{{{1}}}ᡨᠠᠯᠠ
|{{{1}}}ᡨᠠᡳ
|{{{1}}}ᠩᡤᠠᠯᠠ
|{{{1}}}ᠴᡳᠪᡝ
|{{{1}}}ᡵᠠᠯᠠᠮᡝ
|{{{1}}}ᡵᠠ
|{{{1}}}ᡥᠠ
|{{{1}}}ᡵᠠᡴᡡ
|{{{1}}}ᡥᠠᡴᡡ
|{{{1}}}ᡵᠠᠩᡤᡝ
|{{{1}}}ᡥᠠᠩᡤᡝ
}}</includeonly><noinclude>
{{documentation}}
{{tcat|conj:ha}}
</noinclude>
5v2cn1bm56sjk7iil0crrqwc9d7irde
Bản mẫu:ell-nF-α-ες-2a
10
419738
2569505
2026-10-10T17:03:56Z
Hiyuune
50834
Hiyuune đã đổi [[Bản mẫu:ell-nF-α-ες-2a]] thành [[Bản mẫu:el-nF-α-ες-2a]] qua đổi hướng
2569505
wikitext
text/x-wiki
#đổi [[Bản mẫu:el-nF-α-ες-2a]]
but3tuhfkm5jqvfjkmogpzq9wrkdnwi
ăn thùng uống vại
0
419739
2569509
2026-10-10T23:44:07Z
TheHighFighter2
42988
Trang mới: “=={{langname|vi}}== ==={{ĐM|etym}}=== Từ {{compound|vi|ăn|thùng|uống|vại}}. ==={{ĐM|pron}}=== {{vi-ipa}} ==={{ĐM|idiom}}=== {{vi-idiom}} # [[ăn|Ăn]] [[nhiều]], [[uống]] nhiều một cách [[quá mức]]. #* {{quote-web|vi|date=03-08-2014|author=Hương Văn|title=Chẳng lẽ phải ly hôn để con gái khỏi béo phì?|url=https://tienphong.vn/chang-le-phai-ly-hon-de-con-gai-khoi-beo-phi-post707554.tpo|site=Tiền phong|passage=Tôi biết rằng…”
2569509
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|etym}}===
Từ {{compound|vi|ăn|thùng|uống|vại}}.
==={{ĐM|pron}}===
{{vi-ipa}}
==={{ĐM|idiom}}===
{{vi-idiom}}
# [[ăn|Ăn]] [[nhiều]], [[uống]] nhiều một cách [[quá mức]].
#* {{quote-web|vi|date=03-08-2014|author=Hương Văn|title=Chẳng lẽ phải ly hôn để con gái khỏi béo phì?|url=https://tienphong.vn/chang-le-phai-ly-hon-de-con-gai-khoi-beo-phi-post707554.tpo|site=Tiền phong|passage=Tôi biết rằng hãm ngay từ lúc đó sẽ dễ dàng hơn nhiều so với khi cháu đã thực sự béo phì, đã quen với việc '''ăn thùng uống vại'''.}}
m90fhxvr6y0sluf7u3j54mnkwwo3pzw
तिर्यग्योनि
0
419740
2569510
2026-10-11T00:48:35Z
Hiyuune
50834
/* */ + sa
2569510
wikitext
text/x-wiki
=={{langname|sa}}==
==={{section|alt}}===
{{sa-alt}}
==={{section|pron}}===
{{sa-IPA}}
==={{section|n}}===
{{sa-noun|m}}
# Loài [[súc sinh]]; bản tính [[muông thú]].
9se3z1z68lv0uzvhsrbwgfig4dlm751
2569511
2569510
2026-10-11T00:48:55Z
Hiyuune
50834
/* {{section|alt}} */
2569511
wikitext
text/x-wiki
=={{langname|sa}}==
==={{section|alternative script}}===
{{sa-alt}}
==={{section|pron}}===
{{sa-IPA}}
==={{section|n}}===
{{sa-noun|m}}
# Loài [[súc sinh]]; bản tính [[muông thú]].
r1b0vlkwjjbg1gxfrno1qpjzvyc445s
2569512
2569511
2026-10-11T00:52:13Z
Hiyuune
50834
2569512
wikitext
text/x-wiki
=={{langname|sa}}==
==={{section|alternative script}}===
{{sa-alt}}
==={{section|pron}}===
{{sa-IPA}}
==={{section|n}}===
{{sa-noun|m}}
# Loài [[súc sinh]]; bản tính [[muông thú]].
===={{section|decl}}====
{{sa-decl-noun-m|tiryagyoni}}
p4ehz295kth7ppxncsvbka0c9igxnt4
abalienação
0
419741
2569514
2026-10-11T01:42:44Z
Hiyuune
50834
+ pt
2569514
wikitext
text/x-wiki
=={{langname|pt}}==
{{wp|pt:}}
==={{section|etym}}===
{{ety|pt|:lbor|la:abalienatio<alt:abaliēnātiōnem>|:af|abalienar|-ção|text=+|tree=1}}
==={{section|pron}}===
{{pt-IPA}}
* {{rhymes|pt|ɐ̃w̃|s=5,6}}
* {{hyph|pt|a|ba|li|e|na|ção}}
==={{section|n}}===
{{pt-noun|f}}
# {{lb|pt|law}} Sự [[nhường lại]] [[tài sản]].
==={{section|further}}===
* {{R:pt:Aulete}}
* {{R:pt:DAN}}
* {{R:pt:Infopédia}}
* {{R:pt:Michaelis}}
* {{R:pt:Priberam}}
b5tdb2grj215yish166plblz0n37sz9
non-voting
0
419742
2569519
2026-10-11T01:50:35Z
Hiyuune
50834
Hiyuune đã đổi [[non-voting]] thành [[nonvoting]]
2569519
wikitext
text/x-wiki
#đổi [[nonvoting]]
k8677n679nxfr85t7hl1t885i7bjpcv
caponnant
0
419743
2569523
2026-10-11T02:01:57Z
Hiyuune
50834
Trang mới: “=={{langname|fr}}== ==={{section|ptcp}}=== {{head|fr|Phân từ hiện tại}} # {{present participle of|fr|caponner}}”
2569523
wikitext
text/x-wiki
=={{langname|fr}}==
==={{section|ptcp}}===
{{head|fr|Phân từ hiện tại}}
# {{present participle of|fr|caponner}}
dw979ttqowk3lbhvfhcwrt6nstfrd1a
caponné
0
419744
2569524
2026-10-11T02:02:31Z
Hiyuune
50834
Trang mới: “{{also|caponne}} =={{langname|fr}}== ==={{section|ptcp}}=== {{fr-past participle}} # {{past participle of|fr|caponner}}”
2569524
wikitext
text/x-wiki
{{also|caponne}}
=={{langname|fr}}==
==={{section|ptcp}}===
{{fr-past participle}}
# {{past participle of|fr|caponner}}
m4upspnc0t0kkgumwzuzjk2f8zmxjw3
caponnée
0
419745
2569525
2026-10-11T02:04:08Z
Hiyuune
50834
Trang mới: “=={{langname|fr}}== ==={{section|ptcp}}=== {{head|fr|Biến thể hình thái phân từ quá khứ|g=f-s}} # {{feminine singular of|fr|caponné}}”
2569525
wikitext
text/x-wiki
=={{langname|fr}}==
==={{section|ptcp}}===
{{head|fr|Biến thể hình thái phân từ quá khứ|g=f-s}}
# {{feminine singular of|fr|caponné}}
s6lu3vkr3fsnmlggza736upty58vcyo
caponnés
0
419746
2569526
2026-10-11T02:05:03Z
Hiyuune
50834
Trang mới: “{{also|caponnes}} =={{langname|fr}}== ==={{section|ptcp}}=== {{head|fr|Biến thể hình thái phân từ quá khứ|g=m-p}} # {{masculine plural of|fr|caponné}}”
2569526
wikitext
text/x-wiki
{{also|caponnes}}
=={{langname|fr}}==
==={{section|ptcp}}===
{{head|fr|Biến thể hình thái phân từ quá khứ|g=m-p}}
# {{masculine plural of|fr|caponné}}
bh84gsdxk00vbz5xv5gl2jwrqgbaw49
caponnées
0
419747
2569527
2026-10-11T02:05:46Z
Hiyuune
50834
Trang mới: “=={{langname|fr}}== ==={{section|ptcp}}=== {{head|fr|Biến thể hình thái phân từ quá khứ|g=f-p}} # {{feminine plural of|fr|caponné}}”
2569527
wikitext
text/x-wiki
=={{langname|fr}}==
==={{section|ptcp}}===
{{head|fr|Biến thể hình thái phân từ quá khứ|g=f-p}}
# {{feminine plural of|fr|caponné}}
1m7q13gdvuj44hqhqvyls81jeltnp58
çaul
0
419748
2569528
2026-10-11T03:14:06Z
Hiyuune
50834
Trang mới: “=={{langname|sq}}== ==={{section|n}}=== {{sq-noun|m|çaúla|çaúli|çaúlat|head=çaúl}} # [[quai hàm|Quai hàm]] #: {{syn|sq|nofull|felqinë}} ===={{section|decl}}==== {{sq-noun-m|a}} ==={{section|further}}=== * {{R:sq:FMGSH:2026}}”
2569528
wikitext
text/x-wiki
=={{langname|sq}}==
==={{section|n}}===
{{sq-noun|m|çaúla|çaúli|çaúlat|head=çaúl}}
# [[quai hàm|Quai hàm]]
#: {{syn|sq|nofull|felqinë}}
===={{section|decl}}====
{{sq-noun-m|a}}
==={{section|further}}===
* {{R:sq:FMGSH:2026}}
dlcoa97tepiin0ewnxorzfh8vo4vtcf
Bản mẫu:R:sq:FMGSH:2026
10
419749
2569529
2026-10-11T03:14:47Z
Hiyuune
50834
Trang mới: “{{#invoke:quote|call_template |template=cite-book |sq|year=2026|title=FMGJSH: Fjalor i madh i gjuhës shqipe|entry={{{2|{{{1|{{pagename}}}}}}}}|entryurl=https://fjalori.online/?search={{urlencode:{{{2|{{{1|{{pagename}}}}}}}}|PATH}}|pageparam=page |allowparams=2,1 }}<noinclude>{{refcat}}</noinclude>”
2569529
wikitext
text/x-wiki
{{#invoke:quote|call_template
|template=cite-book
|sq|year=2026|title=FMGJSH: Fjalor i madh i gjuhës shqipe|entry={{{2|{{{1|{{pagename}}}}}}}}|entryurl=https://fjalori.online/?search={{urlencode:{{{2|{{{1|{{pagename}}}}}}}}|PATH}}|pageparam=page
|allowparams=2,1
}}<noinclude>{{refcat}}</noinclude>
i0yc42nu8iw8p1b409rfe8xz537krrf
сыҥаах
0
419750
2569530
2026-10-11T03:17:02Z
Hiyuune
50834
Trang mới: “=={{langname|sah}}== ==={{section|etym}}=== Từ {{inh|sah|trk-pro|*yayŋak|t=má, quai hàm}} theo {{cog|ba|яңаҡ}}. Cùng gốc với {{cog|dlg|һыңаак|t=má}}. ==={{section|n}}=== {{picdic |image=Human head and brain diagram.svg |width=310 |labels= {{picdiclabel|sah|align=left|sc=Cyrl|pcolor=black|fontsize=12|x=150|y=3|бас уҥуоҕа}} {{picdiclabel|sah|align=left|sc=Cyrl|pcolor=black|fontsize=18|x=170|y=90|мэйии}} {{picdiclabel|sah|align=left|sc=Cy…”
2569530
wikitext
text/x-wiki
=={{langname|sah}}==
==={{section|etym}}===
Từ {{inh|sah|trk-pro|*yayŋak|t=má, quai hàm}} theo {{cog|ba|яңаҡ}}. Cùng gốc với {{cog|dlg|һыңаак|t=má}}.
==={{section|n}}===
{{picdic
|image=Human head and brain diagram.svg
|width=310
|labels=
{{picdiclabel|sah|align=left|sc=Cyrl|pcolor=black|fontsize=12|x=150|y=3|бас уҥуоҕа}}
{{picdiclabel|sah|align=left|sc=Cyrl|pcolor=black|fontsize=18|x=170|y=90|мэйии}}
{{picdiclabel|sah|align=left|sc=Cyrl|pcolor=black|fontsize=12|x=80|y=160|харах}}
{{picdiclabel|sah|align=left|sc=Cyrl|pcolor=black|fontsize=12|x=15|y=190|мурун}}
{{picdiclabel|sah|align=left|sc=Cyrl|pcolor=black|fontsize=12|x=50|y=230|айах}}
{{picdiclabel|sah|align=left|sc=Cyrl|pcolor=black|fontsize=12|x=35|y=285|сэҥийэ}}
{{picdiclabel|sah|align=left|sc=Cyrl|pcolor=black|fontsize=12|x=90|y=270|сыҥаах}}
{{picdiclabel|sah|align=left|sc=Cyrl|pcolor=black|fontsize=12|x=175|y=205|кулгаах}}
{{picdiclabel|sah|align=left|sc=Cyrl|pcolor=black|fontsize=12|x=120|y=140|}} <!--temple, ru: висо́к -->
{{picdiclabel|sah|align=left|sc=Cyrl|pcolor=black|fontsize=12|x=185|y=290|моой}}
|detail1=Nhấn vào chữ trong hình
|detail2=
{{picdicimg|sah|sc=Cyrl|image=Human body features-nb.svg|link=бас}}
}}
{{sah-noun}}
# {{lb|sah|anatomy}} [[quai hàm]], [[má]].
#: {{syndiff|sah|иэдэс}}
8br5bpnymo8co0l4p74ro28p0hgn92x
2569559
2569530
2026-10-11T04:08:44Z
TheHighFighter2
42988
/* Tiếng Yakut */
2569559
wikitext
text/x-wiki
=={{langname|sah}}==
{{picdic
|image=Human head and brain diagram.svg
|width=310
|labels=
{{picdiclabel|sah|align=left|sc=Cyrl|pcolor=black|fontsize=12|x=150|y=3|бас уҥуоҕа}}
{{picdiclabel|sah|align=left|sc=Cyrl|pcolor=black|fontsize=18|x=170|y=90|мэйии}}
{{picdiclabel|sah|align=left|sc=Cyrl|pcolor=black|fontsize=12|x=80|y=160|харах}}
{{picdiclabel|sah|align=left|sc=Cyrl|pcolor=black|fontsize=12|x=15|y=190|мурун}}
{{picdiclabel|sah|align=left|sc=Cyrl|pcolor=black|fontsize=12|x=50|y=230|айах}}
{{picdiclabel|sah|align=left|sc=Cyrl|pcolor=black|fontsize=12|x=35|y=285|сэҥийэ}}
{{picdiclabel|sah|align=left|sc=Cyrl|pcolor=black|fontsize=12|x=90|y=270|сыҥаах}}
{{picdiclabel|sah|align=left|sc=Cyrl|pcolor=black|fontsize=12|x=175|y=205|кулгаах}}
{{picdiclabel|sah|align=left|sc=Cyrl|pcolor=black|fontsize=12|x=120|y=140|}} <!--temple, ru: висо́к -->
{{picdiclabel|sah|align=left|sc=Cyrl|pcolor=black|fontsize=12|x=185|y=290|моой}}
|detail1=Nhấn vào chữ trong hình
|detail2=
{{picdicimg|sah|sc=Cyrl|image=Human body features-nb.svg|link=бас}}
}}
==={{section|etym}}===
Từ {{inh|sah|trk-pro|*yayŋak|t=má, quai hàm}} theo {{cog|ba|яңаҡ}}. Cùng gốc với {{cog|dlg|һыңаак|t=má}}.
==={{section|n}}===
{{sah-noun}}
# {{lb|sah|anatomy}} [[quai hàm]], [[má]].
#: {{syndiff|sah|иэдэс}}
evw89q6sksztzmir3iopxyt9of449ou
állkapocs
0
419751
2569531
2026-10-11T03:18:16Z
Hiyuune
50834
Trang mới: “=={{langname|hu}}== ==={{section|etym}}=== Từ {{af|hu|áll|kapocs|pos=Danh từ}}. ==={{section|pron}}=== * {{hu-IPA}} * {{rhymes|hu|ot͡ʃ|s=3}} * {{hyphenation|hu|áll|ka|pocs}} ==={{section|n}}=== {{hu-noun|pl=állkapcsok}} # {{lb|hu|anatomy}} [[quai hàm]]. ===={{section|decl}}==== {{hu-infl-nom|állkapcso|o|stem2=állkapocs|spe_sg_stem=állkapcs}}{{hu-pos-otok|állkapcs||ai}} ===={{section|drv}}==== {{col|hu |állkapcsú }} {{col|hu|title=Từ ghép |állkapo…”
2569531
wikitext
text/x-wiki
=={{langname|hu}}==
==={{section|etym}}===
Từ {{af|hu|áll|kapocs|pos=Danh từ}}.
==={{section|pron}}===
* {{hu-IPA}}
* {{rhymes|hu|ot͡ʃ|s=3}}
* {{hyphenation|hu|áll|ka|pocs}}
==={{section|n}}===
{{hu-noun|pl=állkapcsok}}
# {{lb|hu|anatomy}} [[quai hàm]].
===={{section|decl}}====
{{hu-infl-nom|állkapcso|o|stem2=állkapocs|spe_sg_stem=állkapcs}}{{hu-pos-otok|állkapcs||ai}}
===={{section|drv}}====
{{col|hu
|állkapcsú
}}
{{col|hu|title=Từ ghép
|állkapocscsont
|állkapocsficam
|állkapocsgörcs
|állkapocsízület
}}
==={{section|further}}===
* {{R:ErtSz}}
* {{R:Nagyszotar}}
kibpfi1tz931yn764docl5c0zslmf5n
mascella
0
419752
2569532
2026-10-11T03:19:48Z
Hiyuune
50834
+ it
2569532
wikitext
text/x-wiki
{{also|Mascella}}
=={{langname|it}}==
{{wp|it:}}
==={{section|etym}}===
{{ety|it|:inh|la:maxilla}}
{{inh+|it|la|maxilla}}.
==={{section|pron}}===
{{it-pr}}
==={{section|n}}===
{{it-noun|f}}
# {{lb|it|skeleton}} [[hàm|Hàm]]; [[quai hàm]]; [[xương hàm]].
#: {{syn|it|mandibola|ganascia}}
===={{section|drv}}====
* {{l|it|mascellare}}
===={{section|see}}====
* {{l|it|ganascia}}
* {{l|it|mandibola}}
8yfem2i8u01bl1c0e4wsmiodyh8prw3
mascelle
0
419753
2569533
2026-10-11T03:20:31Z
Hiyuune
50834
+ it
2569533
wikitext
text/x-wiki
=={{langname|it}}==
==={{section|pron}}===
{{it-pr|mascèlle}}
==={{section|n}}===
{{head|it|Biến thể hình thái danh từ|g=f}}
# {{plural of|it|mascella}}
dne0zcsknyfs7o1fvp5nb7sfmousgqd
mashelo
0
419754
2569534
2026-10-11T03:22:41Z
Hiyuune
50834
+ io
2569534
wikitext
text/x-wiki
=={{langname|io}}==
==={{section|n}}===
{{io-noun|masheli}}
# {{lb|io|giải phẫu học}} [[hàm|Hàm]]; [[quai hàm]]; [[xương hàm]].
lmtuxw9q47clq4vhlrtn1st5z6ftckk
Wiktionary:Từ điển hình ảnh/ka:đầu
4
419755
2569535
2026-10-11T03:25:42Z
Hiyuune
50834
Trang mới: “{{picdic |image=Human head and brain diagram.svg |width=310 |labels= {{picdiclabel|ka|sc=Geor|pcolor=black|fontsize=12|posx=150|posy=3|link=თავის ქალა}} {{picdiclabel|ka|sc=Geor|pcolor=black|fontsize=18|posx=170|posy=90|link=ტვინი}} {{picdiclabel|ka|sc=Geor|pcolor=black|fontsize=12|posx=80|posy=160|link=თვალი|align=left}} {{picdiclabel|ka|sc=Geor|pcolor=black|fontsize=12|posx=1|posy=235|link=ტუჩი|align=left}} {{picdiclabel|ka|…”
2569535
wikitext
text/x-wiki
{{picdic
|image=Human head and brain diagram.svg
|width=310
|labels=
{{picdiclabel|ka|sc=Geor|pcolor=black|fontsize=12|posx=150|posy=3|link=თავის ქალა}}
{{picdiclabel|ka|sc=Geor|pcolor=black|fontsize=18|posx=170|posy=90|link=ტვინი}}
{{picdiclabel|ka|sc=Geor|pcolor=black|fontsize=12|posx=80|posy=160|link=თვალი|align=left}}
{{picdiclabel|ka|sc=Geor|pcolor=black|fontsize=12|posx=1|posy=235|link=ტუჩი|align=left}}
{{picdiclabel|ka|sc=Geor|pcolor=black|fontsize=12|posx=15|posy=190|link=ცხვირი|align=left}}
{{picdiclabel|ka|sc=Geor|pcolor=black|fontsize=12|posx=50|posy=230|link=პირი|align=left}}
{{picdiclabel|ka|sc=Geor|pcolor=black|fontsize=12|posx=35|posy=285|link=ნიკაპი}}
{{picdiclabel|ka|sc=Geor|pcolor=black|fontsize=12|posx=90|posy=270|link=ყბა}}
{{picdiclabel|ka|sc=Geor|pcolor=black|fontsize=12|posx=175|posy=205|link=ყური|align=right}}
{{picdiclabel|ka|sc=Geor|pcolor=black|fontsize=12|posx=120|posy=140|link=საფეთქელი}}
{{picdiclabel|ka|sc=Geor|pcolor=black|fontsize=12|posx=185|posy=290|link=კისერი}}
|detail1=Nhấn vào chữ trong hình.
|detail2=
<!--{{picdicimg|image=Human body features-nb.svg|link=სხეული|lang=ka|sc=Geor}}-->
}}
8mvopplb0nhp8t9cnha4nqjln3g7o1b
ყბა
0
419756
2569536
2026-10-11T03:25:48Z
Hiyuune
50834
Trang mới: “=={{langname|ka}}== {{Wiktionary:Từ điển hình ảnh/ka:đầu}} ==={{section|etym}}=== Từ {{inh|ka|oge|ყბაჲ}}, từ {{inh|ka|ccs-pro|*q̇ab-}}. ==={{section|pron}}=== * {{ka-IPA}} * {{ka-hyphen}} ==={{section|n}}=== {{ka-noun|ყბები}} # [[hàm|Hàm]]; [[quai hàm]]; [[xương hàm]]. # {{lb|ka|Khevsureti}} [[râu|Râu]]; [[ria]]. ===={{section|decl}}==== {{ka-decl-noun|ყბ}} ===={{section|drv}}==== * {{l|ka|ყბებს დაამტ…”
2569536
wikitext
text/x-wiki
=={{langname|ka}}==
{{Wiktionary:Từ điển hình ảnh/ka:đầu}}
==={{section|etym}}===
Từ {{inh|ka|oge|ყბაჲ}}, từ {{inh|ka|ccs-pro|*q̇ab-}}.
==={{section|pron}}===
* {{ka-IPA}}
* {{ka-hyphen}}
==={{section|n}}===
{{ka-noun|ყბები}}
# [[hàm|Hàm]]; [[quai hàm]]; [[xương hàm]].
# {{lb|ka|Khevsureti}} [[râu|Râu]]; [[ria]].
===={{section|decl}}====
{{ka-decl-noun|ყბ}}
===={{section|drv}}====
* {{l|ka|ყბებს დაამტვრევს}}
* {{l|ka|ყბას დააღებს}}
* {{l|ka|ყბას}}
==={{section|further}}===
* {{R:ka:Shanidze:1984|page=428a}}
{{C|ka|Khuôn mặt}}
mul9izjktyqy15sp6r7z84dmoi51fwk
Bản mẫu:R:ka:Shanidze:1984
10
419757
2569537
2026-10-11T03:26:53Z
Hiyuune
50834
Trang mới: “{{#invoke:quote|call_template |template=cite-book |ka |last={{xlit|ka|Შანიძე}} |first={{xlit|ka|Აკაკი}} |authorlink=Akaki Shanidze |title={{xlit|ka|Ქართული კილოები მთაში}} |trans-title=Phương ngữ miền núi trong tiếng Gruzia |location=Tbilisi |publisher=University Press |year=1984 |entry={{lang|ka|{{{1|{{pagename}}}}}}} |pageparam=page |series={{xlit|ka|Თხზულებანი თორმეტ…”
2569537
wikitext
text/x-wiki
{{#invoke:quote|call_template
|template=cite-book
|ka
|last={{xlit|ka|Შანიძე}}
|first={{xlit|ka|Აკაკი}}
|authorlink=Akaki Shanidze
|title={{xlit|ka|Ქართული კილოები მთაში}}
|trans-title=Phương ngữ miền núi trong tiếng Gruzia
|location=Tbilisi
|publisher=University Press
|year=1984
|entry={{lang|ka|{{{1|{{pagename}}}}}}}
|pageparam=page
|series={{xlit|ka|Თხზულებანი თორმეტ ტომად}}
|seriesvolume=1
|allowparams=1
}}<noinclude>{{refcat}}</noinclude>
aeocq0zh5t8b4eg9pgvuyyrb742m3it
cổ cày vai bừa
0
419758
2569541
2026-10-11T03:32:10Z
Hiyuune
50834
Trang mới: “=={{langname|vi}}== ==={{ĐM|pron}}=== {{vi-pron}} ==={{ĐM|idiom}}=== {{vi-idiom}} # Chỉ hạng người phải [[cáng đáng]] những [[công việc]] [[nặng nhọc]] nhất trong nghề nông (thường hàm ý coi khinh, theo quan niệm cũ). ==={{ĐM|ref}}=== * {{R:vi:Hoàng Phê 2021|page=256}}”
2569541
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|idiom}}===
{{vi-idiom}}
# Chỉ hạng người phải [[cáng đáng]] những [[công việc]] [[nặng nhọc]] nhất trong nghề nông (thường hàm ý coi khinh, theo quan niệm cũ).
==={{ĐM|ref}}===
* {{R:vi:Hoàng Phê 2021|page=256}}
pzoyeb05u4k4mtnpyvkg4q2gwr4wooh
cổ chày
0
419759
2569542
2026-10-11T03:33:00Z
Hiyuune
50834
Trang mới: “=={{langname|vi}}== ==={{ĐM|pron}}=== {{vi-pron}} ==={{ĐM|n}}=== {{vi-noun}} # Chỗ eo lại ở giữa cái [[chày]], vừa để cầm tay. ==={{ĐM|ref}}=== * {{R:vi:Hoàng Phê 2021|page=256}}”
2569542
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|n}}===
{{vi-noun}}
# Chỗ eo lại ở giữa cái [[chày]], vừa để cầm tay.
==={{ĐM|ref}}===
* {{R:vi:Hoàng Phê 2021|page=256}}
ba9jesjjy6ed3hrab8jncpxts4brix9
2569557
2569542
2026-10-11T04:03:21Z
TheHighFighter2
42988
/* Tiếng Việt */
2569557
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|etym}}===
Từ {{ghép|vi|cổ|chày}}.
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|n}}===
{{vi-noun}}
# Chỗ eo lại ở giữa cái [[chày]], vừa để cầm tay.
===={{ĐM|der}}====
{{col|vi|vắt cổ chày ra nước}}
==={{ĐM|ref}}===
* {{R:vi:Hoàng Phê 2021|page=256}}
mg095xhmscdj6pzqk6989mrmuikq08g
cổ giả
0
419760
2569543
2026-10-11T03:33:57Z
Hiyuune
50834
Trang mới: “=={{langname|vi}}== ==={{ĐM|pron}}=== {{vi-pron}} ==={{ĐM|adj}}=== {{vi-adj}} # [[quê mùa|Quê mùa]] và không [[hợp thời]]. ==={{ĐM|ref}}=== * {{R:vi:Hoàng Phê 2021|page=256}}”
2569543
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|adj}}===
{{vi-adj}}
# [[quê mùa|Quê mùa]] và không [[hợp thời]].
==={{ĐM|ref}}===
* {{R:vi:Hoàng Phê 2021|page=256}}
nu7m205yz1n1gy1tff1g45x3ffdvjnn
cổ tiền học
0
419761
2569544
2026-10-11T03:35:11Z
Hiyuune
50834
Trang mới: “=={{langname|vi}}== ==={{ĐM|pron}}=== {{vi-pron}} ==={{ĐM|n}}=== {{vi-noun}} # Khoa học [[nghiên cứu]] [[nguồn gốc]], sự phát triển, [[giá trị]] và các loại hình của [[tiền tệ]] thời cổ. ==={{ĐM|ref}}=== * {{R:vi:Hoàng Phê 2021|page=257}}”
2569544
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|n}}===
{{vi-noun}}
# Khoa học [[nghiên cứu]] [[nguồn gốc]], sự phát triển, [[giá trị]] và các loại hình của [[tiền tệ]] thời cổ.
==={{ĐM|ref}}===
* {{R:vi:Hoàng Phê 2021|page=257}}
5g49pfj72uqbbd49vq9b9triubb9joc
cổ tự học
0
419762
2569545
2026-10-11T03:36:22Z
Hiyuune
50834
Trang mới: “=={{langname|vi}}== ==={{ĐM|pron}}=== {{vi-pron}} ==={{ĐM|n}}=== {{vi-noun}} # Khoa học chuyên [[nghiên cứu]] các [[chữ viết]] thời cổ. ==={{ĐM|ref}}=== * {{R:vi:Hoàng Phê 2021|page=257}}”
2569545
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|n}}===
{{vi-noun}}
# Khoa học chuyên [[nghiên cứu]] các [[chữ viết]] thời cổ.
==={{ĐM|ref}}===
* {{R:vi:Hoàng Phê 2021|page=257}}
c0jzugpgxq7q1mwzwbid3jel6e8guzu
2569546
2569545
2026-10-11T03:37:28Z
Hiyuune
50834
/* Tiếng Việt */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2569546
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|etym}}===
{{vi-etym-sino|古字||學|suffix=học}}.
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|n}}===
{{vi-noun}}
# Khoa học chuyên [[nghiên cứu]] các [[chữ viết]] thời cổ.
==={{ĐM|ref}}===
* {{R:vi:Hoàng Phê 2021|page=257}}
mbgytl7fekbo1mq2vr4n2h7z9b3z4o7
cỗ áo
0
419763
2569547
2026-10-11T03:38:11Z
Hiyuune
50834
Trang mới: “=={{langname|vi}}== ==={{ĐM|pron}}=== {{vi-pron}} ==={{ĐM|n}}=== {{vi-noun}} # Cỗ [[áo quan]] (nói tắt). ==={{ĐM|ref}}=== * {{R:vi:Hoàng Phê 2021|page=257}}”
2569547
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|n}}===
{{vi-noun}}
# Cỗ [[áo quan]] (nói tắt).
==={{ĐM|ref}}===
* {{R:vi:Hoàng Phê 2021|page=257}}
b02gv3n0rypiee1liyf8n4an2abj6oz
2569556
2569547
2026-10-11T03:55:36Z
TheHighFighter2
42988
/* Tiếng Việt */
2569556
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|n}}===
{{vi-noun}}
# {{short for|vi|[[cỗ]] [[áo quan]]}}.
==={{ĐM|ref}}===
* {{R:vi:Hoàng Phê 2021|page=257}}
cqy3v9a3fut5rzfst018xik3c27wqqx
cố nông
0
419764
2569553
2026-10-11T03:43:21Z
Hiyuune
50834
Trang mới: “=={{langname|vi}}== ==={{ĐM|pron}}=== {{vi-pron}} ==={{ĐM|n}}=== {{vi-noun}} # [[nông dân|Nông dân]] không có ruộng đất và công cụ [[sản xuất]], phải đi làm thuê hoặc đi ở để sinh sống. ==={{ĐM|ref}}=== * {{R:vi:Hoàng Phê 2021|page=258}}”
2569553
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|n}}===
{{vi-noun}}
# [[nông dân|Nông dân]] không có ruộng đất và công cụ [[sản xuất]], phải đi làm thuê hoặc đi ở để sinh sống.
==={{ĐM|ref}}===
* {{R:vi:Hoàng Phê 2021|page=258}}
p973xef00gois1536vdwd407w009il7
Bản mẫu:nv-verb
10
419765
2569561
2026-10-11T05:21:25Z
TheHighFighter2
42988
Trang mới: “{{head|nv|verb}}<!-- --><noinclude>{{documentation}}</noinclude>”
2569561
wikitext
text/x-wiki
{{head|nv|verb}}<!--
--><noinclude>{{documentation}}</noinclude>
2sbzo0ujfg56gfhhk4gq262u2txcvo9
chʼíheetʼeʼ
0
419766
2569562
2026-10-11T05:38:52Z
TheHighFighter2
42988
Trang mới: “=={{langname|nv}}== ==={{ĐM|etym}}=== Từ {{nv-prefixes|chʼí|hi|ni-3s-∅|-}} {{nv-link-to-stem|-tʼeʼ|nhất cố}} {{nv-link-to-root|-TʼEʼ|đẩy vật cứng thon dài/vật hữu sinh}}. ==={{ĐM|verb}}=== {{nv-verb}} # [[nhảy chân sáo|Nhảy chân sáo]] hoặc [[lò cò]] ra ngoài theo chiều [[ngang]] {{gloss|chẳng hạn như nhảy ra khỏi cửa}}. ===={{ĐM|conjug}}==== {{nv-paradigm|nhất cố|ni/ni}} {{nv-conj|impf|ni|∅|tʼeʼ|disj=chʼ…”
2569562
wikitext
text/x-wiki
=={{langname|nv}}==
==={{ĐM|etym}}===
Từ {{nv-prefixes|chʼí|hi|ni-3s-∅|-}} {{nv-link-to-stem|-tʼeʼ|nhất cố}} {{nv-link-to-root|-TʼEʼ|đẩy vật cứng thon dài/vật hữu sinh}}.
==={{ĐM|verb}}===
{{nv-verb}}
# [[nhảy chân sáo|Nhảy chân sáo]] hoặc [[lò cò]] ra ngoài theo chiều [[ngang]] {{gloss|chẳng hạn như nhảy ra khỏi cửa}}.
===={{ĐM|conjug}}====
{{nv-paradigm|nhất cố|ni/ni}}
{{nv-conj|impf|ni|∅|tʼeʼ|disj=chʼí|conj=hi|3sg=chʼíheetʼeʼ|4sg=chʼíjiitʼeʼ|4pl=chʼídajiitʼeʼ}}
==={{ĐM|ref}}===
* {{YM1987|page=287}}
* {{YM1992|page=543}}
l37l10eltmxhdotfz0p9ri8oujzr2qf
လောင်း
0
419767
2569568
2026-10-11T09:54:31Z
Hiyuune
50834
Trang mới: “=={{langname|tvn}}== ==={{section|etym}}=== Từ {{inh|tvn|obr|က္လောင်း|tr=klong}}. ==={{section|pron}}=== * {{IPA|tvn|/kláʊɴ/}} ==={{section|n}}=== {{head|tvn|Danh từ}} # [[trường học|Trường học]] # {{lb|tvn|Buddhism}} [[tu viện|Tu viện]], [[đền]].”
2569568
wikitext
text/x-wiki
=={{langname|tvn}}==
==={{section|etym}}===
Từ {{inh|tvn|obr|က္လောင်း|tr=klong}}.
==={{section|pron}}===
* {{IPA|tvn|/kláʊɴ/}}
==={{section|n}}===
{{head|tvn|Danh từ}}
# [[trường học|Trường học]]
# {{lb|tvn|Buddhism}} [[tu viện|Tu viện]], [[đền]].
1cmnh88cmoyd6wcx6lwibxi1kitb21q
Thể loại:Danh từ tiếng Tavoy
14
419768
2569569
2026-10-11T09:58:23Z
Hiyuune
50834
Trang mới: “{{auto cat}}”
2569569
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Gigant
0
419769
2569570
2026-10-11T10:20:44Z
Hiyuune
50834
Trang mới: “{{also|gigant}} =={{langname|de}}== ==={{section|pron}}=== * {{IPA|de|[ɡiˈɡant]}} * {{audio|de|De-Gigant.ogg|a=Berlin}} * {{rhymes|de|ant|s=2}} ==={{section|n}}=== {{de-noun|m.weak|f=in}} # Người [[khổng lồ]]. ===={{section|decl}}==== {{de-ndecl|m.weak}} ==={{section|further}}=== * {{R:de:Duden}} * {{R:de:DWDS}}”
2569570
wikitext
text/x-wiki
{{also|gigant}}
=={{langname|de}}==
==={{section|pron}}===
* {{IPA|de|[ɡiˈɡant]}}
* {{audio|de|De-Gigant.ogg|a=Berlin}}
* {{rhymes|de|ant|s=2}}
==={{section|n}}===
{{de-noun|m.weak|f=in}}
# Người [[khổng lồ]].
===={{section|decl}}====
{{de-ndecl|m.weak}}
==={{section|further}}===
* {{R:de:Duden}}
* {{R:de:DWDS}}
s54qj1jlanqp3h1h5kk6pvx3d2cm74y
Giganten
0
419770
2569571
2026-10-11T10:21:30Z
Hiyuune
50834
+ de
2569571
wikitext
text/x-wiki
{{also|giganten}}
=={{langname|de}}==
==={{section|n}}===
* {{audio|de|De-Giganten.ogg|a=Berlin}}
==={{section|n}}===
{{head|de|Biến thể hình thái danh từ}}
# {{inflection of|de|Gigant||gen//dat//acc|s|;|nom//gen//dat//acc|p}}
9c8ymplgil6u07owyilif8szb3zr6cc
mallaca
0
419771
2569572
2026-10-11T10:23:52Z
Hiyuune
50834
Trang mới: “=={{langname|eo}}== ==={{section|etym}}=== {{ety|eo|:af|mal-|laca|text=+|tree=1}} ==={{section|pron}}=== {{eo-pr|h=mal‧laca}} ==={{section|adj}}=== {{eo-head}} # [[cảnh báo]].”
2569572
wikitext
text/x-wiki
=={{langname|eo}}==
==={{section|etym}}===
{{ety|eo|:af|mal-|laca|text=+|tree=1}}
==={{section|pron}}===
{{eo-pr|h=mal‧laca}}
==={{section|adj}}===
{{eo-head}}
# [[cảnh báo]].
alqrht6jrdw3pnv9wchd3fxtgq1g8mw
mallacan
0
419772
2569573
2026-10-11T10:24:28Z
Hiyuune
50834
Trang mới: “=={{langname|eo}}== ==={{section|adj}}=== {{eo-head}} # {{eo-form of|mallac|an}}”
2569573
wikitext
text/x-wiki
=={{langname|eo}}==
==={{section|adj}}===
{{eo-head}}
# {{eo-form of|mallac|an}}
jag9gnc1dj0p77xz1t2ro74sbb2si48
ohromený
0
419773
2569579
2026-10-11T10:44:15Z
Hiyuune
50834
Trang mới: “=={{langname|cs}}== ==={{section|etym}}=== {{ety|cs|:af|ohromit|-ený|text=+|tree=1}} ==={{section|pron}}=== * {{cs-IPA}} ==={{section|adj}}=== {{cs-adj|ohromenější|adv=ohromeně}} # [[ngạc nhiên|Ngạc nhiên]], [[kinh ngạc]]. ===={{section|decl}}==== {{cs-adecl}} ==={{section|further}}=== * {{R:cs:KNLA}} * {{R:cs:SSJC}} * {{R:cs:IJP}}”
2569579
wikitext
text/x-wiki
=={{langname|cs}}==
==={{section|etym}}===
{{ety|cs|:af|ohromit|-ený|text=+|tree=1}}
==={{section|pron}}===
* {{cs-IPA}}
==={{section|adj}}===
{{cs-adj|ohromenější|adv=ohromeně}}
# [[ngạc nhiên|Ngạc nhiên]], [[kinh ngạc]].
===={{section|decl}}====
{{cs-adecl}}
==={{section|further}}===
* {{R:cs:KNLA}}
* {{R:cs:SSJC}}
* {{R:cs:IJP}}
6l6e2uoqp2maj59fjj2ganip7hnxyt9
užaslý
0
419774
2569580
2026-10-11T10:45:31Z
Hiyuune
50834
Trang mới: “=={{langname|cs}}== ==={{section|adj}}=== {{cs-adj}} # [[ngạc nhiên|Ngạc nhiên]], [[kinh ngạc]]. #: {{syn|cs|ohromený}} ===={{section|decl}}==== {{cs-adecl}} ===={{section|rel}}==== {{col|cs|úžas|žasnout}}”
2569580
wikitext
text/x-wiki
=={{langname|cs}}==
==={{section|adj}}===
{{cs-adj}}
# [[ngạc nhiên|Ngạc nhiên]], [[kinh ngạc]].
#: {{syn|cs|ohromený}}
===={{section|decl}}====
{{cs-adecl}}
===={{section|rel}}====
{{col|cs|úžas|žasnout}}
59uznn28zv4sff7tlyc73wie3rpo2en
訝異
0
419775
2569581
2026-10-11T10:46:33Z
Hiyuune
50834
Trang mới: “{{also|讶异}} =={{langname|zh}}== {{zh-forms|s=讶异}} ==={{ĐM|pron}}=== {{zh-pron |m=yàyì |c=ngaa6 ji6 |cat=v }} ==={{ĐM|v}}=== {{head|zh|Động từ}} # [[ngạc nhiên]], [[kinh ngạc]].”
2569581
wikitext
text/x-wiki
{{also|讶异}}
=={{langname|zh}}==
{{zh-forms|s=讶异}}
==={{ĐM|pron}}===
{{zh-pron
|m=yàyì
|c=ngaa6 ji6
|cat=v
}}
==={{ĐM|v}}===
{{head|zh|Động từ}}
# [[ngạc nhiên]], [[kinh ngạc]].
ra7ve9904w3bhqxi0j2bv3n1ecfk29q
讶异
0
419776
2569582
2026-10-11T10:48:34Z
Hiyuune
50834
Trang mới: “{{also|訝異}} =={{langname|zh}}== {{zh-see|訝異}}”
2569582
wikitext
text/x-wiki
{{also|訝異}}
=={{langname|zh}}==
{{zh-see|訝異}}
nzy5he16notkyceqae7yekxyzdyiitp
verbaasd
0
419777
2569583
2026-10-11T10:49:38Z
Hiyuune
50834
Trang mới: “=={{langname|nl}}== ==={{section|pron}}=== * {{audio|nl|Nl-verbaasd.ogg}} * {{rhymes|nl|aːst|s=2}} ==={{section|adj}}=== {{nl-adj}} # [[ngạc nhiên]], [[kinh ngạc]]. ===={{section|decl}}==== {{nl-decl-adj}} ===={{section|drv}}==== {{col|nl |stomverbaasd |verbaasdheid }} ==={{section|ptcp}}=== {{nl-past-ptc}} # {{past participle of|nl|verbazen}} ===={{section|decl}}==== {{nl-decl-past-ptc}}”
2569583
wikitext
text/x-wiki
=={{langname|nl}}==
==={{section|pron}}===
* {{audio|nl|Nl-verbaasd.ogg}}
* {{rhymes|nl|aːst|s=2}}
==={{section|adj}}===
{{nl-adj}}
# [[ngạc nhiên]], [[kinh ngạc]].
===={{section|decl}}====
{{nl-decl-adj}}
===={{section|drv}}====
{{col|nl
|stomverbaasd
|verbaasdheid
}}
==={{section|ptcp}}===
{{nl-past-ptc}}
# {{past participle of|nl|verbazen}}
===={{section|decl}}====
{{nl-decl-past-ptc}}
qj6i2no6ahh7w9aw51wn3hw2j6e0zha
ällistynyt
0
419778
2569584
2026-10-11T10:51:27Z
Hiyuune
50834
+ fi
2569584
wikitext
text/x-wiki
=={{langname|fi}}==
==={{section|etym}}===
{{suffix|fi|ällistyä|nut|alt2=nyt}}
==={{section|pron}}===
{{fi-p}}
==={{section|adj}}===
{{fi-adj|ällistyne|empi|in}}
# [[ngạc nhiên]], [[kinh ngạc]].
===={{section|decl}}====
{{fi-decl-kuollut|pos=adj|ällistyn|ä}}
==={{section|ptcp}}===
{{head|fi|Phân từ quá khứ chủ động}}
# {{infl of|fi|ällistyä||past|act|part}}
==={{section|v}}===
{{head|fi|Biến thể hình thái động từ}}
# {{verb form of|fi|ällistyä||ind|past|với|conn}}
blgtzfabfdpcrxy0jcutb7t1bkqo3uy
ällistyä
0
419779
2569585
2026-10-11T10:52:58Z
Hiyuune
50834
+ fi
2569585
wikitext
text/x-wiki
=={{langname|fi}}==
==={{section|pron}}===
{{suf|fi|älli|stua|alt2=styä}}
==={{section|pron}}===
{{fi-pronunciation|*}}
==={{section|v}}===
{{fi-verb}}
# {{lb|fi|intransitive}} [[ngạc nhiên]], [[kinh ngạc]].
===={{section|forms}}====
{{fi-conj-sanoa|ällist|||y|ä}}
===={{section|drv}}====
{{col|fi|title=tính từ
|ällistynyt
}}
{{col|fi|title=danh từ
|ällistyminen
|ällistys
}}
{{col|fi|title=động từ
|ällistellä
|ällistyttää
}}
==={{section|further}}===
* {{R:fi:KTSK|accessdate=2023-07-04}}
==={{section|ana}}===
* {{anagrams|fi|a=illstyää|täysillä}}
iew0kwqcibftd7t7c38v9s7vogcc8wl
2569586
2569585
2026-10-11T10:53:07Z
Hiyuune
50834
/* Cách phát âm */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2569586
wikitext
text/x-wiki
=={{langname|fi}}==
==={{section|etym}}===
{{suf|fi|älli|stua|alt2=styä}}
==={{section|pron}}===
{{fi-pronunciation|*}}
==={{section|v}}===
{{fi-verb}}
# {{lb|fi|intransitive}} [[ngạc nhiên]], [[kinh ngạc]].
===={{section|forms}}====
{{fi-conj-sanoa|ällist|||y|ä}}
===={{section|drv}}====
{{col|fi|title=tính từ
|ällistynyt
}}
{{col|fi|title=danh từ
|ällistyminen
|ällistys
}}
{{col|fi|title=động từ
|ällistellä
|ällistyttää
}}
==={{section|further}}===
* {{R:fi:KTSK|accessdate=2023-07-04}}
==={{section|ana}}===
* {{anagrams|fi|a=illstyää|täysillä}}
ow2x49as9xdu7p0ci4yi9t25y2uska0
ällistyn
0
419780
2569587
2026-10-11T10:53:55Z
Hiyuune
50834
+ fi
2569587
wikitext
text/x-wiki
=={{langname|fi}}==
==={{section|v}}===
{{head|fi|Biến thể hình thái động từ}}
# {{verb form of|fi|ällistyä||ind|pres|ở|1|s}}
lkgcxzm6opoccm3wqi5nk4btkf0mwfk
ällistyt
0
419781
2569588
2026-10-11T10:54:15Z
Hiyuune
50834
+ fi
2569588
wikitext
text/x-wiki
=={{langname|fi}}==
==={{section|v}}===
{{head|fi|Biến thể hình thái động từ}}
# {{verb form of|fi|ällistyä||ind|pres|ở|2|s}}
2zd9g5kqzugw514tnbpw8ddbsqkkahl
ällistyy
0
419782
2569589
2026-10-11T10:54:23Z
Hiyuune
50834
+ fi
2569589
wikitext
text/x-wiki
=={{langname|fi}}==
==={{section|v}}===
{{head|fi|Biến thể hình thái động từ}}
# {{verb form of|fi|ällistyä||ind|pres|ở|3|s}}
ncleeai0bpie29eu6c4uaqv66nubcne
ällistymme
0
419783
2569590
2026-10-11T10:54:39Z
Hiyuune
50834
+ fi
2569590
wikitext
text/x-wiki
=={{langname|fi}}==
==={{section|v}}===
{{head|fi|Biến thể hình thái động từ}}
# {{verb form of|fi|ällistyä||ind|pres|ở|1|p}}
ncmewspp8wlk3ztpwpxsk8augbvo19k
ällistytte
0
419784
2569591
2026-10-11T10:54:52Z
Hiyuune
50834
+ fi
2569591
wikitext
text/x-wiki
=={{langname|fi}}==
==={{section|v}}===
{{head|fi|Biến thể hình thái động từ}}
# {{verb form of|fi|ällistyä||ind|pres|ở|2|p}}
81uls3ioujsjjxapx4q047nqp1rgamw
ällistyvät
0
419785
2569592
2026-10-11T10:54:58Z
Hiyuune
50834
+ fi
2569592
wikitext
text/x-wiki
=={{langname|fi}}==
==={{section|v}}===
{{head|fi|Biến thể hình thái động từ}}
# {{verb form of|fi|ällistyä||ind|pres|ở|3|p}}
k1va32e0pa7szw674u7dcmev7ad9ylq
ällisty
0
419786
2569593
2026-10-11T10:56:06Z
Hiyuune
50834
+ fi
2569593
wikitext
text/x-wiki
=={{langname|fi}}==
==={{section|v}}===
{{head|fi|Biến thể hình thái động từ}}
# {{verb form of|fi|ällistyä||ind|pres|với|conn|;|imp|pres|ở|2|s|;|imp|pres|với|conn|ở|2|s}}
==={{section|ana}}===
* {{anagrams|fi|a=illstyä|syliltä}}
142g5yuao89r49le247sxcff0rb15vz
erstaunt
0
419787
2569594
2026-10-11T11:15:14Z
Hiyuune
50834
Trang mới: “=={{langname|de}}== ==={{section|pron}}=== * {{audio|de|De-erstaunt.ogg|a=Berlin}} ==={{section|ptcp}}=== {{head|de|Phân từ quá khứ}} # {{past participle of|de|erstaunen}} ==={{section|v}}=== {{head|de|vf}} # {{verb form of|de|erstaunen||pres|ở|2|p|;|pres|ở|3|s|;|imp|p}}”
2569594
wikitext
text/x-wiki
=={{langname|de}}==
==={{section|pron}}===
* {{audio|de|De-erstaunt.ogg|a=Berlin}}
==={{section|ptcp}}===
{{head|de|Phân từ quá khứ}}
# {{past participle of|de|erstaunen}}
==={{section|v}}===
{{head|de|vf}}
# {{verb form of|de|erstaunen||pres|ở|2|p|;|pres|ở|3|s|;|imp|p}}
o283ko43mqht49qz0xq5voj9jn6jruk
Bản mẫu:ell-conjug-sub4
10
419788
2569597
2026-10-11T11:16:28Z
Hiyuune
50834
Hiyuune đã đổi [[Bản mẫu:ell-conjug-sub4]] thành [[Bản mẫu:el-conjug-sub4]] qua đổi hướng
2569597
wikitext
text/x-wiki
#đổi [[Bản mẫu:el-conjug-sub4]]
1zkpg679hp4gzg9ekvopksi2slcwkab
Bản mẫu:ell-conjug-sub1
10
419789
2569599
2026-10-11T11:16:45Z
Hiyuune
50834
Hiyuune đã đổi [[Bản mẫu:ell-conjug-sub1]] thành [[Bản mẫu:el-conjug-sub1]] qua đổi hướng
2569599
wikitext
text/x-wiki
#đổi [[Bản mẫu:el-conjug-sub1]]
t0lyhvpndwgt5shjy4u3hjos4itssih
astrometries
0
419790
2569604
2026-10-11T11:24:05Z
Hiyuune
50834
Trang mới: “{{also|astrométries}} =={{langname|en}}== ==={{section|n}}=== {{head|en|Biến thể hình thái danh từ}} # {{plural of|en|astrometry}}”
2569604
wikitext
text/x-wiki
{{also|astrométries}}
=={{langname|en}}==
==={{section|n}}===
{{head|en|Biến thể hình thái danh từ}}
# {{plural of|en|astrometry}}
127zeg9pvdx57phz0q6ir9o5flrqrgz
Mô đun:nv-conj
828
419791
2569605
2026-10-11T11:40:41Z
TheHighFighter2
42988
Trang mới: “--[[ Based on Kari's paper (1978) with several personal additions, adaptations and fixes. NOTES: - Lua regex are very expensive, had to scale back my all-regex coding paradigm. - In order to facilitate usage of Lua regex (which are very limited), consonants are converted to a one-symbol format (ex: q for k', č for ch...), then rules are applied, then the word is converted back to conventional orthography. TODO: - seriative, - "make" verbs in the perfective, - get…”
2569605
Scribunto
text/plain
--[[
Based on Kari's paper (1978)
with several personal additions, adaptations and fixes.
NOTES:
- Lua regex are very expensive, had to scale back my all-regex coding paradigm.
- In order to facilitate usage of Lua regex (which are very limited), consonants are converted to a one-symbol format (ex: q for k', č for ch...), then rules are applied, then the word is converted back to conventional orthography.
TODO:
- seriative,
- "make" verbs in the perfective,
- get rid of the ":" altogether as a formative boundary.
]]
local p = {}
local umatch= mw.ustring.match
local ufind = mw.ustring.find
local subst = mw.ustring.gsub
local UTF8_char = "[\1-\127\194-\244][\128-\191]*"
-- forward declarations
local convert, fut_adjustment_conj
-- ENTRY POINTS
function p.show(frame)
return p.conj(frame:getParent())
end
function p.conj(frame)
local f = frame.args
-- retrieve parameters
get_params(frame)
local data = {}
data.form_1sg = f["1sg"] or proc("1sg")
data.form_2sg = f["2sg"] or proc("2sg")
data.form_3sg = f["3sg"] or proc("3sg")
data.form_4sg = f["4sg"] or proc("4sg")
data.form_1dl = f["1dl"] or proc("1dl")
data.form_2dl = f["2dl"] or proc("2dl")
data.form_1pl = f["1pl"] or proc("1pl")
data.form_2pl = f["2pl"] or proc("2pl")
data.form_3pl = f["3pl"] or proc("3pl")
data.form_4pl = f["4pl"] or proc("4pl")
if frame.args["test"] then
return make_string(data)
else
return make_table(data)
end
end
function get_params(frame)
-- convert 7-args mode to 4-args mode
if frame.args[7] then
frame.args["conj"]=frame.args[4]
frame.args["obj"] =frame.args[3]
frame.args["disj"]=frame.args[2]
frame.args[4] =frame.args[7]
frame.args[3] =frame.args[6]
frame.args[2] =frame.args[5]
end
mode_ = frame.args[1]
asp_ = frame.args[2]
cl_ = frame.args[3]
stem_ = frame.args[4]
disj_ = frame.args["disj"] or ""
conj_ = frame.args["conj"] or ""
obj_ = frame.args["obj"] or ""
neuter_= frame.args["neuter"] -- ni / ∅
nodevoice_= frame.args["nodevoice"]
d_effect_= frame.args["d-effect"]
nospread_= frame.args["nospread"]
dashift_= frame.args["dashift"]
hop_ = frame.args["hop"] or ""
-- underlying representations
-- TODO: improve below code
-- manage multiple disj/conj prefs
if disj_ == "a" then disj_ = "ʼi"
elseif disj_ == "á" then disj_ = "ʼí"
--elseif disj_ == "á" then disj_ = "ʼá"
end
disj_ = subst(disj_, "kó", "kwí")
if obj_ == "a" then obj_ = "ʼi"
elseif obj_ == "y" then obj_ = "yi"
elseif obj_ == "ho" then obj_="hwi"
end
fut_=""
if mode_=="fut" then
fut_adjustment_conj()
end
disj_ = convert(disj_)
obj_ = convert(obj_)
conj_ = convert(conj_)
stem_ = convert(stem_)
has_hiss = ufind(stem_, "[szcʒ]")
has_hush = ufind(stem_, "[šžčćj]")
end
-- PARADIGMS
local paradigms={}
paradigms["impf"] = {}
P = paradigms["impf"]
P["∅"] ={ "š","ni", "", "iid", "oh"}
P["ni"] ={"niš","ní","ni","niid","noh"}
P["yii"]={"iiš","ii","ii", "iid","ooh"}
--P["í"] ={"ísh","íní","í", "íid", "óh"}
paradigms["perf"] = {}
P = paradigms["perf"]
P["yi"] ={"ğí", "ğíní","ğí","iid","oo"}
P["yid"]={"ğiš","ğíní","ği","iid","ooh"}
P["ni"] ={"ní","ğíní","ní","niid","noo"}
P["nid"]={"niš","ğíní","ni","niid","nooh"}
P["si"] ={"sé", "síní","z","siid","soo"}
P["sid"]={"sis","síní","s","siid","sooh"}
P["si2"] ={"é", "íní","ğez","eed","soo"}
P["si2d"]={"és","íní","ğes","eed","sooh"}
P["yii"]={"ii","ini","ii", "iid","oo"}
P["yiid"]={"iiš","ini","ii", "iid","ooh"}
paradigms["fut"] = {}
P = paradigms["fut"]
P["∅"] ={"ğeš", "ğí","ğo","ğiid","ğoh"}
--P["∅"] ={"eeš", "íí","oo","iid","ooh"}
-- REGEXP
local vowels = "aąáą́eęéę́iįíį́oǫóǫ́"
local V = "[".. vowels.."]"
local L = "[aąeęiįoǫ]"
local H = "[áą́éę́íį́óǫ́]"
local C = "[^:=#" .. vowels .."]"
local C0= "[^=#" .. vowels .."]*="
local K = "[^:=#yʼ" .. vowels .."]"
local I = "[ií]"
local O = "[oó]"
local S = "[sš]"
local high_tone = {
["a"] = "á", ["e"] = "é",
["i"] = "í", ["o"] = "ó"
}
local low_tone = {
["á"] = "a", ["é"] = "e",
["í"] = "i", ["ó"] = "o"
}
local d_effect_map = {
["z"] = "ʒ", ["ž"] = "j",
["ğ"] = "g", ["y"] = "ʼy",
["w"] = "ʼw", ["l"] = "dl",
["ʼ"] = "tʼ", ["m"] = "ʼm",
["n"] = "ʼn"
}
--Note: stem must be provided with etymological y or gh, so as to elicit proper d-effect.
local devoicing = {
["z"] = "s", ["ğ"] = "h",
["ž"] = "š", ["l"] = "ł",
["w"] = "h", ["y"] = "h",
}
local surds = "([sšhł])"
local voiced = "([zžğwyl])"
local function at(str, i)
if i == 0 then
return ""
elseif i < 0 then
local n = 0
local characters = {}
for character in string.gmatch(str, UTF8_char) do
n = n + 1
characters[n] = character
end
return characters[n + i + 1]
else
local n = 0
for character in string.gmatch(str, UTF8_char) do
n = n + 1
if n == i then
return character
end
end
end
return ""
end
local function assimilate(i, v)
v = at(v, 1) -- first vowel if long
if i == "í" then
return high_tone[v] or v
end
v = low_tone[v] or v
return subst(i, "i", v)
end
local function split_pref(pref)
cv,f = umatch(pref, "^(.-)([sšhd]*)$")
return cv, f
end
local function append(pref)
if not pref or pref == "" then
return
end
if form_ ~= "" then
last = at(form_, -1)
if last == "#" or last == "=" then
form_ = form_.. pref
else
form_ = form_.. ":".. pref
end
else
form_ = pref
end
end
local abbrs = {
V = V, H = H, L = L, C0 = C0, C = C, I = I, O = O, K = K,
}
local function expand_regex(str)
return string.gsub(str, "[VHLCIOK]0?", abbrs)
--[[ expanding manually instead to speed up? Not faster actually...
ret=""
d=""
for c in mw.ustring.gmatch(str,".") do
if c == "V" then ret=ret..V
elseif c == "H" then ret=ret..H
elseif c == "L" then ret=ret..L
elseif d == "C" and c== "0" then
ret=ret..C0
elseif d == "C" and c ~= "0" then
ret=ret..C..c
elseif c == "I" then ret=ret..I
elseif c == "O" then ret=ret..O
elseif c == "K" then ret=ret..K
elseif c ~= "C" then ret=ret..c
end
d = c
end
return ret
]]
end
local function replace(str1, str2)
str1 = expand_regex(str1)
form_ = subst(form_, str1, str2)
end
-- basic replace without wildcard
local function replace2(str1, str2)
form_ = subst(form_, str1, str2)
end
local function match(str2)
str2 = expand_regex(str2)
return umatch(form_, str2)
end
-- basic replace without wildcard
local function match2(str2)
return umatch(form_, str2)
end
di2mono = {
["kw"] = "q",
["hw"] = "f",
["kʼ"] = "ç",
["čʼ"] = "ć", -- trick
["tʼ"] = "ť",
["ts"] = "c",
["sh"] = "š",
["zh"] = "ž",
["gh"] = "ğ",
["ch"] = "č",
["dz"] = "ʒ"
}
mono2di = {
["q"] = "kw",
["f"] = "hw",
["ç"] = "kʼ",
["ć"] = "chʼ",
["ť"] = "tʼ",
["c"] = "ts",
["š"] = "sh",
["ž"] = "zh",
["ğ"] = "gh",
["č"] = "ch",
["ʒ"] = "dz",
["ñ"] = "n"
}
-- declared as local above
function convert(str)
-- using regex only is too expensive
-- doing it manually
ret = ""
d = ""
for c in mw.ustring.gmatch(str,".") do
if d == "" then
d=c
else
m = di2mono[d..c]
if m and m == "č" then
d = "č"
elseif d == "č" and not m then
ret = ret.."č"
d = c
elseif m then
ret = ret.. m
d = ""
else
ret = ret.. d
d = c
end
end
end
ret = ret.. d
return ret
end
local function convert_back()
-- using regex only is too expensive
-- doing it manually
ret =""
d = ""
for c in mw.ustring.gmatch(form_,".") do
if c ==":" or c=="=" or c=="#" then
elseif ret == "" and c == "ʼ" then
elseif d == "s" and c == "h" then
ret = ret.."x"
elseif d == "s" and c == "s" then
elseif d == "sh" and c == "š" then
elseif d == "z" and c == "z" then
elseif d == "zh" and c == "ž" then
elseif c == "ğ" or c == "f" then
d = c
elseif d == "ğ" then
if umatch(c, "[eęiįéę́íį́]") then
d="y"
elseif umatch(c,"[oǫóǫ́]") then
d="w"
else
d="gh"
end
ret=ret.. d..c
elseif d == "f" then
if umatch(c, "[oǫóǫ́]") then
d="h"
else
d="hw"
end
ret=ret..d..c
else
d = mono2di[c] or c
ret = ret .. d
end
end
form_=ret
end
--#################################
-- RULES
-- declared as local above
function fut_adjustment_conj()
fut_="di"
if asp_=="yii" then
fut_="ği:".. fut_
asp_="∅"
end
end
local function fut_adjustments()
-- di- positioning
replace2("di:([yh][ií])", "%1:di")
-- high-tone future
replace2("d[ií]:n[ií]", "dí:ní")
-- methateses that need early ordering
replace ("ji:y(I)", "y%1:ji")
replace2("(.[:#])ji:ği", "%1ği:ji")
replace2("(.+)#yi:ği", "%1#yi")
end
local function ni_adjustments()
if neuter_ then
if neuter_ == "∅" then
replace2(":?ni=", "=")
end
replace2("(.[#:])łi=", "%1l=")
else -- "active" verb
-- yini/yíní tentatively managed hee
replace2("yí:ni=", "ó=") -- yíníshta'
replace2("ğí:ni=", "ó=") -- 'ííníshta'
-- yinishyé-wolyé-joolyé-daolyé mess
replace2("da#ği:ni=", "da#ğo=")
replace2("^#ği:ni=", "#ğo=")
replace2("ği:ni=", "oo=")
-- conj-dominant
if conj_ ~= "" then
replace2(":ni=", ":ğe=")
else
-- ∅- or da- dominant
replace2("^#ni=", "#yí=")
replace2("^da#ni=", "da#yí=")
-- disj-dominant
replace2("#ni=", "#=")
end
end
end
local function yii_adjustments()
-- yi_doubling
replace2("^#yi:ii", "#yi:yi:ii")
-- dis: ii > i, but da#ii > dayii or dei
if mode_ == "impf" then
replace2("da#ii=", "da#yi:ii=")
else
replace2("da#ii=", "da#yi=")
end
replace("(V)#ii(:?š?)=", "%1#i%2=")
-- ho adjustments: hwi+ii > hoo
replace2("fi:ii(:?š?)=", "ho:o%1=")
-- object-dominant 2sg
if obj ~= "" and conj_ == "" and rank == 2 then
replace2("ini=", "iini=")
end
end
local function yi_adjustments()
-- yi_doubling
replace2("^#yi:ğí=", "#yi:yi:ğí=")
-- hwi-delab needed before gamma_del
-- for 1sg: hwi:ğí= > hóó, not hwíí
replace2("fi:ğí=", "ho:ğí=")
end
local function yi_d_adjustments()
-- conjunct
if rank == 3 then
replace2("#(.+)ği=", "#%1ğo=")
elseif rank == 1 then
replace2("#(.+)ği:š=", "#%1ğe:š=")
end
-- a-away + perfective = ee
replace2("ʼi#ği(:?š?)=", "ʼi#ğe%1=")
end
local function si_adjustments()
-- yini
replace2("da#ği:([sz])=","da#ğo:%1=")
replace2("ği:([sz])=","oo:%1=")
-- yiz + ł = yis
replace2("z=ł:", "s=ł:")
-- #s=gan > sigan
replace2("^#[sz]=([∅ł])", "#si=%1")
-- ni:soo > noo or sinoo
if rank==5 then
replace2("^#ni:soo", "#si:noo")
replace2("^da#ni:soo", "da#si:noo")
replace2("ni:soo", "noo")
end
end
local function seriative_h_deletion() --13
replace("(#.+:)hi(C0)","%1ii%2")
replace2("(#.+:)hi:","%1yi:")
end
local function d_effect()
-- handle 1dl cases first
replace2( ":d=ł:l", "=dl")
replace2( ":d=[łl]:", "=l:")
replace2( ":d=[d∅]:", "=d:")
replace2( "=∅:", "=")
-- apply d-effect
-- special cases
if stem_ == "zǫ́ǫ́z" or stem_=="zǫ́ǫ́s" then
replace2("=d:z", "=d")
elseif stem_ == "ʼeeł" or stem_ == "ʼéél" or stem_ == "ʼoł" then
replace2("=d:", "=")
else
c = match("=d:(C)")
if c then
dc = d_effect_ or d_effect_map[c] or c
replace2("=d:"..c, "=".. dc)
end
end
end
local function continuant_devoicing() --18
if nodevoice_ then
return
end
exp = surds.."([:=])"..voiced
s, sep, v = match2(exp)
if s and sep and v then
f = devoicing[v]
replace2(s..sep..v, s..sep..f)
end
end
local function barred_l_deletion() --23
replace2("=ł:([sšł])", "=%1")
end
local function h_deletion() --32
replace2(":h=ł:", "=ł")
end
local function classifier_deletion() --30
replace2("([sš])=ł:", "%1=")
end
local function cons_degemination() --26
-- replace(":?s=s", "=s")
-- replace(":?š=š", "=š")
end
local function pepet_vowel_insertion() --46
replace("#(C0)", "#i%1")
end
local function vowel_deletion() --12
replace("(C)i:(V)", "%1%2")
end
local function tone_assimilation() --39
-- acceleration
if not has_high then return end
--disjunct
if not nospread_ and has_disj then
h,l,c0 =match("(H#C?:?C?:?C?)(L)(C0)")
if h and l and c0 then
a = high_tone[l]
replace2(h..l..c0, h..a..c0)
end
end
--conjunct
t,h,l = match("#(.*)(H:?C?:C)(L)")
if t and h and l then
a = high_tone[l]
replace2(t..h..l,t.. h..a)
end
end
local function tone_lowering() --48
--used for ní:ii --> nii
--what about ní:oh --> nó ?
--[[ moved to paradigm adjustments
h, l = match("(H)(:L)")
if h and l then
replace2(h..l, low_tone[h]..l)
end
]]
end
local function gamma_tone_assim()
-- acceleration
if not has_high or nospread_ or not has_disj then return end
h,l,c0 = match("(H#ğ)(L)(C0)")
if h and l and c0 then
a = high_tone[l]
replace2(h..l..c0, h..a..c0)
end
end
local function gamma_deletion() --41
replace2("(#.*)ğ([ieoíéó].*=)", "%1%2")
-- future mode might need a second run
replace2("(#.*)ğ([ieoíéó].*=)", "%1%2")
end
local function n_deletion() --?
-- made it a late rule instead
-- bą́:ná#ʼ:dí:š doesn't work, why?
-- chʼínéísííd doesn't contract,
-- chʼééínísííd does.
-- acceleration
if not (has_disj and has_high) then return end
c, v, c0, c1 = match(
"(C)(V):n[áé][#:][ií]?:?(C.-)V(.*=)")
if c and v and c0 and c1 and
c ~= "ʼ" then
h = high_tone[v] or v
if h == "í" then
h="é"
end
replace2(c..v..":n[áé]", c..h..h)
end
end
local function tone_raising() --49
-- acceleration
if not has_high then return end
l,s,h = match("(L)([#:])([íá])")
if l and s and h then
a = high_tone[l]
replace2(l..s..h, a..s..h)
end
end
local function vowel_assimilation() --57
-- special cases
if has_disj then
c, c0 = match("(C)i#i(C0)")
if c and c0 and
c ~="n" and c ~= "ʼ" then
replace2("i#i", "e#e")
end
end
-- a+o = aa dialects, 2dl/pl only
if pref == "oh" then
replace2("([aá])#o", "%1#a")
end
-- progressive
v, s, i, c0 = match("(V)([#:])(I+)(C0)")
if v and s and i and c0 and
not ufind(v..s..i, "[aá]#ii") then
a = assimilate(i, v)
replace2(v..s..i..c0,
v..s..a..c0)
end
-- regressive disj
if has_disj then
b, i, v, c0 = match(
"([^kqhtc])(I)#(V+)(C0)")
if b and i and v and c0 then
a = assimilate(i, v)
replace2(b..i.."#"..v..c0,
b..a.."#"..v..c0)
end
end
-- regressive conj
-- Note: hwi:o > hwo:o, should > ho:o
-- to manage in convert_back
-- along with gho > wo
c,i,v = match("#(.*)(I):(V)")
if c and i and v then
a = assimilate(i,v)
replace("#".. c.. i..":".. v,
"#".. c.. a..":".. v)
end
end
local function vowel_absorption() --62
-- acceleration
if not has_disj then return end
-- acceleration
if not has_high then return end
-- in C0 environment only
if match("V#VC0") then
replace2("([ʼł])í#i","%1í#")
replace2("í#i","é#")
replace2("ó#o","ó#")
replace2("á#a","á#")
replace2("é#e","é#")
end
--[[ not necessarily faster...
c, h, l, c0 = match("(C)(H)#(L)(C0)")
if c and h and l and c0 then
if h=="í" and l=="i" or
h=="á" and l=="a" or
h=="ó" and l=="o" or
h=="é" and l=="e" then
v=h
if h == "í" and
not(c=="ʼ" or c=="ł") then
v="é"
end
replace2(h.."#"..l,v.."#")
end
end
]]
end
--function optative_tone_lowering() --51
local function y_deletion() --42
-- acceleration
if not has_disj then return end
-- short i only
replace("(V)#y(I)([:=]C)", "%1#%2%3")
end
local function vowel_fronting() --67
-- acceleration
if not has_disj then return end
replace("([^kqht])a#(I)", "%1e#%2")
replace("([^kqht])á#(I)", "%1é#%2")
end
local function vowel_degemination() --47
-- TODO: might not be enough
-- need refactoring
replace("(I)[#:]ii", "%1i")
replace("(O)[#:]oo", "%1o")
end
local function seriative_assimilation()
-- split from vcv_assimilation
-- must take place before ni-abs
-- to prevent náhí- from assimilating
-- acceleration
if not has_disj then return end
v, i, c0 = match("(V)#h(I)(C0)")
if v and i and c0 then
replace2(v.."#h"..i, v.."#h"..v)
end
end
local function vcv_assimilation() --44
-- NOTE: seriative case has been split
-- only at #-boundary?
-- only in zero environment?
-- acceleration
if not has_disj then return end
-- special case
replace2("ʼi#ʼi([:=])", "ʼe#ʼe%1")
-- regressive
k,i,c,v = match("(C)(I)#([mkghʼ])(V)")
if k and i and c and v and k~="y" then
a = assimilate(i, v)
replace2(i.."#"..c..v,
a.."#"..c..v)
end
end
local function i_to_a() --71
--NOTE: easier to split rule in 2 parts
replace("ʼi=", "ʼa=")
-- can't do that here
-- because of ná'í- 2sg vs 3sg, unless
-- i_to_a applies after tone_assim?
--replace("ʼí=", "ʼá=")
i,s,c= match("ʼ(I)([#:]=?)(C)")
if i and s and c and c ~= "ʼ" then
a = assimilate(i,"a")
replace2( "ʼ"..i..s..c,
"ʼ"..a..s..c)
end
end
local function delabialization1() --78
--TODO: C should exclude "y" here.
--NOTE: Getting huge contradictions
-- with regards to the ordering of
-- the ho-to-ha, v-deletion,
-- gamma-deletion, ni-absorption
-- and pepet vowel insertion rules
-- ==> handle some cases directly here
-- ==> split hwi from kwí
-- kwí must be done before pepet
-- hwi must be done after gamma_del
--
-- Maybe should replace all this with a
-- with a late labialization rule
-- instead, where :
-- ho + ííní = hwííní
-- ho + eesh = hweesh...
-- but ho + í_C[ = hóó by assimilation
-- acceleration
if not has_high then return end
replace("qí([#:=]*C)", "kó%1")
replace("qí#(O)", "kó#")
end
local function delabialization2()
replace("fi(C0)", "ha%1")
replace("fi:(C)", "ho:%1")
-- below managed as in convert_back
--replace("f(O)", "h%1")
end
local function ni_absorption() --11
--
v = match2("([io]):ni=")
if v then
a = high_tone[v]
replace2(v..":ni=", a.."=" )
end
end
local function pg_strident_assimilation() --83
-- might be other cases?
replace2("ji:ʒi", "ji:ji")
-- might combine directly w/ j_el
-- ji:dzi > ji:ji > i:ji
end
local function j_deletion() --94
replace2("ji:ji", "i:ji")
end
local function vowel_elision() --86
-- K = C - {y, ʼ}
-- "ji" doesn't elide in front of
-- another j (ex. dajijooba)
if match2("ji:j") then
return
end
replace("(.[:#]ʼ)i(:KV)", "%1%2")
replace("(.[:#][jʒ])i(:KV)", "%1%2")
end
local function deaffrication() --89
replace("j:(C)", "ž:%1")
replace("ʒ:(C)", "z:%1")
end
local function glottal_zh_metathesis() --91
replace2("ʼ:ž:", "ž:ʼ:")
end
local function glottal_cv_metathesis()
-- "far" hop allows glottal stop to
-- to hop "inside" 2sg prefix
-- ex: bighá#ʼdííní > bighá#dííʼní
-- but bą́ą́#ʼdííní > bą́ą́#ʼdííní
if hop_ == "far" then
replace("(ž?:?ʼ):(d:?V+:?V?):?(K:?V+)", "%2:%1:%3")
else
replace("(ž?:?ʼ):(d:?V+):?(K:?V+)", "%2:%1:%3")
end
end
local function zh_cv_metathesis()
-- doesn't apply to jidinii,
-- is that a more generic rule?
if match2("ji:di:n:ii") then
return
end
replace("ji:(C:?V+):(C:?V+)", "%1:ž:%2")
end
local function strident_assimilation() --81
if has_hiss then
replace2("š", "s")
elseif has_hush then
replace2("s", "š")
replace2("z", "ž")
end
end
local function syllabic_n() --100
-- split b/c of Lua regex limitations
replace2("n[ia]([#:]ʼ?:?[dtjʒ])","n%1")
replace2("n[íá]([#:]ʼ?:?[dtjʒ])","ń%1")
replace("na#(ʼ?:?[sš]V)", "ni#%1")
replace("ná#(ʼ?:?[sš]V)", "ní#%1")
replace2("na#(ž:ʼ?:?d)", "ni#%1")
replace2("ná#(ž:ʼ?:?d)", "ní#%1")
end
local function gamma_insertion() --6
-- acceleration
if has_disj then return end
replace("^#(V)", "#ğ%1")
end
local function gamma_gliding() --7
replace("ğ(I)", "y%1")
replace("ğ(O)", "w%1")
end
--#################################
-- MAIN FUNCTION
function proc(person)
-- PERSON
pers, numb = umatch(person,"([0-9])(..)")
pers = tonumber(pers)
da = (numb == "pl") and "da" or ""
subj = (pers == 4) and "ji" or ""
obj = (obj_ == "yi" and pers ~= 3 ) and "" or obj_
rank = (pers >= 3) and 3 or (numb == "sg") and pers or (pers + 3)
if dashift_ and numb=="pl" and
(dashift_ ~= "3" or rank==3) then
asp_="si"
end
-- Determination of paradigm to use
asp2_ = asp_
if mode_ == "perf" then
if asp_=="si" and
umatch(conj_, "[dnh]i$") then
asp2_ = asp_.."2"
end
if cl_=="d" or cl_=="l" then
asp2_ = asp2_ .. "d"
end
end
pref = paradigms[mode_][asp2_][rank]
p, pf = split_pref(pref)
-- UNDERLYING FORM
form_ = disj_
append(da); form_ = form_.."#"
append(obj)
append(subj)
append(fut_)
append(conj_)
append(p)
append(pf); form_ = form_.."="
append(cl_)
append(stem_)
--attempt at accelerating regex
has_disj= (disj_..da ~= "")
has_high= match("H")
if pers == 3 then
replace2("P", "y")
else
replace2("P", "b")
end
--form_=convert(form_)
--if true then return form_ end
-- IRREGULAR STEMS
if stem_ == "ááh" then
if person == "2sg" then
replace("=∅:ááh", "=nááh")
elseif pers == 2 then
replace("=∅:ááh", "=∅:hááh")
elseif rank == 3 then
replace("=∅:ááh", "=∅:ğááh")
end
elseif stem_=="yą́" or stem_=="yį́į́ł" then
if pers == 1 then
replace("=∅:y", "=")
elseif pers == 2 then
replace("h=∅:y", "h=s")
end
end
-- MODE READJUSTMENT RULES
if mode_ == "fut" then
fut_adjustments()
elseif asp_ == "∅" then
-- make this a more general rule?
-- or amend the tone-lowering rule?
-- or make "ní" its own paradigm?
-- how do manage both:
-- á#ní:iid > ániildííl, and
-- ní:iid > níilʼį́ ??
replace2("ní:ii", "ni:ii")
replace2("ní:o:h","nó:h")
-- prevent ni-absorption if ni6
if rank == 3 then
replace2("ni=", "ñi=")
end
elseif asp_ == "ni" then
ni_adjustments()
elseif asp_ == "yii" then
yii_adjustments()
elseif asp2_ == "yi" then
yi_adjustments()
elseif asp2_ == "yid" then
yi_d_adjustments()
elseif asp_ == "si" then
si_adjustments()
end
-- PHONOLOGICAL RULES
seriative_h_deletion() --13
d_effect() -- 24,35,25
continuant_devoicing() --18
barred_l_deletion() --23
h_deletion() --32
classifier_deletion() --30
-- below ordering is tricky
delabialization1() --78
--delab2 could go here w/ a labial rule
--delabialization2()
pepet_vowel_insertion() --46
vowel_deletion() --12
--tone_assimilation() --39
--tone_lowering() --48
gamma_tone_assim() --hack
gamma_deletion() --41
-- trying this here
-- must be before ni-abs so that
-- 2sg náhí- doesn't assimilate to náhá-
seriative_assimilation()
-- trying hwi-delab here
-- must be before ni-abs
-- hwi:ni-> ho:ni -> hó-
delabialization2()
ni_absorption() --11
-- moved tone_assim to later rule
-- so as to allow proper hwi delab
-- before tone assimilation kicks in
-- ná#haso -> ná#háso and not ná#hwíso
-- Might have to move it even after
-- v-elision and deaffrication for
-- words like łí#ji:di -> łí#zh:dí
-- issue: but tone_assim must be before
-- gamma_del for words like :
-- ná#ghi > ná#ghí > ná#í
-- ==> wrote a gamma_tone_assim rule
--tone_assimilation()
-- made it a late rule instead b/c
-- y_deletion hasn't applied yet
-- cf. chʼínéísííd (no contraction).
-- Actually, chʼínéísííd doesn't
-- contract b/c éí is considered one
-- vowel, so conditions are not met.
-- chʼééínísííd on the other side does
-- contract thanks to intervening ní.
--n_deletion() --?
tone_raising() --49
vowel_assimilation() --57
vowel_absorption() --62
--optative_tone_lowering() --51
y_deletion() --42
vowel_fronting() --67
vowel_degemination() --47
pg_strident_assimilation() --83
j_deletion() --94
vowel_elision() --86
deaffrication() --89
glottal_zh_metathesis() --91
glottal_cv_metathesis()
zh_cv_metathesis()
strident_assimilation() --81
-- i_to_a must be before
-- tone-assim but after ni-abs:
-- 2sg: ná#'i:ni > ná#'í
-- 3sg: ná#'i > ná#'a > ná#'á
-- if tone_assim before,
-- can't distinguish 2sg from 3sg
-- 3sg: ná#'i > ná#'í > ná#'á ??
i_to_a()
tone_assimilation()
vcv_assimilation() --44
-- LATE RULES
n_deletion()
--cons_degemination() --26
--i_to_a() --72
syllabic_n() --100
-- done in convert_back()
gamma_insertion() --III.6
--gamma_gliding() --III.7
-- FORMAT
convert_back()
return form_
end
--##################################
local nv = require("Module:languages").getByCode("nv")
local full_link = require("Module:links").full_link
function link(term)
return full_link{ term = term, lang = nv }
end
function make_table(data)
mode = "imperfective"
if mode_ == "perf" then
mode = "perfective"
elseif mode_ == "fut" then
mode = "future"
end
local function get(code)
local form_data = data[code]
return form_data and link(form_data) or error('No content for the code ' .. code .. '.')
end
return mw.getCurrentFrame():expandTemplate{
title = 'nv-verbtable',
args = {
mode,
get('form_1sg'),
get('form_1dl'),
get('form_1pl'),
get('form_2sg'),
get('form_2dl'),
get('form_2pl'),
get('form_3sg'),
get('form_3pl'),
get('form_4sg'),
get('form_4pl')
}
}
end
function make_string(data)
return data.form_1sg.. " ".. data.form_1dl.. " "..data.form_1pl .. " "..data.form_2sg.. " ".. data.form_2dl.." "..data.form_2pl.. " ".. data.form_3sg.. " ".. data.form_3pl.. " "..data.form_4sg.. " "..data.form_4pl
end
return p
lfbb0mm8eyepk9csp5831thm1rp857e
2569607
2569605
2026-10-11T11:44:51Z
TheHighFighter2
42988
2569607
Scribunto
text/plain
--[[
Based on Kari's paper (1978)
with several personal additions, adaptations and fixes.
NOTES:
- Lua regex are very expensive, had to scale back my all-regex coding paradigm.
- In order to facilitate usage of Lua regex (which are very limited), consonants are converted to a one-symbol format (ex: q for k', č for ch...), then rules are applied, then the word is converted back to conventional orthography.
TODO:
- seriative,
- "make" verbs in the perfective,
- get rid of the ":" altogether as a formative boundary.
]]
local p = {}
local umatch= mw.ustring.match
local ufind = mw.ustring.find
local subst = mw.ustring.gsub
local UTF8_char = "[\1-\127\194-\244][\128-\191]*"
-- forward declarations
local convert, fut_adjustment_conj
-- ENTRY POINTS
function p.show(frame)
return p.conj(frame:getParent())
end
function p.conj(frame)
local f = frame.args
-- retrieve parameters
get_params(frame)
local data = {}
data.form_1sg = f["1sg"] or proc("1sg")
data.form_2sg = f["2sg"] or proc("2sg")
data.form_3sg = f["3sg"] or proc("3sg")
data.form_4sg = f["4sg"] or proc("4sg")
data.form_1dl = f["1dl"] or proc("1dl")
data.form_2dl = f["2dl"] or proc("2dl")
data.form_1pl = f["1pl"] or proc("1pl")
data.form_2pl = f["2pl"] or proc("2pl")
data.form_3pl = f["3pl"] or proc("3pl")
data.form_4pl = f["4pl"] or proc("4pl")
if frame.args["test"] then
return make_string(data)
else
return make_table(data)
end
end
function get_params(frame)
-- convert 7-args mode to 4-args mode
if frame.args[7] then
frame.args["conj"]=frame.args[4]
frame.args["obj"] =frame.args[3]
frame.args["disj"]=frame.args[2]
frame.args[4] =frame.args[7]
frame.args[3] =frame.args[6]
frame.args[2] =frame.args[5]
end
mode_ = frame.args[1]
asp_ = frame.args[2]
cl_ = frame.args[3]
stem_ = frame.args[4]
disj_ = frame.args["disj"] or ""
conj_ = frame.args["conj"] or ""
obj_ = frame.args["obj"] or ""
neuter_= frame.args["neuter"] -- ni / ∅
nodevoice_= frame.args["nodevoice"]
d_effect_= frame.args["d-effect"]
nospread_= frame.args["nospread"]
dashift_= frame.args["dashift"]
hop_ = frame.args["hop"] or ""
-- underlying representations
-- TODO: improve below code
-- manage multiple disj/conj prefs
if disj_ == "a" then disj_ = "ʼi"
elseif disj_ == "á" then disj_ = "ʼí"
--elseif disj_ == "á" then disj_ = "ʼá"
end
disj_ = subst(disj_, "kó", "kwí")
if obj_ == "a" then obj_ = "ʼi"
elseif obj_ == "y" then obj_ = "yi"
elseif obj_ == "ho" then obj_="hwi"
end
fut_=""
if mode_=="fut" then
fut_adjustment_conj()
end
disj_ = convert(disj_)
obj_ = convert(obj_)
conj_ = convert(conj_)
stem_ = convert(stem_)
has_hiss = ufind(stem_, "[szcʒ]")
has_hush = ufind(stem_, "[šžčćj]")
end
-- PARADIGMS
local paradigms={}
paradigms["impf"] = {}
P = paradigms["impf"]
P["∅"] ={ "š","ni", "", "iid", "oh"}
P["ni"] ={"niš","ní","ni","niid","noh"}
P["yii"]={"iiš","ii","ii", "iid","ooh"}
--P["í"] ={"ísh","íní","í", "íid", "óh"}
paradigms["perf"] = {}
P = paradigms["perf"]
P["yi"] ={"ğí", "ğíní","ğí","iid","oo"}
P["yid"]={"ğiš","ğíní","ği","iid","ooh"}
P["ni"] ={"ní","ğíní","ní","niid","noo"}
P["nid"]={"niš","ğíní","ni","niid","nooh"}
P["si"] ={"sé", "síní","z","siid","soo"}
P["sid"]={"sis","síní","s","siid","sooh"}
P["si2"] ={"é", "íní","ğez","eed","soo"}
P["si2d"]={"és","íní","ğes","eed","sooh"}
P["yii"]={"ii","ini","ii", "iid","oo"}
P["yiid"]={"iiš","ini","ii", "iid","ooh"}
paradigms["fut"] = {}
P = paradigms["fut"]
P["∅"] ={"ğeš", "ğí","ğo","ğiid","ğoh"}
--P["∅"] ={"eeš", "íí","oo","iid","ooh"}
-- REGEXP
local vowels = "aąáą́eęéę́iįíį́oǫóǫ́"
local V = "[".. vowels.."]"
local L = "[aąeęiįoǫ]"
local H = "[áą́éę́íį́óǫ́]"
local C = "[^:=#" .. vowels .."]"
local C0= "[^=#" .. vowels .."]*="
local K = "[^:=#yʼ" .. vowels .."]"
local I = "[ií]"
local O = "[oó]"
local S = "[sš]"
local high_tone = {
["a"] = "á", ["e"] = "é",
["i"] = "í", ["o"] = "ó"
}
local low_tone = {
["á"] = "a", ["é"] = "e",
["í"] = "i", ["ó"] = "o"
}
local d_effect_map = {
["z"] = "ʒ", ["ž"] = "j",
["ğ"] = "g", ["y"] = "ʼy",
["w"] = "ʼw", ["l"] = "dl",
["ʼ"] = "tʼ", ["m"] = "ʼm",
["n"] = "ʼn"
}
--Note: stem must be provided with etymological y or gh, so as to elicit proper d-effect.
local devoicing = {
["z"] = "s", ["ğ"] = "h",
["ž"] = "š", ["l"] = "ł",
["w"] = "h", ["y"] = "h",
}
local surds = "([sšhł])"
local voiced = "([zžğwyl])"
local function at(str, i)
if i == 0 then
return ""
elseif i < 0 then
local n = 0
local characters = {}
for character in string.gmatch(str, UTF8_char) do
n = n + 1
characters[n] = character
end
return characters[n + i + 1]
else
local n = 0
for character in string.gmatch(str, UTF8_char) do
n = n + 1
if n == i then
return character
end
end
end
return ""
end
local function assimilate(i, v)
v = at(v, 1) -- first vowel if long
if i == "í" then
return high_tone[v] or v
end
v = low_tone[v] or v
return subst(i, "i", v)
end
local function split_pref(pref)
cv,f = umatch(pref, "^(.-)([sšhd]*)$")
return cv, f
end
local function append(pref)
if not pref or pref == "" then
return
end
if form_ ~= "" then
last = at(form_, -1)
if last == "#" or last == "=" then
form_ = form_.. pref
else
form_ = form_.. ":".. pref
end
else
form_ = pref
end
end
local abbrs = {
V = V, H = H, L = L, C0 = C0, C = C, I = I, O = O, K = K,
}
local function expand_regex(str)
return string.gsub(str, "[VHLCIOK]0?", abbrs)
--[[ expanding manually instead to speed up? Not faster actually...
ret=""
d=""
for c in mw.ustring.gmatch(str,".") do
if c == "V" then ret=ret..V
elseif c == "H" then ret=ret..H
elseif c == "L" then ret=ret..L
elseif d == "C" and c== "0" then
ret=ret..C0
elseif d == "C" and c ~= "0" then
ret=ret..C..c
elseif c == "I" then ret=ret..I
elseif c == "O" then ret=ret..O
elseif c == "K" then ret=ret..K
elseif c ~= "C" then ret=ret..c
end
d = c
end
return ret
]]
end
local function replace(str1, str2)
str1 = expand_regex(str1)
form_ = subst(form_, str1, str2)
end
-- basic replace without wildcard
local function replace2(str1, str2)
form_ = subst(form_, str1, str2)
end
local function match(str2)
str2 = expand_regex(str2)
return umatch(form_, str2)
end
-- basic replace without wildcard
local function match2(str2)
return umatch(form_, str2)
end
di2mono = {
["kw"] = "q",
["hw"] = "f",
["kʼ"] = "ç",
["čʼ"] = "ć", -- trick
["tʼ"] = "ť",
["ts"] = "c",
["sh"] = "š",
["zh"] = "ž",
["gh"] = "ğ",
["ch"] = "č",
["dz"] = "ʒ"
}
mono2di = {
["q"] = "kw",
["f"] = "hw",
["ç"] = "kʼ",
["ć"] = "chʼ",
["ť"] = "tʼ",
["c"] = "ts",
["š"] = "sh",
["ž"] = "zh",
["ğ"] = "gh",
["č"] = "ch",
["ʒ"] = "dz",
["ñ"] = "n"
}
-- declared as local above
function convert(str)
-- using regex only is too expensive
-- doing it manually
ret = ""
d = ""
for c in mw.ustring.gmatch(str,".") do
if d == "" then
d=c
else
m = di2mono[d..c]
if m and m == "č" then
d = "č"
elseif d == "č" and not m then
ret = ret.."č"
d = c
elseif m then
ret = ret.. m
d = ""
else
ret = ret.. d
d = c
end
end
end
ret = ret.. d
return ret
end
local function convert_back()
-- using regex only is too expensive
-- doing it manually
ret =""
d = ""
for c in mw.ustring.gmatch(form_,".") do
if c ==":" or c=="=" or c=="#" then
elseif ret == "" and c == "ʼ" then
elseif d == "s" and c == "h" then
ret = ret.."x"
elseif d == "s" and c == "s" then
elseif d == "sh" and c == "š" then
elseif d == "z" and c == "z" then
elseif d == "zh" and c == "ž" then
elseif c == "ğ" or c == "f" then
d = c
elseif d == "ğ" then
if umatch(c, "[eęiįéę́íį́]") then
d="y"
elseif umatch(c,"[oǫóǫ́]") then
d="w"
else
d="gh"
end
ret=ret.. d..c
elseif d == "f" then
if umatch(c, "[oǫóǫ́]") then
d="h"
else
d="hw"
end
ret=ret..d..c
else
d = mono2di[c] or c
ret = ret .. d
end
end
form_=ret
end
--#################################
-- RULES
-- declared as local above
function fut_adjustment_conj()
fut_="di"
if asp_=="yii" then
fut_="ği:".. fut_
asp_="∅"
end
end
local function fut_adjustments()
-- di- positioning
replace2("di:([yh][ií])", "%1:di")
-- high-tone future
replace2("d[ií]:n[ií]", "dí:ní")
-- methateses that need early ordering
replace ("ji:y(I)", "y%1:ji")
replace2("(.[:#])ji:ği", "%1ği:ji")
replace2("(.+)#yi:ği", "%1#yi")
end
local function ni_adjustments()
if neuter_ then
if neuter_ == "∅" then
replace2(":?ni=", "=")
end
replace2("(.[#:])łi=", "%1l=")
else -- "active" verb
-- yini/yíní tentatively managed hee
replace2("yí:ni=", "ó=") -- yíníshta'
replace2("ğí:ni=", "ó=") -- 'ííníshta'
-- yinishyé-wolyé-joolyé-daolyé mess
replace2("da#ği:ni=", "da#ğo=")
replace2("^#ği:ni=", "#ğo=")
replace2("ği:ni=", "oo=")
-- conj-dominant
if conj_ ~= "" then
replace2(":ni=", ":ğe=")
else
-- ∅- or da- dominant
replace2("^#ni=", "#yí=")
replace2("^da#ni=", "da#yí=")
-- disj-dominant
replace2("#ni=", "#=")
end
end
end
local function yii_adjustments()
-- yi_doubling
replace2("^#yi:ii", "#yi:yi:ii")
-- dis: ii > i, but da#ii > dayii or dei
if mode_ == "impf" then
replace2("da#ii=", "da#yi:ii=")
else
replace2("da#ii=", "da#yi=")
end
replace("(V)#ii(:?š?)=", "%1#i%2=")
-- ho adjustments: hwi+ii > hoo
replace2("fi:ii(:?š?)=", "ho:o%1=")
-- object-dominant 2sg
if obj ~= "" and conj_ == "" and rank == 2 then
replace2("ini=", "iini=")
end
end
local function yi_adjustments()
-- yi_doubling
replace2("^#yi:ğí=", "#yi:yi:ğí=")
-- hwi-delab needed before gamma_del
-- for 1sg: hwi:ğí= > hóó, not hwíí
replace2("fi:ğí=", "ho:ğí=")
end
local function yi_d_adjustments()
-- conjunct
if rank == 3 then
replace2("#(.+)ği=", "#%1ğo=")
elseif rank == 1 then
replace2("#(.+)ği:š=", "#%1ğe:š=")
end
-- a-away + perfective = ee
replace2("ʼi#ği(:?š?)=", "ʼi#ğe%1=")
end
local function si_adjustments()
-- yini
replace2("da#ği:([sz])=","da#ğo:%1=")
replace2("ği:([sz])=","oo:%1=")
-- yiz + ł = yis
replace2("z=ł:", "s=ł:")
-- #s=gan > sigan
replace2("^#[sz]=([∅ł])", "#si=%1")
-- ni:soo > noo or sinoo
if rank==5 then
replace2("^#ni:soo", "#si:noo")
replace2("^da#ni:soo", "da#si:noo")
replace2("ni:soo", "noo")
end
end
local function seriative_h_deletion() --13
replace("(#.+:)hi(C0)","%1ii%2")
replace2("(#.+:)hi:","%1yi:")
end
local function d_effect()
-- handle 1dl cases first
replace2( ":d=ł:l", "=dl")
replace2( ":d=[łl]:", "=l:")
replace2( ":d=[d∅]:", "=d:")
replace2( "=∅:", "=")
-- apply d-effect
-- special cases
if stem_ == "zǫ́ǫ́z" or stem_=="zǫ́ǫ́s" then
replace2("=d:z", "=d")
elseif stem_ == "ʼeeł" or stem_ == "ʼéél" or stem_ == "ʼoł" then
replace2("=d:", "=")
else
c = match("=d:(C)")
if c then
dc = d_effect_ or d_effect_map[c] or c
replace2("=d:"..c, "=".. dc)
end
end
end
local function continuant_devoicing() --18
if nodevoice_ then
return
end
exp = surds.."([:=])"..voiced
s, sep, v = match2(exp)
if s and sep and v then
f = devoicing[v]
replace2(s..sep..v, s..sep..f)
end
end
local function barred_l_deletion() --23
replace2("=ł:([sšł])", "=%1")
end
local function h_deletion() --32
replace2(":h=ł:", "=ł")
end
local function classifier_deletion() --30
replace2("([sš])=ł:", "%1=")
end
local function cons_degemination() --26
-- replace(":?s=s", "=s")
-- replace(":?š=š", "=š")
end
local function pepet_vowel_insertion() --46
replace("#(C0)", "#i%1")
end
local function vowel_deletion() --12
replace("(C)i:(V)", "%1%2")
end
local function tone_assimilation() --39
-- acceleration
if not has_high then return end
--disjunct
if not nospread_ and has_disj then
h,l,c0 =match("(H#C?:?C?:?C?)(L)(C0)")
if h and l and c0 then
a = high_tone[l]
replace2(h..l..c0, h..a..c0)
end
end
--conjunct
t,h,l = match("#(.*)(H:?C?:C)(L)")
if t and h and l then
a = high_tone[l]
replace2(t..h..l,t.. h..a)
end
end
local function tone_lowering() --48
--used for ní:ii --> nii
--what about ní:oh --> nó ?
--[[ moved to paradigm adjustments
h, l = match("(H)(:L)")
if h and l then
replace2(h..l, low_tone[h]..l)
end
]]
end
local function gamma_tone_assim()
-- acceleration
if not has_high or nospread_ or not has_disj then return end
h,l,c0 = match("(H#ğ)(L)(C0)")
if h and l and c0 then
a = high_tone[l]
replace2(h..l..c0, h..a..c0)
end
end
local function gamma_deletion() --41
replace2("(#.*)ğ([ieoíéó].*=)", "%1%2")
-- future mode might need a second run
replace2("(#.*)ğ([ieoíéó].*=)", "%1%2")
end
local function n_deletion() --?
-- made it a late rule instead
-- bą́:ná#ʼ:dí:š doesn't work, why?
-- chʼínéísííd doesn't contract,
-- chʼééínísííd does.
-- acceleration
if not (has_disj and has_high) then return end
c, v, c0, c1 = match(
"(C)(V):n[áé][#:][ií]?:?(C.-)V(.*=)")
if c and v and c0 and c1 and
c ~= "ʼ" then
h = high_tone[v] or v
if h == "í" then
h="é"
end
replace2(c..v..":n[áé]", c..h..h)
end
end
local function tone_raising() --49
-- acceleration
if not has_high then return end
l,s,h = match("(L)([#:])([íá])")
if l and s and h then
a = high_tone[l]
replace2(l..s..h, a..s..h)
end
end
local function vowel_assimilation() --57
-- special cases
if has_disj then
c, c0 = match("(C)i#i(C0)")
if c and c0 and
c ~="n" and c ~= "ʼ" then
replace2("i#i", "e#e")
end
end
-- a+o = aa dialects, 2dl/pl only
if pref == "oh" then
replace2("([aá])#o", "%1#a")
end
-- progressive
v, s, i, c0 = match("(V)([#:])(I+)(C0)")
if v and s and i and c0 and
not ufind(v..s..i, "[aá]#ii") then
a = assimilate(i, v)
replace2(v..s..i..c0,
v..s..a..c0)
end
-- regressive disj
if has_disj then
b, i, v, c0 = match(
"([^kqhtc])(I)#(V+)(C0)")
if b and i and v and c0 then
a = assimilate(i, v)
replace2(b..i.."#"..v..c0,
b..a.."#"..v..c0)
end
end
-- regressive conj
-- Note: hwi:o > hwo:o, should > ho:o
-- to manage in convert_back
-- along with gho > wo
c,i,v = match("#(.*)(I):(V)")
if c and i and v then
a = assimilate(i,v)
replace("#".. c.. i..":".. v,
"#".. c.. a..":".. v)
end
end
local function vowel_absorption() --62
-- acceleration
if not has_disj then return end
-- acceleration
if not has_high then return end
-- in C0 environment only
if match("V#VC0") then
replace2("([ʼł])í#i","%1í#")
replace2("í#i","é#")
replace2("ó#o","ó#")
replace2("á#a","á#")
replace2("é#e","é#")
end
--[[ not necessarily faster...
c, h, l, c0 = match("(C)(H)#(L)(C0)")
if c and h and l and c0 then
if h=="í" and l=="i" or
h=="á" and l=="a" or
h=="ó" and l=="o" or
h=="é" and l=="e" then
v=h
if h == "í" and
not(c=="ʼ" or c=="ł") then
v="é"
end
replace2(h.."#"..l,v.."#")
end
end
]]
end
--function optative_tone_lowering() --51
local function y_deletion() --42
-- acceleration
if not has_disj then return end
-- short i only
replace("(V)#y(I)([:=]C)", "%1#%2%3")
end
local function vowel_fronting() --67
-- acceleration
if not has_disj then return end
replace("([^kqht])a#(I)", "%1e#%2")
replace("([^kqht])á#(I)", "%1é#%2")
end
local function vowel_degemination() --47
-- TODO: might not be enough
-- need refactoring
replace("(I)[#:]ii", "%1i")
replace("(O)[#:]oo", "%1o")
end
local function seriative_assimilation()
-- split from vcv_assimilation
-- must take place before ni-abs
-- to prevent náhí- from assimilating
-- acceleration
if not has_disj then return end
v, i, c0 = match("(V)#h(I)(C0)")
if v and i and c0 then
replace2(v.."#h"..i, v.."#h"..v)
end
end
local function vcv_assimilation() --44
-- NOTE: seriative case has been split
-- only at #-boundary?
-- only in zero environment?
-- acceleration
if not has_disj then return end
-- special case
replace2("ʼi#ʼi([:=])", "ʼe#ʼe%1")
-- regressive
k,i,c,v = match("(C)(I)#([mkghʼ])(V)")
if k and i and c and v and k~="y" then
a = assimilate(i, v)
replace2(i.."#"..c..v,
a.."#"..c..v)
end
end
local function i_to_a() --71
--NOTE: easier to split rule in 2 parts
replace("ʼi=", "ʼa=")
-- can't do that here
-- because of ná'í- 2sg vs 3sg, unless
-- i_to_a applies after tone_assim?
--replace("ʼí=", "ʼá=")
i,s,c= match("ʼ(I)([#:]=?)(C)")
if i and s and c and c ~= "ʼ" then
a = assimilate(i,"a")
replace2( "ʼ"..i..s..c,
"ʼ"..a..s..c)
end
end
local function delabialization1() --78
--TODO: C should exclude "y" here.
--NOTE: Getting huge contradictions
-- with regards to the ordering of
-- the ho-to-ha, v-deletion,
-- gamma-deletion, ni-absorption
-- and pepet vowel insertion rules
-- ==> handle some cases directly here
-- ==> split hwi from kwí
-- kwí must be done before pepet
-- hwi must be done after gamma_del
--
-- Maybe should replace all this with a
-- with a late labialization rule
-- instead, where :
-- ho + ííní = hwííní
-- ho + eesh = hweesh...
-- but ho + í_C[ = hóó by assimilation
-- acceleration
if not has_high then return end
replace("qí([#:=]*C)", "kó%1")
replace("qí#(O)", "kó#")
end
local function delabialization2()
replace("fi(C0)", "ha%1")
replace("fi:(C)", "ho:%1")
-- below managed as in convert_back
--replace("f(O)", "h%1")
end
local function ni_absorption() --11
--
v = match2("([io]):ni=")
if v then
a = high_tone[v]
replace2(v..":ni=", a.."=" )
end
end
local function pg_strident_assimilation() --83
-- might be other cases?
replace2("ji:ʒi", "ji:ji")
-- might combine directly w/ j_el
-- ji:dzi > ji:ji > i:ji
end
local function j_deletion() --94
replace2("ji:ji", "i:ji")
end
local function vowel_elision() --86
-- K = C - {y, ʼ}
-- "ji" doesn't elide in front of
-- another j (ex. dajijooba)
if match2("ji:j") then
return
end
replace("(.[:#]ʼ)i(:KV)", "%1%2")
replace("(.[:#][jʒ])i(:KV)", "%1%2")
end
local function deaffrication() --89
replace("j:(C)", "ž:%1")
replace("ʒ:(C)", "z:%1")
end
local function glottal_zh_metathesis() --91
replace2("ʼ:ž:", "ž:ʼ:")
end
local function glottal_cv_metathesis()
-- "far" hop allows glottal stop to
-- to hop "inside" 2sg prefix
-- ex: bighá#ʼdííní > bighá#dííʼní
-- but bą́ą́#ʼdííní > bą́ą́#ʼdííní
if hop_ == "far" then
replace("(ž?:?ʼ):(d:?V+:?V?):?(K:?V+)", "%2:%1:%3")
else
replace("(ž?:?ʼ):(d:?V+):?(K:?V+)", "%2:%1:%3")
end
end
local function zh_cv_metathesis()
-- doesn't apply to jidinii,
-- is that a more generic rule?
if match2("ji:di:n:ii") then
return
end
replace("ji:(C:?V+):(C:?V+)", "%1:ž:%2")
end
local function strident_assimilation() --81
if has_hiss then
replace2("š", "s")
elseif has_hush then
replace2("s", "š")
replace2("z", "ž")
end
end
local function syllabic_n() --100
-- split b/c of Lua regex limitations
replace2("n[ia]([#:]ʼ?:?[dtjʒ])","n%1")
replace2("n[íá]([#:]ʼ?:?[dtjʒ])","ń%1")
replace("na#(ʼ?:?[sš]V)", "ni#%1")
replace("ná#(ʼ?:?[sš]V)", "ní#%1")
replace2("na#(ž:ʼ?:?d)", "ni#%1")
replace2("ná#(ž:ʼ?:?d)", "ní#%1")
end
local function gamma_insertion() --6
-- acceleration
if has_disj then return end
replace("^#(V)", "#ğ%1")
end
local function gamma_gliding() --7
replace("ğ(I)", "y%1")
replace("ğ(O)", "w%1")
end
--#################################
-- MAIN FUNCTION
function proc(person)
-- PERSON
pers, numb = umatch(person,"([0-9])(..)")
pers = tonumber(pers)
da = (numb == "pl") and "da" or ""
subj = (pers == 4) and "ji" or ""
obj = (obj_ == "yi" and pers ~= 3 ) and "" or obj_
rank = (pers >= 3) and 3 or (numb == "sg") and pers or (pers + 3)
if dashift_ and numb=="pl" and
(dashift_ ~= "3" or rank==3) then
asp_="si"
end
-- Determination of paradigm to use
asp2_ = asp_
if mode_ == "perf" then
if asp_=="si" and
umatch(conj_, "[dnh]i$") then
asp2_ = asp_.."2"
end
if cl_=="d" or cl_=="l" then
asp2_ = asp2_ .. "d"
end
end
pref = paradigms[mode_][asp2_][rank]
p, pf = split_pref(pref)
-- UNDERLYING FORM
form_ = disj_
append(da); form_ = form_.."#"
append(obj)
append(subj)
append(fut_)
append(conj_)
append(p)
append(pf); form_ = form_.."="
append(cl_)
append(stem_)
--attempt at accelerating regex
has_disj= (disj_..da ~= "")
has_high= match("H")
if pers == 3 then
replace2("P", "y")
else
replace2("P", "b")
end
--form_=convert(form_)
--if true then return form_ end
-- IRREGULAR STEMS
if stem_ == "ááh" then
if person == "2sg" then
replace("=∅:ááh", "=nááh")
elseif pers == 2 then
replace("=∅:ááh", "=∅:hááh")
elseif rank == 3 then
replace("=∅:ááh", "=∅:ğááh")
end
elseif stem_=="yą́" or stem_=="yį́į́ł" then
if pers == 1 then
replace("=∅:y", "=")
elseif pers == 2 then
replace("h=∅:y", "h=s")
end
end
-- MODE READJUSTMENT RULES
if mode_ == "fut" then
fut_adjustments()
elseif asp_ == "∅" then
-- make this a more general rule?
-- or amend the tone-lowering rule?
-- or make "ní" its own paradigm?
-- how do manage both:
-- á#ní:iid > ániildííl, and
-- ní:iid > níilʼį́ ??
replace2("ní:ii", "ni:ii")
replace2("ní:o:h","nó:h")
-- prevent ni-absorption if ni6
if rank == 3 then
replace2("ni=", "ñi=")
end
elseif asp_ == "ni" then
ni_adjustments()
elseif asp_ == "yii" then
yii_adjustments()
elseif asp2_ == "yi" then
yi_adjustments()
elseif asp2_ == "yid" then
yi_d_adjustments()
elseif asp_ == "si" then
si_adjustments()
end
-- PHONOLOGICAL RULES
seriative_h_deletion() --13
d_effect() -- 24,35,25
continuant_devoicing() --18
barred_l_deletion() --23
h_deletion() --32
classifier_deletion() --30
-- below ordering is tricky
delabialization1() --78
--delab2 could go here w/ a labial rule
--delabialization2()
pepet_vowel_insertion() --46
vowel_deletion() --12
--tone_assimilation() --39
--tone_lowering() --48
gamma_tone_assim() --hack
gamma_deletion() --41
-- trying this here
-- must be before ni-abs so that
-- 2sg náhí- doesn't assimilate to náhá-
seriative_assimilation()
-- trying hwi-delab here
-- must be before ni-abs
-- hwi:ni-> ho:ni -> hó-
delabialization2()
ni_absorption() --11
-- moved tone_assim to later rule
-- so as to allow proper hwi delab
-- before tone assimilation kicks in
-- ná#haso -> ná#háso and not ná#hwíso
-- Might have to move it even after
-- v-elision and deaffrication for
-- words like łí#ji:di -> łí#zh:dí
-- issue: but tone_assim must be before
-- gamma_del for words like :
-- ná#ghi > ná#ghí > ná#í
-- ==> wrote a gamma_tone_assim rule
--tone_assimilation()
-- made it a late rule instead b/c
-- y_deletion hasn't applied yet
-- cf. chʼínéísííd (no contraction).
-- Actually, chʼínéísííd doesn't
-- contract b/c éí is considered one
-- vowel, so conditions are not met.
-- chʼééínísííd on the other side does
-- contract thanks to intervening ní.
--n_deletion() --?
tone_raising() --49
vowel_assimilation() --57
vowel_absorption() --62
--optative_tone_lowering() --51
y_deletion() --42
vowel_fronting() --67
vowel_degemination() --47
pg_strident_assimilation() --83
j_deletion() --94
vowel_elision() --86
deaffrication() --89
glottal_zh_metathesis() --91
glottal_cv_metathesis()
zh_cv_metathesis()
strident_assimilation() --81
-- i_to_a must be before
-- tone-assim but after ni-abs:
-- 2sg: ná#'i:ni > ná#'í
-- 3sg: ná#'i > ná#'a > ná#'á
-- if tone_assim before,
-- can't distinguish 2sg from 3sg
-- 3sg: ná#'i > ná#'í > ná#'á ??
i_to_a()
tone_assimilation()
vcv_assimilation() --44
-- LATE RULES
n_deletion()
--cons_degemination() --26
--i_to_a() --72
syllabic_n() --100
-- done in convert_back()
gamma_insertion() --III.6
--gamma_gliding() --III.7
-- FORMAT
convert_back()
return form_
end
--##################################
local nv = require("Module:languages").getByCode("nv")
local full_link = require("Module:links").full_link
function link(term)
return full_link{ term = term, lang = nv }
end
function make_table(data)
mode = "chưa hoàn thành"
if mode_ == "perf" then
mode = "hoàn thành"
elseif mode_ == "fut" then
mode = "tương lai"
end
local function get(code)
local form_data = data[code]
return form_data and link(form_data) or error('No content for the code ' .. code .. '.')
end
return mw.getCurrentFrame():expandTemplate{
title = 'nv-verbtable',
args = {
mode,
get('form_1sg'),
get('form_1dl'),
get('form_1pl'),
get('form_2sg'),
get('form_2dl'),
get('form_2pl'),
get('form_3sg'),
get('form_3pl'),
get('form_4sg'),
get('form_4pl')
}
}
end
function make_string(data)
return data.form_1sg.. " ".. data.form_1dl.. " "..data.form_1pl .. " "..data.form_2sg.. " ".. data.form_2dl.." "..data.form_2pl.. " ".. data.form_3sg.. " ".. data.form_3pl.. " "..data.form_4sg.. " "..data.form_4pl
end
return p
fjk2d881e7dy994thg2bshghwsb04l0
Bản mẫu:nv-conj
10
419792
2569606
2026-10-11T11:42:22Z
TheHighFighter2
42988
Trang mới: “<includeonly>{{#invoke:nv-conj|show}}</includeonly><noinclude>[[Thể loại:Bản mẫu tiếng Navajo|conj]]</noinclude>”
2569606
wikitext
text/x-wiki
<includeonly>{{#invoke:nv-conj|show}}</includeonly><noinclude>[[Thể loại:Bản mẫu tiếng Navajo|conj]]</noinclude>
bo3cvotfuzilfhni7g09iwpf1a6jy7d