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;">&nbsp;</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|}}}]], &#8209;η, &#8209;ο<!-- -->}}<!-- -->|{{#if:{{{1|}}}<!-- -->|{{{3|}}}[[{{{1|}}}{{{4|}}}]], &#8209;η, &#8209;ο<!-- -->}}<!-- -->}}</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|}}} |&nbsp;({{{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|}}}|&#32;''(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